diff --git a/go.sum b/go.sum index 4ae1d1add0..07903b92d0 100644 --- a/go.sum +++ b/go.sum @@ -1212,6 +1212,7 @@ k8s.io/cloud-provider v0.20.0/go.mod h1:Lz/luSVD5BrHDDhtVdjFh0C2qQCRYdf0b9BHQ9L+ k8s.io/cloud-provider-openstack v1.19.2 h1:u0bvV8gnro4kJkwpQZTO3sQWbrocQMggdXn95jQecjA= k8s.io/cloud-provider-openstack v1.19.2/go.mod h1:J/X/tgKwUDtsrfdJ4aL0iEQLi/8chdbs4rAiYznYwPQ= k8s.io/cluster-bootstrap v0.20.0/go.mod h1:6WZaNIBvcvL7MkPzSRKrZDIr4u+ePW2oIWoRsEFMjmE= +k8s.io/code-generator v0.20.0 h1:c8JaABvEEZPDE8MICTOtveHX2axchl+EptM+o4OGvbg= k8s.io/code-generator v0.20.0/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg= k8s.io/component-base v0.20.0 h1:BXGL8iitIQD+0NgW49UsM7MraNUUGDU3FBmrfUAtmVQ= k8s.io/component-base v0.20.0/go.mod h1:wKPj+RHnAr8LW2EIBIK7AxOHPde4gme2lzXwVSoRXeA= diff --git a/k8s/crds/kops.k8s.io_clusters.yaml b/k8s/crds/kops.k8s.io_clusters.yaml index eb4b3978b6..ed486aa933 100644 --- a/k8s/crds/kops.k8s.io_clusters.yaml +++ b/k8s/crds/kops.k8s.io_clusters.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: (devel) + controller-gen.kubebuilder.io/version: v0.2.8 creationTimestamp: null name: clusters.kops.k8s.io spec: @@ -21,10 +21,14 @@ spec: openAPIV3Schema: properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -35,7 +39,10 @@ spec: description: DisableSubnetTags controls if subnets are tagged in AWS type: boolean additionalNetworkCIDRs: - description: AdditionalNetworkCIDRs is a list of additional CIDR used for the AWS VPC or otherwise allocated to k8s. This is a real CIDR, not the internal k8s network On AWS, it maps to any additional CIDRs added to a VPC. + description: AdditionalNetworkCIDRs is a list of additional CIDR used + for the AWS VPC or otherwise allocated to k8s. This is a real CIDR, + not the internal k8s network On AWS, it maps to any additional CIDRs + added to a VPC. items: type: string type: array @@ -45,58 +52,73 @@ spec: description: Additional policies to add for roles type: object additionalSans: - description: AdditionalSANs adds additional Subject Alternate Names to apiserver cert that kops generates + description: AdditionalSANs adds additional Subject Alternate Names + to apiserver cert that kops generates items: type: string type: array addons: description: Additional addons that should be installed on the cluster items: - description: AddonSpec defines an addon that we want to install in the cluster + description: AddonSpec defines an addon that we want to install + in the cluster properties: manifest: - description: Manifest is a path to the manifest that defines the addon + description: Manifest is a path to the manifest that defines + the addon type: string type: object type: array api: - description: API field controls how the API is exposed outside the cluster + description: API field controls how the API is exposed outside the + cluster properties: dns: - description: DNS will be used to provide config on kube-apiserver ELB DNS + description: DNS will be used to provide config on kube-apiserver + ELB DNS type: object loadBalancer: - description: LoadBalancer is the configuration for the kube-apiserver ELB + description: LoadBalancer is the configuration for the kube-apiserver + ELB properties: additionalSecurityGroups: - description: AdditionalSecurityGroups attaches additional security groups (e.g. sg-123456). + description: AdditionalSecurityGroups attaches additional + security groups (e.g. sg-123456). items: type: string type: array class: - description: 'LoadBalancerClass specifies the class of load balancer to create: Classic, Network' + description: 'LoadBalancerClass specifies the class of load + balancer to create: Classic, Network' type: string crossZoneLoadBalancing: - description: CrossZoneLoadBalancing allows you to enable the cross zone load balancing + description: CrossZoneLoadBalancing allows you to enable the + cross zone load balancing type: boolean idleTimeoutSeconds: - description: IdleTimeoutSeconds sets the timeout of the api loadbalancer. + description: IdleTimeoutSeconds sets the timeout of the api + loadbalancer. format: int64 type: integer securityGroupOverride: - description: SecurityGroupOverride overrides the default Kops created SG for the load balancer. + description: SecurityGroupOverride overrides the default Kops + created SG for the load balancer. type: string sslCertificate: - description: SSLCertificate allows you to specify the ACM cert to be used the LB + description: SSLCertificate allows you to specify the ACM + cert to be used the LB type: string sslPolicy: - description: SSLPolicy allows you to overwrite the LB listener's Security Policy + description: SSLPolicy allows you to overwrite the LB listener's + Security Policy type: string type: - description: Type of load balancer to create may Public or Internal. + description: Type of load balancer to create may Public or + Internal. type: string useForInternalApi: - description: UseForInternalApi indicates whether the LB should be used by the kubelet + description: UseForInternalApi indicates whether the LB should + be used by the kubelet type: boolean type: object type: object @@ -104,55 +126,66 @@ spec: description: Alternative locations for files and containers properties: containerProxy: - description: ContainerProxy is a url for a pull-through proxy of a docker registry + description: ContainerProxy is a url for a pull-through proxy + of a docker registry type: string containerRegistry: description: ContainerRegistry is a url for to a docker registry type: string fileRepository: - description: FileRepository is the url for a private file serving repository + description: FileRepository is the url for a private file serving + repository type: string type: object authentication: - description: Authentication field controls how the cluster is configured for authentication + description: Authentication field controls how the cluster is configured + for authentication properties: aws: properties: backendMode: - description: BackendMode is the AWS IAM Authenticator backend to use. Default MountedFile + description: BackendMode is the AWS IAM Authenticator backend + to use. Default MountedFile type: string clusterID: - description: ClusterID identifies the cluster performing authentication to prevent certain replay attacks. Default master public DNS name + description: ClusterID identifies the cluster performing authentication + to prevent certain replay attacks. Default master public + DNS name type: string cpuLimit: anyOf: - type: integer - type: string - description: CPULimit CPU limit of AWS IAM Authenticator container. Default 10m + description: CPULimit CPU limit of AWS IAM Authenticator container. + Default 10m pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true cpuRequest: anyOf: - type: integer - type: string - description: CPURequest CPU request of AWS IAM Authenticator container. Default 10m + description: CPURequest CPU request of AWS IAM Authenticator + container. Default 10m pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true image: - description: Image is the AWS IAM Authenticator docker image to uses + description: Image is the AWS IAM Authenticator docker image + to uses type: string memoryLimit: anyOf: - type: integer - type: string - description: MemoryLimit memory limit of AWS IAM Authenticator container. Default 20Mi + description: MemoryLimit memory limit of AWS IAM Authenticator + container. Default 20Mi pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memoryRequest: anyOf: - type: integer - type: string - description: MemoryRequest memory request of AWS IAM Authenticator container. Default 20Mi + description: MemoryRequest memory request of AWS IAM Authenticator + container. Default 20Mi pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object @@ -160,7 +193,8 @@ spec: type: object type: object authorization: - description: Authorization field controls how the cluster is configured for authorization + description: Authorization field controls how the cluster is configured + for authorization properties: alwaysAllow: type: object @@ -186,7 +220,8 @@ spec: elbSecurityGroup: type: string gceServiceAccount: - description: GCEServiceAccount specifies the service account with which the GCE VM runs + description: GCEServiceAccount specifies the service account with + which the GCE VM runs type: string multizone: description: GCE cloud-config options @@ -203,7 +238,8 @@ spec: bs-version: type: string createStorageClass: - description: CreateStorageClass provisions a default class for the Cinder plugin + description: CreateStorageClass provisions a default class + for the Cinder plugin type: boolean csiPluginImage: type: string @@ -217,7 +253,8 @@ spec: insecureSkipVerify: type: boolean loadbalancer: - description: OpenstackLoadbalancerConfig defines the config for a neutron loadbalancer + description: OpenstackLoadbalancerConfig defines the config + for a neutron loadbalancer properties: floatingNetwork: type: string @@ -237,7 +274,8 @@ spec: type: boolean type: object monitor: - description: OpenstackMonitor defines the config for a health monitor + description: OpenstackMonitor defines the config for a health + monitor properties: delay: type: string @@ -263,35 +301,46 @@ spec: description: Spotinst cloud-config specs type: string vSphereCoreDNSServer: - description: VSphereCoreDNSServer is deprecated and will be removed in a later version + description: VSphereCoreDNSServer is deprecated and will be removed + in a later version type: string vSphereDatacenter: - description: VShpereDatacenter is deprecated and will be removed in a later version + description: VShpereDatacenter is deprecated and will be removed + in a later version type: string vSphereDatastore: - description: VSphereDatastore is deprecated and will be removed in a later version + description: VSphereDatastore is deprecated and will be removed + in a later version type: string vSpherePassword: - description: VSpherePassword is deprecated and will be removed in a later version + description: VSpherePassword is deprecated and will be removed + in a later version type: string vSphereResourcePool: - description: VSphereResourcePool is deprecated and will be removed in a later version + description: VSphereResourcePool is deprecated and will be removed + in a later version type: string vSphereServer: - description: VSphereServer is deprecated and will be removed in a later version + description: VSphereServer is deprecated and will be removed in + a later version type: string vSphereUsername: - description: VSphereUsername is deprecated and will be removed in a later version + description: VSphereUsername is deprecated and will be removed + in a later version type: string type: object cloudControllerManager: - description: CloudControllerManagerConfig is the configuration of the cloud controller + description: CloudControllerManagerConfig is the configuration of + the cloud controller properties: allocateNodeCIDRs: - description: AllocateNodeCIDRs enables CIDRs for Pods to be allocated and, if ConfigureCloudRoutes is true, to be set on the cloud provider. + description: AllocateNodeCIDRs enables CIDRs for Pods to be allocated + and, if ConfigureCloudRoutes is true, to be set on the cloud + provider. type: boolean cidrAllocatorType: - description: CIDRAllocatorType specifies the type of CIDR allocator to use. + description: CIDRAllocatorType specifies the type of CIDR allocator + to use. type: string cloudProvider: description: CloudProvider is the provider for cloud services. @@ -303,34 +352,54 @@ spec: description: ClusterName is the instance prefix for the cluster. type: string configureCloudRoutes: - description: ConfigureCloudRoutes enables CIDRs allocated with to be configured on the cloud provider. + description: ConfigureCloudRoutes enables CIDRs allocated with + to be configured on the cloud provider. type: boolean image: description: Image is the OCI image of the cloud controller manager. type: string leaderElection: - description: LeaderElection defines the configuration of leader election client. + description: LeaderElection defines the configuration of leader + election client. properties: leaderElect: - description: leaderElect enables a leader election client to gain leadership before executing the main loop. Enable this when running replicated components for high availability. + description: leaderElect enables a leader election client + to gain leadership before executing the main loop. Enable + this when running replicated components for high availability. type: boolean leaderElectLeaseDuration: - description: leaderElectLeaseDuration is the length in time non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate + description: leaderElectLeaseDuration is the length in time + non-leader candidates will wait after observing a leadership + renewal until attempting to acquire leadership of a led + but unrenewed leader slot. This is effectively the maximum + duration that a leader can be stopped before it is replaced + by another candidate type: string leaderElectRenewDeadlineDuration: - description: LeaderElectRenewDeadlineDuration is the interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration. + description: LeaderElectRenewDeadlineDuration is the interval + between attempts by the acting master to renew a leadership + slot before it stops leading. This must be less than or + equal to the lease duration. type: string leaderElectResourceLock: - description: LeaderElectResourceLock is the type of resource object that is used for locking during leader election. Supported options are endpoints (default) and `configmaps`. + description: LeaderElectResourceLock is the type of resource + object that is used for locking during leader election. + Supported options are endpoints (default) and `configmaps`. type: string leaderElectResourceName: - description: LeaderElectResourceName is the name of resource object that is used for locking during leader election. + description: LeaderElectResourceName is the name of resource + object that is used for locking during leader election. type: string leaderElectResourceNamespace: - description: LeaderElectResourceNamespace is the namespace of resource object that is used for locking during leader election. + description: LeaderElectResourceNamespace is the namespace + of resource object that is used for locking during leader + election. type: string leaderElectRetryPeriod: - description: LeaderElectRetryPeriod is The duration the clients should wait between attempting acquisition and renewal of a leadership. This is only applicable if leader election is enabled. + description: LeaderElectRetryPeriod is The duration the clients + should wait between attempting acquisition and renewal of + a leadership. This is only applicable if leader election + is enabled. type: string type: object logLevel: @@ -341,7 +410,8 @@ spec: description: Master is the url for the kube api master. type: string useServiceAccountCredentials: - description: UseServiceAccountCredentials controls whether we use individual service account credentials for each controller. + description: UseServiceAccountCredentials controls whether we + use individual service account credentials for each controller. type: boolean type: object cloudLabels: @@ -356,35 +426,50 @@ spec: description: ClusterAutoscaler defines the cluaster autoscaler configuration. properties: balanceSimilarNodeGroups: - description: 'BalanceSimilarNodeGroups makes cluster autoscaler treat similar node groups as one. Default: false' + description: 'BalanceSimilarNodeGroups makes cluster autoscaler + treat similar node groups as one. Default: false' type: boolean enabled: - description: 'Enabled enables the cluster autoscaler. Default: false' + description: 'Enabled enables the cluster autoscaler. Default: + false' type: boolean expander: - description: 'Expander determines the strategy for which instance group gets expanded. Supported values: least-waste, most-pods, random. Default: least-waste' + description: 'Expander determines the strategy for which instance + group gets expanded. Supported values: least-waste, most-pods, + random. Default: least-waste' type: string image: - description: 'Image is the docker container used. Default: the latest supported image for the specified kubernetes version.' + description: 'Image is the docker container used. Default: the + latest supported image for the specified kubernetes version.' type: string scaleDownUtilizationThreshold: - description: 'ScaleDownUtilizationThreshold determines the utilization threshold for node scale-down. Default: 0.5' + description: 'ScaleDownUtilizationThreshold determines the utilization + threshold for node scale-down. Default: 0.5' type: string skipNodesWithLocalStorage: - description: 'SkipNodesWithLocalStorage makes cluster autoscaler skip scale-down of nodes with local storage. Default: true' + description: 'SkipNodesWithLocalStorage makes cluster autoscaler + skip scale-down of nodes with local storage. Default: true' type: boolean skipNodesWithSystemPods: - description: 'SkipNodesWithSystemPods makes cluster autoscaler skip scale-down of nodes with non-DaemonSet pods in the kube-system namespace. Default: true' + description: 'SkipNodesWithSystemPods makes cluster autoscaler + skip scale-down of nodes with non-DaemonSet pods in the kube-system + namespace. Default: true' type: boolean type: object clusterDNSDomain: - description: ClusterDNSDomain is the suffix we use for internal DNS names (normally cluster.local) + description: ClusterDNSDomain is the suffix we use for internal DNS + names (normally cluster.local) type: string configBase: - description: ConfigBase is the path where we store configuration for the cluster This might be different that the location when the cluster spec itself is stored, both because this must be accessible to the cluster, and because it might be on a different cloud or storage system (etcd vs S3) + description: ConfigBase is the path where we store configuration for + the cluster This might be different that the location when the cluster + spec itself is stored, both because this must be accessible to the + cluster, and because it might be on a different cloud or storage + system (etcd vs S3) type: string configStore: - description: ConfigStore is the VFS path to where the configuration (Cluster, InstanceGroups etc) is stored + description: ConfigStore is the VFS path to where the configuration + (Cluster, InstanceGroups etc) is stored type: string containerRuntime: description: Container runtime to use for Kubernetes @@ -399,23 +484,27 @@ spec: description: Complete containerd config file provided by the user type: string logLevel: - description: Logging level [trace, debug, info, warn, error, fatal, panic] (default "info") + description: Logging level [trace, debug, info, warn, error, fatal, + panic] (default "info") type: string root: description: Directory for persistent data (default "/var/lib/containerd") type: string skipInstall: - description: Prevents kops from installing and modifying containerd in any way (default "false") + description: Prevents kops from installing and modifying containerd + in any way (default "false") type: boolean state: description: Directory for execution state files (default "/run/containerd") type: string version: - description: Consumed by nodeup and used to pick the containerd version + description: Consumed by nodeup and used to pick the containerd + version type: string type: object dnsControllerGossipConfig: - description: DNSControllerGossipConfig for the cluster assuming the use of gossip DNS + description: DNSControllerGossipConfig for the cluster assuming the + use of gossip DNS properties: listen: type: string @@ -428,7 +517,13 @@ spec: type: string type: object dnsZone: - description: DNSZone is the DNS zone we should use when configuring DNS This is because some clouds let us define a managed zone foo.bar, and then have kubernetes.dev.foo.bar, without needing to define dev.foo.bar as a hosted zone. DNSZone will probably be a suffix of the MasterPublicName and MasterInternalName Note that DNSZone can either by the host name of the zone (containing dots), or can be an identifier for the zone. + description: DNSZone is the DNS zone we should use when configuring + DNS This is because some clouds let us define a managed zone foo.bar, + and then have kubernetes.dev.foo.bar, without needing to define + dev.foo.bar as a hosted zone. DNSZone will probably be a suffix + of the MasterPublicName and MasterInternalName Note that DNSZone + can either by the host name of the zone (containing dots), or can + be an identifier for the zone. type: string docker: description: DockerConfig is the configuration for docker @@ -439,16 +534,20 @@ spec: type: string type: array bridge: - description: Bridge is the network interface containers should bind onto + description: Bridge is the network interface containers should + bind onto type: string bridgeIP: - description: BridgeIP is a specific IP address and netmask for the docker0 bridge, using standard CIDR notation + description: BridgeIP is a specific IP address and netmask for + the docker0 bridge, using standard CIDR notation type: string dataRoot: - description: DataRoot is the root directory of persistent docker state (default "/var/lib/docker") + description: DataRoot is the root directory of persistent docker + state (default "/var/lib/docker") type: string defaultRuntime: - description: DefaultRuntime is the default OCI runtime for containers (default "runc") + description: DefaultRuntime is the default OCI runtime for containers + (default "runc") type: string defaultUlimit: description: DefaultUlimit is the ulimits for containers @@ -461,26 +560,32 @@ spec: type: string type: array execRoot: - description: ExecRoot is the root directory for execution state files (default "/var/run/docker") + description: ExecRoot is the root directory for execution state + files (default "/var/run/docker") type: string experimental: - description: Experimental features permits enabling new features such as dockerd metrics + description: Experimental features permits enabling new features + such as dockerd metrics type: boolean healthCheck: description: HealthCheck enables the periodic health-check service type: boolean hosts: - description: Hosts enables you to configure the endpoints the docker daemon listens on i.e. tcp://0.0.0.0.2375 or unix:///var/run/docker.sock etc + description: Hosts enables you to configure the endpoints the + docker daemon listens on i.e. tcp://0.0.0.0.2375 or unix:///var/run/docker.sock + etc items: type: string type: array insecureRegistries: - description: InsecureRegistries enables multiple insecure docker registry communications + description: InsecureRegistries enables multiple insecure docker + registry communications items: type: string type: array insecureRegistry: - description: InsecureRegistry enable insecure registry communication @question according to dockers this a list?? + description: InsecureRegistry enable insecure registry communication + @question according to dockers this a list?? type: string ipMasq: description: IPMasq enables ip masquerading for containers @@ -489,33 +594,40 @@ spec: description: IPtables enables addition of iptables rules type: boolean liveRestore: - description: LiveRestore enables live restore of docker when containers are still running + description: LiveRestore enables live restore of docker when containers + are still running type: boolean logDriver: - description: LogDriver is the default driver for container logs (default "json-file") + description: LogDriver is the default driver for container logs + (default "json-file") type: string logLevel: - description: LogLevel is the logging level ("debug", "info", "warn", "error", "fatal") (default "info") + description: LogLevel is the logging level ("debug", "info", "warn", + "error", "fatal") (default "info") type: string logOpt: - description: Logopt is a series of options given to the log driver options for containers + description: Logopt is a series of options given to the log driver + options for containers items: type: string type: array metricsAddress: - description: Metrics address is the endpoint to serve with Prometheus format metrics + description: Metrics address is the endpoint to serve with Prometheus + format metrics type: string mtu: description: MTU is the containers network MTU format: int32 type: integer registryMirrors: - description: RegistryMirrors is a referred list of docker registry mirror + description: RegistryMirrors is a referred list of docker registry + mirror items: type: string type: array runtimes: - description: Runtimes registers an additional OCI compatible runtime (default []) + description: Runtimes registers an additional OCI compatible runtime + (default []) items: type: string type: array @@ -523,25 +635,30 @@ spec: description: SelinuxEnabled enables SELinux support type: boolean skipInstall: - description: SkipInstall when set to true will prevent kops from installing and modifying Docker in any way + description: SkipInstall when set to true will prevent kops from + installing and modifying Docker in any way type: boolean storage: description: Storage is the docker storage driver to use type: string storageOpts: - description: StorageOpts is a series of options passed to the storage driver + description: StorageOpts is a series of options passed to the + storage driver items: type: string type: array userNamespaceRemap: - description: UserNamespaceRemap sets the user namespace remapping option for the docker daemon + description: UserNamespaceRemap sets the user namespace remapping + option for the docker daemon type: string version: - description: Version is consumed by the nodeup and used to pick the docker version + description: Version is consumed by the nodeup and used to pick + the docker version type: string type: object egressProxy: - description: HTTPProxy defines connection information to support use of a private cluster behind an forward HTTP Proxy + description: HTTPProxy defines connection information to support use + of a private cluster behind an forward HTTP Proxy properties: excludes: type: string @@ -565,77 +682,110 @@ spec: description: Backups describes how we do backups of etcd properties: backupStore: - description: BackupStore is the VFS path where we will read/write backup data + description: BackupStore is the VFS path where we will read/write + backup data type: string image: - description: Image is the etcd backup manager image to use. Setting this will create a sidecar container in the etcd pod with the specified image. + description: Image is the etcd backup manager image to use. Setting + this will create a sidecar container in the etcd pod with + the specified image. type: string type: object cpuRequest: anyOf: - type: integer - type: string - description: CPURequest specifies the cpu requests of each etcd container in the cluster. + description: CPURequest specifies the cpu requests of each etcd + container in the cluster. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true enableEtcdTLS: - description: EnableEtcdTLS indicates the etcd service should use TLS between peers and clients + description: EnableEtcdTLS indicates the etcd service should + use TLS between peers and clients type: boolean enableTLSAuth: - description: EnableTLSAuth indicates client and peer TLS auth should be enforced + description: EnableTLSAuth indicates client and peer TLS auth + should be enforced type: boolean etcdMembers: - description: Members stores the configurations for each member of the cluster (including the data volume) + description: Members stores the configurations for each member + of the cluster (including the data volume) items: - description: EtcdMemberSpec is a specification for a etcd member + description: EtcdMemberSpec is a specification for a etcd + member properties: encryptedVolume: - description: EncryptedVolume indicates you want to encrypt the volume + description: EncryptedVolume indicates you want to encrypt + the volume type: boolean instanceGroup: - description: InstanceGroup is the instanceGroup this volume is associated + description: InstanceGroup is the instanceGroup this volume + is associated type: string kmsKeyId: - description: KmsKeyId is a AWS KMS ID used to encrypt the volume + description: KmsKeyId is a AWS KMS ID used to encrypt + the volume type: string name: - description: Name is the name of the member within the etcd cluster + description: Name is the name of the member within the + etcd cluster type: string volumeIops: - description: If volume type is io1, then we need to specify the number of Iops. + description: If volume type is io1, then we need to specify + the number of Iops. format: int32 type: integer volumeSize: - description: VolumeSize is the underlying cloud volume size + description: VolumeSize is the underlying cloud volume + size format: int32 type: integer volumeType: - description: VolumeType is the underlying cloud storage class + description: VolumeType is the underlying cloud storage + class type: string type: object type: array heartbeatInterval: - description: HeartbeatInterval is the time (in milliseconds) for an etcd heartbeat interval + description: HeartbeatInterval is the time (in milliseconds) + for an etcd heartbeat interval type: string image: - description: Image is the etcd docker image to use. Setting this will ignore the Version specified. + description: Image is the etcd docker image to use. Setting + this will ignore the Version specified. type: string leaderElectionTimeout: - description: LeaderElectionTimeout is the time (in milliseconds) for an etcd leader election timeout + description: LeaderElectionTimeout is the time (in milliseconds) + for an etcd leader election timeout type: string manager: description: Manager describes the manager configuration properties: env: - description: Env allows users to pass in env variables to the etcd-manager container. Variables starting with ETCD_ will be further passed down to the etcd process. This allows etcd setting to be configured/overwriten. No config validation is done. A list of etcd config ENV vars can be found at https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/configuration.md + description: Env allows users to pass in env variables to + the etcd-manager container. Variables starting with ETCD_ + will be further passed down to the etcd process. This + allows etcd setting to be configured/overwriten. No config + validation is done. A list of etcd config ENV vars can + be found at https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/configuration.md items: - description: EnvVar represents an environment variable present in a Container. + description: EnvVar represents an environment variable + present in a Container. properties: name: - description: Name of the environment variable. Must be a C_IDENTIFIER. + description: Name of the environment variable. Must + be a C_IDENTIFIER. type: string value: - description: 'Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to "".' + description: 'Variable references $(VAR_NAME) are + expanded using the previous defined environment + variables in the container and any service environment + variables. If a variable cannot be resolved, the + reference in the input string will be unchanged. + The $(VAR_NAME) syntax can be escaped with a double + $$, ie: $$(VAR_NAME). Escaped references will never + be expanded, regardless of whether the variable + exists or not. Defaults to "".' type: string required: - name @@ -645,7 +795,8 @@ spec: description: Image is the etcd manager image to use. type: string logLevel: - description: LogLevel allows the klog library verbose log level to be set for etcd-manager. The default is 6. https://github.com/google/glog#verbose-logging + description: LogLevel allows the klog library verbose log + level to be set for etcd-manager. The default is 6. https://github.com/google/glog#verbose-logging format: int32 type: integer type: object @@ -653,14 +804,17 @@ spec: anyOf: - type: integer - type: string - description: MemoryRequest specifies the memory requests of each etcd container in the cluster. + description: MemoryRequest specifies the memory requests of + each etcd container in the cluster. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true name: - description: Name is the name of the etcd cluster (main, events etc) + description: Name is the name of the etcd cluster (main, events + etc) type: string provider: - description: 'Provider is the provider used to run etcd: Manager, Legacy. Defaults to Manager.' + description: 'Provider is the provider used to run etcd: Manager, + Legacy. Defaults to Manager.' type: string version: description: Version is the version of etcd to run. @@ -671,13 +825,16 @@ spec: description: ExternalDNSConfig are options of the dns-controller properties: disable: - description: Disable indicates we do not wish to run the dns-controller addon + description: Disable indicates we do not wish to run the dns-controller + addon type: boolean watchIngress: - description: WatchIngress indicates you want the dns-controller to watch and create dns entries for ingress resources + description: WatchIngress indicates you want the dns-controller + to watch and create dns entries for ingress resources type: boolean watchNamespace: - description: WatchNamespace is namespace to watch, defaults to all (use to control whom can creates dns entries) + description: WatchNamespace is namespace to watch, defaults to + all (use to control whom can creates dns entries) type: string type: object externalPolicies: @@ -685,7 +842,8 @@ spec: items: type: string type: array - description: ExternalPolicies allows the insertion of pre-existing managed policies on IG Roles + description: ExternalPolicies allows the insertion of pre-existing + managed policies on IG Roles type: object fileAssets: description: A collection of files assets for deployed cluster wide @@ -705,15 +863,18 @@ spec: description: Path is the location this file should reside type: string roles: - description: Roles is a list of roles the file asset should be applied, defaults to all + description: Roles is a list of roles the file asset should + be applied, defaults to all items: - description: InstanceGroupRole string describes the roles of the nodes in this InstanceGroup (master or nodes) + description: InstanceGroupRole string describes the roles + of the nodes in this InstanceGroup (master or nodes) type: string type: array type: object type: array gossipConfig: - description: GossipConfig for the cluster assuming the use of gossip DNS + description: GossipConfig for the cluster assuming the use of gossip + DNS properties: listen: type: string @@ -729,25 +890,29 @@ spec: description: HookSpec is a definition hook properties: before: - description: Before is a series of systemd units which this hook must run before + description: Before is a series of systemd units which this + hook must run before items: type: string type: array disabled: - description: Disabled indicates if you want the unit switched off + description: Disabled indicates if you want the unit switched + off type: boolean execContainer: description: ExecContainer is the image itself properties: command: - description: Command is the command supplied to the above image + description: Command is the command supplied to the above + image items: type: string type: array environment: additionalProperties: type: string - description: Environment is a map of environment variables added to the hook + description: Environment is a map of environment variables + added to the hook type: object image: description: Image is the docker image @@ -757,26 +922,34 @@ spec: description: Manifest is a raw systemd unit file type: string name: - description: Name is an optional name for the hook, otherwise the name is kops-hook- + description: Name is an optional name for the hook, otherwise + the name is kops-hook- type: string requires: - description: Requires is a series of systemd units the action requires + description: Requires is a series of systemd units the action + requires items: type: string type: array roles: - description: Roles is an optional list of roles the hook should be rolled out to, defaults to all + description: Roles is an optional list of roles the hook should + be rolled out to, defaults to all items: - description: InstanceGroupRole string describes the roles of the nodes in this InstanceGroup (master or nodes) + description: InstanceGroupRole string describes the roles + of the nodes in this InstanceGroup (master or nodes) type: string type: array useRawManifest: - description: UseRawManifest indicates that the contents of Manifest should be used as the contents of the systemd unit, unmodified. Before and Requires are ignored when used together with this value (and validation shouldn't allow them to be set) + description: UseRawManifest indicates that the contents of Manifest + should be used as the contents of the systemd unit, unmodified. + Before and Requires are ignored when used together with this + value (and validation shouldn't allow them to be set) type: boolean type: object type: array iam: - description: IAM field adds control over the IAM security policies applied to resources + description: IAM field adds control over the IAM security policies + applied to resources properties: allowContainerRegistry: type: boolean @@ -788,33 +961,50 @@ spec: - legacy type: object isolateMasters: - description: 'IsolateMasters determines whether we should lock down masters so that they are not on the pod network. true is the kube-up behaviour, but it is very surprising: it means that daemonsets only work on the master if they have hostNetwork=true. false is now the default, and it will: * give the master a normal PodCIDR * run kube-proxy on the master * enable debugging handlers on the master, so kubectl logs works' + description: 'IsolateMasters determines whether we should lock down + masters so that they are not on the pod network. true is the kube-up + behaviour, but it is very surprising: it means that daemonsets only + work on the master if they have hostNetwork=true. false is now the + default, and it will: * give the master a normal PodCIDR * run + kube-proxy on the master * enable debugging handlers on the master, + so kubectl logs works' type: boolean keyStore: - description: KeyStore is the VFS path to where SSL keys and certificates are stored + description: KeyStore is the VFS path to where SSL keys and certificates + are stored type: string kubeAPIServer: - description: KubeAPIServerConfig defines the configuration for the kube api + description: KubeAPIServerConfig defines the configuration for the + kube api properties: address: - description: 'Address is the binding address for the kube api: Deprecated - use insecure-bind-address and bind-address' + description: 'Address is the binding address for the kube api: + Deprecated - use insecure-bind-address and bind-address' type: string admissionControl: - description: 'AdmissionControl is a list of admission controllers to use: Deprecated - use enable-admission-plugins instead' + description: 'AdmissionControl is a list of admission controllers + to use: Deprecated - use enable-admission-plugins instead' items: type: string type: array admissionControlConfigFile: - description: AdmissionControlConfigFile is the location of the admission-control-config-file + description: AdmissionControlConfigFile is the location of the + admission-control-config-file type: string allowPrivileged: - description: AllowPrivileged indicates if we can run privileged containers + description: AllowPrivileged indicates if we can run privileged + containers type: boolean anonymousAuth: - description: AnonymousAuth indicates if anonymous authentication is permitted + description: AnonymousAuth indicates if anonymous authentication + is permitted type: boolean apiAudiences: - description: Identifiers of the API. The service account token authenticator will validate that tokens used against the API are bound to at least one of these audiences. If the --service-account-issuer flag is configured and this flag is not, this field defaults to a single element list containing the issuer URL. + description: Identifiers of the API. The service account token + authenticator will validate that tokens used against the API + are bound to at least one of these audiences. If the --service-account-issuer + flag is configured and this flag is not, this field defaults + to a single element list containing the issuer URL. items: type: string type: array @@ -823,18 +1013,22 @@ spec: format: int32 type: integer appendAdmissionPlugins: - description: AppendAdmissionPlugins appends list of enabled admission plugins + description: AppendAdmissionPlugins appends list of enabled admission + plugins items: type: string type: array auditDynamicConfiguration: - description: AuditDynamicConfiguration enables dynamic audit configuration via AuditSinks + description: AuditDynamicConfiguration enables dynamic audit configuration + via AuditSinks type: boolean auditLogFormat: - description: AuditLogFormat flag specifies the format type for audit log files. + description: AuditLogFormat flag specifies the format type for + audit log files. type: string auditLogMaxAge: - description: The maximum number of days to retain old audit log files based on the timestamp encoded in their filename. + description: The maximum number of days to retain old audit log + files based on the timestamp encoded in their filename. format: int32 type: integer auditLogMaxBackups: @@ -842,92 +1036,125 @@ spec: format: int32 type: integer auditLogMaxSize: - description: The maximum size in megabytes of the audit log file before it gets rotated. Defaults to 100MB. + description: The maximum size in megabytes of the audit log file + before it gets rotated. Defaults to 100MB. format: int32 type: integer auditLogPath: - description: If set, all requests coming to the apiserver will be logged to this file. + description: If set, all requests coming to the apiserver will + be logged to this file. type: string auditPolicyFile: - description: AuditPolicyFile is the full path to a advanced audit configuration file e.g. /srv/kubernetes/audit.conf + description: AuditPolicyFile is the full path to a advanced audit + configuration file e.g. /srv/kubernetes/audit.conf type: string auditWebhookBatchBufferSize: - description: AuditWebhookBatchBufferSize is The size of the buffer to store events before batching and writing. Only used in batch mode. (default 10000) + description: AuditWebhookBatchBufferSize is The size of the buffer + to store events before batching and writing. Only used in batch + mode. (default 10000) format: int32 type: integer auditWebhookBatchMaxSize: - description: AuditWebhookBatchMaxSize is The maximum size of a batch. Only used in batch mode. (default 400) + description: AuditWebhookBatchMaxSize is The maximum size of a + batch. Only used in batch mode. (default 400) format: int32 type: integer auditWebhookBatchMaxWait: - description: AuditWebhookBatchMaxWait is The amount of time to wait before force writing the batch that hadn't reached the max size. Only used in batch mode. (default 30s) + description: AuditWebhookBatchMaxWait is The amount of time to + wait before force writing the batch that hadn't reached the + max size. Only used in batch mode. (default 30s) type: string auditWebhookBatchThrottleBurst: - description: AuditWebhookBatchThrottleBurst is Maximum number of requests sent at the same moment if ThrottleQPS was not utilized before. Only used in batch mode. (default 15) + description: AuditWebhookBatchThrottleBurst is Maximum number + of requests sent at the same moment if ThrottleQPS was not utilized + before. Only used in batch mode. (default 15) format: int32 type: integer auditWebhookBatchThrottleEnable: - description: AuditWebhookBatchThrottleEnable is Whether batching throttling is enabled. Only used in batch mode. (default true) + description: AuditWebhookBatchThrottleEnable is Whether batching + throttling is enabled. Only used in batch mode. (default true) type: boolean auditWebhookBatchThrottleQps: anyOf: - type: integer - type: string - description: AuditWebhookBatchThrottleQps is Maximum average number of batches per second. Only used in batch mode. (default 10) + description: AuditWebhookBatchThrottleQps is Maximum average number + of batches per second. Only used in batch mode. (default 10) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true auditWebhookConfigFile: - description: AuditWebhookConfigFile is Path to a kubeconfig formatted file that defines the audit webhook configuration. Requires the 'AdvancedAuditing' feature gate. + description: AuditWebhookConfigFile is Path to a kubeconfig formatted + file that defines the audit webhook configuration. Requires + the 'AdvancedAuditing' feature gate. type: string auditWebhookInitialBackoff: - description: AuditWebhookInitialBackoff is The amount of time to wait before retrying the first failed request. (default 10s) + description: AuditWebhookInitialBackoff is The amount of time + to wait before retrying the first failed request. (default 10s) type: string auditWebhookMode: - description: AuditWebhookMode is Strategy for sending audit events. Blocking indicates sending events should block server responses. Batch causes the backend to buffer and write events asynchronously. Known modes are batch,blocking. (default "batch") + description: AuditWebhookMode is Strategy for sending audit events. + Blocking indicates sending events should block server responses. + Batch causes the backend to buffer and write events asynchronously. + Known modes are batch,blocking. (default "batch") type: string authenticationTokenWebhookCacheTtl: - description: The duration to cache responses from the webhook token authenticator. Default is 2m. (default 2m0s) + description: The duration to cache responses from the webhook + token authenticator. Default is 2m. (default 2m0s) type: string authenticationTokenWebhookConfigFile: - description: File with webhook configuration for token authentication in kubeconfig format. The API server will query the remote service to determine authentication for bearer tokens. + description: File with webhook configuration for token authentication + in kubeconfig format. The API server will query the remote service + to determine authentication for bearer tokens. type: string authorizationMode: - description: AuthorizationMode is the authorization mode the kubeapi is running in + description: AuthorizationMode is the authorization mode the kubeapi + is running in type: string authorizationRbacSuperUser: - description: AuthorizationRBACSuperUser is the name of the superuser for default rbac + description: AuthorizationRBACSuperUser is the name of the superuser + for default rbac type: string authorizationWebhookCacheAuthorizedTtl: - description: The duration to cache authorized responses from the webhook token authorizer. Default is 5m. (default 5m0s) + description: The duration to cache authorized responses from the + webhook token authorizer. Default is 5m. (default 5m0s) type: string authorizationWebhookCacheUnauthorizedTtl: - description: The duration to cache authorized responses from the webhook token authorizer. Default is 30s. (default 30s) + description: The duration to cache authorized responses from the + webhook token authorizer. Default is 30s. (default 30s) type: string authorizationWebhookConfigFile: - description: File with webhook configuration for authorization in kubeconfig format. The API server will query the remote service to determine whether to authorize the request. + description: File with webhook configuration for authorization + in kubeconfig format. The API server will query the remote service + to determine whether to authorize the request. type: string basicAuthFile: description: 'TODO: Remove unused BasicAuthFile' type: string bindAddress: - description: BindAddress is the binding address for the secure kubernetes API + description: BindAddress is the binding address for the secure + kubernetes API type: string clientCAFile: description: 'TODO: Remove unused ClientCAFile' type: string cloudProvider: - description: CloudProvider is the name of the cloudProvider we are using, aws, gce etcd + description: CloudProvider is the name of the cloudProvider we + are using, aws, gce etcd type: string corsAllowedOrigins: - description: CorsAllowedOrigins is a list of origins for CORS. An allowed origin can be a regular expression to support subdomain matching. If this list is empty CORS will not be enabled. + description: CorsAllowedOrigins is a list of origins for CORS. + An allowed origin can be a regular expression to support subdomain + matching. If this list is empty CORS will not be enabled. items: type: string type: array cpuLimit: - description: CPULimit, cpu limit compute resource for api server e.g. "500m" + description: CPULimit, cpu limit compute resource for api server + e.g. "500m" type: string cpuRequest: - description: CPURequest, cpu request compute resource for api server. Defaults to "150m" + description: CPURequest, cpu request compute resource for api + server. Defaults to "150m" type: string defaultNotReadyTolerationSeconds: description: DefaultNotReadyTolerationSeconds @@ -938,7 +1165,8 @@ spec: format: int64 type: integer disableAdmissionPlugins: - description: DisableAdmissionPlugins is a list of disabled admission plugins + description: DisableAdmissionPlugins is a list of disabled admission + plugins items: type: string type: array @@ -946,21 +1174,27 @@ spec: description: DisableBasicAuth removes the --basic-auth-file flag type: boolean enableAdmissionPlugins: - description: EnableAdmissionPlugins is a list of enabled admission plugins + description: EnableAdmissionPlugins is a list of enabled admission + plugins items: type: string type: array enableAggregatorRouting: - description: EnableAggregatorRouting enables aggregator routing requests to endpoints IP rather than cluster IP + description: EnableAggregatorRouting enables aggregator routing + requests to endpoints IP rather than cluster IP type: boolean enableBootstrapTokenAuth: - description: EnableBootstrapAuthToken enables 'bootstrap.kubernetes.io/token' in the 'kube-system' namespace to be used for TLS bootstrapping authentication + description: EnableBootstrapAuthToken enables 'bootstrap.kubernetes.io/token' + in the 'kube-system' namespace to be used for TLS bootstrapping + authentication type: boolean enableProfiling: - description: EnableProfiling enables profiling via web interface host:port/debug/pprof/ + description: EnableProfiling enables profiling via web interface + host:port/debug/pprof/ type: boolean encryptionProviderConfig: - description: EncryptionProviderConfig enables encryption at rest for secrets. + description: EncryptionProviderConfig enables encryption at rest + for secrets. type: string etcdCaFile: description: EtcdCAFile is the path to a ca certificate @@ -972,7 +1206,8 @@ spec: description: EtcdKeyFile is the path to a private key type: string etcdQuorumRead: - description: EtcdQuorumRead configures the etcd-quorum-read flag, which forces consistent reads from etcd + description: EtcdQuorumRead configures the etcd-quorum-read flag, + which forces consistent reads from etcd type: boolean etcdServers: description: EtcdServers is a list of the etcd service to connect @@ -980,7 +1215,10 @@ spec: type: string type: array etcdServersOverrides: - description: 'EtcdServersOverrides is per-resource etcd servers overrides, comma separated. The individual override format: group/resource#servers, where servers are http://ip:port, semicolon separated' + description: 'EtcdServersOverrides is per-resource etcd servers + overrides, comma separated. The individual override format: + group/resource#servers, where servers are http://ip:port, semicolon + separated' items: type: string type: array @@ -988,38 +1226,47 @@ spec: description: Amount of time to retain Kubernetes events type: string experimentalEncryptionProviderConfig: - description: ExperimentalEncryptionProviderConfig enables encryption at rest for secrets. + description: ExperimentalEncryptionProviderConfig enables encryption + at rest for secrets. type: string featureGates: additionalProperties: type: string - description: FeatureGates is set of key=value pairs that describe feature gates for alpha/experimental features. + description: FeatureGates is set of key=value pairs that describe + feature gates for alpha/experimental features. type: object http2MaxStreamsPerConnection: - description: HTTP2MaxStreamsPerConnection sets the limit that the server gives to clients for the maximum number of streams in an HTTP/2 connection. Zero means to use golang's default. + description: HTTP2MaxStreamsPerConnection sets the limit that + the server gives to clients for the maximum number of streams + in an HTTP/2 connection. Zero means to use golang's default. format: int32 type: integer image: description: Image is the docker container used type: string insecureBindAddress: - description: InsecureBindAddress is the binding address for the InsecurePort for the insecure kubernetes API + description: InsecureBindAddress is the binding address for the + InsecurePort for the insecure kubernetes API type: string insecurePort: description: InsecurePort is the port the insecure api runs format: int32 type: integer kubeletCertificateAuthority: - description: KubeletCertificateAuthority is the path of a certificate authority for secure communication between api and kubelet. + description: KubeletCertificateAuthority is the path of a certificate + authority for secure communication between api and kubelet. type: string kubeletClientCertificate: - description: KubeletClientCertificate is the path of a certificate for secure communication between api and kubelet + description: KubeletClientCertificate is the path of a certificate + for secure communication between api and kubelet type: string kubeletClientKey: - description: KubeletClientKey is the path of a private to secure communication between api and kubelet + description: KubeletClientKey is the path of a private to secure + communication between api and kubelet type: string kubeletPreferredAddressTypes: - description: KubeletPreferredAddressTypes is a list of the preferred NodeAddressTypes to use for kubelet connections + description: KubeletPreferredAddressTypes is a list of the preferred + NodeAddressTypes to use for kubelet connections items: type: string type: array @@ -1028,122 +1275,168 @@ spec: format: int32 type: integer maxMutatingRequestsInflight: - description: MaxMutatingRequestsInflight The maximum number of mutating requests in flight at a given time. Defaults to 200 + description: MaxMutatingRequestsInflight The maximum number of + mutating requests in flight at a given time. Defaults to 200 format: int32 type: integer maxRequestsInflight: - description: MaxRequestsInflight The maximum number of non-mutating requests in flight at a given time. + description: MaxRequestsInflight The maximum number of non-mutating + requests in flight at a given time. format: int32 type: integer memoryLimit: - description: MemoryLimit, memory limit compute resource for api server e.g. "30Mi" + description: MemoryLimit, memory limit compute resource for api + server e.g. "30Mi" type: string memoryRequest: - description: MemoryRequest, memory request compute resource for api server e.g. "30Mi" + description: MemoryRequest, memory request compute resource for + api server e.g. "30Mi" type: string minRequestTimeout: - description: MinRequestTimeout configures the minimum number of seconds a handler must keep a request open before timing it out. Currently only honored by the watch request handler + description: MinRequestTimeout configures the minimum number of + seconds a handler must keep a request open before timing it + out. Currently only honored by the watch request handler format: int32 type: integer oidcCAFile: - description: OIDCCAFile if set, the OpenID server's certificate will be verified by one of the authorities in the oidc-ca-file + description: OIDCCAFile if set, the OpenID server's certificate + will be verified by one of the authorities in the oidc-ca-file type: string oidcClientID: - description: OIDCClientID is the client ID for the OpenID Connect client, must be set if oidc-issuer-url is set. + description: OIDCClientID is the client ID for the OpenID Connect + client, must be set if oidc-issuer-url is set. type: string oidcGroupsClaim: - description: OIDCGroupsClaim if provided, the name of a custom OpenID Connect claim for specifying user groups. The claim value is expected to be a string or array of strings. + description: OIDCGroupsClaim if provided, the name of a custom + OpenID Connect claim for specifying user groups. The claim value + is expected to be a string or array of strings. type: string oidcGroupsPrefix: - description: OIDCGroupsPrefix is the prefix prepended to group claims to prevent clashes with existing names (such as 'system:' groups) + description: OIDCGroupsPrefix is the prefix prepended to group + claims to prevent clashes with existing names (such as 'system:' + groups) type: string oidcIssuerURL: - description: OIDCIssuerURL is the URL of the OpenID issuer, only HTTPS scheme will be accepted. If set, it will be used to verify the OIDC JSON Web Token (JWT). + description: OIDCIssuerURL is the URL of the OpenID issuer, only + HTTPS scheme will be accepted. If set, it will be used to verify + the OIDC JSON Web Token (JWT). type: string oidcRequiredClaim: - description: A key=value pair that describes a required claim in the ID Token. If set, the claim is verified to be present in the ID Token with a matching value. Repeat this flag to specify multiple claims. + description: A key=value pair that describes a required claim + in the ID Token. If set, the claim is verified to be present + in the ID Token with a matching value. Repeat this flag to specify + multiple claims. items: type: string type: array oidcUsernameClaim: - description: OIDCUsernameClaim is the OpenID claim to use as the user name. Note that claims other than the default ('sub') is not guaranteed to be unique and immutable. + description: OIDCUsernameClaim is the OpenID claim to use as the + user name. Note that claims other than the default ('sub') is + not guaranteed to be unique and immutable. type: string oidcUsernamePrefix: - description: OIDCUsernamePrefix is the prefix prepended to username claims to prevent clashes with existing names (such as 'system:' users). + description: OIDCUsernamePrefix is the prefix prepended to username + claims to prevent clashes with existing names (such as 'system:' + users). type: string proxyClientCertFile: - description: The apiserver's client certificate used for outbound requests. + description: The apiserver's client certificate used for outbound + requests. type: string proxyClientKeyFile: description: The apiserver's client key used for outbound requests. type: string requestTimeout: - description: RequestTimeout configures the duration a handler must keep a request open before timing it out. (default 1m0s) + description: RequestTimeout configures the duration a handler + must keep a request open before timing it out. (default 1m0s) type: string requestheaderAllowedNames: - description: List of client certificate common names to allow to provide usernames in headers specified by --requestheader-username-headers. If empty, any client certificate validated by the authorities in --requestheader-client-ca-file is allowed. + description: List of client certificate common names to allow + to provide usernames in headers specified by --requestheader-username-headers. + If empty, any client certificate validated by the authorities + in --requestheader-client-ca-file is allowed. items: type: string type: array requestheaderClientCAFile: - description: Root certificate bundle to use to verify client certificates on incoming requests before trusting usernames in headers specified by --requestheader-username-headers + description: Root certificate bundle to use to verify client certificates + on incoming requests before trusting usernames in headers specified + by --requestheader-username-headers type: string requestheaderExtraHeaderPrefixes: - description: List of request header prefixes to inspect. X-Remote-Extra- is suggested. + description: List of request header prefixes to inspect. X-Remote-Extra- + is suggested. items: type: string type: array requestheaderGroupHeaders: - description: List of request headers to inspect for groups. X-Remote-Group is suggested. + description: List of request headers to inspect for groups. X-Remote-Group + is suggested. items: type: string type: array requestheaderUsernameHeaders: - description: List of request headers to inspect for usernames. X-Remote-User is common. + description: List of request headers to inspect for usernames. + X-Remote-User is common. items: type: string type: array runtimeConfig: additionalProperties: type: string - description: RuntimeConfig is a series of keys/values are parsed into the `--runtime-config` parameters + description: RuntimeConfig is a series of keys/values are parsed + into the `--runtime-config` parameters type: object securePort: description: SecurePort is the port the kube runs on format: int32 type: integer serviceAccountIssuer: - description: Identifier of the service account token issuer. The issuer will assert this identifier in "iss" claim of issued tokens. This value is a string or URI. + description: Identifier of the service account token issuer. The + issuer will assert this identifier in "iss" claim of issued + tokens. This value is a string or URI. type: string serviceAccountJWKSURI: - description: ServiceAccountJWKSURI overrides the path for the jwks document; this is useful when we are republishing the service account discovery information elsewhere. + description: ServiceAccountJWKSURI overrides the path for the + jwks document; this is useful when we are republishing the service + account discovery information elsewhere. type: string serviceAccountKeyFile: - description: File containing PEM-encoded x509 RSA or ECDSA private or public keys, used to verify ServiceAccount tokens. The specified file can contain multiple keys, and the flag can be specified multiple times with different files. If unspecified, --tls-private-key-file is used. + description: File containing PEM-encoded x509 RSA or ECDSA private + or public keys, used to verify ServiceAccount tokens. The specified + file can contain multiple keys, and the flag can be specified + multiple times with different files. If unspecified, --tls-private-key-file + is used. items: type: string type: array serviceAccountSigningKeyFile: - description: Path to the file that contains the current private key of the service account token issuer. The issuer will sign issued ID tokens with this private key. (Requires the 'TokenRequest' feature gate.) + description: Path to the file that contains the current private + key of the service account token issuer. The issuer will sign + issued ID tokens with this private key. (Requires the 'TokenRequest' + feature gate.) type: string serviceClusterIPRange: description: ServiceClusterIPRange is the service address range type: string serviceNodePortRange: - description: Passed as --service-node-port-range to kube-apiserver. Expects 'startPort-endPort' format e.g. 30000-33000 + description: Passed as --service-node-port-range to kube-apiserver. + Expects 'startPort-endPort' format e.g. 30000-33000 type: string storageBackend: description: StorageBackend is the backend storage type: string targetRamMb: - description: Memory limit for apiserver in MB (used to configure sizes of caches, etc.) + description: Memory limit for apiserver in MB (used to configure + sizes of caches, etc.) format: int32 type: integer tlsCertFile: description: 'TODO: Remove unused TLSCertFile' type: string tlsCipherSuites: - description: TLSCipherSuites indicates the allowed TLS cipher suite + description: TLSCipherSuites indicates the allowed TLS cipher + suite items: type: string type: array @@ -1158,27 +1451,36 @@ spec: type: string type: object kubeControllerManager: - description: KubeControllerManagerConfig is the configuration for the controller + description: KubeControllerManagerConfig is the configuration for + the controller properties: allocateNodeCIDRs: - description: AllocateNodeCIDRs enables CIDRs for Pods to be allocated and, if ConfigureCloudRoutes is true, to be set on the cloud provider. + description: AllocateNodeCIDRs enables CIDRs for Pods to be allocated + and, if ConfigureCloudRoutes is true, to be set on the cloud + provider. type: boolean attachDetachReconcileSyncPeriod: - description: ReconcilerSyncLoopPeriod is the amount of time the reconciler sync states loop wait between successive executions. Is set to 1 min by kops by default + description: ReconcilerSyncLoopPeriod is the amount of time the + reconciler sync states loop wait between successive executions. + Is set to 1 min by kops by default type: string authenticationKubeconfig: - description: AuthenticationKubeconfig is the path to an Authentication Kubeconfig + description: AuthenticationKubeconfig is the path to an Authentication + Kubeconfig type: string authorizationAlwaysAllowPaths: - description: AuthorizationAlwaysAllowPaths is the list of HTTP paths to skip during authorization + description: AuthorizationAlwaysAllowPaths is the list of HTTP + paths to skip during authorization items: type: string type: array authorizationKubeconfig: - description: AuthorizationKubeconfig is the path to an Authorization Kubeconfig + description: AuthorizationKubeconfig is the path to an Authorization + Kubeconfig type: string cidrAllocatorType: - description: CIDRAllocatorType specifies the type of CIDR allocator to use. + description: CIDRAllocatorType specifies the type of CIDR allocator + to use. type: string cloudProvider: description: CloudProvider is the provider for cloud services. @@ -1190,127 +1492,189 @@ spec: description: ClusterName is the instance prefix for the cluster. type: string concurrentDeploymentSyncs: - description: The number of deployment objects that are allowed to sync concurrently. + description: The number of deployment objects that are allowed + to sync concurrently. format: int32 type: integer concurrentEndpointSyncs: - description: The number of endpoint objects that are allowed to sync concurrently. + description: The number of endpoint objects that are allowed to + sync concurrently. format: int32 type: integer concurrentNamespaceSyncs: - description: The number of namespace objects that are allowed to sync concurrently. + description: The number of namespace objects that are allowed + to sync concurrently. format: int32 type: integer concurrentRcSyncs: - description: The number of replicationcontroller objects that are allowed to sync concurrently. This only works on kubernetes >= 1.14 + description: The number of replicationcontroller objects that + are allowed to sync concurrently. This only works on kubernetes + >= 1.14 format: int32 type: integer concurrentReplicasetSyncs: - description: The number of replicaset objects that are allowed to sync concurrently. + description: The number of replicaset objects that are allowed + to sync concurrently. format: int32 type: integer concurrentResourceQuotaSyncs: - description: The number of resourcequota objects that are allowed to sync concurrently. + description: The number of resourcequota objects that are allowed + to sync concurrently. format: int32 type: integer concurrentServiceSyncs: - description: The number of service objects that are allowed to sync concurrently. + description: The number of service objects that are allowed to + sync concurrently. format: int32 type: integer concurrentServiceaccountTokenSyncs: - description: The number of serviceaccount objects that are allowed to sync concurrently to create tokens. + description: The number of serviceaccount objects that are allowed + to sync concurrently to create tokens. format: int32 type: integer configureCloudRoutes: - description: ConfigureCloudRoutes enables CIDRs allocated with to be configured on the cloud provider. + description: ConfigureCloudRoutes enables CIDRs allocated with + to be configured on the cloud provider. type: boolean controllers: - description: Controllers is a list of controllers to enable on the controller-manager + description: Controllers is a list of controllers to enable on + the controller-manager items: type: string type: array disableAttachDetachReconcileSync: - description: DisableAttachDetachReconcileSync disables the reconcile sync loop in the attach-detach controller. This can cause volumes to become mismatched with pods + description: DisableAttachDetachReconcileSync disables the reconcile + sync loop in the attach-detach controller. This can cause volumes + to become mismatched with pods type: boolean enableProfiling: - description: EnableProfiling enables profiling via web interface host:port/debug/pprof/ + description: EnableProfiling enables profiling via web interface + host:port/debug/pprof/ type: boolean experimentalClusterSigningDuration: - description: ExperimentalClusterSigningDuration is the duration that determines the length of duration that the signed certificates will be given. (default 8760h0m0s) + description: ExperimentalClusterSigningDuration is the duration + that determines the length of duration that the signed certificates + will be given. (default 8760h0m0s) type: string externalCloudVolumePlugin: - description: ExternalCloudVolumePlugin is a fallback mechanism that allows a legacy, in-tree cloudprovider to be used for volume plugins even when an external cloud controller manager is being used. This can be used instead of installing CSI. The value should be the same as is used for the --cloud-provider flag, i.e. "aws". + description: ExternalCloudVolumePlugin is a fallback mechanism + that allows a legacy, in-tree cloudprovider to be used for volume + plugins even when an external cloud controller manager is being + used. This can be used instead of installing CSI. The value + should be the same as is used for the --cloud-provider flag, + i.e. "aws". type: string featureGates: additionalProperties: type: string - description: FeatureGates is set of key=value pairs that describe feature gates for alpha/experimental features. + description: FeatureGates is set of key=value pairs that describe + feature gates for alpha/experimental features. type: object horizontalPodAutoscalerCpuInitializationPeriod: - description: HorizontalPodAutoscalerCPUInitializationPeriod is the period after pod start when CPU samples might be skipped. (default 5m) + description: HorizontalPodAutoscalerCPUInitializationPeriod is + the period after pod start when CPU samples might be skipped. + (default 5m) type: string horizontalPodAutoscalerDownscaleDelay: - description: HorizontalPodAutoscalerDownscaleDelay is a duration that specifies how long the autoscaler has to wait before another downscale operation can be performed after the current one has completed. + description: HorizontalPodAutoscalerDownscaleDelay is a duration + that specifies how long the autoscaler has to wait before another + downscale operation can be performed after the current one has + completed. type: string horizontalPodAutoscalerDownscaleStabilization: - description: HorizontalPodAutoscalerDownscaleStabilization is the period for which autoscaler will look backwards and not scale down below any recommendation it made during that period. + description: HorizontalPodAutoscalerDownscaleStabilization is + the period for which autoscaler will look backwards and not + scale down below any recommendation it made during that period. type: string horizontalPodAutoscalerInitialReadinessDelay: - description: HorizontalPodAutoscalerInitialReadinessDelay is the period after pod start during which readiness changes will be treated as initial readiness. (default 30s) + description: HorizontalPodAutoscalerInitialReadinessDelay is the + period after pod start during which readiness changes will be + treated as initial readiness. (default 30s) type: string horizontalPodAutoscalerSyncPeriod: - description: HorizontalPodAutoscalerSyncPeriod is the amount of time between syncs During each period, the controller manager queries the resource utilization against the metrics specified in each HorizontalPodAutoscaler definition. + description: HorizontalPodAutoscalerSyncPeriod is the amount of + time between syncs During each period, the controller manager + queries the resource utilization against the metrics specified + in each HorizontalPodAutoscaler definition. type: string horizontalPodAutoscalerTolerance: anyOf: - type: integer - type: string - description: HorizontalPodAutoscalerTolerance is the minimum change (from 1.0) in the desired-to-actual metrics ratio for the horizontal pod autoscaler to consider scaling. + description: HorizontalPodAutoscalerTolerance is the minimum change + (from 1.0) in the desired-to-actual metrics ratio for the horizontal + pod autoscaler to consider scaling. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true horizontalPodAutoscalerUpscaleDelay: - description: HorizontalPodAutoscalerUpscaleDelay is a duration that specifies how long the autoscaler has to wait before another upscale operation can be performed after the current one has completed. + description: HorizontalPodAutoscalerUpscaleDelay is a duration + that specifies how long the autoscaler has to wait before another + upscale operation can be performed after the current one has + completed. type: string horizontalPodAutoscalerUseRestClients: - description: HorizontalPodAutoscalerUseRestClients determines if the new-style clients should be used if support for custom metrics is enabled. + description: HorizontalPodAutoscalerUseRestClients determines + if the new-style clients should be used if support for custom + metrics is enabled. type: boolean image: description: Image is the docker image to use type: string kubeAPIBurst: - description: KubeAPIBurst Burst to use while talking with kubernetes apiserver. (default 30) + description: KubeAPIBurst Burst to use while talking with kubernetes + apiserver. (default 30) format: int32 type: integer kubeAPIQPS: anyOf: - type: integer - type: string - description: KubeAPIQPS QPS to use while talking with kubernetes apiserver. (default 20) + description: KubeAPIQPS QPS to use while talking with kubernetes + apiserver. (default 20) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true leaderElection: - description: LeaderElection defines the configuration of leader election client. + description: LeaderElection defines the configuration of leader + election client. properties: leaderElect: - description: leaderElect enables a leader election client to gain leadership before executing the main loop. Enable this when running replicated components for high availability. + description: leaderElect enables a leader election client + to gain leadership before executing the main loop. Enable + this when running replicated components for high availability. type: boolean leaderElectLeaseDuration: - description: leaderElectLeaseDuration is the length in time non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate + description: leaderElectLeaseDuration is the length in time + non-leader candidates will wait after observing a leadership + renewal until attempting to acquire leadership of a led + but unrenewed leader slot. This is effectively the maximum + duration that a leader can be stopped before it is replaced + by another candidate type: string leaderElectRenewDeadlineDuration: - description: LeaderElectRenewDeadlineDuration is the interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration. + description: LeaderElectRenewDeadlineDuration is the interval + between attempts by the acting master to renew a leadership + slot before it stops leading. This must be less than or + equal to the lease duration. type: string leaderElectResourceLock: - description: LeaderElectResourceLock is the type of resource object that is used for locking during leader election. Supported options are endpoints (default) and `configmaps`. + description: LeaderElectResourceLock is the type of resource + object that is used for locking during leader election. + Supported options are endpoints (default) and `configmaps`. type: string leaderElectResourceName: - description: LeaderElectResourceName is the name of resource object that is used for locking during leader election. + description: LeaderElectResourceName is the name of resource + object that is used for locking during leader election. type: string leaderElectResourceNamespace: - description: LeaderElectResourceNamespace is the namespace of resource object that is used for locking during leader election. + description: LeaderElectResourceNamespace is the namespace + of resource object that is used for locking during leader + election. type: string leaderElectRetryPeriod: - description: LeaderElectRetryPeriod is The duration the clients should wait between attempting acquisition and renewal of a leadership. This is only applicable if leader election is enabled. + description: LeaderElectRetryPeriod is The duration the clients + should wait between attempting acquisition and renewal of + a leadership. This is only applicable if leader election + is enabled. type: string type: object logLevel: @@ -1321,33 +1685,49 @@ spec: description: Master is the url for the kube api master type: string minResyncPeriod: - description: MinResyncPeriod indicates the resync period in reflectors. The resync period will be random between MinResyncPeriod and 2*MinResyncPeriod. (default 12h0m0s) + description: MinResyncPeriod indicates the resync period in reflectors. + The resync period will be random between MinResyncPeriod and + 2*MinResyncPeriod. (default 12h0m0s) type: string nodeCIDRMaskSize: - description: NodeCIDRMaskSize set the size for the mask of the nodes. + description: NodeCIDRMaskSize set the size for the mask of the + nodes. format: int32 type: integer nodeMonitorGracePeriod: - description: NodeMonitorGracePeriod is the amount of time which we allow running Node to be unresponsive before marking it unhealthy. (default 40s) Must be N-1 times more than kubelet's nodeStatusUpdateFrequency, where N means number of retries allowed for kubelet to post node status. + description: NodeMonitorGracePeriod is the amount of time which + we allow running Node to be unresponsive before marking it unhealthy. + (default 40s) Must be N-1 times more than kubelet's nodeStatusUpdateFrequency, + where N means number of retries allowed for kubelet to post + node status. type: string nodeMonitorPeriod: - description: NodeMonitorPeriod is the period for syncing NodeStatus in NodeController. (default 5s) + description: NodeMonitorPeriod is the period for syncing NodeStatus + in NodeController. (default 5s) type: string podEvictionTimeout: - description: PodEvictionTimeout is the grace period for deleting pods on failed nodes. (default 5m0s) + description: PodEvictionTimeout is the grace period for deleting + pods on failed nodes. (default 5m0s) type: string rootCAFile: - description: rootCAFile is the root certificate authority will be included in service account's token secret. This must be a valid PEM-encoded CA bundle. + description: rootCAFile is the root certificate authority will + be included in service account's token secret. This must be + a valid PEM-encoded CA bundle. type: string serviceAccountPrivateKeyFile: - description: ServiceAccountPrivateKeyFile is the location of the private key for service account token signing. + description: ServiceAccountPrivateKeyFile is the location of the + private key for service account token signing. type: string terminatedPodGCThreshold: - description: TerminatedPodGCThreshold is the number of terminated pods that can exist before the terminated pod garbage collector starts deleting terminated pods. If <= 0, the terminated pod garbage collector is disabled. + description: TerminatedPodGCThreshold is the number of terminated + pods that can exist before the terminated pod garbage collector + starts deleting terminated pods. If <= 0, the terminated pod + garbage collector is disabled. format: int32 type: integer tlsCipherSuites: - description: TLSCipherSuites indicates the allowed TLS cipher suite + description: TLSCipherSuites indicates the allowed TLS cipher + suite items: type: string type: array @@ -1355,83 +1735,101 @@ spec: description: TLSMinVersion indicates the minimum TLS version allowed type: string useServiceAccountCredentials: - description: UseServiceAccountCredentials controls whether we use individual service account credentials for each controller. + description: UseServiceAccountCredentials controls whether we + use individual service account credentials for each controller. type: boolean type: object kubeDNS: description: KubeDNSConfig defines the kube dns configuration properties: cacheMaxConcurrent: - description: CacheMaxConcurrent is the maximum number of concurrent queries for dnsmasq + description: CacheMaxConcurrent is the maximum number of concurrent + queries for dnsmasq type: integer cacheMaxSize: description: CacheMaxSize is the maximum entries to keep in dnsmasq type: integer coreDNSImage: - description: CoreDNSImage is used to override the default image used for CoreDNS + description: CoreDNSImage is used to override the default image + used for CoreDNS type: string cpuRequest: anyOf: - type: integer - type: string - description: CPURequest specifies the cpu requests of each dns container in the cluster. Default 100m. + description: CPURequest specifies the cpu requests of each dns + container in the cluster. Default 100m. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true domain: description: Domain is the dns domain type: string externalCoreFile: - description: ExternalCoreFile is used to provide a complete CoreDNS CoreFile by the user - ignores other provided flags which modify the CoreFile. + description: ExternalCoreFile is used to provide a complete CoreDNS + CoreFile by the user - ignores other provided flags which modify + the CoreFile. type: string image: - description: Image is the name of the docker image to run - @deprecated as this is now in the addon + description: Image is the name of the docker image to run - @deprecated + as this is now in the addon type: string memoryLimit: anyOf: - type: integer - type: string - description: MemoryLimit specifies the memory limit of each dns container in the cluster. Default 170m. + description: MemoryLimit specifies the memory limit of each dns + container in the cluster. Default 170m. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memoryRequest: anyOf: - type: integer - type: string - description: MemoryRequest specifies the memory requests of each dns container in the cluster. Default 70m. + description: MemoryRequest specifies the memory requests of each + dns container in the cluster. Default 70m. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true nodeLocalDNS: - description: NodeLocalDNS specifies the configuration for the node-local-dns addon + description: NodeLocalDNS specifies the configuration for the + node-local-dns addon properties: cpuRequest: anyOf: - type: integer - type: string - description: CPURequest specifies the cpu requests of each node-local-dns container in the daemonset. Default 25m. + description: CPURequest specifies the cpu requests of each + node-local-dns container in the daemonset. Default 25m. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true enabled: description: Enabled activates the node-local-dns addon type: boolean forwardToKubeDNS: - description: If enabled, nodelocal dns will use kubedns as a default upstream + description: If enabled, nodelocal dns will use kubedns as + a default upstream type: boolean localIP: - description: Local listen IP address. It can be any IP in the 169.254.20.0/16 space or any other IP address that can be guaranteed to not collide with any existing IP. + description: Local listen IP address. It can be any IP in + the 169.254.20.0/16 space or any other IP address that can + be guaranteed to not collide with any existing IP. type: string memoryRequest: anyOf: - type: integer - type: string - description: MemoryRequest specifies the memory requests of each node-local-dns container in the daemonset. Default 5Mi. + description: MemoryRequest specifies the memory requests of + each node-local-dns container in the daemonset. Default + 5Mi. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object provider: - description: Provider indicates whether CoreDNS or kube-dns will be the default service discovery. + description: Provider indicates whether CoreDNS or kube-dns will + be the default service discovery. type: string replicas: - description: Replicas is the number of pod replicas - @deprecated as this is now in the addon, and controlled by autoscaler + description: Replicas is the number of pod replicas - @deprecated + as this is now in the addon, and controlled by autoscaler type: integer serverIP: description: ServerIP is the server ip @@ -1444,7 +1842,8 @@ spec: description: StubDomains redirects a domains to another DNS service type: object upstreamNameservers: - description: UpstreamNameservers sets the upstream nameservers for queries not on the cluster domain + description: UpstreamNameservers sets the upstream nameservers + for queries not on the cluster domain items: type: string type: array @@ -1453,24 +1852,30 @@ spec: description: KubeProxyConfig defines the configuration for a proxy properties: bindAddress: - description: BindAddress is IP address for the proxy server to serve on + description: BindAddress is IP address for the proxy server to + serve on type: string clusterCIDR: - description: ClusterCIDR is the CIDR range of the pods in the cluster + description: ClusterCIDR is the CIDR range of the pods in the + cluster type: string conntrackMaxPerCore: - description: 'Maximum number of NAT connections to track per CPU core (default: 131072)' + description: 'Maximum number of NAT connections to track per CPU + core (default: 131072)' format: int32 type: integer conntrackMin: - description: Minimum number of conntrack entries to allocate, regardless of conntrack-max-per-core + description: Minimum number of conntrack entries to allocate, + regardless of conntrack-max-per-core format: int32 type: integer cpuLimit: - description: CPULimit, cpu limit compute resource for kube proxy e.g. "30m" + description: CPULimit, cpu limit compute resource for kube proxy + e.g. "30m" type: string cpuRequest: - description: 'TODO: Better type ? CPURequest, cpu request compute resource for kube proxy e.g. "20m"' + description: 'TODO: Better type ? CPURequest, cpu request compute + resource for kube proxy e.g. "20m"' type: string enabled: description: Enabled allows enabling or disabling kube-proxy @@ -1478,42 +1883,54 @@ spec: featureGates: additionalProperties: type: string - description: FeatureGates is a series of key pairs used to switch on features for the proxy + description: FeatureGates is a series of key pairs used to switch + on features for the proxy type: object hostnameOverride: - description: HostnameOverride, if non-empty, will be used as the identity instead of the actual hostname. + description: HostnameOverride, if non-empty, will be used as the + identity instead of the actual hostname. type: string image: type: string ipvsExcludeCidrs: - description: IPVSExcludeCIDRS is comma-separated list of CIDR's which the ipvs proxier should not touch when cleaning up IPVS rules + description: IPVSExcludeCIDRS is comma-separated list of CIDR's + which the ipvs proxier should not touch when cleaning up IPVS + rules items: type: string type: array ipvsMinSyncPeriod: - description: IPVSMinSyncPeriod is the minimum interval of how often the ipvs rules can be refreshed as endpoints and services change (e.g. '5s', '1m', '2h22m') + description: IPVSMinSyncPeriod is the minimum interval of how + often the ipvs rules can be refreshed as endpoints and services + change (e.g. '5s', '1m', '2h22m') type: string ipvsScheduler: - description: IPVSScheduler is the ipvs scheduler type when proxy mode is ipvs + description: IPVSScheduler is the ipvs scheduler type when proxy + mode is ipvs type: string ipvsSyncPeriod: - description: IPVSSyncPeriod duration is the maximum interval of how often ipvs rules are refreshed + description: IPVSSyncPeriod duration is the maximum interval of + how often ipvs rules are refreshed type: string logLevel: description: LogLevel is the logging level of the proxy format: int32 type: integer master: - description: Master is the address of the Kubernetes API server (overrides any value in kubeconfig) + description: Master is the address of the Kubernetes API server + (overrides any value in kubeconfig) type: string memoryLimit: - description: MemoryLimit, memory limit compute resource for kube proxy e.g. "30Mi" + description: MemoryLimit, memory limit compute resource for kube + proxy e.g. "30Mi" type: string memoryRequest: - description: MemoryRequest, memory request compute resource for kube proxy e.g. "30Mi" + description: MemoryRequest, memory request compute resource for + kube proxy e.g. "30Mi" type: string metricsBindAddress: - description: MetricsBindAddress is the IP address for the metrics server to serve on + description: MetricsBindAddress is the IP address for the metrics + server to serve on type: string proxyMode: description: 'Which proxy mode to use: (userspace, iptables, ipvs)' @@ -1523,54 +1940,79 @@ spec: description: KubeSchedulerConfig is the configuration for the kube-scheduler properties: authenticationKubeconfig: - description: AuthenticationKubeconfig is the path to an Authentication Kubeconfig + description: AuthenticationKubeconfig is the path to an Authentication + Kubeconfig type: string authorizationAlwaysAllowPaths: - description: AuthorizationAlwaysAllowPaths is the list of HTTP paths to skip during authorization + description: AuthorizationAlwaysAllowPaths is the list of HTTP + paths to skip during authorization items: type: string type: array authorizationKubeconfig: - description: AuthorizationKubeconfig is the path to an Authorization Kubeconfig + description: AuthorizationKubeconfig is the path to an Authorization + Kubeconfig type: string burst: - description: Burst sets the maximum qps to send to apiserver after the burst quota is exhausted + description: Burst sets the maximum qps to send to apiserver after + the burst quota is exhausted format: int32 type: integer enableProfiling: - description: EnableProfiling enables profiling via web interface host:port/debug/pprof/ + description: EnableProfiling enables profiling via web interface + host:port/debug/pprof/ type: boolean featureGates: additionalProperties: type: string - description: FeatureGates is set of key=value pairs that describe feature gates for alpha/experimental features. + description: FeatureGates is set of key=value pairs that describe + feature gates for alpha/experimental features. type: object image: description: Image is the docker image to use type: string leaderElection: - description: LeaderElection defines the configuration of leader election client. + description: LeaderElection defines the configuration of leader + election client. properties: leaderElect: - description: leaderElect enables a leader election client to gain leadership before executing the main loop. Enable this when running replicated components for high availability. + description: leaderElect enables a leader election client + to gain leadership before executing the main loop. Enable + this when running replicated components for high availability. type: boolean leaderElectLeaseDuration: - description: leaderElectLeaseDuration is the length in time non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate + description: leaderElectLeaseDuration is the length in time + non-leader candidates will wait after observing a leadership + renewal until attempting to acquire leadership of a led + but unrenewed leader slot. This is effectively the maximum + duration that a leader can be stopped before it is replaced + by another candidate type: string leaderElectRenewDeadlineDuration: - description: LeaderElectRenewDeadlineDuration is the interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration. + description: LeaderElectRenewDeadlineDuration is the interval + between attempts by the acting master to renew a leadership + slot before it stops leading. This must be less than or + equal to the lease duration. type: string leaderElectResourceLock: - description: LeaderElectResourceLock is the type of resource object that is used for locking during leader election. Supported options are endpoints (default) and `configmaps`. + description: LeaderElectResourceLock is the type of resource + object that is used for locking during leader election. + Supported options are endpoints (default) and `configmaps`. type: string leaderElectResourceName: - description: LeaderElectResourceName is the name of resource object that is used for locking during leader election. + description: LeaderElectResourceName is the name of resource + object that is used for locking during leader election. type: string leaderElectResourceNamespace: - description: LeaderElectResourceNamespace is the namespace of resource object that is used for locking during leader election. + description: LeaderElectResourceNamespace is the namespace + of resource object that is used for locking during leader + election. type: string leaderElectRetryPeriod: - description: LeaderElectRetryPeriod is The duration the clients should wait between attempting acquisition and renewal of a leadership. This is only applicable if leader election is enabled. + description: LeaderElectRetryPeriod is The duration the clients + should wait between attempting acquisition and renewal of + a leadership. This is only applicable if leader election + is enabled. type: string type: object logLevel: @@ -1581,57 +2023,76 @@ spec: description: Master is a url to the kube master type: string maxPersistentVolumes: - description: 'MaxPersistentVolumes changes the maximum number of persistent volumes the scheduler will scheduler onto the same node. Only takes into affect if value is positive. This corresponds to the KUBE_MAX_PD_VOLS environment variable, which has been supported as far back as Kubernetes 1.7. The default depends on the version and the cloud provider as outlined: https://kubernetes.io/docs/concepts/storage/storage-limits/' + description: 'MaxPersistentVolumes changes the maximum number + of persistent volumes the scheduler will scheduler onto the + same node. Only takes into affect if value is positive. This + corresponds to the KUBE_MAX_PD_VOLS environment variable, which + has been supported as far back as Kubernetes 1.7. The default + depends on the version and the cloud provider as outlined: https://kubernetes.io/docs/concepts/storage/storage-limits/' format: int32 type: integer qps: anyOf: - type: integer - type: string - description: Qps sets the maximum qps to send to apiserver after the burst quota is exhausted + description: Qps sets the maximum qps to send to apiserver after + the burst quota is exhausted pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true usePolicyConfigMap: - description: UsePolicyConfigMap enable setting the scheduler policy from a configmap + description: UsePolicyConfigMap enable setting the scheduler policy + from a configmap type: boolean type: object kubelet: description: KubeletConfigSpec defines the kubelet configuration properties: allowPrivileged: - description: AllowPrivileged enables containers to request privileged mode (defaults to false) + description: AllowPrivileged enables containers to request privileged + mode (defaults to false) type: boolean allowedUnsafeSysctls: - description: AllowedUnsafeSysctls are passed to the kubelet config to whitelist allowable sysctls + description: AllowedUnsafeSysctls are passed to the kubelet config + to whitelist allowable sysctls items: type: string type: array anonymousAuth: - description: AnonymousAuth permits you to control auth to the kubelet api + description: AnonymousAuth permits you to control auth to the + kubelet api type: boolean apiServers: - description: APIServers is not used for clusters version 1.6 and later - flag removed + description: APIServers is not used for clusters version 1.6 and + later - flag removed type: string authenticationTokenWebhook: - description: AuthenticationTokenWebhook uses the TokenReview API to determine authentication for bearer tokens. + description: AuthenticationTokenWebhook uses the TokenReview API + to determine authentication for bearer tokens. type: boolean authenticationTokenWebhookCacheTtl: - description: AuthenticationTokenWebhook sets the duration to cache responses from the webhook token authenticator. Default is 2m. (default 2m0s) + description: AuthenticationTokenWebhook sets the duration to cache + responses from the webhook token authenticator. Default is 2m. + (default 2m0s) type: string authorizationMode: - description: AuthorizationMode is the authorization mode the kubelet is running in + description: AuthorizationMode is the authorization mode the kubelet + is running in type: string babysitDaemons: - description: The node has babysitter process monitoring docker and kubelet. Removed as of 1.7 + description: The node has babysitter process monitoring docker + and kubelet. Removed as of 1.7 type: boolean bootstrapKubeconfig: - description: BootstrapKubeconfig is the path to a kubeconfig file that will be used to get client certificate for kubelet + description: BootstrapKubeconfig is the path to a kubeconfig file + that will be used to get client certificate for kubelet type: string cgroupDriver: - description: CgroupDriver allows the explicit setting of the kubelet cgroup driver. If omitted, defaults to cgroupfs. + description: CgroupDriver allows the explicit setting of the kubelet + cgroup driver. If omitted, defaults to cgroupfs. type: string cgroupRoot: - description: cgroupRoot is the root cgroup to use for pods. This is handled by the container runtime on a best effort basis. + description: cgroupRoot is the root cgroup to use for pods. This + is handled by the container runtime on a best effort basis. type: string clientCaFile: description: ClientCAFile is the path to a CA certificate @@ -1646,192 +2107,270 @@ spec: description: ClusterDomain is the DNS domain for this cluster type: string configureCbr0: - description: configureCBR0 enables the kubelet to configure cbr0 based on Node.Spec.PodCIDR. + description: configureCBR0 enables the kubelet to configure cbr0 + based on Node.Spec.PodCIDR. type: boolean cpuCFSQuota: - description: CPUCFSQuota enables CPU CFS quota enforcement for containers that specify CPU limits + description: CPUCFSQuota enables CPU CFS quota enforcement for + containers that specify CPU limits type: boolean cpuCFSQuotaPeriod: - description: CPUCFSQuotaPeriod sets CPU CFS quota period value, cpu.cfs_period_us, defaults to Linux Kernel default + description: CPUCFSQuotaPeriod sets CPU CFS quota period value, + cpu.cfs_period_us, defaults to Linux Kernel default type: string cpuManagerPolicy: - description: CpuManagerPolicy allows for changing the default policy of None to static + description: CpuManagerPolicy allows for changing the default + policy of None to static type: string dockerDisableSharedPID: - description: DockerDisableSharedPID uses a shared PID namespace for containers in a pod. + description: DockerDisableSharedPID uses a shared PID namespace + for containers in a pod. type: boolean enableCustomMetrics: description: Enable gathering custom metrics. type: boolean enableDebuggingHandlers: - description: EnableDebuggingHandlers enables server endpoints for log collection and local running of containers and commands + description: EnableDebuggingHandlers enables server endpoints + for log collection and local running of containers and commands type: boolean enforceNodeAllocatable: - description: Enforce Allocatable across pods whenever the overall usage across all pods exceeds Allocatable. + description: Enforce Allocatable across pods whenever the overall + usage across all pods exceeds Allocatable. type: string evictionHard: - description: Comma-delimited list of hard eviction expressions. For example, 'memory.available<300Mi'. + description: Comma-delimited list of hard eviction expressions. For + example, 'memory.available<300Mi'. type: string evictionMaxPodGracePeriod: - description: Maximum allowed grace period (in seconds) to use when terminating pods in response to a soft eviction threshold being met. + description: Maximum allowed grace period (in seconds) to use + when terminating pods in response to a soft eviction threshold + being met. format: int32 type: integer evictionMinimumReclaim: - description: Comma-delimited list of minimum reclaims (e.g. imagefs.available=2Gi) that describes the minimum amount of resource the kubelet will reclaim when performing a pod eviction if that resource is under pressure. + description: Comma-delimited list of minimum reclaims (e.g. imagefs.available=2Gi) + that describes the minimum amount of resource the kubelet will + reclaim when performing a pod eviction if that resource is under + pressure. type: string evictionPressureTransitionPeriod: - description: Duration for which the kubelet has to wait before transitioning out of an eviction pressure condition. + description: Duration for which the kubelet has to wait before + transitioning out of an eviction pressure condition. type: string evictionSoft: - description: Comma-delimited list of soft eviction expressions. For example, 'memory.available<300Mi'. + description: Comma-delimited list of soft eviction expressions. For + example, 'memory.available<300Mi'. type: string evictionSoftGracePeriod: - description: Comma-delimited list of grace periods for each soft eviction signal. For example, 'memory.available=30s'. + description: Comma-delimited list of grace periods for each soft + eviction signal. For example, 'memory.available=30s'. type: string experimentalAllowedUnsafeSysctls: - description: ExperimentalAllowedUnsafeSysctls are passed to the kubelet config to whitelist allowable sysctls Was promoted to beta and renamed. https://github.com/kubernetes/kubernetes/pull/63717 + description: ExperimentalAllowedUnsafeSysctls are passed to the + kubelet config to whitelist allowable sysctls Was promoted to + beta and renamed. https://github.com/kubernetes/kubernetes/pull/63717 items: type: string type: array failSwapOn: - description: Tells the Kubelet to fail to start if swap is enabled on the node. + description: Tells the Kubelet to fail to start if swap is enabled + on the node. type: boolean featureGates: additionalProperties: type: string - description: FeatureGates is set of key=value pairs that describe feature gates for alpha/experimental features. + description: FeatureGates is set of key=value pairs that describe + feature gates for alpha/experimental features. type: object hairpinMode: - description: 'How should the kubelet configure the container bridge for hairpin packets. Setting this flag allows endpoints in a Service to loadbalance back to themselves if they should try to access their own Service. Values: "promiscuous-bridge": make the container bridge promiscuous. "hairpin-veth": set the hairpin flag on container veth interfaces. "none": do nothing. Setting --configure-cbr0 to false implies that to achieve hairpin NAT one must set --hairpin-mode=veth-flag, because bridge assumes the existence of a container bridge named cbr0.' + description: 'How should the kubelet configure the container bridge + for hairpin packets. Setting this flag allows endpoints in a + Service to loadbalance back to themselves if they should try + to access their own Service. Values: "promiscuous-bridge": + make the container bridge promiscuous. "hairpin-veth": set + the hairpin flag on container veth interfaces. "none": do + nothing. Setting --configure-cbr0 to false implies that to achieve + hairpin NAT one must set --hairpin-mode=veth-flag, because bridge + assumes the existence of a container bridge named cbr0.' type: string hostnameOverride: - description: HostnameOverride is the hostname used to identify the kubelet instead of the actual hostname. + description: HostnameOverride is the hostname used to identify + the kubelet instead of the actual hostname. type: string housekeepingInterval: - description: HousekeepingInterval allows to specify interval between container housekeepings. + description: HousekeepingInterval allows to specify interval between + container housekeepings. type: string imageGCHighThresholdPercent: - description: ImageGCHighThresholdPercent is the percent of disk usage after which image garbage collection is always run. + description: ImageGCHighThresholdPercent is the percent of disk + usage after which image garbage collection is always run. format: int32 type: integer imageGCLowThresholdPercent: - description: ImageGCLowThresholdPercent is the percent of disk usage before which image garbage collection is never run. Lowest disk usage to garbage collect to. + description: ImageGCLowThresholdPercent is the percent of disk + usage before which image garbage collection is never run. Lowest + disk usage to garbage collect to. format: int32 type: integer imagePullProgressDeadline: - description: ImagePullProgressDeadline is the timeout for image pulls If no pulling progress is made before this deadline, the image pulling will be cancelled. (default 1m0s) + description: ImagePullProgressDeadline is the timeout for image + pulls If no pulling progress is made before this deadline, the + image pulling will be cancelled. (default 1m0s) type: string kubeReserved: additionalProperties: type: string - description: Resource reservation for kubernetes system daemons like the kubelet, container runtime, node problem detector, etc. + description: Resource reservation for kubernetes system daemons + like the kubelet, container runtime, node problem detector, + etc. type: object kubeReservedCgroup: description: Control group for kube daemons. type: string kubeconfigPath: - description: KubeconfigPath is the path of kubeconfig for the kubelet + description: KubeconfigPath is the path of kubeconfig for the + kubelet type: string kubeletCgroups: - description: KubeletCgroups is the absolute name of cgroups to isolate the kubelet in. + description: KubeletCgroups is the absolute name of cgroups to + isolate the kubelet in. type: string logLevel: description: LogLevel is the logging level of the kubelet format: int32 type: integer maxPods: - description: MaxPods is the number of pods that can run on this Kubelet. + description: MaxPods is the number of pods that can run on this + Kubelet. format: int32 type: integer networkPluginMTU: - description: NetworkPluginMTU is the MTU to be passed to the network plugin, and overrides the default MTU for cases where it cannot be automatically computed (such as IPSEC). + description: NetworkPluginMTU is the MTU to be passed to the network + plugin, and overrides the default MTU for cases where it cannot + be automatically computed (such as IPSEC). format: int32 type: integer networkPluginName: - description: NetworkPluginName is the name of the network plugin to be invoked for various events in kubelet/pod lifecycle + description: NetworkPluginName is the name of the network plugin + to be invoked for various events in kubelet/pod lifecycle type: string nodeLabels: additionalProperties: type: string - description: NodeLabels to add when registering the node in the cluster. + description: NodeLabels to add when registering the node in the + cluster. type: object nodeStatusUpdateFrequency: - description: NodeStatusUpdateFrequency Specifies how often kubelet posts node status to master (default 10s) must work with nodeMonitorGracePeriod in KubeControllerManagerConfig. + description: NodeStatusUpdateFrequency Specifies how often kubelet + posts node status to master (default 10s) must work with nodeMonitorGracePeriod + in KubeControllerManagerConfig. type: string nonMasqueradeCIDR: - description: 'NonMasqueradeCIDR configures masquerading: traffic to IPs outside this range will use IP masquerade.' + description: 'NonMasqueradeCIDR configures masquerading: traffic + to IPs outside this range will use IP masquerade.' type: string nvidiaGPUs: - description: NvidiaGPUs is the number of NVIDIA GPU devices on this node. + description: NvidiaGPUs is the number of NVIDIA GPU devices on + this node. format: int32 type: integer podCIDR: - description: PodCIDR is the CIDR to use for pod IP addresses, only used in standalone mode. In cluster mode, this is obtained from the master. + description: PodCIDR is the CIDR to use for pod IP addresses, + only used in standalone mode. In cluster mode, this is obtained + from the master. type: string podInfraContainerImage: - description: PodInfraContainerImage is the image whose network/ipc containers in each pod will use. + description: PodInfraContainerImage is the image whose network/ipc + containers in each pod will use. type: string podManifestPath: - description: config is the path to the config file or directory of files + description: config is the path to the config file or directory + of files type: string protectKernelDefaults: - description: 'Default kubelet behaviour for kernel tuning. If set, kubelet errors if any of kernel tunables is different than kubelet defaults. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet''s --config flag.' + description: 'Default kubelet behaviour for kernel tuning. If + set, kubelet errors if any of kernel tunables is different than + kubelet defaults. (DEPRECATED: This parameter should be set + via the config file specified by the Kubelet''s --config flag.' type: boolean readOnlyPort: - description: ReadOnlyPort is the port used by the kubelet api for read-only access (default 10255) + description: ReadOnlyPort is the port used by the kubelet api + for read-only access (default 10255) format: int32 type: integer reconcileCIDR: - description: ReconcileCIDR is Reconcile node CIDR with the CIDR specified by the API server. No-op if register-node or configure-cbr0 is false. + description: ReconcileCIDR is Reconcile node CIDR with the CIDR + specified by the API server. No-op if register-node or configure-cbr0 + is false. type: boolean registerNode: - description: RegisterNode enables automatic registration with the apiserver. + description: RegisterNode enables automatic registration with + the apiserver. type: boolean registerSchedulable: - description: registerSchedulable tells the kubelet to register the node as schedulable. No-op if register-node is false. + description: registerSchedulable tells the kubelet to register + the node as schedulable. No-op if register-node is false. type: boolean registryBurst: - description: RegistryBurst Maximum size of a bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding registry-qps. Only used if --registry-qps > 0 (default 10) + description: RegistryBurst Maximum size of a bursty pulls, temporarily + allows pulls to burst to this number, while still not exceeding + registry-qps. Only used if --registry-qps > 0 (default 10) format: int32 type: integer registryPullQPS: - description: RegistryPullQPS if > 0, limit registry pull QPS to this value. If 0, unlimited. (default 5) + description: RegistryPullQPS if > 0, limit registry pull QPS to + this value. If 0, unlimited. (default 5) format: int32 type: integer requireKubeconfig: description: RequireKubeconfig indicates a kubeconfig is required type: boolean resolvConf: - description: ResolverConfig is the resolver configuration file used as the basis for the container DNS resolution configuration."), [] + description: ResolverConfig is the resolver configuration file + used as the basis for the container DNS resolution configuration."), + [] type: string rootDir: - description: RootDir is the directory path for managing kubelet files (volume mounts,etc) + description: RootDir is the directory path for managing kubelet + files (volume mounts,etc) type: string rotateCertificates: description: rotateCertificates enables client certificate rotation. type: boolean runtimeCgroups: - description: Cgroups that container runtime is expected to be isolated in. + description: Cgroups that container runtime is expected to be + isolated in. type: string runtimeRequestTimeout: - description: RuntimeRequestTimeout is timeout for runtime requests on - pull, logs, exec and attach + description: RuntimeRequestTimeout is timeout for runtime requests + on - pull, logs, exec and attach type: string seccompProfileRoot: - description: SeccompProfileRoot is the directory path for seccomp profiles. + description: SeccompProfileRoot is the directory path for seccomp + profiles. type: string serializeImagePulls: - description: '// SerializeImagePulls when enabled, tells the Kubelet to pull images one // at a time. We recommend *not* changing the default value on nodes that // run docker daemon with version < 1.9 or an Aufs storage backend. // Issue #10959 has more details.' + description: '// SerializeImagePulls when enabled, tells the Kubelet + to pull images one // at a time. We recommend *not* changing + the default value on nodes that // run docker daemon with version < + 1.9 or an Aufs storage backend. // Issue #10959 has more details.' type: boolean streamingConnectionIdleTimeout: - description: StreamingConnectionIdleTimeout is the maximum time a streaming connection can be idle before the connection is automatically closed + description: StreamingConnectionIdleTimeout is the maximum time + a streaming connection can be idle before the connection is + automatically closed type: string systemCgroups: - description: SystemCgroups is absolute name of cgroups in which to place all non-kernel processes that are not already in a container. Empty for no container. Rolling back the flag requires a reboot. + description: SystemCgroups is absolute name of cgroups in which + to place all non-kernel processes that are not already in a + container. Empty for no container. Rolling back the flag requires + a reboot. type: string systemReserved: additionalProperties: type: string - description: Capture resource reservation for OS system daemons like sshd, udev, etc. + description: Capture resource reservation for OS system daemons + like sshd, udev, etc. type: object systemReservedCgroup: description: Parent control group for OS system daemons. @@ -1845,7 +2384,8 @@ spec: description: 'TODO: Remove unused TLSCertFile' type: string tlsCipherSuites: - description: TLSCipherSuites indicates the allowed TLS cipher suite + description: TLSCipherSuites indicates the allowed TLS cipher + suite items: type: string type: array @@ -1856,63 +2396,84 @@ spec: description: 'TODO: Remove unused TLSPrivateKeyFile' type: string topologyManagerPolicy: - description: TopologyManagerPolicy determines the allocation policy for the topology manager. + description: TopologyManagerPolicy determines the allocation policy + for the topology manager. type: string volumePluginDirectory: - description: The full path of the directory in which to search for additional third party volume plugins (this path must be writeable, dependent on your choice of OS) + description: The full path of the directory in which to search + for additional third party volume plugins (this path must be + writeable, dependent on your choice of OS) type: string volumeStatsAggPeriod: - description: VolumeStatsAggPeriod is the interval for kubelet to calculate and cache the volume disk usage for all pods and volumes + description: VolumeStatsAggPeriod is the interval for kubelet + to calculate and cache the volume disk usage for all pods and + volumes type: string type: object kubernetesApiAccess: - description: KubernetesAPIAccess determines the permitted access to the API endpoints (master HTTPS) Currently only a single CIDR is supported (though a richer grammar could be added in future) + description: KubernetesAPIAccess determines the permitted access to + the API endpoints (master HTTPS) Currently only a single CIDR is + supported (though a richer grammar could be added in future) items: type: string type: array kubernetesVersion: - description: The version of kubernetes to install (optional, and can be a "spec" like stable) + description: The version of kubernetes to install (optional, and can + be a "spec" like stable) type: string masterInternalName: - description: MasterInternalName is the internal DNS name for the master nodes + description: MasterInternalName is the internal DNS name for the master + nodes type: string masterKubelet: description: KubeletConfigSpec defines the kubelet configuration properties: allowPrivileged: - description: AllowPrivileged enables containers to request privileged mode (defaults to false) + description: AllowPrivileged enables containers to request privileged + mode (defaults to false) type: boolean allowedUnsafeSysctls: - description: AllowedUnsafeSysctls are passed to the kubelet config to whitelist allowable sysctls + description: AllowedUnsafeSysctls are passed to the kubelet config + to whitelist allowable sysctls items: type: string type: array anonymousAuth: - description: AnonymousAuth permits you to control auth to the kubelet api + description: AnonymousAuth permits you to control auth to the + kubelet api type: boolean apiServers: - description: APIServers is not used for clusters version 1.6 and later - flag removed + description: APIServers is not used for clusters version 1.6 and + later - flag removed type: string authenticationTokenWebhook: - description: AuthenticationTokenWebhook uses the TokenReview API to determine authentication for bearer tokens. + description: AuthenticationTokenWebhook uses the TokenReview API + to determine authentication for bearer tokens. type: boolean authenticationTokenWebhookCacheTtl: - description: AuthenticationTokenWebhook sets the duration to cache responses from the webhook token authenticator. Default is 2m. (default 2m0s) + description: AuthenticationTokenWebhook sets the duration to cache + responses from the webhook token authenticator. Default is 2m. + (default 2m0s) type: string authorizationMode: - description: AuthorizationMode is the authorization mode the kubelet is running in + description: AuthorizationMode is the authorization mode the kubelet + is running in type: string babysitDaemons: - description: The node has babysitter process monitoring docker and kubelet. Removed as of 1.7 + description: The node has babysitter process monitoring docker + and kubelet. Removed as of 1.7 type: boolean bootstrapKubeconfig: - description: BootstrapKubeconfig is the path to a kubeconfig file that will be used to get client certificate for kubelet + description: BootstrapKubeconfig is the path to a kubeconfig file + that will be used to get client certificate for kubelet type: string cgroupDriver: - description: CgroupDriver allows the explicit setting of the kubelet cgroup driver. If omitted, defaults to cgroupfs. + description: CgroupDriver allows the explicit setting of the kubelet + cgroup driver. If omitted, defaults to cgroupfs. type: string cgroupRoot: - description: cgroupRoot is the root cgroup to use for pods. This is handled by the container runtime on a best effort basis. + description: cgroupRoot is the root cgroup to use for pods. This + is handled by the container runtime on a best effort basis. type: string clientCaFile: description: ClientCAFile is the path to a CA certificate @@ -1927,192 +2488,270 @@ spec: description: ClusterDomain is the DNS domain for this cluster type: string configureCbr0: - description: configureCBR0 enables the kubelet to configure cbr0 based on Node.Spec.PodCIDR. + description: configureCBR0 enables the kubelet to configure cbr0 + based on Node.Spec.PodCIDR. type: boolean cpuCFSQuota: - description: CPUCFSQuota enables CPU CFS quota enforcement for containers that specify CPU limits + description: CPUCFSQuota enables CPU CFS quota enforcement for + containers that specify CPU limits type: boolean cpuCFSQuotaPeriod: - description: CPUCFSQuotaPeriod sets CPU CFS quota period value, cpu.cfs_period_us, defaults to Linux Kernel default + description: CPUCFSQuotaPeriod sets CPU CFS quota period value, + cpu.cfs_period_us, defaults to Linux Kernel default type: string cpuManagerPolicy: - description: CpuManagerPolicy allows for changing the default policy of None to static + description: CpuManagerPolicy allows for changing the default + policy of None to static type: string dockerDisableSharedPID: - description: DockerDisableSharedPID uses a shared PID namespace for containers in a pod. + description: DockerDisableSharedPID uses a shared PID namespace + for containers in a pod. type: boolean enableCustomMetrics: description: Enable gathering custom metrics. type: boolean enableDebuggingHandlers: - description: EnableDebuggingHandlers enables server endpoints for log collection and local running of containers and commands + description: EnableDebuggingHandlers enables server endpoints + for log collection and local running of containers and commands type: boolean enforceNodeAllocatable: - description: Enforce Allocatable across pods whenever the overall usage across all pods exceeds Allocatable. + description: Enforce Allocatable across pods whenever the overall + usage across all pods exceeds Allocatable. type: string evictionHard: - description: Comma-delimited list of hard eviction expressions. For example, 'memory.available<300Mi'. + description: Comma-delimited list of hard eviction expressions. For + example, 'memory.available<300Mi'. type: string evictionMaxPodGracePeriod: - description: Maximum allowed grace period (in seconds) to use when terminating pods in response to a soft eviction threshold being met. + description: Maximum allowed grace period (in seconds) to use + when terminating pods in response to a soft eviction threshold + being met. format: int32 type: integer evictionMinimumReclaim: - description: Comma-delimited list of minimum reclaims (e.g. imagefs.available=2Gi) that describes the minimum amount of resource the kubelet will reclaim when performing a pod eviction if that resource is under pressure. + description: Comma-delimited list of minimum reclaims (e.g. imagefs.available=2Gi) + that describes the minimum amount of resource the kubelet will + reclaim when performing a pod eviction if that resource is under + pressure. type: string evictionPressureTransitionPeriod: - description: Duration for which the kubelet has to wait before transitioning out of an eviction pressure condition. + description: Duration for which the kubelet has to wait before + transitioning out of an eviction pressure condition. type: string evictionSoft: - description: Comma-delimited list of soft eviction expressions. For example, 'memory.available<300Mi'. + description: Comma-delimited list of soft eviction expressions. For + example, 'memory.available<300Mi'. type: string evictionSoftGracePeriod: - description: Comma-delimited list of grace periods for each soft eviction signal. For example, 'memory.available=30s'. + description: Comma-delimited list of grace periods for each soft + eviction signal. For example, 'memory.available=30s'. type: string experimentalAllowedUnsafeSysctls: - description: ExperimentalAllowedUnsafeSysctls are passed to the kubelet config to whitelist allowable sysctls Was promoted to beta and renamed. https://github.com/kubernetes/kubernetes/pull/63717 + description: ExperimentalAllowedUnsafeSysctls are passed to the + kubelet config to whitelist allowable sysctls Was promoted to + beta and renamed. https://github.com/kubernetes/kubernetes/pull/63717 items: type: string type: array failSwapOn: - description: Tells the Kubelet to fail to start if swap is enabled on the node. + description: Tells the Kubelet to fail to start if swap is enabled + on the node. type: boolean featureGates: additionalProperties: type: string - description: FeatureGates is set of key=value pairs that describe feature gates for alpha/experimental features. + description: FeatureGates is set of key=value pairs that describe + feature gates for alpha/experimental features. type: object hairpinMode: - description: 'How should the kubelet configure the container bridge for hairpin packets. Setting this flag allows endpoints in a Service to loadbalance back to themselves if they should try to access their own Service. Values: "promiscuous-bridge": make the container bridge promiscuous. "hairpin-veth": set the hairpin flag on container veth interfaces. "none": do nothing. Setting --configure-cbr0 to false implies that to achieve hairpin NAT one must set --hairpin-mode=veth-flag, because bridge assumes the existence of a container bridge named cbr0.' + description: 'How should the kubelet configure the container bridge + for hairpin packets. Setting this flag allows endpoints in a + Service to loadbalance back to themselves if they should try + to access their own Service. Values: "promiscuous-bridge": + make the container bridge promiscuous. "hairpin-veth": set + the hairpin flag on container veth interfaces. "none": do + nothing. Setting --configure-cbr0 to false implies that to achieve + hairpin NAT one must set --hairpin-mode=veth-flag, because bridge + assumes the existence of a container bridge named cbr0.' type: string hostnameOverride: - description: HostnameOverride is the hostname used to identify the kubelet instead of the actual hostname. + description: HostnameOverride is the hostname used to identify + the kubelet instead of the actual hostname. type: string housekeepingInterval: - description: HousekeepingInterval allows to specify interval between container housekeepings. + description: HousekeepingInterval allows to specify interval between + container housekeepings. type: string imageGCHighThresholdPercent: - description: ImageGCHighThresholdPercent is the percent of disk usage after which image garbage collection is always run. + description: ImageGCHighThresholdPercent is the percent of disk + usage after which image garbage collection is always run. format: int32 type: integer imageGCLowThresholdPercent: - description: ImageGCLowThresholdPercent is the percent of disk usage before which image garbage collection is never run. Lowest disk usage to garbage collect to. + description: ImageGCLowThresholdPercent is the percent of disk + usage before which image garbage collection is never run. Lowest + disk usage to garbage collect to. format: int32 type: integer imagePullProgressDeadline: - description: ImagePullProgressDeadline is the timeout for image pulls If no pulling progress is made before this deadline, the image pulling will be cancelled. (default 1m0s) + description: ImagePullProgressDeadline is the timeout for image + pulls If no pulling progress is made before this deadline, the + image pulling will be cancelled. (default 1m0s) type: string kubeReserved: additionalProperties: type: string - description: Resource reservation for kubernetes system daemons like the kubelet, container runtime, node problem detector, etc. + description: Resource reservation for kubernetes system daemons + like the kubelet, container runtime, node problem detector, + etc. type: object kubeReservedCgroup: description: Control group for kube daemons. type: string kubeconfigPath: - description: KubeconfigPath is the path of kubeconfig for the kubelet + description: KubeconfigPath is the path of kubeconfig for the + kubelet type: string kubeletCgroups: - description: KubeletCgroups is the absolute name of cgroups to isolate the kubelet in. + description: KubeletCgroups is the absolute name of cgroups to + isolate the kubelet in. type: string logLevel: description: LogLevel is the logging level of the kubelet format: int32 type: integer maxPods: - description: MaxPods is the number of pods that can run on this Kubelet. + description: MaxPods is the number of pods that can run on this + Kubelet. format: int32 type: integer networkPluginMTU: - description: NetworkPluginMTU is the MTU to be passed to the network plugin, and overrides the default MTU for cases where it cannot be automatically computed (such as IPSEC). + description: NetworkPluginMTU is the MTU to be passed to the network + plugin, and overrides the default MTU for cases where it cannot + be automatically computed (such as IPSEC). format: int32 type: integer networkPluginName: - description: NetworkPluginName is the name of the network plugin to be invoked for various events in kubelet/pod lifecycle + description: NetworkPluginName is the name of the network plugin + to be invoked for various events in kubelet/pod lifecycle type: string nodeLabels: additionalProperties: type: string - description: NodeLabels to add when registering the node in the cluster. + description: NodeLabels to add when registering the node in the + cluster. type: object nodeStatusUpdateFrequency: - description: NodeStatusUpdateFrequency Specifies how often kubelet posts node status to master (default 10s) must work with nodeMonitorGracePeriod in KubeControllerManagerConfig. + description: NodeStatusUpdateFrequency Specifies how often kubelet + posts node status to master (default 10s) must work with nodeMonitorGracePeriod + in KubeControllerManagerConfig. type: string nonMasqueradeCIDR: - description: 'NonMasqueradeCIDR configures masquerading: traffic to IPs outside this range will use IP masquerade.' + description: 'NonMasqueradeCIDR configures masquerading: traffic + to IPs outside this range will use IP masquerade.' type: string nvidiaGPUs: - description: NvidiaGPUs is the number of NVIDIA GPU devices on this node. + description: NvidiaGPUs is the number of NVIDIA GPU devices on + this node. format: int32 type: integer podCIDR: - description: PodCIDR is the CIDR to use for pod IP addresses, only used in standalone mode. In cluster mode, this is obtained from the master. + description: PodCIDR is the CIDR to use for pod IP addresses, + only used in standalone mode. In cluster mode, this is obtained + from the master. type: string podInfraContainerImage: - description: PodInfraContainerImage is the image whose network/ipc containers in each pod will use. + description: PodInfraContainerImage is the image whose network/ipc + containers in each pod will use. type: string podManifestPath: - description: config is the path to the config file or directory of files + description: config is the path to the config file or directory + of files type: string protectKernelDefaults: - description: 'Default kubelet behaviour for kernel tuning. If set, kubelet errors if any of kernel tunables is different than kubelet defaults. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet''s --config flag.' + description: 'Default kubelet behaviour for kernel tuning. If + set, kubelet errors if any of kernel tunables is different than + kubelet defaults. (DEPRECATED: This parameter should be set + via the config file specified by the Kubelet''s --config flag.' type: boolean readOnlyPort: - description: ReadOnlyPort is the port used by the kubelet api for read-only access (default 10255) + description: ReadOnlyPort is the port used by the kubelet api + for read-only access (default 10255) format: int32 type: integer reconcileCIDR: - description: ReconcileCIDR is Reconcile node CIDR with the CIDR specified by the API server. No-op if register-node or configure-cbr0 is false. + description: ReconcileCIDR is Reconcile node CIDR with the CIDR + specified by the API server. No-op if register-node or configure-cbr0 + is false. type: boolean registerNode: - description: RegisterNode enables automatic registration with the apiserver. + description: RegisterNode enables automatic registration with + the apiserver. type: boolean registerSchedulable: - description: registerSchedulable tells the kubelet to register the node as schedulable. No-op if register-node is false. + description: registerSchedulable tells the kubelet to register + the node as schedulable. No-op if register-node is false. type: boolean registryBurst: - description: RegistryBurst Maximum size of a bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding registry-qps. Only used if --registry-qps > 0 (default 10) + description: RegistryBurst Maximum size of a bursty pulls, temporarily + allows pulls to burst to this number, while still not exceeding + registry-qps. Only used if --registry-qps > 0 (default 10) format: int32 type: integer registryPullQPS: - description: RegistryPullQPS if > 0, limit registry pull QPS to this value. If 0, unlimited. (default 5) + description: RegistryPullQPS if > 0, limit registry pull QPS to + this value. If 0, unlimited. (default 5) format: int32 type: integer requireKubeconfig: description: RequireKubeconfig indicates a kubeconfig is required type: boolean resolvConf: - description: ResolverConfig is the resolver configuration file used as the basis for the container DNS resolution configuration."), [] + description: ResolverConfig is the resolver configuration file + used as the basis for the container DNS resolution configuration."), + [] type: string rootDir: - description: RootDir is the directory path for managing kubelet files (volume mounts,etc) + description: RootDir is the directory path for managing kubelet + files (volume mounts,etc) type: string rotateCertificates: description: rotateCertificates enables client certificate rotation. type: boolean runtimeCgroups: - description: Cgroups that container runtime is expected to be isolated in. + description: Cgroups that container runtime is expected to be + isolated in. type: string runtimeRequestTimeout: - description: RuntimeRequestTimeout is timeout for runtime requests on - pull, logs, exec and attach + description: RuntimeRequestTimeout is timeout for runtime requests + on - pull, logs, exec and attach type: string seccompProfileRoot: - description: SeccompProfileRoot is the directory path for seccomp profiles. + description: SeccompProfileRoot is the directory path for seccomp + profiles. type: string serializeImagePulls: - description: '// SerializeImagePulls when enabled, tells the Kubelet to pull images one // at a time. We recommend *not* changing the default value on nodes that // run docker daemon with version < 1.9 or an Aufs storage backend. // Issue #10959 has more details.' + description: '// SerializeImagePulls when enabled, tells the Kubelet + to pull images one // at a time. We recommend *not* changing + the default value on nodes that // run docker daemon with version < + 1.9 or an Aufs storage backend. // Issue #10959 has more details.' type: boolean streamingConnectionIdleTimeout: - description: StreamingConnectionIdleTimeout is the maximum time a streaming connection can be idle before the connection is automatically closed + description: StreamingConnectionIdleTimeout is the maximum time + a streaming connection can be idle before the connection is + automatically closed type: string systemCgroups: - description: SystemCgroups is absolute name of cgroups in which to place all non-kernel processes that are not already in a container. Empty for no container. Rolling back the flag requires a reboot. + description: SystemCgroups is absolute name of cgroups in which + to place all non-kernel processes that are not already in a + container. Empty for no container. Rolling back the flag requires + a reboot. type: string systemReserved: additionalProperties: type: string - description: Capture resource reservation for OS system daemons like sshd, udev, etc. + description: Capture resource reservation for OS system daemons + like sshd, udev, etc. type: object systemReservedCgroup: description: Parent control group for OS system daemons. @@ -2126,7 +2765,8 @@ spec: description: 'TODO: Remove unused TLSCertFile' type: string tlsCipherSuites: - description: TLSCipherSuites indicates the allowed TLS cipher suite + description: TLSCipherSuites indicates the allowed TLS cipher + suite items: type: string type: array @@ -2137,17 +2777,23 @@ spec: description: 'TODO: Remove unused TLSPrivateKeyFile' type: string topologyManagerPolicy: - description: TopologyManagerPolicy determines the allocation policy for the topology manager. + description: TopologyManagerPolicy determines the allocation policy + for the topology manager. type: string volumePluginDirectory: - description: The full path of the directory in which to search for additional third party volume plugins (this path must be writeable, dependent on your choice of OS) + description: The full path of the directory in which to search + for additional third party volume plugins (this path must be + writeable, dependent on your choice of OS) type: string volumeStatsAggPeriod: - description: VolumeStatsAggPeriod is the interval for kubelet to calculate and cache the volume disk usage for all pods and volumes + description: VolumeStatsAggPeriod is the interval for kubelet + to calculate and cache the volume disk usage for all pods and + volumes type: string type: object masterPublicName: - description: MasterPublicName is the external DNS name for the master nodes + description: MasterPublicName is the external DNS name for the master + nodes type: string metricsServer: description: MetricsServer determines the metrics server configuration. @@ -2156,31 +2802,48 @@ spec: description: 'Enabled enables the metrics server. Default: false' type: boolean image: - description: 'Image is the docker container used. Default: the latest supported image for the specified kubernetes version.' + description: 'Image is the docker container used. Default: the + latest supported image for the specified kubernetes version.' type: string type: object networkCIDR: - description: NetworkCIDR is the CIDR used for the AWS VPC / GCE Network, or otherwise allocated to k8s This is a real CIDR, not the internal k8s network On AWS, it maps to the VPC CIDR. It is not required on GCE. + description: NetworkCIDR is the CIDR used for the AWS VPC / GCE Network, + or otherwise allocated to k8s This is a real CIDR, not the internal + k8s network On AWS, it maps to the VPC CIDR. It is not required + on GCE. type: string networkID: - description: NetworkID is an identifier of a network, if we want to reuse/share an existing network (e.g. an AWS VPC) + description: NetworkID is an identifier of a network, if we want to + reuse/share an existing network (e.g. an AWS VPC) type: string networking: description: Networking configuration properties: amazonvpc: - description: AmazonVPCNetworkingSpec declares that we want Amazon VPC CNI networking + description: AmazonVPCNetworkingSpec declares that we want Amazon + VPC CNI networking properties: env: - description: Env is a list of environment variables to set in the container. + description: Env is a list of environment variables to set + in the container. items: - description: EnvVar represents an environment variable present in a Container. + description: EnvVar represents an environment variable present + in a Container. properties: name: - description: Name of the environment variable. Must be a C_IDENTIFIER. + description: Name of the environment variable. Must + be a C_IDENTIFIER. type: string value: - description: 'Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to "".' + description: 'Variable references $(VAR_NAME) are expanded + using the previous defined environment variables in + the container and any service environment variables. + If a variable cannot be resolved, the reference in + the input string will be unchanged. The $(VAR_NAME) + syntax can be escaped with a double $$, ie: $$(VAR_NAME). + Escaped references will never be expanded, regardless + of whether the variable exists or not. Defaults to + "".' type: string required: - name @@ -2191,436 +2854,620 @@ spec: type: string type: object calico: - description: CalicoNetworkingSpec declares that we want Calico networking + description: CalicoNetworkingSpec declares that we want Calico + networking properties: awsSrcDstCheck: - description: 'AwsSrcDstCheck enables/disables source/destination checks (AWS only) Options: "DoNothing" (default) , "Enable" or "Disable"' + description: 'AwsSrcDstCheck enables/disables source/destination + checks (AWS only) Options: "DoNothing" (default) , "Enable" + or "Disable"' type: string bpfEnabled: description: BpfEnabled enables the eBPF dataplane mode. type: boolean bpfExternalServiceMode: - description: 'BPFExternalServiceMode controls how traffic from outside the cluster to NodePorts and ClusterIPs is handled. In Tunnel mode, packet is tunneled from the ingress host to the host with the backing pod and back again. In DSR mode, traffic is tunneled to the host with the backing pod and then returned directly; this requires a network that allows direct return. Default: Tunnel (other options: DSR)' + description: 'BPFExternalServiceMode controls how traffic + from outside the cluster to NodePorts and ClusterIPs is + handled. In Tunnel mode, packet is tunneled from the ingress + host to the host with the backing pod and back again. In + DSR mode, traffic is tunneled to the host with the backing + pod and then returned directly; this requires a network + that allows direct return. Default: Tunnel (other options: + DSR)' type: string bpfKubeProxyIptablesCleanupEnabled: - description: BPFKubeProxyIptablesCleanupEnabled controls whether Felix will clean up the iptables rules created by the Kubernetes kube-proxy; should only be enabled if kube-proxy is not running. + description: BPFKubeProxyIptablesCleanupEnabled controls whether + Felix will clean up the iptables rules created by the Kubernetes + kube-proxy; should only be enabled if kube-proxy is not + running. type: boolean bpfLogLevel: - description: 'BPFLogLevel controls the log level used by the BPF programs. The logs are emitted to the BPF trace pipe, accessible with the command tc exec BPF debug. Default: Off (other options: Info, Debug)' + description: 'BPFLogLevel controls the log level used by the + BPF programs. The logs are emitted to the BPF trace pipe, + accessible with the command tc exec BPF debug. Default: + Off (other options: Info, Debug)' type: string chainInsertMode: - description: 'ChainInsertMode controls whether Felix inserts rules to the top of iptables chains, or appends to the bottom. Leaving the default option is safest to prevent accidentally breaking connectivity. Default: ''insert'' (other options: ''append'')' + description: 'ChainInsertMode controls whether Felix inserts + rules to the top of iptables chains, or appends to the bottom. + Leaving the default option is safest to prevent accidentally + breaking connectivity. Default: ''insert'' (other options: + ''append'')' type: string cpuRequest: anyOf: - type: integer - type: string - description: 'CPURequest CPU request of Calico container. Default: 100m' + description: 'CPURequest CPU request of Calico container. + Default: 100m' pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true crossSubnet: - description: CrossSubnet enables Calico's cross-subnet mode when set to true + description: CrossSubnet enables Calico's cross-subnet mode + when set to true type: boolean ipipMode: description: IPIPMode is mode for CALICO_IPV4POOL_IPIP type: string iptablesBackend: - description: 'IptablesBackend controls which variant of iptables binary Felix uses Default: Auto (other options: Legacy, NFT)' + description: 'IptablesBackend controls which variant of iptables + binary Felix uses Default: Auto (other options: Legacy, + NFT)' type: string ipv4AutoDetectionMethod: - description: 'IPv4AutoDetectionMethod configures how Calico chooses the IP address used to route between nodes. This should be set when the host has multiple interfaces and it is important to select the interface used. Options: "first-found" (default), "can-reach=DESTINATION", "interface=INTERFACE-REGEX", or "skip-interface=INTERFACE-REGEX"' + description: 'IPv4AutoDetectionMethod configures how Calico + chooses the IP address used to route between nodes. This + should be set when the host has multiple interfaces and + it is important to select the interface used. Options: "first-found" + (default), "can-reach=DESTINATION", "interface=INTERFACE-REGEX", + or "skip-interface=INTERFACE-REGEX"' type: string ipv6AutoDetectionMethod: - description: 'IPv6AutoDetectionMethod configures how Calico chooses the IP address used to route between nodes. This should be set when the host has multiple interfaces and it is important to select the interface used. Options: "first-found" (default), "can-reach=DESTINATION", "interface=INTERFACE-REGEX", or "skip-interface=INTERFACE-REGEX"' + description: 'IPv6AutoDetectionMethod configures how Calico + chooses the IP address used to route between nodes. This + should be set when the host has multiple interfaces and + it is important to select the interface used. Options: "first-found" + (default), "can-reach=DESTINATION", "interface=INTERFACE-REGEX", + or "skip-interface=INTERFACE-REGEX"' type: string logSeverityScreen: - description: 'LogSeverityScreen lets us set the desired log level. (Default: info)' + description: 'LogSeverityScreen lets us set the desired log + level. (Default: info)' type: string majorVersion: - description: MajorVersion is deprecated as of kOps 1.20 and has no effect + description: MajorVersion is deprecated as of kOps 1.20 and + has no effect type: string mtu: description: MTU to be set in the cni-network-config for calico. format: int32 type: integer prometheusGoMetricsEnabled: - description: PrometheusGoMetricsEnabled enables Prometheus Go runtime metrics collection + description: PrometheusGoMetricsEnabled enables Prometheus + Go runtime metrics collection type: boolean prometheusMetricsEnabled: - description: 'PrometheusMetricsEnabled can be set to enable the experimental Prometheus metrics server (default: false)' + description: 'PrometheusMetricsEnabled can be set to enable + the experimental Prometheus metrics server (default: false)' type: boolean prometheusMetricsPort: - description: 'PrometheusMetricsPort is the TCP port that the experimental Prometheus metrics server should bind to (default: 9091)' + description: 'PrometheusMetricsPort is the TCP port that the + experimental Prometheus metrics server should bind to (default: + 9091)' format: int32 type: integer prometheusProcessMetricsEnabled: - description: PrometheusProcessMetricsEnabled enables Prometheus process metrics collection + description: PrometheusProcessMetricsEnabled enables Prometheus + process metrics collection type: boolean typhaPrometheusMetricsEnabled: - description: 'TyphaPrometheusMetricsEnabled enables Prometheus metrics collection from Typha (default: false)' + description: 'TyphaPrometheusMetricsEnabled enables Prometheus + metrics collection from Typha (default: false)' type: boolean typhaPrometheusMetricsPort: - description: 'TyphaPrometheusMetricsPort is the TCP port the typha Prometheus metrics server should bind to (default: 9093)' + description: 'TyphaPrometheusMetricsPort is the TCP port the + typha Prometheus metrics server should bind to (default: + 9093)' format: int32 type: integer typhaReplicas: - description: TyphaReplicas is the number of replicas of Typha to deploy + description: TyphaReplicas is the number of replicas of Typha + to deploy format: int32 type: integer wireguardEnabled: - description: 'WireguardEnabled enables WireGuard encryption for all on-the-wire pod-to-pod traffic (default: false)' + description: 'WireguardEnabled enables WireGuard encryption + for all on-the-wire pod-to-pod traffic (default: false)' type: boolean type: object canal: description: CanalNetworkingSpec declares that we want Canal networking properties: chainInsertMode: - description: 'ChainInsertMode controls whether Felix inserts rules to the top of iptables chains, or appends to the bottom. Leaving the default option is safest to prevent accidentally breaking connectivity. Default: ''insert'' (other options: ''append'')' + description: 'ChainInsertMode controls whether Felix inserts + rules to the top of iptables chains, or appends to the bottom. + Leaving the default option is safest to prevent accidentally + breaking connectivity. Default: ''insert'' (other options: + ''append'')' type: string cpuRequest: anyOf: - type: integer - type: string - description: 'CPURequest CPU request of Canal container. Default: 100m' + description: 'CPURequest CPU request of Canal container. Default: + 100m' pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true defaultEndpointToHostAction: - description: 'DefaultEndpointToHostAction allows users to configure the default behaviour for traffic between pod to host after calico rules have been processed. Default: ACCEPT (other options: DROP, RETURN)' + description: 'DefaultEndpointToHostAction allows users to + configure the default behaviour for traffic between pod + to host after calico rules have been processed. Default: + ACCEPT (other options: DROP, RETURN)' type: string disableFlannelForwardRules: - description: DisableFlannelForwardRules configures Flannel to NOT add the default ACCEPT traffic rules to the iptables FORWARD chain + description: DisableFlannelForwardRules configures Flannel + to NOT add the default ACCEPT traffic rules to the iptables + FORWARD chain type: boolean disableTxChecksumOffloading: - description: DisableTxChecksumOffloading is deprecated as of kops 1.19 and has no effect + description: DisableTxChecksumOffloading is deprecated as + of kops 1.19 and has no effect type: boolean iptablesBackend: - description: 'IptablesBackend controls which variant of iptables binary Felix uses Default: Auto (other options: Legacy, NFT)' + description: 'IptablesBackend controls which variant of iptables + binary Felix uses Default: Auto (other options: Legacy, + NFT)' type: string logSeveritySys: - description: 'LogSeveritySys the severity to set for logs which are sent to syslog Default: INFO (other options: DEBUG, WARNING, ERROR, CRITICAL, NONE)' + description: 'LogSeveritySys the severity to set for logs + which are sent to syslog Default: INFO (other options: DEBUG, + WARNING, ERROR, CRITICAL, NONE)' type: string mtu: - description: 'MTU to be set in the cni-network-config (default: 1500)' + description: 'MTU to be set in the cni-network-config (default: + 1500)' format: int32 type: integer prometheusGoMetricsEnabled: - description: PrometheusGoMetricsEnabled enables Prometheus Go runtime metrics collection + description: PrometheusGoMetricsEnabled enables Prometheus + Go runtime metrics collection type: boolean prometheusMetricsEnabled: - description: 'PrometheusMetricsEnabled can be set to enable the experimental Prometheus metrics server (default: false)' + description: 'PrometheusMetricsEnabled can be set to enable + the experimental Prometheus metrics server (default: false)' type: boolean prometheusMetricsPort: - description: 'PrometheusMetricsPort is the TCP port that the experimental Prometheus metrics server should bind to (default: 9091)' + description: 'PrometheusMetricsPort is the TCP port that the + experimental Prometheus metrics server should bind to (default: + 9091)' format: int32 type: integer prometheusProcessMetricsEnabled: - description: PrometheusProcessMetricsEnabled enables Prometheus process metrics collection + description: PrometheusProcessMetricsEnabled enables Prometheus + process metrics collection type: boolean typhaPrometheusMetricsEnabled: - description: 'TyphaPrometheusMetricsEnabled enables Prometheus metrics collection from Typha (default: false)' + description: 'TyphaPrometheusMetricsEnabled enables Prometheus + metrics collection from Typha (default: false)' type: boolean typhaPrometheusMetricsPort: - description: 'TyphaPrometheusMetricsPort is the TCP port the typha Prometheus metrics server should bind to (default: 9093)' + description: 'TyphaPrometheusMetricsPort is the TCP port the + typha Prometheus metrics server should bind to (default: + 9093)' format: int32 type: integer typhaReplicas: - description: TyphaReplicas is the number of replicas of Typha to deploy + description: TyphaReplicas is the number of replicas of Typha + to deploy format: int32 type: integer type: object cilium: - description: CiliumNetworkingSpec declares that we want Cilium networking + description: CiliumNetworkingSpec declares that we want Cilium + networking properties: IPTablesRulesNoinstall: - description: 'IPTablesRulesNoinstall disables installing the base IPTables rules used for masquerading and kube-proxy. Default: false' + description: 'IPTablesRulesNoinstall disables installing the + base IPTables rules used for masquerading and kube-proxy. + Default: false' type: boolean accessLog: - description: AccessLog is not implemented and may be removed in the future. Setting this has no effect. + description: AccessLog is not implemented and may be removed + in the future. Setting this has no effect. type: string agentLabels: - description: AgentLabels is not implemented and may be removed in the future. Setting this has no effect. + description: AgentLabels is not implemented and may be removed + in the future. Setting this has no effect. items: type: string type: array agentPrometheusPort: - description: AgentPrometheusPort is the port to listen to for Prometheus metrics. Defaults to 9090. + description: AgentPrometheusPort is the port to listen to + for Prometheus metrics. Defaults to 9090. type: integer allowLocalhost: - description: AllowLocalhost is not implemented and may be removed in the future. Setting this has no effect. + description: AllowLocalhost is not implemented and may be + removed in the future. Setting this has no effect. type: string autoDirectNodeRoutes: - description: 'AutoDirectNodeRoutes adds automatic L2 routing between nodes. Default: false' + description: 'AutoDirectNodeRoutes adds automatic L2 routing + between nodes. Default: false' type: boolean autoIpv6NodeRoutes: - description: AutoIpv6NodeRoutes is not implemented and may be removed in the future. Setting this has no effect. + description: AutoIpv6NodeRoutes is not implemented and may + be removed in the future. Setting this has no effect. type: boolean bpfCTGlobalAnyMax: - description: 'BPFCTGlobalAnyMax is the maximum number of entries in the non-TCP CT table. Default: 262144' + description: 'BPFCTGlobalAnyMax is the maximum number of entries + in the non-TCP CT table. Default: 262144' type: integer bpfCTGlobalTCPMax: - description: 'BPFCTGlobalTCPMax is the maximum number of entries in the TCP CT table. Default: 524288' + description: 'BPFCTGlobalTCPMax is the maximum number of entries + in the TCP CT table. Default: 524288' type: integer bpfRoot: - description: BPFRoot is not implemented and may be removed in the future. Setting this has no effect. + description: BPFRoot is not implemented and may be removed + in the future. Setting this has no effect. type: string clusterName: - description: ClusterName is the name of the cluster. It is only relevant when building a mesh of clusters. + description: ClusterName is the name of the cluster. It is + only relevant when building a mesh of clusters. type: string cniBinPath: - description: CniBinPath is not implemented and may be removed in the future. Setting this has no effect. + description: CniBinPath is not implemented and may be removed + in the future. Setting this has no effect. type: string containerRuntime: - description: ContainerRuntime is not implemented and may be removed in the future. Setting this has no effect. + description: ContainerRuntime is not implemented and may be + removed in the future. Setting this has no effect. items: type: string type: array containerRuntimeEndpoint: additionalProperties: type: string - description: ContainerRuntimeEndpoint is not implemented and may be removed in the future. Setting this has no effect. + description: ContainerRuntimeEndpoint is not implemented and + may be removed in the future. Setting this has no effect. type: object containerRuntimeLabels: - description: 'ContainerRuntimeLabels enables fetching of container-runtime labels from the specified container runtime and associating them with endpoints. Supported values are: "none", "containerd", "crio", "docker", "auto" As of Cilium 1.7.0, Cilium no longer fetches information from the container runtime and this field is ignored. Default: none' + description: 'ContainerRuntimeLabels enables fetching of container-runtime + labels from the specified container runtime and associating + them with endpoints. Supported values are: "none", "containerd", + "crio", "docker", "auto" As of Cilium 1.7.0, Cilium no longer + fetches information from the container runtime and this + field is ignored. Default: none' type: string debug: description: Debug runs Cilium in debug mode. type: boolean debugVerbose: - description: DebugVerbose is not implemented and may be removed in the future. Setting this has no effect. + description: DebugVerbose is not implemented and may be removed + in the future. Setting this has no effect. items: type: string type: array device: - description: Device is not implemented and may be removed in the future. Setting this has no effect. + description: Device is not implemented and may be removed + in the future. Setting this has no effect. type: string disableConntrack: - description: DisableConntrack is not implemented and may be removed in the future. Setting this has no effect. + description: DisableConntrack is not implemented and may be + removed in the future. Setting this has no effect. type: boolean disableIpv4: - description: 'DisableIpv4 is deprecated: Use EnableIpv4 instead. Setting this flag has no effect.' + description: 'DisableIpv4 is deprecated: Use EnableIpv4 instead. + Setting this flag has no effect.' type: boolean disableK8sServices: - description: DisableK8sServices is not implemented and may be removed in the future. Setting this has no effect. + description: DisableK8sServices is not implemented and may + be removed in the future. Setting this has no effect. type: boolean disableMasquerade: - description: DisableMasquerade disables masquerading traffic to external destinations behind the node IP. + description: DisableMasquerade disables masquerading traffic + to external destinations behind the node IP. type: boolean enableEncryption: - description: 'EnableEncryption enables Cilium Encryption. Default: false' + description: 'EnableEncryption enables Cilium Encryption. + Default: false' type: boolean enableNodePort: - description: 'EnableNodePort replaces kube-proxy with Cilium''s BPF implementation. Requires spec.kubeProxy.enabled be set to false. Default: false' + description: 'EnableNodePort replaces kube-proxy with Cilium''s + BPF implementation. Requires spec.kubeProxy.enabled be set + to false. Default: false' type: boolean enablePolicy: - description: 'EnablePolicy specifies the policy enforcement mode. "default": Follows Kubernetes policy enforcement. "always": Cilium restricts all traffic if no policy is in place. "never": Cilium allows all traffic regardless of policies in place. If unspecified, "default" policy mode will be used.' + description: 'EnablePolicy specifies the policy enforcement + mode. "default": Follows Kubernetes policy enforcement. + "always": Cilium restricts all traffic if no policy is in + place. "never": Cilium allows all traffic regardless of + policies in place. If unspecified, "default" policy mode + will be used.' type: string enablePrometheusMetrics: - description: EnablePrometheusMetrics enables the Cilium "/metrics" endpoint for both the agent and the operator. + description: EnablePrometheusMetrics enables the Cilium "/metrics" + endpoint for both the agent and the operator. type: boolean enableRemoteNodeIdentity: - description: 'EnableRemoteNodeIdentity enables the remote-node-identity added in Cilium 1.7.0. Default: false' + description: 'EnableRemoteNodeIdentity enables the remote-node-identity + added in Cilium 1.7.0. Default: false' type: boolean enableTracing: - description: EnableTracing is not implemented and may be removed in the future. Setting this has no effect. + description: EnableTracing is not implemented and may be removed + in the future. Setting this has no effect. type: boolean enableipv4: - description: EnableIpv4 is not implemented and may be removed in the future. Setting this has no effect. + description: EnableIpv4 is not implemented and may be removed + in the future. Setting this has no effect. type: boolean enableipv6: - description: EnableIpv6 is not implemented and may be removed in the future. Setting this has no effect. + description: EnableIpv6 is not implemented and may be removed + in the future. Setting this has no effect. type: boolean envoyLog: - description: EnvoyLog is not implemented and may be removed in the future. Setting this has no effect. + description: EnvoyLog is not implemented and may be removed + in the future. Setting this has no effect. type: string etcdManaged: - description: 'EtcdManagd installs an additional etcd cluster that is used for Cilium state change. The cluster is operated by cilium-etcd-operator. Default: false' + description: 'EtcdManagd installs an additional etcd cluster + that is used for Cilium state change. The cluster is operated + by cilium-etcd-operator. Default: false' type: boolean hubble: - description: Hubble configures the Hubble service on the Cilium agent. + description: Hubble configures the Hubble service on the Cilium + agent. properties: enabled: - description: Enabled specifies whether Hubble is enabled on the agent. + description: Enabled specifies whether Hubble is enabled + on the agent. type: boolean metrics: - description: Metrics is a list of metrics to collect. If empty or null, metrics are disabled. See https://docs.cilium.io/en/stable/configuration/metrics/#hubble-exported-metrics + description: Metrics is a list of metrics to collect. + If empty or null, metrics are disabled. See https://docs.cilium.io/en/stable/configuration/metrics/#hubble-exported-metrics items: type: string type: array type: object ipam: - description: Ipam specifies the IP address allocation mode to use. Possible values are "crd" and "eni". "eni" will use AWS native networking for pods. Eni requires masquerade to be set to false. "crd" will use CRDs for controlling IP address management. "hostscope" will use hostscope IPAM mode. "kubernetes" will use addersing based on node pod CIDR. Empty value will use host-scope address management. + description: Ipam specifies the IP address allocation mode + to use. Possible values are "crd" and "eni". "eni" will + use AWS native networking for pods. Eni requires masquerade + to be set to false. "crd" will use CRDs for controlling + IP address management. "hostscope" will use hostscope IPAM + mode. "kubernetes" will use addersing based on node pod + CIDR. Empty value will use host-scope address management. type: string ipv4ClusterCidrMaskSize: - description: Ipv4ClusterCIDRMaskSize is not implemented and may be removed in the future. Setting this has no effect. + description: Ipv4ClusterCIDRMaskSize is not implemented and + may be removed in the future. Setting this has no effect. type: integer ipv4Node: - description: Ipv4Node is not implemented and may be removed in the future. Setting this has no effect. + description: Ipv4Node is not implemented and may be removed + in the future. Setting this has no effect. type: string ipv4Range: - description: Ipv4Range is not implemented and may be removed in the future. Setting this has no effect. + description: Ipv4Range is not implemented and may be removed + in the future. Setting this has no effect. type: string ipv4ServiceRange: - description: Ipv4ServiceRange is not implemented and may be removed in the future. Setting this has no effect. + description: Ipv4ServiceRange is not implemented and may be + removed in the future. Setting this has no effect. type: string ipv6ClusterAllocCidr: - description: Ipv6ClusterAllocCidr is not implemented and may be removed in the future. Setting this has no effect. + description: Ipv6ClusterAllocCidr is not implemented and may + be removed in the future. Setting this has no effect. type: string ipv6Node: - description: Ipv6Node is not implemented and may be removed in the future. Setting this has no effect. + description: Ipv6Node is not implemented and may be removed + in the future. Setting this has no effect. type: string ipv6Range: - description: Ipv6Range is not implemented and may be removed in the future. Setting this has no effect. + description: Ipv6Range is not implemented and may be removed + in the future. Setting this has no effect. type: string ipv6ServiceRange: - description: Ipv6ServiceRange is not implemented and may be removed in the future. Setting this has no effect. + description: Ipv6ServiceRange is not implemented and may be + removed in the future. Setting this has no effect. type: string k8sApiServer: - description: K8sAPIServer is not implemented and may be removed in the future. Setting this has no effect. + description: K8sAPIServer is not implemented and may be removed + in the future. Setting this has no effect. type: string k8sKubeconfigPath: - description: K8sKubeconfigPath is not implemented and may be removed in the future. Setting this has no effect. + description: K8sKubeconfigPath is not implemented and may + be removed in the future. Setting this has no effect. type: string keepBpfTemplates: - description: KeepBPFTemplates is not implemented and may be removed in the future. Setting this has no effect. + description: KeepBPFTemplates is not implemented and may be + removed in the future. Setting this has no effect. type: boolean keepConfig: - description: KeepConfig is not implemented and may be removed in the future. Setting this has no effect. + description: KeepConfig is not implemented and may be removed + in the future. Setting this has no effect. type: boolean labelPrefixFile: - description: LabelPrefixFile is not implemented and may be removed in the future. Setting this has currently no effect + description: LabelPrefixFile is not implemented and may be + removed in the future. Setting this has currently no effect type: string labels: - description: Labels is not implemented and may be removed in the future. Setting this has no effect. + description: Labels is not implemented and may be removed + in the future. Setting this has no effect. items: type: string type: array lb: - description: LB is not implemented and may be removed in the future. Setting this has no effect. + description: LB is not implemented and may be removed in the + future. Setting this has no effect. type: string libDir: - description: LibDir is not implemented and may be removed in the future. Setting this has no effect. + description: LibDir is not implemented and may be removed + in the future. Setting this has no effect. type: string logDriver: - description: LogDrivers is not implemented and may be removed in the future. Setting this has no effect. + description: LogDrivers is not implemented and may be removed + in the future. Setting this has no effect. items: type: string type: array logOpt: additionalProperties: type: string - description: LogOpt is not implemented and may be removed in the future. Setting this has no effect. + description: LogOpt is not implemented and may be removed + in the future. Setting this has no effect. type: object logstash: - description: Logstash is not implemented and may be removed in the future. Setting this has no effect. + description: Logstash is not implemented and may be removed + in the future. Setting this has no effect. type: boolean logstashAgent: - description: LogstashAgent is not implemented and may be removed in the future. Setting this has no effect. + description: LogstashAgent is not implemented and may be removed + in the future. Setting this has no effect. type: string logstashProbeTimer: - description: LogstashProbeTimer is not implemented and may be removed in the future. Setting this has no effect. + description: LogstashProbeTimer is not implemented and may + be removed in the future. Setting this has no effect. format: int32 type: integer monitorAggregation: - description: 'MonitorAggregation sets the level of packet monitoring. Possible values are "low", "medium", or "maximum". Default: medium' + description: 'MonitorAggregation sets the level of packet + monitoring. Possible values are "low", "medium", or "maximum". + Default: medium' type: string nat46Range: - description: Nat6Range is not implemented and may be removed in the future. Setting this has no effect. + description: Nat6Range is not implemented and may be removed + in the future. Setting this has no effect. type: string nodeInitBootstrapFile: - description: NodeInitBootstrapFile is not implemented and may be removed in the future. Setting this has no effect. + description: NodeInitBootstrapFile is not implemented and + may be removed in the future. Setting this has no effect. type: string pprof: - description: Pprof is not implemented and may be removed in the future. Setting this has no effect. + description: Pprof is not implemented and may be removed in + the future. Setting this has no effect. type: boolean preallocateBPFMaps: - description: 'PreallocateBPFMaps reduces the per-packet latency at the expense of up-front memory allocation. Default: true' + description: 'PreallocateBPFMaps reduces the per-packet latency + at the expense of up-front memory allocation. Default: true' type: boolean prefilterDevice: - description: PrefilterDevice is not implemented and may be removed in the future. Setting this has no effect. + description: PrefilterDevice is not implemented and may be + removed in the future. Setting this has no effect. type: string prometheusServeAddr: - description: PrometheusServeAddr is deprecated. Use EnablePrometheusMetrics and AgentPrometheusPort instead. Setting this has no effect. + description: PrometheusServeAddr is deprecated. Use EnablePrometheusMetrics + and AgentPrometheusPort instead. Setting this has no effect. type: string reconfigureKubelet: - description: ReconfigureKubelet is not implemented and may be removed in the future. Setting this has no effect. + description: ReconfigureKubelet is not implemented and may + be removed in the future. Setting this has no effect. type: boolean removeCbrBridge: - description: RemoveCbrBridge is not implemented and may be removed in the future. Setting this has no effect. + description: RemoveCbrBridge is not implemented and may be + removed in the future. Setting this has no effect. type: boolean restartPods: - description: RestartPods is not implemented and may be removed in the future. Setting this has no effect. + description: RestartPods is not implemented and may be removed + in the future. Setting this has no effect. type: boolean restore: - description: Restore is not implemented and may be removed in the future. Setting this has no effect. + description: Restore is not implemented and may be removed + in the future. Setting this has no effect. type: boolean sidecarIstioProxyImage: - description: 'SidecarIstioProxyImage is the regular expression matching compatible Istio sidecar istio-proxy container image names. Default: cilium/istio_proxy' + description: 'SidecarIstioProxyImage is the regular expression + matching compatible Istio sidecar istio-proxy container + image names. Default: cilium/istio_proxy' type: string singleClusterRoute: - description: SingleClusterRoute is not implemented and may be removed in the future. Setting this has no effect. + description: SingleClusterRoute is not implemented and may + be removed in the future. Setting this has no effect. type: boolean socketPath: - description: SocketPath is not implemented and may be removed in the future. Setting this has no effect. + description: SocketPath is not implemented and may be removed + in the future. Setting this has no effect. type: string stateDir: - description: StateDir is not implemented and may be removed in the future. Setting this has no effect. + description: StateDir is not implemented and may be removed + in the future. Setting this has no effect. type: string toFqdnsDnsRejectResponseCode: - description: 'ToFqdnsDNSRejectResponseCode sets the DNS response code for rejecting DNS requests. Possible values are "nameError" or "refused". Default: refused' + description: 'ToFqdnsDNSRejectResponseCode sets the DNS response + code for rejecting DNS requests. Possible values are "nameError" + or "refused". Default: refused' type: string toFqdnsEnablePoller: - description: 'ToFqdnsEnablePoller replaces the DNS proxy-based implementation of FQDN policies with the less powerful legacy implementation. Default: false' + description: 'ToFqdnsEnablePoller replaces the DNS proxy-based + implementation of FQDN policies with the less powerful legacy + implementation. Default: false' type: boolean tracePayloadlen: - description: TracePayloadLen is not implemented and may be removed in the future. Setting this has no effect. + description: TracePayloadLen is not implemented and may be + removed in the future. Setting this has no effect. type: integer tunnel: - description: 'Tunnel specifies the Cilium tunnelling mode. Possible values are "vxlan", "geneve", or "disabled". Default: vxlan' + description: 'Tunnel specifies the Cilium tunnelling mode. + Possible values are "vxlan", "geneve", or "disabled". Default: + vxlan' type: string version: - description: Version is the version of the Cilium agent and the Cilium Operator. + description: Version is the version of the Cilium agent and + the Cilium Operator. type: string type: object classic: - description: ClassicNetworkingSpec is the specification of classic networking mode, integrated into kubernetes. Support been removed since kubernetes 1.4. + description: ClassicNetworkingSpec is the specification of classic + networking mode, integrated into kubernetes. Support been removed + since kubernetes 1.4. type: object cni: - description: CNINetworkingSpec is the specification for networking that is implemented by a user-provided Daemonset, which uses the CNI kubelet networking plugin. + description: CNINetworkingSpec is the specification for networking + that is implemented by a user-provided Daemonset, which uses + the CNI kubelet networking plugin. properties: usesSecondaryIP: type: boolean type: object external: - description: ExternalNetworkingSpec is the specification for networking that is implemented by a user-provided Daemonset that uses the Kubenet kubelet networking plugin. + description: ExternalNetworkingSpec is the specification for networking + that is implemented by a user-provided Daemonset that uses the + Kubenet kubelet networking plugin. type: object flannel: - description: FlannelNetworkingSpec declares that we want Flannel networking + description: FlannelNetworkingSpec declares that we want Flannel + networking properties: backend: - description: Backend is the backend overlay type we want to use (vxlan or udp) + description: Backend is the backend overlay type we want to + use (vxlan or udp) type: string disableTxChecksumOffloading: - description: DisableTxChecksumOffloading is deprecated as of kops 1.19 and has no effect + description: DisableTxChecksumOffloading is deprecated as + of kops 1.19 and has no effect type: boolean iptablesResyncSeconds: - description: IptablesResyncSeconds sets resync period for iptables rules, in seconds + description: IptablesResyncSeconds sets resync period for + iptables rules, in seconds format: int32 type: integer type: object gce: - description: GCENetworkingSpec is the specification of GCE's native networking mode, using IP aliases + description: GCENetworkingSpec is the specification of GCE's native + networking mode, using IP aliases type: object kopeio: - description: KopeioNetworkingSpec declares that we want Kopeio networking + description: KopeioNetworkingSpec declares that we want Kopeio + networking type: object kubenet: - description: KubenetNetworkingSpec is the specification for kubenet networking, largely integrated but intended to replace classic + description: KubenetNetworkingSpec is the specification for kubenet + networking, largely integrated but intended to replace classic type: object kuberouter: - description: KuberouterNetworkingSpec declares that we want Kube-router networking + description: KuberouterNetworkingSpec declares that we want Kube-router + networking type: object lyftvpc: - description: LyftIpVlanNetworkingSpec declares that we want to use the cni-ipvlan-vpc-k8s CNI networking + description: LyftIpVlanNetworkingSpec declares that we want to + use the cni-ipvlan-vpc-k8s CNI networking properties: subnetTags: additionalProperties: @@ -2628,13 +3475,17 @@ spec: type: object type: object romana: - description: RomanaNetworkingSpec declares that we want Romana networking Romana is deprecated as of kops 1.18 and removed as of kops 1.19 + description: RomanaNetworkingSpec declares that we want Romana + networking Romana is deprecated as of kops 1.18 and removed + as of kops 1.19 properties: daemonServiceIP: - description: DaemonServiceIP is the Kubernetes Service IP for the romana-daemon pod + description: DaemonServiceIP is the Kubernetes Service IP + for the romana-daemon pod type: string etcdServiceIP: - description: EtcdServiceIP is the Kubernetes Service IP for the etcd backend used by Romana + description: EtcdServiceIP is the Kubernetes Service IP for + the etcd backend used by Romana type: string type: object weave: @@ -2654,28 +3505,32 @@ spec: anyOf: - type: integer - type: string - description: CPURequest CPU request of weave container. Default 50m + description: CPURequest CPU request of weave container. Default + 50m pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memoryLimit: anyOf: - type: integer - type: string - description: MemoryLimit memory limit of weave container. Default 200Mi + description: MemoryLimit memory limit of weave container. + Default 200Mi pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memoryRequest: anyOf: - type: integer - type: string - description: MemoryRequest memory request of weave container. Default 200Mi + description: MemoryRequest memory request of weave container. + Default 200Mi pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true mtu: format: int32 type: integer netExtraArgs: - description: NetExtraArgs are extra arguments that are passed to weave-kube. + description: NetExtraArgs are extra arguments that are passed + to weave-kube. type: string noMasqLocal: format: int32 @@ -2691,42 +3546,50 @@ spec: anyOf: - type: integer - type: string - description: NPCCPURequest CPU request of weave npc container. Default 50m + description: NPCCPURequest CPU request of weave npc container. + Default 50m pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true npcExtraArgs: - description: NPCExtraArgs are extra arguments that are passed to weave-npc. + description: NPCExtraArgs are extra arguments that are passed + to weave-npc. type: string npcMemoryLimit: anyOf: - type: integer - type: string - description: NPCMemoryLimit memory limit of weave npc container. Default 200Mi + description: NPCMemoryLimit memory limit of weave npc container. + Default 200Mi pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true npcMemoryRequest: anyOf: - type: integer - type: string - description: NPCMemoryRequest memory request of weave npc container. Default 200Mi + description: NPCMemoryRequest memory request of weave npc + container. Default 200Mi pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true version: - description: Version specifies the Weave container image tag. The default depends on the kOps version. + description: Version specifies the Weave container image tag. + The default depends on the kOps version. type: string type: object type: object nodeAuthorization: - description: NodeAuthorization defined the custom node authorization configuration + description: NodeAuthorization defined the custom node authorization + configuration properties: nodeAuthorizer: - description: NodeAuthorizer defined the configuration for the node authorizer + description: NodeAuthorizer defined the configuration for the + node authorizer properties: authorizer: description: Authorizer is the authorizer to use type: string features: - description: Features is a series of authorizer features to enable or disable + description: Features is a series of authorizer features to + enable or disable items: type: string type: array @@ -2734,13 +3597,15 @@ spec: description: Image is the location of container type: string interval: - description: Interval the time between retires for authorization request + description: Interval the time between retires for authorization + request type: string nodeURL: description: NodeURL is the node authorization service url type: string port: - description: Port is the port the service is running on the master + description: Port is the port the service is running on the + master type: integer timeout: description: Timeout the max time for authorization request @@ -2751,62 +3616,95 @@ spec: type: object type: object nodePortAccess: - description: NodePortAccess is a list of the CIDRs that can access the node ports range (30000-32767). + description: NodePortAccess is a list of the CIDRs that can access + the node ports range (30000-32767). items: type: string type: array nodeTerminationHandler: - description: NodeTerminationHandler determines the cluster autoscaler configuration. + description: NodeTerminationHandler determines the cluster autoscaler + configuration. properties: enableScheduledEventDraining: - description: 'EnableScheduledEventDraining makes node termination handler drain nodes before the maintenance window starts for an EC2 instance scheduled event. Default: false' + description: 'EnableScheduledEventDraining makes node termination + handler drain nodes before the maintenance window starts for + an EC2 instance scheduled event. Default: false' type: boolean enableSpotInterruptionDraining: - description: 'EnableSpotInterruptionDraining makes node termination handler drain nodes when spot interruption termination notice is received. Default: true' + description: 'EnableSpotInterruptionDraining makes node termination + handler drain nodes when spot interruption termination notice + is received. Default: true' type: boolean enabled: - description: 'Enabled enables the node termination handler. Default: true' + description: 'Enabled enables the node termination handler. Default: + true' type: boolean prometheusEnable: description: EnablePrometheusMetrics enables the "/metrics" endpoint. type: boolean type: object nonMasqueradeCIDR: - description: MasterIPRange string `json:",omitempty"` NonMasqueradeCIDR is the CIDR for the internal k8s network (on which pods & services live) It cannot overlap ServiceClusterIPRange + description: MasterIPRange string `json:",omitempty"` + NonMasqueradeCIDR is the CIDR for the internal k8s network (on which + pods & services live) It cannot overlap ServiceClusterIPRange type: string podCIDR: description: PodCIDR is the CIDR from which we allocate IPs for pods type: string project: - description: Project is the cloud project we should use, required on GCE + description: Project is the cloud project we should use, required + on GCE type: string rollingUpdate: - description: RollingUpdate defines the default rolling-update settings for instance groups + description: RollingUpdate defines the default rolling-update settings + for instance groups properties: drainAndTerminate: - description: DrainAndTerminate enables draining and terminating nodes during rolling updates. Defaults to true. + description: DrainAndTerminate enables draining and terminating + nodes during rolling updates. Defaults to true. type: boolean maxSurge: anyOf: - type: integer - type: string - description: 'MaxSurge is the maximum number of extra nodes that can be created during the update. The value can be an absolute number (for example 5) or a percentage of desired machines (for example 10%). The absolute number is calculated from a percentage by rounding up. Has no effect on instance groups with role "Master". Defaults to 1 on AWS, 0 otherwise. Example: when this is set to 30%, the InstanceGroup can be scaled up immediately when the rolling update starts, such that the total number of old and new nodes do not exceed 130% of desired nodes.' + description: 'MaxSurge is the maximum number of extra nodes that + can be created during the update. The value can be an absolute + number (for example 5) or a percentage of desired machines (for + example 10%). The absolute number is calculated from a percentage + by rounding up. Has no effect on instance groups with role "Master". + Defaults to 1 on AWS, 0 otherwise. Example: when this is set + to 30%, the InstanceGroup can be scaled up immediately when + the rolling update starts, such that the total number of old + and new nodes do not exceed 130% of desired nodes.' x-kubernetes-int-or-string: true maxUnavailable: anyOf: - type: integer - type: string - description: 'MaxUnavailable is the maximum number of nodes that can be unavailable during the update. The value can be an absolute number (for example 5) or a percentage of desired nodes (for example 10%). The absolute number is calculated from a percentage by rounding down. Defaults to 1 if MaxSurge is 0, otherwise defaults to 0. Example: when this is set to 30%, the InstanceGroup can be scaled down to 70% of desired nodes immediately when the rolling update starts. Once new nodes are ready, more old nodes can be drained, ensuring that the total number of nodes available at all times during the update is at least 70% of desired nodes.' + description: 'MaxUnavailable is the maximum number of nodes that + can be unavailable during the update. The value can be an absolute + number (for example 5) or a percentage of desired nodes (for + example 10%). The absolute number is calculated from a percentage + by rounding down. Defaults to 1 if MaxSurge is 0, otherwise + defaults to 0. Example: when this is set to 30%, the InstanceGroup + can be scaled down to 70% of desired nodes immediately when + the rolling update starts. Once new nodes are ready, more old + nodes can be drained, ensuring that the total number of nodes + available at all times during the update is at least 70% of + desired nodes.' x-kubernetes-int-or-string: true type: object secretStore: description: SecretStore is the VFS path to where secrets are stored type: string serviceClusterIPRange: - description: ServiceClusterIPRange is the CIDR, from the internal network, where we allocate IPs for services + description: ServiceClusterIPRange is the CIDR, from the internal + network, where we allocate IPs for services type: string sshAccess: - description: SSHAccess determines the permitted access to SSH Currently only a single CIDR is supported (though a richer grammar could be added in future) + description: SSHAccess determines the permitted access to SSH Currently + only a single CIDR is supported (though a richer grammar could be + added in future) items: type: string type: array @@ -2820,10 +3718,12 @@ spec: cidr: type: string egress: - description: Egress defines the method of traffic egress for this subnet + description: Egress defines the method of traffic egress for + this subnet type: string id: - description: ProviderID is the cloud provider id for the objects associated with the zone (the subnet on AWS) + description: ProviderID is the cloud provider id for the objects + associated with the zone (the subnet on AWS) type: string name: type: string @@ -2831,44 +3731,60 @@ spec: description: PublicIP to attach to NatGateway type: string region: - description: Region is the region the subnet is in, set for subnets that are regionally scoped + description: Region is the region the subnet is in, set for + subnets that are regionally scoped type: string type: - description: SubnetType string describes subnet types (public, private, utility) + description: SubnetType string describes subnet types (public, + private, utility) type: string zone: - description: Zone is the zone the subnet is in, set for subnets that are zonally scoped + description: Zone is the zone the subnet is in, set for subnets + that are zonally scoped type: string type: object type: array sysctlParameters: - description: SysctlParameters will configure kernel parameters using sysctl(8). When specified, each parameter must follow the form variable=value, the way it would appear in sysctl.conf. + description: SysctlParameters will configure kernel parameters using + sysctl(8). When specified, each parameter must follow the form variable=value, + the way it would appear in sysctl.conf. items: type: string type: array target: - description: Target allows for us to nest extra config for targets such as terraform + description: Target allows for us to nest extra config for targets + such as terraform properties: terraform: - description: TerraformSpec allows us to specify terraform config in an extensible way + description: TerraformSpec allows us to specify terraform config + in an extensible way properties: providerExtraConfig: additionalProperties: type: string - description: ProviderExtraConfig contains key/value pairs to add to the rendered terraform "provider" block + description: ProviderExtraConfig contains key/value pairs + to add to the rendered terraform "provider" block type: object type: object type: object topology: - description: Topology defines the type of network topology to use on the cluster - default public This is heavily weighted towards AWS for the time being, but should also be agnostic enough to port out to GCE later if needed + description: Topology defines the type of network topology to use + on the cluster - default public This is heavily weighted towards + AWS for the time being, but should also be agnostic enough to port + out to GCE later if needed properties: bastion: - description: Bastion provide an external facing point of entry into a network containing private network instances. This host can provide a single point of fortification or audit and can be started and stopped to enable or disable inbound SSH communication from the Internet, some call bastion as the "jump server". + description: Bastion provide an external facing point of entry + into a network containing private network instances. This host + can provide a single point of fortification or audit and can + be started and stopped to enable or disable inbound SSH communication + from the Internet, some call bastion as the "jump server". properties: bastionPublicName: type: string idleTimeoutSeconds: - description: IdleTimeoutSeconds is the bastion's Loadbalancer idle timeout + description: IdleTimeoutSeconds is the bastion's Loadbalancer + idle timeout format: int64 type: integer loadBalancer: @@ -2880,23 +3796,32 @@ spec: type: object type: object dns: - description: DNS configures options relating to DNS, in particular whether we use a public or a private hosted zone + description: DNS configures options relating to DNS, in particular + whether we use a public or a private hosted zone properties: type: type: string type: object masters: - description: The environment to launch the Kubernetes masters in public|private + description: The environment to launch the Kubernetes masters + in public|private type: string nodes: - description: The environment to launch the Kubernetes nodes in public|private + description: The environment to launch the Kubernetes nodes in + public|private type: string type: object updatePolicy: - description: 'UpdatePolicy determines the policy for applying upgrades automatically. Valid values: ''external'' do not apply updates automatically - they are applied manually or by an external system missing: default policy (currently OS security upgrades that do not require a reboot)' + description: 'UpdatePolicy determines the policy for applying upgrades + automatically. Valid values: ''external'' do not apply updates + automatically - they are applied manually or by an external system missing: + default policy (currently OS security upgrades that do not require + a reboot)' type: string useHostCertificates: - description: UseHostCertificates will mount /etc/ssl/certs to inside needed containers. This is needed if some APIs do have self-signed certs + description: UseHostCertificates will mount /etc/ssl/certs to inside + needed containers. This is needed if some APIs do have self-signed + certs type: boolean type: object type: object diff --git a/k8s/crds/kops.k8s.io_instancegroups.yaml b/k8s/crds/kops.k8s.io_instancegroups.yaml index 6748a6c214..eb23b08965 100644 --- a/k8s/crds/kops.k8s.io_instancegroups.yaml +++ b/k8s/crds/kops.k8s.io_instancegroups.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: (devel) + controller-gen.kubebuilder.io/version: v0.2.8 creationTimestamp: null name: instancegroups.kops.k8s.io spec: @@ -42,13 +42,18 @@ spec: name: v1alpha2 schema: openAPIV3Schema: - description: InstanceGroup represents a group of instances (either nodes or masters) with the same configuration + description: InstanceGroup represents a group of instances (either nodes or + masters) with the same configuration properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -56,12 +61,14 @@ spec: description: InstanceGroupSpec is the specification for an instanceGroup properties: additionalSecurityGroups: - description: AdditionalSecurityGroups attaches additional security groups (e.g. i-123456) + description: AdditionalSecurityGroups attaches additional security + groups (e.g. i-123456) items: type: string type: array additionalUserData: - description: AdditionalUserData is any additional user-data to be passed to the host + description: AdditionalUserData is any additional user-data to be + passed to the host items: description: UserData defines a user-data section properties: @@ -77,34 +84,42 @@ spec: type: object type: array associatePublicIp: - description: AssociatePublicIP is true if we want instances to have a public IP + description: AssociatePublicIP is true if we want instances to have + a public IP type: boolean cloudLabels: additionalProperties: type: string - description: CloudLabels indicates the labels for instances in this group, at the AWS level + description: CloudLabels indicates the labels for instances in this + group, at the AWS level type: object compressUserData: - description: CompressUserData compresses parts of the user data to save space + description: CompressUserData compresses parts of the user data to + save space type: boolean detailedInstanceMonitoring: - description: DetailedInstanceMonitoring defines if detailed-monitoring is enabled (AWS only) + description: DetailedInstanceMonitoring defines if detailed-monitoring + is enabled (AWS only) type: boolean externalLoadBalancers: - description: ExternalLoadBalancers define loadbalancers that should be attached to the instancegroup + description: ExternalLoadBalancers define loadbalancers that should + be attached to the instancegroup items: description: LoadBalancer defines a load balancer properties: loadBalancerName: - description: LoadBalancerName to associate with this instance group (AWS ELB) + description: LoadBalancerName to associate with this instance + group (AWS ELB) type: string targetGroupArn: - description: TargetGroupARN to associate with this instance group (AWS ALB/NLB) + description: TargetGroupARN to associate with this instance + group (AWS ALB/NLB) type: string type: object type: array fileAssets: - description: FileAssets is a collection of file assets for this instance group + description: FileAssets is a collection of file assets for this instance + group items: description: FileAssetSpec defines the structure for a file asset properties: @@ -121,38 +136,45 @@ spec: description: Path is the location this file should reside type: string roles: - description: Roles is a list of roles the file asset should be applied, defaults to all + description: Roles is a list of roles the file asset should + be applied, defaults to all items: - description: InstanceGroupRole string describes the roles of the nodes in this InstanceGroup (master or nodes) + description: InstanceGroupRole string describes the roles + of the nodes in this InstanceGroup (master or nodes) type: string type: array type: object type: array hooks: - description: 'Hooks is a list of hooks for this instanceGroup, note: these can override the cluster wide ones if required' + description: 'Hooks is a list of hooks for this instanceGroup, note: + these can override the cluster wide ones if required' items: description: HookSpec is a definition hook properties: before: - description: Before is a series of systemd units which this hook must run before + description: Before is a series of systemd units which this + hook must run before items: type: string type: array disabled: - description: Disabled indicates if you want the unit switched off + description: Disabled indicates if you want the unit switched + off type: boolean execContainer: description: ExecContainer is the image itself properties: command: - description: Command is the command supplied to the above image + description: Command is the command supplied to the above + image items: type: string type: array environment: additionalProperties: type: string - description: Environment is a map of environment variables added to the hook + description: Environment is a map of environment variables + added to the hook type: object image: description: Image is the docker image @@ -162,88 +184,117 @@ spec: description: Manifest is a raw systemd unit file type: string name: - description: Name is an optional name for the hook, otherwise the name is kops-hook- + description: Name is an optional name for the hook, otherwise + the name is kops-hook- type: string requires: - description: Requires is a series of systemd units the action requires + description: Requires is a series of systemd units the action + requires items: type: string type: array roles: - description: Roles is an optional list of roles the hook should be rolled out to, defaults to all + description: Roles is an optional list of roles the hook should + be rolled out to, defaults to all items: - description: InstanceGroupRole string describes the roles of the nodes in this InstanceGroup (master or nodes) + description: InstanceGroupRole string describes the roles + of the nodes in this InstanceGroup (master or nodes) type: string type: array useRawManifest: - description: UseRawManifest indicates that the contents of Manifest should be used as the contents of the systemd unit, unmodified. Before and Requires are ignored when used together with this value (and validation shouldn't allow them to be set) + description: UseRawManifest indicates that the contents of Manifest + should be used as the contents of the systemd unit, unmodified. + Before and Requires are ignored when used together with this + value (and validation shouldn't allow them to be set) type: boolean type: object type: array iam: - description: IAMProfileSpec defines the identity of the cloud group IAM profile (AWS only). + description: IAMProfileSpec defines the identity of the cloud group + IAM profile (AWS only). properties: profile: - description: Profile of the cloud group IAM profile. In aws this is the arn for the iam instance profile + description: Profile of the cloud group IAM profile. In aws this + is the arn for the iam instance profile type: string type: object image: description: Image is the instance (ami etc) we should use type: string instanceInterruptionBehavior: - description: InstanceInterruptionBehavior defines if a spot instance should be terminated, hibernated, or stopped after interruption + description: InstanceInterruptionBehavior defines if a spot instance + should be terminated, hibernated, or stopped after interruption type: string instanceMetadata: - description: InstanceMetadata defines the EC2 instance metadata service options (AWS Only) + description: InstanceMetadata defines the EC2 instance metadata service + options (AWS Only) properties: httpPutResponseHopLimit: - description: HTTPPutResponseHopLimit is the desired HTTP PUT response hop limit for instance metadata requests. The larger the number, the further instance metadata requests can travel. The default value is 1. + description: HTTPPutResponseHopLimit is the desired HTTP PUT response + hop limit for instance metadata requests. The larger the number, + the further instance metadata requests can travel. The default + value is 1. format: int64 type: integer httpTokens: - description: HTTPTokens is the state of token usage for the instance metadata requests. If the parameter is not specified in the request, the default state is "optional". + description: HTTPTokens is the state of token usage for the instance + metadata requests. If the parameter is not specified in the + request, the default state is "optional". type: string type: object instanceProtection: - description: InstanceProtection makes new instances in an autoscaling group protected from scale in + description: InstanceProtection makes new instances in an autoscaling + group protected from scale in type: boolean kubelet: description: Kubelet overrides kubelet config from the ClusterSpec properties: allowPrivileged: - description: AllowPrivileged enables containers to request privileged mode (defaults to false) + description: AllowPrivileged enables containers to request privileged + mode (defaults to false) type: boolean allowedUnsafeSysctls: - description: AllowedUnsafeSysctls are passed to the kubelet config to whitelist allowable sysctls + description: AllowedUnsafeSysctls are passed to the kubelet config + to whitelist allowable sysctls items: type: string type: array anonymousAuth: - description: AnonymousAuth permits you to control auth to the kubelet api + description: AnonymousAuth permits you to control auth to the + kubelet api type: boolean apiServers: - description: APIServers is not used for clusters version 1.6 and later - flag removed + description: APIServers is not used for clusters version 1.6 and + later - flag removed type: string authenticationTokenWebhook: - description: AuthenticationTokenWebhook uses the TokenReview API to determine authentication for bearer tokens. + description: AuthenticationTokenWebhook uses the TokenReview API + to determine authentication for bearer tokens. type: boolean authenticationTokenWebhookCacheTtl: - description: AuthenticationTokenWebhook sets the duration to cache responses from the webhook token authenticator. Default is 2m. (default 2m0s) + description: AuthenticationTokenWebhook sets the duration to cache + responses from the webhook token authenticator. Default is 2m. + (default 2m0s) type: string authorizationMode: - description: AuthorizationMode is the authorization mode the kubelet is running in + description: AuthorizationMode is the authorization mode the kubelet + is running in type: string babysitDaemons: - description: The node has babysitter process monitoring docker and kubelet. Removed as of 1.7 + description: The node has babysitter process monitoring docker + and kubelet. Removed as of 1.7 type: boolean bootstrapKubeconfig: - description: BootstrapKubeconfig is the path to a kubeconfig file that will be used to get client certificate for kubelet + description: BootstrapKubeconfig is the path to a kubeconfig file + that will be used to get client certificate for kubelet type: string cgroupDriver: - description: CgroupDriver allows the explicit setting of the kubelet cgroup driver. If omitted, defaults to cgroupfs. + description: CgroupDriver allows the explicit setting of the kubelet + cgroup driver. If omitted, defaults to cgroupfs. type: string cgroupRoot: - description: cgroupRoot is the root cgroup to use for pods. This is handled by the container runtime on a best effort basis. + description: cgroupRoot is the root cgroup to use for pods. This + is handled by the container runtime on a best effort basis. type: string clientCaFile: description: ClientCAFile is the path to a CA certificate @@ -258,192 +309,270 @@ spec: description: ClusterDomain is the DNS domain for this cluster type: string configureCbr0: - description: configureCBR0 enables the kubelet to configure cbr0 based on Node.Spec.PodCIDR. + description: configureCBR0 enables the kubelet to configure cbr0 + based on Node.Spec.PodCIDR. type: boolean cpuCFSQuota: - description: CPUCFSQuota enables CPU CFS quota enforcement for containers that specify CPU limits + description: CPUCFSQuota enables CPU CFS quota enforcement for + containers that specify CPU limits type: boolean cpuCFSQuotaPeriod: - description: CPUCFSQuotaPeriod sets CPU CFS quota period value, cpu.cfs_period_us, defaults to Linux Kernel default + description: CPUCFSQuotaPeriod sets CPU CFS quota period value, + cpu.cfs_period_us, defaults to Linux Kernel default type: string cpuManagerPolicy: - description: CpuManagerPolicy allows for changing the default policy of None to static + description: CpuManagerPolicy allows for changing the default + policy of None to static type: string dockerDisableSharedPID: - description: DockerDisableSharedPID uses a shared PID namespace for containers in a pod. + description: DockerDisableSharedPID uses a shared PID namespace + for containers in a pod. type: boolean enableCustomMetrics: description: Enable gathering custom metrics. type: boolean enableDebuggingHandlers: - description: EnableDebuggingHandlers enables server endpoints for log collection and local running of containers and commands + description: EnableDebuggingHandlers enables server endpoints + for log collection and local running of containers and commands type: boolean enforceNodeAllocatable: - description: Enforce Allocatable across pods whenever the overall usage across all pods exceeds Allocatable. + description: Enforce Allocatable across pods whenever the overall + usage across all pods exceeds Allocatable. type: string evictionHard: - description: Comma-delimited list of hard eviction expressions. For example, 'memory.available<300Mi'. + description: Comma-delimited list of hard eviction expressions. For + example, 'memory.available<300Mi'. type: string evictionMaxPodGracePeriod: - description: Maximum allowed grace period (in seconds) to use when terminating pods in response to a soft eviction threshold being met. + description: Maximum allowed grace period (in seconds) to use + when terminating pods in response to a soft eviction threshold + being met. format: int32 type: integer evictionMinimumReclaim: - description: Comma-delimited list of minimum reclaims (e.g. imagefs.available=2Gi) that describes the minimum amount of resource the kubelet will reclaim when performing a pod eviction if that resource is under pressure. + description: Comma-delimited list of minimum reclaims (e.g. imagefs.available=2Gi) + that describes the minimum amount of resource the kubelet will + reclaim when performing a pod eviction if that resource is under + pressure. type: string evictionPressureTransitionPeriod: - description: Duration for which the kubelet has to wait before transitioning out of an eviction pressure condition. + description: Duration for which the kubelet has to wait before + transitioning out of an eviction pressure condition. type: string evictionSoft: - description: Comma-delimited list of soft eviction expressions. For example, 'memory.available<300Mi'. + description: Comma-delimited list of soft eviction expressions. For + example, 'memory.available<300Mi'. type: string evictionSoftGracePeriod: - description: Comma-delimited list of grace periods for each soft eviction signal. For example, 'memory.available=30s'. + description: Comma-delimited list of grace periods for each soft + eviction signal. For example, 'memory.available=30s'. type: string experimentalAllowedUnsafeSysctls: - description: ExperimentalAllowedUnsafeSysctls are passed to the kubelet config to whitelist allowable sysctls Was promoted to beta and renamed. https://github.com/kubernetes/kubernetes/pull/63717 + description: ExperimentalAllowedUnsafeSysctls are passed to the + kubelet config to whitelist allowable sysctls Was promoted to + beta and renamed. https://github.com/kubernetes/kubernetes/pull/63717 items: type: string type: array failSwapOn: - description: Tells the Kubelet to fail to start if swap is enabled on the node. + description: Tells the Kubelet to fail to start if swap is enabled + on the node. type: boolean featureGates: additionalProperties: type: string - description: FeatureGates is set of key=value pairs that describe feature gates for alpha/experimental features. + description: FeatureGates is set of key=value pairs that describe + feature gates for alpha/experimental features. type: object hairpinMode: - description: 'How should the kubelet configure the container bridge for hairpin packets. Setting this flag allows endpoints in a Service to loadbalance back to themselves if they should try to access their own Service. Values: "promiscuous-bridge": make the container bridge promiscuous. "hairpin-veth": set the hairpin flag on container veth interfaces. "none": do nothing. Setting --configure-cbr0 to false implies that to achieve hairpin NAT one must set --hairpin-mode=veth-flag, because bridge assumes the existence of a container bridge named cbr0.' + description: 'How should the kubelet configure the container bridge + for hairpin packets. Setting this flag allows endpoints in a + Service to loadbalance back to themselves if they should try + to access their own Service. Values: "promiscuous-bridge": + make the container bridge promiscuous. "hairpin-veth": set + the hairpin flag on container veth interfaces. "none": do + nothing. Setting --configure-cbr0 to false implies that to achieve + hairpin NAT one must set --hairpin-mode=veth-flag, because bridge + assumes the existence of a container bridge named cbr0.' type: string hostnameOverride: - description: HostnameOverride is the hostname used to identify the kubelet instead of the actual hostname. + description: HostnameOverride is the hostname used to identify + the kubelet instead of the actual hostname. type: string housekeepingInterval: - description: HousekeepingInterval allows to specify interval between container housekeepings. + description: HousekeepingInterval allows to specify interval between + container housekeepings. type: string imageGCHighThresholdPercent: - description: ImageGCHighThresholdPercent is the percent of disk usage after which image garbage collection is always run. + description: ImageGCHighThresholdPercent is the percent of disk + usage after which image garbage collection is always run. format: int32 type: integer imageGCLowThresholdPercent: - description: ImageGCLowThresholdPercent is the percent of disk usage before which image garbage collection is never run. Lowest disk usage to garbage collect to. + description: ImageGCLowThresholdPercent is the percent of disk + usage before which image garbage collection is never run. Lowest + disk usage to garbage collect to. format: int32 type: integer imagePullProgressDeadline: - description: ImagePullProgressDeadline is the timeout for image pulls If no pulling progress is made before this deadline, the image pulling will be cancelled. (default 1m0s) + description: ImagePullProgressDeadline is the timeout for image + pulls If no pulling progress is made before this deadline, the + image pulling will be cancelled. (default 1m0s) type: string kubeReserved: additionalProperties: type: string - description: Resource reservation for kubernetes system daemons like the kubelet, container runtime, node problem detector, etc. + description: Resource reservation for kubernetes system daemons + like the kubelet, container runtime, node problem detector, + etc. type: object kubeReservedCgroup: description: Control group for kube daemons. type: string kubeconfigPath: - description: KubeconfigPath is the path of kubeconfig for the kubelet + description: KubeconfigPath is the path of kubeconfig for the + kubelet type: string kubeletCgroups: - description: KubeletCgroups is the absolute name of cgroups to isolate the kubelet in. + description: KubeletCgroups is the absolute name of cgroups to + isolate the kubelet in. type: string logLevel: description: LogLevel is the logging level of the kubelet format: int32 type: integer maxPods: - description: MaxPods is the number of pods that can run on this Kubelet. + description: MaxPods is the number of pods that can run on this + Kubelet. format: int32 type: integer networkPluginMTU: - description: NetworkPluginMTU is the MTU to be passed to the network plugin, and overrides the default MTU for cases where it cannot be automatically computed (such as IPSEC). + description: NetworkPluginMTU is the MTU to be passed to the network + plugin, and overrides the default MTU for cases where it cannot + be automatically computed (such as IPSEC). format: int32 type: integer networkPluginName: - description: NetworkPluginName is the name of the network plugin to be invoked for various events in kubelet/pod lifecycle + description: NetworkPluginName is the name of the network plugin + to be invoked for various events in kubelet/pod lifecycle type: string nodeLabels: additionalProperties: type: string - description: NodeLabels to add when registering the node in the cluster. + description: NodeLabels to add when registering the node in the + cluster. type: object nodeStatusUpdateFrequency: - description: NodeStatusUpdateFrequency Specifies how often kubelet posts node status to master (default 10s) must work with nodeMonitorGracePeriod in KubeControllerManagerConfig. + description: NodeStatusUpdateFrequency Specifies how often kubelet + posts node status to master (default 10s) must work with nodeMonitorGracePeriod + in KubeControllerManagerConfig. type: string nonMasqueradeCIDR: - description: 'NonMasqueradeCIDR configures masquerading: traffic to IPs outside this range will use IP masquerade.' + description: 'NonMasqueradeCIDR configures masquerading: traffic + to IPs outside this range will use IP masquerade.' type: string nvidiaGPUs: - description: NvidiaGPUs is the number of NVIDIA GPU devices on this node. + description: NvidiaGPUs is the number of NVIDIA GPU devices on + this node. format: int32 type: integer podCIDR: - description: PodCIDR is the CIDR to use for pod IP addresses, only used in standalone mode. In cluster mode, this is obtained from the master. + description: PodCIDR is the CIDR to use for pod IP addresses, + only used in standalone mode. In cluster mode, this is obtained + from the master. type: string podInfraContainerImage: - description: PodInfraContainerImage is the image whose network/ipc containers in each pod will use. + description: PodInfraContainerImage is the image whose network/ipc + containers in each pod will use. type: string podManifestPath: - description: config is the path to the config file or directory of files + description: config is the path to the config file or directory + of files type: string protectKernelDefaults: - description: 'Default kubelet behaviour for kernel tuning. If set, kubelet errors if any of kernel tunables is different than kubelet defaults. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet''s --config flag.' + description: 'Default kubelet behaviour for kernel tuning. If + set, kubelet errors if any of kernel tunables is different than + kubelet defaults. (DEPRECATED: This parameter should be set + via the config file specified by the Kubelet''s --config flag.' type: boolean readOnlyPort: - description: ReadOnlyPort is the port used by the kubelet api for read-only access (default 10255) + description: ReadOnlyPort is the port used by the kubelet api + for read-only access (default 10255) format: int32 type: integer reconcileCIDR: - description: ReconcileCIDR is Reconcile node CIDR with the CIDR specified by the API server. No-op if register-node or configure-cbr0 is false. + description: ReconcileCIDR is Reconcile node CIDR with the CIDR + specified by the API server. No-op if register-node or configure-cbr0 + is false. type: boolean registerNode: - description: RegisterNode enables automatic registration with the apiserver. + description: RegisterNode enables automatic registration with + the apiserver. type: boolean registerSchedulable: - description: registerSchedulable tells the kubelet to register the node as schedulable. No-op if register-node is false. + description: registerSchedulable tells the kubelet to register + the node as schedulable. No-op if register-node is false. type: boolean registryBurst: - description: RegistryBurst Maximum size of a bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding registry-qps. Only used if --registry-qps > 0 (default 10) + description: RegistryBurst Maximum size of a bursty pulls, temporarily + allows pulls to burst to this number, while still not exceeding + registry-qps. Only used if --registry-qps > 0 (default 10) format: int32 type: integer registryPullQPS: - description: RegistryPullQPS if > 0, limit registry pull QPS to this value. If 0, unlimited. (default 5) + description: RegistryPullQPS if > 0, limit registry pull QPS to + this value. If 0, unlimited. (default 5) format: int32 type: integer requireKubeconfig: description: RequireKubeconfig indicates a kubeconfig is required type: boolean resolvConf: - description: ResolverConfig is the resolver configuration file used as the basis for the container DNS resolution configuration."), [] + description: ResolverConfig is the resolver configuration file + used as the basis for the container DNS resolution configuration."), + [] type: string rootDir: - description: RootDir is the directory path for managing kubelet files (volume mounts,etc) + description: RootDir is the directory path for managing kubelet + files (volume mounts,etc) type: string rotateCertificates: description: rotateCertificates enables client certificate rotation. type: boolean runtimeCgroups: - description: Cgroups that container runtime is expected to be isolated in. + description: Cgroups that container runtime is expected to be + isolated in. type: string runtimeRequestTimeout: - description: RuntimeRequestTimeout is timeout for runtime requests on - pull, logs, exec and attach + description: RuntimeRequestTimeout is timeout for runtime requests + on - pull, logs, exec and attach type: string seccompProfileRoot: - description: SeccompProfileRoot is the directory path for seccomp profiles. + description: SeccompProfileRoot is the directory path for seccomp + profiles. type: string serializeImagePulls: - description: '// SerializeImagePulls when enabled, tells the Kubelet to pull images one // at a time. We recommend *not* changing the default value on nodes that // run docker daemon with version < 1.9 or an Aufs storage backend. // Issue #10959 has more details.' + description: '// SerializeImagePulls when enabled, tells the Kubelet + to pull images one // at a time. We recommend *not* changing + the default value on nodes that // run docker daemon with version < + 1.9 or an Aufs storage backend. // Issue #10959 has more details.' type: boolean streamingConnectionIdleTimeout: - description: StreamingConnectionIdleTimeout is the maximum time a streaming connection can be idle before the connection is automatically closed + description: StreamingConnectionIdleTimeout is the maximum time + a streaming connection can be idle before the connection is + automatically closed type: string systemCgroups: - description: SystemCgroups is absolute name of cgroups in which to place all non-kernel processes that are not already in a container. Empty for no container. Rolling back the flag requires a reboot. + description: SystemCgroups is absolute name of cgroups in which + to place all non-kernel processes that are not already in a + container. Empty for no container. Rolling back the flag requires + a reboot. type: string systemReserved: additionalProperties: type: string - description: Capture resource reservation for OS system daemons like sshd, udev, etc. + description: Capture resource reservation for OS system daemons + like sshd, udev, etc. type: object systemReservedCgroup: description: Parent control group for OS system daemons. @@ -457,7 +586,8 @@ spec: description: 'TODO: Remove unused TLSCertFile' type: string tlsCipherSuites: - description: TLSCipherSuites indicates the allowed TLS cipher suite + description: TLSCipherSuites indicates the allowed TLS cipher + suite items: type: string type: array @@ -468,20 +598,26 @@ spec: description: 'TODO: Remove unused TLSPrivateKeyFile' type: string topologyManagerPolicy: - description: TopologyManagerPolicy determines the allocation policy for the topology manager. + description: TopologyManagerPolicy determines the allocation policy + for the topology manager. type: string volumePluginDirectory: - description: The full path of the directory in which to search for additional third party volume plugins (this path must be writeable, dependent on your choice of OS) + description: The full path of the directory in which to search + for additional third party volume plugins (this path must be + writeable, dependent on your choice of OS) type: string volumeStatsAggPeriod: - description: VolumeStatsAggPeriod is the interval for kubelet to calculate and cache the volume disk usage for all pods and volumes + description: VolumeStatsAggPeriod is the interval for kubelet + to calculate and cache the volume disk usage for all pods and + volumes type: string type: object machineType: description: MachineType is the instance class type: string maxPrice: - description: MaxPrice indicates this is a spot-pricing group, with the specified value as our max-price bid + description: MaxPrice indicates this is a spot-pricing group, with + the specified value as our max-price bid type: string maxSize: description: MaxSize is the maximum size of the pool @@ -492,91 +628,140 @@ spec: format: int32 type: integer mixedInstancesPolicy: - description: MixedInstancesPolicy defined a optional backing of an AWS ASG by a EC2 Fleet (AWS Only) + description: MixedInstancesPolicy defined a optional backing of an + AWS ASG by a EC2 Fleet (AWS Only) properties: instances: - description: Instances is a list of instance types which we are willing to run in the EC2 fleet + description: Instances is a list of instance types which we are + willing to run in the EC2 fleet items: type: string type: array onDemandAboveBase: - description: OnDemandAboveBase controls the percentages of On-Demand Instances and Spot Instances for your additional capacity beyond OnDemandBase. The range is 0–100. The default value is 100. If you leave this parameter set to 100, the percentages are 100% for On-Demand Instances and 0% for Spot Instances. + description: OnDemandAboveBase controls the percentages of On-Demand + Instances and Spot Instances for your additional capacity beyond + OnDemandBase. The range is 0–100. The default value is 100. + If you leave this parameter set to 100, the percentages are + 100% for On-Demand Instances and 0% for Spot Instances. format: int64 type: integer onDemandAllocationStrategy: - description: OnDemandAllocationStrategy indicates how to allocate instance types to fulfill On-Demand capacity + description: OnDemandAllocationStrategy indicates how to allocate + instance types to fulfill On-Demand capacity type: string onDemandBase: - description: OnDemandBase is the minimum amount of the Auto Scaling group's capacity that must be fulfilled by On-Demand Instances. This base portion is provisioned first as your group scales. + description: OnDemandBase is the minimum amount of the Auto Scaling + group's capacity that must be fulfilled by On-Demand Instances. + This base portion is provisioned first as your group scales. format: int64 type: integer spotAllocationStrategy: - description: SpotAllocationStrategy diversifies your Spot capacity across multiple instance types to find the best pricing. Higher Spot availability may result from a larger number of instance types to choose from. + description: SpotAllocationStrategy diversifies your Spot capacity + across multiple instance types to find the best pricing. Higher + Spot availability may result from a larger number of instance + types to choose from. type: string spotInstancePools: - description: SpotInstancePools is the number of Spot pools to use to allocate your Spot capacity (defaults to 2) pools are determined from the different instance types in the Overrides array of LaunchTemplate + description: SpotInstancePools is the number of Spot pools to + use to allocate your Spot capacity (defaults to 2) pools are + determined from the different instance types in the Overrides + array of LaunchTemplate format: int64 type: integer type: object nodeLabels: additionalProperties: type: string - description: NodeLabels indicates the kubernetes labels for nodes in this group + description: NodeLabels indicates the kubernetes labels for nodes + in this group type: object role: - description: 'Type determines the role of instances in this group: masters or nodes' + description: 'Type determines the role of instances in this group: + masters or nodes' type: string rollingUpdate: description: RollingUpdate defines the rolling-update behavior properties: drainAndTerminate: - description: DrainAndTerminate enables draining and terminating nodes during rolling updates. Defaults to true. + description: DrainAndTerminate enables draining and terminating + nodes during rolling updates. Defaults to true. type: boolean maxSurge: anyOf: - type: integer - type: string - description: 'MaxSurge is the maximum number of extra nodes that can be created during the update. The value can be an absolute number (for example 5) or a percentage of desired machines (for example 10%). The absolute number is calculated from a percentage by rounding up. Has no effect on instance groups with role "Master". Defaults to 1 on AWS, 0 otherwise. Example: when this is set to 30%, the InstanceGroup can be scaled up immediately when the rolling update starts, such that the total number of old and new nodes do not exceed 130% of desired nodes.' + description: 'MaxSurge is the maximum number of extra nodes that + can be created during the update. The value can be an absolute + number (for example 5) or a percentage of desired machines (for + example 10%). The absolute number is calculated from a percentage + by rounding up. Has no effect on instance groups with role "Master". + Defaults to 1 on AWS, 0 otherwise. Example: when this is set + to 30%, the InstanceGroup can be scaled up immediately when + the rolling update starts, such that the total number of old + and new nodes do not exceed 130% of desired nodes.' x-kubernetes-int-or-string: true maxUnavailable: anyOf: - type: integer - type: string - description: 'MaxUnavailable is the maximum number of nodes that can be unavailable during the update. The value can be an absolute number (for example 5) or a percentage of desired nodes (for example 10%). The absolute number is calculated from a percentage by rounding down. Defaults to 1 if MaxSurge is 0, otherwise defaults to 0. Example: when this is set to 30%, the InstanceGroup can be scaled down to 70% of desired nodes immediately when the rolling update starts. Once new nodes are ready, more old nodes can be drained, ensuring that the total number of nodes available at all times during the update is at least 70% of desired nodes.' + description: 'MaxUnavailable is the maximum number of nodes that + can be unavailable during the update. The value can be an absolute + number (for example 5) or a percentage of desired nodes (for + example 10%). The absolute number is calculated from a percentage + by rounding down. Defaults to 1 if MaxSurge is 0, otherwise + defaults to 0. Example: when this is set to 30%, the InstanceGroup + can be scaled down to 70% of desired nodes immediately when + the rolling update starts. Once new nodes are ready, more old + nodes can be drained, ensuring that the total number of nodes + available at all times during the update is at least 70% of + desired nodes.' x-kubernetes-int-or-string: true type: object rootVolumeDeleteOnTermination: - description: 'RootVolumeDeleteOnTermination configures root volume retention policy upon instance termination. The root volume is deleted by default. Cluster deletion does not remove retained root volumes. NOTE: This setting applies only to the Launch Configuration and does not affect Launch Templates.' + description: 'RootVolumeDeleteOnTermination configures root volume + retention policy upon instance termination. The root volume is deleted + by default. Cluster deletion does not remove retained root volumes. + NOTE: This setting applies only to the Launch Configuration and + does not affect Launch Templates.' type: boolean rootVolumeEncryption: - description: RootVolumeEncryption enables EBS root volume encryption for an instance + description: RootVolumeEncryption enables EBS root volume encryption + for an instance type: boolean rootVolumeEncryptionKey: - description: RootVolumeEncryptionKey provides the key identifier for root volume encryption + description: RootVolumeEncryptionKey provides the key identifier for + root volume encryption type: string rootVolumeIops: - description: If volume type is io1, then we need to specify the number of Iops. + description: If volume type is io1, then we need to specify the number + of Iops. format: int32 type: integer rootVolumeOptimization: - description: RootVolumeOptimization enables EBS optimization for an instance + description: RootVolumeOptimization enables EBS optimization for an + instance type: boolean rootVolumeSize: - description: RootVolumeSize is the size of the EBS root volume to use, in GB + description: RootVolumeSize is the size of the EBS root volume to + use, in GB format: int32 type: integer rootVolumeType: - description: RootVolumeType is the type of the EBS root volume to use (e.g. gp2) + description: RootVolumeType is the type of the EBS root volume to + use (e.g. gp2) type: string securityGroupOverride: - description: SecurityGroupOverride overrides the default security group created by Kops for this IG (AWS only). + description: SecurityGroupOverride overrides the default security + group created by Kops for this IG (AWS only). type: string spotDurationInMinutes: - description: SpotDurationInMinutes indicates this is a spot-block group, with the specified value as the spot reservation time + description: SpotDurationInMinutes indicates this is a spot-block + group, with the specified value as the spot reservation time format: int64 type: integer subnets: - description: Subnets is the names of the Subnets (as specified in the Cluster) where machines in this instance group should be placed + description: Subnets is the names of the Subnets (as specified in + the Cluster) where machines in this instance group should be placed items: type: string type: array @@ -586,22 +771,27 @@ spec: type: string type: array sysctlParameters: - description: SysctlParameters will configure kernel parameters using sysctl(8). When specified, each parameter must follow the form variable=value, the way it would appear in sysctl.conf. + description: SysctlParameters will configure kernel parameters using + sysctl(8). When specified, each parameter must follow the form variable=value, + the way it would appear in sysctl.conf. items: type: string type: array taints: - description: Taints indicates the kubernetes taints for nodes in this group + description: Taints indicates the kubernetes taints for nodes in this + group items: type: string type: array tenancy: - description: Describes the tenancy of the instance group. Can be either default or dedicated. Currently only applies to AWS. + description: Describes the tenancy of the instance group. Can be either + default or dedicated. Currently only applies to AWS. type: string volumeMounts: description: VolumeMounts a collection of volume mounts items: - description: VolumeMountSpec defines the specification for mounting a device + description: VolumeMountSpec defines the specification for mounting + a device properties: device: description: Device is the device name to provision and mount @@ -610,7 +800,8 @@ spec: description: Filesystem is the filesystem to mount type: string formatOptions: - description: FormatOptions is a collection of options passed when formatting the device + description: FormatOptions is a collection of options passed + when formatting the device items: type: string type: array @@ -625,21 +816,29 @@ spec: type: object type: array volumes: - description: Volumes is a collection of additional volumes to create for instances within this InstanceGroup + description: Volumes is a collection of additional volumes to create + for instances within this InstanceGroup items: - description: VolumeSpec defined the spec for an additional volume attached to the instance group + description: VolumeSpec defined the spec for an additional volume + attached to the instance group properties: deleteOnTermination: - description: 'DeleteOnTermination configures volume retention policy upon instance termination. The volume is deleted by default. Cluster deletion does not remove retained volumes. NOTE: This setting applies only to the Launch Configuration and does not affect Launch Templates.' + description: 'DeleteOnTermination configures volume retention + policy upon instance termination. The volume is deleted by + default. Cluster deletion does not remove retained volumes. + NOTE: This setting applies only to the Launch Configuration + and does not affect Launch Templates.' type: boolean device: - description: Device is an optional device name of the block device + description: Device is an optional device name of the block + device type: string encrypted: description: Encrypted indicates you want to encrypt the volume type: boolean iops: - description: Iops is the provision iops for this iops (think io1 in aws) + description: Iops is the provision iops for this iops (think + io1 in aws) format: int64 type: integer key: @@ -650,12 +849,15 @@ spec: format: int64 type: integer type: - description: Type is the type of volume to create and is cloud specific + description: Type is the type of volume to create and is cloud + specific type: string type: object type: array zones: - description: Zones is the names of the Zones where machines in this instance group should be placed This is needed for regional subnets (e.g. GCE), to restrict placement to particular zones + description: Zones is the names of the Zones where machines in this + instance group should be placed This is needed for regional subnets + (e.g. GCE), to restrict placement to particular zones items: type: string type: array diff --git a/k8s/crds/kops.k8s.io_keysets.yaml b/k8s/crds/kops.k8s.io_keysets.yaml index fdd761090e..6a484d5a06 100644 --- a/k8s/crds/kops.k8s.io_keysets.yaml +++ b/k8s/crds/kops.k8s.io_keysets.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: (devel) + controller-gen.kubebuilder.io/version: v0.2.8 creationTimestamp: null name: keysets.kops.k8s.io spec: @@ -19,13 +19,18 @@ spec: - name: v1alpha2 schema: openAPIV3Schema: - description: Keyset is a set of system keypairs, or other secret material. It is a set to support credential rotation etc. + description: Keyset is a set of system keypairs, or other secret material. + It is a set to support credential rotation etc. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -35,23 +40,28 @@ spec: keys: description: Keys is the set of keys that make up the keyset items: - description: KeysetItem is an item (keypair or other secret material) in a Keyset + description: KeysetItem is an item (keypair or other secret material) + in a Keyset properties: id: - description: Id is the unique identifier for this key in the keyset + description: Id is the unique identifier for this key in the + keyset type: string privateMaterial: - description: PrivateMaterial holds secret material (e.g. a private key, or symmetric token) + description: PrivateMaterial holds secret material (e.g. a private + key, or symmetric token) format: byte type: string publicMaterial: - description: PublicMaterial holds non-secret material (e.g. a certificate) + description: PublicMaterial holds non-secret material (e.g. + a certificate) format: byte type: string type: object type: array type: - description: Type is the type of the Keyset (PKI keypair, or secret token) + description: Type is the type of the Keyset (PKI keypair, or secret + token) type: string type: object type: object diff --git a/k8s/crds/kops.k8s.io_sshcredentials.yaml b/k8s/crds/kops.k8s.io_sshcredentials.yaml index 67c3cd92b0..da663db477 100644 --- a/k8s/crds/kops.k8s.io_sshcredentials.yaml +++ b/k8s/crds/kops.k8s.io_sshcredentials.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: (devel) + controller-gen.kubebuilder.io/version: v0.2.8 creationTimestamp: null name: sshcredentials.kops.k8s.io spec: @@ -22,10 +22,14 @@ spec: description: SSHCredential represent a set of kops secrets properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object diff --git a/vendor/github.com/BurntSushi/toml/.gitignore b/vendor/github.com/BurntSushi/toml/.gitignore deleted file mode 100644 index 0cd3800377..0000000000 --- a/vendor/github.com/BurntSushi/toml/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -TAGS -tags -.*.swp -tomlcheck/tomlcheck -toml.test diff --git a/vendor/github.com/BurntSushi/toml/.travis.yml b/vendor/github.com/BurntSushi/toml/.travis.yml deleted file mode 100644 index 8b8afc4f0e..0000000000 --- a/vendor/github.com/BurntSushi/toml/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: go -go: - - 1.1 - - 1.2 - - 1.3 - - 1.4 - - 1.5 - - 1.6 - - tip -install: - - go install ./... - - go get github.com/BurntSushi/toml-test -script: - - export PATH="$PATH:$HOME/gopath/bin" - - make test diff --git a/vendor/github.com/BurntSushi/toml/BUILD.bazel b/vendor/github.com/BurntSushi/toml/BUILD.bazel deleted file mode 100644 index af49a48b18..0000000000 --- a/vendor/github.com/BurntSushi/toml/BUILD.bazel +++ /dev/null @@ -1,20 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode.go", - "decode_meta.go", - "doc.go", - "encode.go", - "encoding_types.go", - "encoding_types_1.1.go", - "lex.go", - "parse.go", - "type_check.go", - "type_fields.go", - ], - importmap = "k8s.io/kops/vendor/github.com/BurntSushi/toml", - importpath = "github.com/BurntSushi/toml", - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/BurntSushi/toml/COMPATIBLE b/vendor/github.com/BurntSushi/toml/COMPATIBLE deleted file mode 100644 index 6efcfd0ce5..0000000000 --- a/vendor/github.com/BurntSushi/toml/COMPATIBLE +++ /dev/null @@ -1,3 +0,0 @@ -Compatible with TOML version -[v0.4.0](https://github.com/toml-lang/toml/blob/v0.4.0/versions/en/toml-v0.4.0.md) - diff --git a/vendor/github.com/BurntSushi/toml/COPYING b/vendor/github.com/BurntSushi/toml/COPYING deleted file mode 100644 index 01b5743200..0000000000 --- a/vendor/github.com/BurntSushi/toml/COPYING +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 TOML authors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/BurntSushi/toml/Makefile b/vendor/github.com/BurntSushi/toml/Makefile deleted file mode 100644 index 3600848d33..0000000000 --- a/vendor/github.com/BurntSushi/toml/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -install: - go install ./... - -test: install - go test -v - toml-test toml-test-decoder - toml-test -encoder toml-test-encoder - -fmt: - gofmt -w *.go */*.go - colcheck *.go */*.go - -tags: - find ./ -name '*.go' -print0 | xargs -0 gotags > TAGS - -push: - git push origin master - git push github master - diff --git a/vendor/github.com/BurntSushi/toml/README.md b/vendor/github.com/BurntSushi/toml/README.md deleted file mode 100644 index 7c1b37ecc7..0000000000 --- a/vendor/github.com/BurntSushi/toml/README.md +++ /dev/null @@ -1,218 +0,0 @@ -## TOML parser and encoder for Go with reflection - -TOML stands for Tom's Obvious, Minimal Language. This Go package provides a -reflection interface similar to Go's standard library `json` and `xml` -packages. This package also supports the `encoding.TextUnmarshaler` and -`encoding.TextMarshaler` interfaces so that you can define custom data -representations. (There is an example of this below.) - -Spec: https://github.com/toml-lang/toml - -Compatible with TOML version -[v0.4.0](https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md) - -Documentation: https://godoc.org/github.com/BurntSushi/toml - -Installation: - -```bash -go get github.com/BurntSushi/toml -``` - -Try the toml validator: - -```bash -go get github.com/BurntSushi/toml/cmd/tomlv -tomlv some-toml-file.toml -``` - -[![Build Status](https://travis-ci.org/BurntSushi/toml.svg?branch=master)](https://travis-ci.org/BurntSushi/toml) [![GoDoc](https://godoc.org/github.com/BurntSushi/toml?status.svg)](https://godoc.org/github.com/BurntSushi/toml) - -### Testing - -This package passes all tests in -[toml-test](https://github.com/BurntSushi/toml-test) for both the decoder -and the encoder. - -### Examples - -This package works similarly to how the Go standard library handles `XML` -and `JSON`. Namely, data is loaded into Go values via reflection. - -For the simplest example, consider some TOML file as just a list of keys -and values: - -```toml -Age = 25 -Cats = [ "Cauchy", "Plato" ] -Pi = 3.14 -Perfection = [ 6, 28, 496, 8128 ] -DOB = 1987-07-05T05:45:00Z -``` - -Which could be defined in Go as: - -```go -type Config struct { - Age int - Cats []string - Pi float64 - Perfection []int - DOB time.Time // requires `import time` -} -``` - -And then decoded with: - -```go -var conf Config -if _, err := toml.Decode(tomlData, &conf); err != nil { - // handle error -} -``` - -You can also use struct tags if your struct field name doesn't map to a TOML -key value directly: - -```toml -some_key_NAME = "wat" -``` - -```go -type TOML struct { - ObscureKey string `toml:"some_key_NAME"` -} -``` - -### Using the `encoding.TextUnmarshaler` interface - -Here's an example that automatically parses duration strings into -`time.Duration` values: - -```toml -[[song]] -name = "Thunder Road" -duration = "4m49s" - -[[song]] -name = "Stairway to Heaven" -duration = "8m03s" -``` - -Which can be decoded with: - -```go -type song struct { - Name string - Duration duration -} -type songs struct { - Song []song -} -var favorites songs -if _, err := toml.Decode(blob, &favorites); err != nil { - log.Fatal(err) -} - -for _, s := range favorites.Song { - fmt.Printf("%s (%s)\n", s.Name, s.Duration) -} -``` - -And you'll also need a `duration` type that satisfies the -`encoding.TextUnmarshaler` interface: - -```go -type duration struct { - time.Duration -} - -func (d *duration) UnmarshalText(text []byte) error { - var err error - d.Duration, err = time.ParseDuration(string(text)) - return err -} -``` - -### More complex usage - -Here's an example of how to load the example from the official spec page: - -```toml -# This is a TOML document. Boom. - -title = "TOML Example" - -[owner] -name = "Tom Preston-Werner" -organization = "GitHub" -bio = "GitHub Cofounder & CEO\nLikes tater tots and beer." -dob = 1979-05-27T07:32:00Z # First class dates? Why not? - -[database] -server = "192.168.1.1" -ports = [ 8001, 8001, 8002 ] -connection_max = 5000 -enabled = true - -[servers] - - # You can indent as you please. Tabs or spaces. TOML don't care. - [servers.alpha] - ip = "10.0.0.1" - dc = "eqdc10" - - [servers.beta] - ip = "10.0.0.2" - dc = "eqdc10" - -[clients] -data = [ ["gamma", "delta"], [1, 2] ] # just an update to make sure parsers support it - -# Line breaks are OK when inside arrays -hosts = [ - "alpha", - "omega" -] -``` - -And the corresponding Go types are: - -```go -type tomlConfig struct { - Title string - Owner ownerInfo - DB database `toml:"database"` - Servers map[string]server - Clients clients -} - -type ownerInfo struct { - Name string - Org string `toml:"organization"` - Bio string - DOB time.Time -} - -type database struct { - Server string - Ports []int - ConnMax int `toml:"connection_max"` - Enabled bool -} - -type server struct { - IP string - DC string -} - -type clients struct { - Data [][]interface{} - Hosts []string -} -``` - -Note that a case insensitive match will be tried if an exact match can't be -found. - -A working example of the above can be found in `_examples/example.{go,toml}`. diff --git a/vendor/github.com/BurntSushi/toml/decode.go b/vendor/github.com/BurntSushi/toml/decode.go deleted file mode 100644 index b0fd51d5b6..0000000000 --- a/vendor/github.com/BurntSushi/toml/decode.go +++ /dev/null @@ -1,509 +0,0 @@ -package toml - -import ( - "fmt" - "io" - "io/ioutil" - "math" - "reflect" - "strings" - "time" -) - -func e(format string, args ...interface{}) error { - return fmt.Errorf("toml: "+format, args...) -} - -// Unmarshaler is the interface implemented by objects that can unmarshal a -// TOML description of themselves. -type Unmarshaler interface { - UnmarshalTOML(interface{}) error -} - -// Unmarshal decodes the contents of `p` in TOML format into a pointer `v`. -func Unmarshal(p []byte, v interface{}) error { - _, err := Decode(string(p), v) - return err -} - -// Primitive is a TOML value that hasn't been decoded into a Go value. -// When using the various `Decode*` functions, the type `Primitive` may -// be given to any value, and its decoding will be delayed. -// -// A `Primitive` value can be decoded using the `PrimitiveDecode` function. -// -// The underlying representation of a `Primitive` value is subject to change. -// Do not rely on it. -// -// N.B. Primitive values are still parsed, so using them will only avoid -// the overhead of reflection. They can be useful when you don't know the -// exact type of TOML data until run time. -type Primitive struct { - undecoded interface{} - context Key -} - -// DEPRECATED! -// -// Use MetaData.PrimitiveDecode instead. -func PrimitiveDecode(primValue Primitive, v interface{}) error { - md := MetaData{decoded: make(map[string]bool)} - return md.unify(primValue.undecoded, rvalue(v)) -} - -// PrimitiveDecode is just like the other `Decode*` functions, except it -// decodes a TOML value that has already been parsed. Valid primitive values -// can *only* be obtained from values filled by the decoder functions, -// including this method. (i.e., `v` may contain more `Primitive` -// values.) -// -// Meta data for primitive values is included in the meta data returned by -// the `Decode*` functions with one exception: keys returned by the Undecoded -// method will only reflect keys that were decoded. Namely, any keys hidden -// behind a Primitive will be considered undecoded. Executing this method will -// update the undecoded keys in the meta data. (See the example.) -func (md *MetaData) PrimitiveDecode(primValue Primitive, v interface{}) error { - md.context = primValue.context - defer func() { md.context = nil }() - return md.unify(primValue.undecoded, rvalue(v)) -} - -// Decode will decode the contents of `data` in TOML format into a pointer -// `v`. -// -// TOML hashes correspond to Go structs or maps. (Dealer's choice. They can be -// used interchangeably.) -// -// TOML arrays of tables correspond to either a slice of structs or a slice -// of maps. -// -// TOML datetimes correspond to Go `time.Time` values. -// -// All other TOML types (float, string, int, bool and array) correspond -// to the obvious Go types. -// -// An exception to the above rules is if a type implements the -// encoding.TextUnmarshaler interface. In this case, any primitive TOML value -// (floats, strings, integers, booleans and datetimes) will be converted to -// a byte string and given to the value's UnmarshalText method. See the -// Unmarshaler example for a demonstration with time duration strings. -// -// Key mapping -// -// TOML keys can map to either keys in a Go map or field names in a Go -// struct. The special `toml` struct tag may be used to map TOML keys to -// struct fields that don't match the key name exactly. (See the example.) -// A case insensitive match to struct names will be tried if an exact match -// can't be found. -// -// The mapping between TOML values and Go values is loose. That is, there -// may exist TOML values that cannot be placed into your representation, and -// there may be parts of your representation that do not correspond to -// TOML values. This loose mapping can be made stricter by using the IsDefined -// and/or Undecoded methods on the MetaData returned. -// -// This decoder will not handle cyclic types. If a cyclic type is passed, -// `Decode` will not terminate. -func Decode(data string, v interface{}) (MetaData, error) { - rv := reflect.ValueOf(v) - if rv.Kind() != reflect.Ptr { - return MetaData{}, e("Decode of non-pointer %s", reflect.TypeOf(v)) - } - if rv.IsNil() { - return MetaData{}, e("Decode of nil %s", reflect.TypeOf(v)) - } - p, err := parse(data) - if err != nil { - return MetaData{}, err - } - md := MetaData{ - p.mapping, p.types, p.ordered, - make(map[string]bool, len(p.ordered)), nil, - } - return md, md.unify(p.mapping, indirect(rv)) -} - -// DecodeFile is just like Decode, except it will automatically read the -// contents of the file at `fpath` and decode it for you. -func DecodeFile(fpath string, v interface{}) (MetaData, error) { - bs, err := ioutil.ReadFile(fpath) - if err != nil { - return MetaData{}, err - } - return Decode(string(bs), v) -} - -// DecodeReader is just like Decode, except it will consume all bytes -// from the reader and decode it for you. -func DecodeReader(r io.Reader, v interface{}) (MetaData, error) { - bs, err := ioutil.ReadAll(r) - if err != nil { - return MetaData{}, err - } - return Decode(string(bs), v) -} - -// unify performs a sort of type unification based on the structure of `rv`, -// which is the client representation. -// -// Any type mismatch produces an error. Finding a type that we don't know -// how to handle produces an unsupported type error. -func (md *MetaData) unify(data interface{}, rv reflect.Value) error { - - // Special case. Look for a `Primitive` value. - if rv.Type() == reflect.TypeOf((*Primitive)(nil)).Elem() { - // Save the undecoded data and the key context into the primitive - // value. - context := make(Key, len(md.context)) - copy(context, md.context) - rv.Set(reflect.ValueOf(Primitive{ - undecoded: data, - context: context, - })) - return nil - } - - // Special case. Unmarshaler Interface support. - if rv.CanAddr() { - if v, ok := rv.Addr().Interface().(Unmarshaler); ok { - return v.UnmarshalTOML(data) - } - } - - // Special case. Handle time.Time values specifically. - // TODO: Remove this code when we decide to drop support for Go 1.1. - // This isn't necessary in Go 1.2 because time.Time satisfies the encoding - // interfaces. - if rv.Type().AssignableTo(rvalue(time.Time{}).Type()) { - return md.unifyDatetime(data, rv) - } - - // Special case. Look for a value satisfying the TextUnmarshaler interface. - if v, ok := rv.Interface().(TextUnmarshaler); ok { - return md.unifyText(data, v) - } - // BUG(burntsushi) - // The behavior here is incorrect whenever a Go type satisfies the - // encoding.TextUnmarshaler interface but also corresponds to a TOML - // hash or array. In particular, the unmarshaler should only be applied - // to primitive TOML values. But at this point, it will be applied to - // all kinds of values and produce an incorrect error whenever those values - // are hashes or arrays (including arrays of tables). - - k := rv.Kind() - - // laziness - if k >= reflect.Int && k <= reflect.Uint64 { - return md.unifyInt(data, rv) - } - switch k { - case reflect.Ptr: - elem := reflect.New(rv.Type().Elem()) - err := md.unify(data, reflect.Indirect(elem)) - if err != nil { - return err - } - rv.Set(elem) - return nil - case reflect.Struct: - return md.unifyStruct(data, rv) - case reflect.Map: - return md.unifyMap(data, rv) - case reflect.Array: - return md.unifyArray(data, rv) - case reflect.Slice: - return md.unifySlice(data, rv) - case reflect.String: - return md.unifyString(data, rv) - case reflect.Bool: - return md.unifyBool(data, rv) - case reflect.Interface: - // we only support empty interfaces. - if rv.NumMethod() > 0 { - return e("unsupported type %s", rv.Type()) - } - return md.unifyAnything(data, rv) - case reflect.Float32: - fallthrough - case reflect.Float64: - return md.unifyFloat64(data, rv) - } - return e("unsupported type %s", rv.Kind()) -} - -func (md *MetaData) unifyStruct(mapping interface{}, rv reflect.Value) error { - tmap, ok := mapping.(map[string]interface{}) - if !ok { - if mapping == nil { - return nil - } - return e("type mismatch for %s: expected table but found %T", - rv.Type().String(), mapping) - } - - for key, datum := range tmap { - var f *field - fields := cachedTypeFields(rv.Type()) - for i := range fields { - ff := &fields[i] - if ff.name == key { - f = ff - break - } - if f == nil && strings.EqualFold(ff.name, key) { - f = ff - } - } - if f != nil { - subv := rv - for _, i := range f.index { - subv = indirect(subv.Field(i)) - } - if isUnifiable(subv) { - md.decoded[md.context.add(key).String()] = true - md.context = append(md.context, key) - if err := md.unify(datum, subv); err != nil { - return err - } - md.context = md.context[0 : len(md.context)-1] - } else if f.name != "" { - // Bad user! No soup for you! - return e("cannot write unexported field %s.%s", - rv.Type().String(), f.name) - } - } - } - return nil -} - -func (md *MetaData) unifyMap(mapping interface{}, rv reflect.Value) error { - tmap, ok := mapping.(map[string]interface{}) - if !ok { - if tmap == nil { - return nil - } - return badtype("map", mapping) - } - if rv.IsNil() { - rv.Set(reflect.MakeMap(rv.Type())) - } - for k, v := range tmap { - md.decoded[md.context.add(k).String()] = true - md.context = append(md.context, k) - - rvkey := indirect(reflect.New(rv.Type().Key())) - rvval := reflect.Indirect(reflect.New(rv.Type().Elem())) - if err := md.unify(v, rvval); err != nil { - return err - } - md.context = md.context[0 : len(md.context)-1] - - rvkey.SetString(k) - rv.SetMapIndex(rvkey, rvval) - } - return nil -} - -func (md *MetaData) unifyArray(data interface{}, rv reflect.Value) error { - datav := reflect.ValueOf(data) - if datav.Kind() != reflect.Slice { - if !datav.IsValid() { - return nil - } - return badtype("slice", data) - } - sliceLen := datav.Len() - if sliceLen != rv.Len() { - return e("expected array length %d; got TOML array of length %d", - rv.Len(), sliceLen) - } - return md.unifySliceArray(datav, rv) -} - -func (md *MetaData) unifySlice(data interface{}, rv reflect.Value) error { - datav := reflect.ValueOf(data) - if datav.Kind() != reflect.Slice { - if !datav.IsValid() { - return nil - } - return badtype("slice", data) - } - n := datav.Len() - if rv.IsNil() || rv.Cap() < n { - rv.Set(reflect.MakeSlice(rv.Type(), n, n)) - } - rv.SetLen(n) - return md.unifySliceArray(datav, rv) -} - -func (md *MetaData) unifySliceArray(data, rv reflect.Value) error { - sliceLen := data.Len() - for i := 0; i < sliceLen; i++ { - v := data.Index(i).Interface() - sliceval := indirect(rv.Index(i)) - if err := md.unify(v, sliceval); err != nil { - return err - } - } - return nil -} - -func (md *MetaData) unifyDatetime(data interface{}, rv reflect.Value) error { - if _, ok := data.(time.Time); ok { - rv.Set(reflect.ValueOf(data)) - return nil - } - return badtype("time.Time", data) -} - -func (md *MetaData) unifyString(data interface{}, rv reflect.Value) error { - if s, ok := data.(string); ok { - rv.SetString(s) - return nil - } - return badtype("string", data) -} - -func (md *MetaData) unifyFloat64(data interface{}, rv reflect.Value) error { - if num, ok := data.(float64); ok { - switch rv.Kind() { - case reflect.Float32: - fallthrough - case reflect.Float64: - rv.SetFloat(num) - default: - panic("bug") - } - return nil - } - return badtype("float", data) -} - -func (md *MetaData) unifyInt(data interface{}, rv reflect.Value) error { - if num, ok := data.(int64); ok { - if rv.Kind() >= reflect.Int && rv.Kind() <= reflect.Int64 { - switch rv.Kind() { - case reflect.Int, reflect.Int64: - // No bounds checking necessary. - case reflect.Int8: - if num < math.MinInt8 || num > math.MaxInt8 { - return e("value %d is out of range for int8", num) - } - case reflect.Int16: - if num < math.MinInt16 || num > math.MaxInt16 { - return e("value %d is out of range for int16", num) - } - case reflect.Int32: - if num < math.MinInt32 || num > math.MaxInt32 { - return e("value %d is out of range for int32", num) - } - } - rv.SetInt(num) - } else if rv.Kind() >= reflect.Uint && rv.Kind() <= reflect.Uint64 { - unum := uint64(num) - switch rv.Kind() { - case reflect.Uint, reflect.Uint64: - // No bounds checking necessary. - case reflect.Uint8: - if num < 0 || unum > math.MaxUint8 { - return e("value %d is out of range for uint8", num) - } - case reflect.Uint16: - if num < 0 || unum > math.MaxUint16 { - return e("value %d is out of range for uint16", num) - } - case reflect.Uint32: - if num < 0 || unum > math.MaxUint32 { - return e("value %d is out of range for uint32", num) - } - } - rv.SetUint(unum) - } else { - panic("unreachable") - } - return nil - } - return badtype("integer", data) -} - -func (md *MetaData) unifyBool(data interface{}, rv reflect.Value) error { - if b, ok := data.(bool); ok { - rv.SetBool(b) - return nil - } - return badtype("boolean", data) -} - -func (md *MetaData) unifyAnything(data interface{}, rv reflect.Value) error { - rv.Set(reflect.ValueOf(data)) - return nil -} - -func (md *MetaData) unifyText(data interface{}, v TextUnmarshaler) error { - var s string - switch sdata := data.(type) { - case TextMarshaler: - text, err := sdata.MarshalText() - if err != nil { - return err - } - s = string(text) - case fmt.Stringer: - s = sdata.String() - case string: - s = sdata - case bool: - s = fmt.Sprintf("%v", sdata) - case int64: - s = fmt.Sprintf("%d", sdata) - case float64: - s = fmt.Sprintf("%f", sdata) - default: - return badtype("primitive (string-like)", data) - } - if err := v.UnmarshalText([]byte(s)); err != nil { - return err - } - return nil -} - -// rvalue returns a reflect.Value of `v`. All pointers are resolved. -func rvalue(v interface{}) reflect.Value { - return indirect(reflect.ValueOf(v)) -} - -// indirect returns the value pointed to by a pointer. -// Pointers are followed until the value is not a pointer. -// New values are allocated for each nil pointer. -// -// An exception to this rule is if the value satisfies an interface of -// interest to us (like encoding.TextUnmarshaler). -func indirect(v reflect.Value) reflect.Value { - if v.Kind() != reflect.Ptr { - if v.CanSet() { - pv := v.Addr() - if _, ok := pv.Interface().(TextUnmarshaler); ok { - return pv - } - } - return v - } - if v.IsNil() { - v.Set(reflect.New(v.Type().Elem())) - } - return indirect(reflect.Indirect(v)) -} - -func isUnifiable(rv reflect.Value) bool { - if rv.CanSet() { - return true - } - if _, ok := rv.Interface().(TextUnmarshaler); ok { - return true - } - return false -} - -func badtype(expected string, data interface{}) error { - return e("cannot load TOML value of type %T into a Go %s", data, expected) -} diff --git a/vendor/github.com/BurntSushi/toml/decode_meta.go b/vendor/github.com/BurntSushi/toml/decode_meta.go deleted file mode 100644 index b9914a6798..0000000000 --- a/vendor/github.com/BurntSushi/toml/decode_meta.go +++ /dev/null @@ -1,121 +0,0 @@ -package toml - -import "strings" - -// MetaData allows access to meta information about TOML data that may not -// be inferrable via reflection. In particular, whether a key has been defined -// and the TOML type of a key. -type MetaData struct { - mapping map[string]interface{} - types map[string]tomlType - keys []Key - decoded map[string]bool - context Key // Used only during decoding. -} - -// IsDefined returns true if the key given exists in the TOML data. The key -// should be specified hierarchially. e.g., -// -// // access the TOML key 'a.b.c' -// IsDefined("a", "b", "c") -// -// IsDefined will return false if an empty key given. Keys are case sensitive. -func (md *MetaData) IsDefined(key ...string) bool { - if len(key) == 0 { - return false - } - - var hash map[string]interface{} - var ok bool - var hashOrVal interface{} = md.mapping - for _, k := range key { - if hash, ok = hashOrVal.(map[string]interface{}); !ok { - return false - } - if hashOrVal, ok = hash[k]; !ok { - return false - } - } - return true -} - -// Type returns a string representation of the type of the key specified. -// -// Type will return the empty string if given an empty key or a key that -// does not exist. Keys are case sensitive. -func (md *MetaData) Type(key ...string) string { - fullkey := strings.Join(key, ".") - if typ, ok := md.types[fullkey]; ok { - return typ.typeString() - } - return "" -} - -// Key is the type of any TOML key, including key groups. Use (MetaData).Keys -// to get values of this type. -type Key []string - -func (k Key) String() string { - return strings.Join(k, ".") -} - -func (k Key) maybeQuotedAll() string { - var ss []string - for i := range k { - ss = append(ss, k.maybeQuoted(i)) - } - return strings.Join(ss, ".") -} - -func (k Key) maybeQuoted(i int) string { - quote := false - for _, c := range k[i] { - if !isBareKeyChar(c) { - quote = true - break - } - } - if quote { - return "\"" + strings.Replace(k[i], "\"", "\\\"", -1) + "\"" - } - return k[i] -} - -func (k Key) add(piece string) Key { - newKey := make(Key, len(k)+1) - copy(newKey, k) - newKey[len(k)] = piece - return newKey -} - -// Keys returns a slice of every key in the TOML data, including key groups. -// Each key is itself a slice, where the first element is the top of the -// hierarchy and the last is the most specific. -// -// The list will have the same order as the keys appeared in the TOML data. -// -// All keys returned are non-empty. -func (md *MetaData) Keys() []Key { - return md.keys -} - -// Undecoded returns all keys that have not been decoded in the order in which -// they appear in the original TOML document. -// -// This includes keys that haven't been decoded because of a Primitive value. -// Once the Primitive value is decoded, the keys will be considered decoded. -// -// Also note that decoding into an empty interface will result in no decoding, -// and so no keys will be considered decoded. -// -// In this sense, the Undecoded keys correspond to keys in the TOML document -// that do not have a concrete type in your representation. -func (md *MetaData) Undecoded() []Key { - undecoded := make([]Key, 0, len(md.keys)) - for _, key := range md.keys { - if !md.decoded[key.String()] { - undecoded = append(undecoded, key) - } - } - return undecoded -} diff --git a/vendor/github.com/BurntSushi/toml/doc.go b/vendor/github.com/BurntSushi/toml/doc.go deleted file mode 100644 index b371f396ed..0000000000 --- a/vendor/github.com/BurntSushi/toml/doc.go +++ /dev/null @@ -1,27 +0,0 @@ -/* -Package toml provides facilities for decoding and encoding TOML configuration -files via reflection. There is also support for delaying decoding with -the Primitive type, and querying the set of keys in a TOML document with the -MetaData type. - -The specification implemented: https://github.com/toml-lang/toml - -The sub-command github.com/BurntSushi/toml/cmd/tomlv can be used to verify -whether a file is a valid TOML document. It can also be used to print the -type of each key in a TOML document. - -Testing - -There are two important types of tests used for this package. The first is -contained inside '*_test.go' files and uses the standard Go unit testing -framework. These tests are primarily devoted to holistically testing the -decoder and encoder. - -The second type of testing is used to verify the implementation's adherence -to the TOML specification. These tests have been factored into their own -project: https://github.com/BurntSushi/toml-test - -The reason the tests are in a separate project is so that they can be used by -any implementation of TOML. Namely, it is language agnostic. -*/ -package toml diff --git a/vendor/github.com/BurntSushi/toml/encode.go b/vendor/github.com/BurntSushi/toml/encode.go deleted file mode 100644 index d905c21a24..0000000000 --- a/vendor/github.com/BurntSushi/toml/encode.go +++ /dev/null @@ -1,568 +0,0 @@ -package toml - -import ( - "bufio" - "errors" - "fmt" - "io" - "reflect" - "sort" - "strconv" - "strings" - "time" -) - -type tomlEncodeError struct{ error } - -var ( - errArrayMixedElementTypes = errors.New( - "toml: cannot encode array with mixed element types") - errArrayNilElement = errors.New( - "toml: cannot encode array with nil element") - errNonString = errors.New( - "toml: cannot encode a map with non-string key type") - errAnonNonStruct = errors.New( - "toml: cannot encode an anonymous field that is not a struct") - errArrayNoTable = errors.New( - "toml: TOML array element cannot contain a table") - errNoKey = errors.New( - "toml: top-level values must be Go maps or structs") - errAnything = errors.New("") // used in testing -) - -var quotedReplacer = strings.NewReplacer( - "\t", "\\t", - "\n", "\\n", - "\r", "\\r", - "\"", "\\\"", - "\\", "\\\\", -) - -// Encoder controls the encoding of Go values to a TOML document to some -// io.Writer. -// -// The indentation level can be controlled with the Indent field. -type Encoder struct { - // A single indentation level. By default it is two spaces. - Indent string - - // hasWritten is whether we have written any output to w yet. - hasWritten bool - w *bufio.Writer -} - -// NewEncoder returns a TOML encoder that encodes Go values to the io.Writer -// given. By default, a single indentation level is 2 spaces. -func NewEncoder(w io.Writer) *Encoder { - return &Encoder{ - w: bufio.NewWriter(w), - Indent: " ", - } -} - -// Encode writes a TOML representation of the Go value to the underlying -// io.Writer. If the value given cannot be encoded to a valid TOML document, -// then an error is returned. -// -// The mapping between Go values and TOML values should be precisely the same -// as for the Decode* functions. Similarly, the TextMarshaler interface is -// supported by encoding the resulting bytes as strings. (If you want to write -// arbitrary binary data then you will need to use something like base64 since -// TOML does not have any binary types.) -// -// When encoding TOML hashes (i.e., Go maps or structs), keys without any -// sub-hashes are encoded first. -// -// If a Go map is encoded, then its keys are sorted alphabetically for -// deterministic output. More control over this behavior may be provided if -// there is demand for it. -// -// Encoding Go values without a corresponding TOML representation---like map -// types with non-string keys---will cause an error to be returned. Similarly -// for mixed arrays/slices, arrays/slices with nil elements, embedded -// non-struct types and nested slices containing maps or structs. -// (e.g., [][]map[string]string is not allowed but []map[string]string is OK -// and so is []map[string][]string.) -func (enc *Encoder) Encode(v interface{}) error { - rv := eindirect(reflect.ValueOf(v)) - if err := enc.safeEncode(Key([]string{}), rv); err != nil { - return err - } - return enc.w.Flush() -} - -func (enc *Encoder) safeEncode(key Key, rv reflect.Value) (err error) { - defer func() { - if r := recover(); r != nil { - if terr, ok := r.(tomlEncodeError); ok { - err = terr.error - return - } - panic(r) - } - }() - enc.encode(key, rv) - return nil -} - -func (enc *Encoder) encode(key Key, rv reflect.Value) { - // Special case. Time needs to be in ISO8601 format. - // Special case. If we can marshal the type to text, then we used that. - // Basically, this prevents the encoder for handling these types as - // generic structs (or whatever the underlying type of a TextMarshaler is). - switch rv.Interface().(type) { - case time.Time, TextMarshaler: - enc.keyEqElement(key, rv) - return - } - - k := rv.Kind() - switch k { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, - reflect.Int64, - reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, - reflect.Uint64, - reflect.Float32, reflect.Float64, reflect.String, reflect.Bool: - enc.keyEqElement(key, rv) - case reflect.Array, reflect.Slice: - if typeEqual(tomlArrayHash, tomlTypeOfGo(rv)) { - enc.eArrayOfTables(key, rv) - } else { - enc.keyEqElement(key, rv) - } - case reflect.Interface: - if rv.IsNil() { - return - } - enc.encode(key, rv.Elem()) - case reflect.Map: - if rv.IsNil() { - return - } - enc.eTable(key, rv) - case reflect.Ptr: - if rv.IsNil() { - return - } - enc.encode(key, rv.Elem()) - case reflect.Struct: - enc.eTable(key, rv) - default: - panic(e("unsupported type for key '%s': %s", key, k)) - } -} - -// eElement encodes any value that can be an array element (primitives and -// arrays). -func (enc *Encoder) eElement(rv reflect.Value) { - switch v := rv.Interface().(type) { - case time.Time: - // Special case time.Time as a primitive. Has to come before - // TextMarshaler below because time.Time implements - // encoding.TextMarshaler, but we need to always use UTC. - enc.wf(v.UTC().Format("2006-01-02T15:04:05Z")) - return - case TextMarshaler: - // Special case. Use text marshaler if it's available for this value. - if s, err := v.MarshalText(); err != nil { - encPanic(err) - } else { - enc.writeQuoted(string(s)) - } - return - } - switch rv.Kind() { - case reflect.Bool: - enc.wf(strconv.FormatBool(rv.Bool())) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, - reflect.Int64: - enc.wf(strconv.FormatInt(rv.Int(), 10)) - case reflect.Uint, reflect.Uint8, reflect.Uint16, - reflect.Uint32, reflect.Uint64: - enc.wf(strconv.FormatUint(rv.Uint(), 10)) - case reflect.Float32: - enc.wf(floatAddDecimal(strconv.FormatFloat(rv.Float(), 'f', -1, 32))) - case reflect.Float64: - enc.wf(floatAddDecimal(strconv.FormatFloat(rv.Float(), 'f', -1, 64))) - case reflect.Array, reflect.Slice: - enc.eArrayOrSliceElement(rv) - case reflect.Interface: - enc.eElement(rv.Elem()) - case reflect.String: - enc.writeQuoted(rv.String()) - default: - panic(e("unexpected primitive type: %s", rv.Kind())) - } -} - -// By the TOML spec, all floats must have a decimal with at least one -// number on either side. -func floatAddDecimal(fstr string) string { - if !strings.Contains(fstr, ".") { - return fstr + ".0" - } - return fstr -} - -func (enc *Encoder) writeQuoted(s string) { - enc.wf("\"%s\"", quotedReplacer.Replace(s)) -} - -func (enc *Encoder) eArrayOrSliceElement(rv reflect.Value) { - length := rv.Len() - enc.wf("[") - for i := 0; i < length; i++ { - elem := rv.Index(i) - enc.eElement(elem) - if i != length-1 { - enc.wf(", ") - } - } - enc.wf("]") -} - -func (enc *Encoder) eArrayOfTables(key Key, rv reflect.Value) { - if len(key) == 0 { - encPanic(errNoKey) - } - for i := 0; i < rv.Len(); i++ { - trv := rv.Index(i) - if isNil(trv) { - continue - } - panicIfInvalidKey(key) - enc.newline() - enc.wf("%s[[%s]]", enc.indentStr(key), key.maybeQuotedAll()) - enc.newline() - enc.eMapOrStruct(key, trv) - } -} - -func (enc *Encoder) eTable(key Key, rv reflect.Value) { - panicIfInvalidKey(key) - if len(key) == 1 { - // Output an extra newline between top-level tables. - // (The newline isn't written if nothing else has been written though.) - enc.newline() - } - if len(key) > 0 { - enc.wf("%s[%s]", enc.indentStr(key), key.maybeQuotedAll()) - enc.newline() - } - enc.eMapOrStruct(key, rv) -} - -func (enc *Encoder) eMapOrStruct(key Key, rv reflect.Value) { - switch rv := eindirect(rv); rv.Kind() { - case reflect.Map: - enc.eMap(key, rv) - case reflect.Struct: - enc.eStruct(key, rv) - default: - panic("eTable: unhandled reflect.Value Kind: " + rv.Kind().String()) - } -} - -func (enc *Encoder) eMap(key Key, rv reflect.Value) { - rt := rv.Type() - if rt.Key().Kind() != reflect.String { - encPanic(errNonString) - } - - // Sort keys so that we have deterministic output. And write keys directly - // underneath this key first, before writing sub-structs or sub-maps. - var mapKeysDirect, mapKeysSub []string - for _, mapKey := range rv.MapKeys() { - k := mapKey.String() - if typeIsHash(tomlTypeOfGo(rv.MapIndex(mapKey))) { - mapKeysSub = append(mapKeysSub, k) - } else { - mapKeysDirect = append(mapKeysDirect, k) - } - } - - var writeMapKeys = func(mapKeys []string) { - sort.Strings(mapKeys) - for _, mapKey := range mapKeys { - mrv := rv.MapIndex(reflect.ValueOf(mapKey)) - if isNil(mrv) { - // Don't write anything for nil fields. - continue - } - enc.encode(key.add(mapKey), mrv) - } - } - writeMapKeys(mapKeysDirect) - writeMapKeys(mapKeysSub) -} - -func (enc *Encoder) eStruct(key Key, rv reflect.Value) { - // Write keys for fields directly under this key first, because if we write - // a field that creates a new table, then all keys under it will be in that - // table (not the one we're writing here). - rt := rv.Type() - var fieldsDirect, fieldsSub [][]int - var addFields func(rt reflect.Type, rv reflect.Value, start []int) - addFields = func(rt reflect.Type, rv reflect.Value, start []int) { - for i := 0; i < rt.NumField(); i++ { - f := rt.Field(i) - // skip unexported fields - if f.PkgPath != "" && !f.Anonymous { - continue - } - frv := rv.Field(i) - if f.Anonymous { - t := f.Type - switch t.Kind() { - case reflect.Struct: - // Treat anonymous struct fields with - // tag names as though they are not - // anonymous, like encoding/json does. - if getOptions(f.Tag).name == "" { - addFields(t, frv, f.Index) - continue - } - case reflect.Ptr: - if t.Elem().Kind() == reflect.Struct && - getOptions(f.Tag).name == "" { - if !frv.IsNil() { - addFields(t.Elem(), frv.Elem(), f.Index) - } - continue - } - // Fall through to the normal field encoding logic below - // for non-struct anonymous fields. - } - } - - if typeIsHash(tomlTypeOfGo(frv)) { - fieldsSub = append(fieldsSub, append(start, f.Index...)) - } else { - fieldsDirect = append(fieldsDirect, append(start, f.Index...)) - } - } - } - addFields(rt, rv, nil) - - var writeFields = func(fields [][]int) { - for _, fieldIndex := range fields { - sft := rt.FieldByIndex(fieldIndex) - sf := rv.FieldByIndex(fieldIndex) - if isNil(sf) { - // Don't write anything for nil fields. - continue - } - - opts := getOptions(sft.Tag) - if opts.skip { - continue - } - keyName := sft.Name - if opts.name != "" { - keyName = opts.name - } - if opts.omitempty && isEmpty(sf) { - continue - } - if opts.omitzero && isZero(sf) { - continue - } - - enc.encode(key.add(keyName), sf) - } - } - writeFields(fieldsDirect) - writeFields(fieldsSub) -} - -// tomlTypeName returns the TOML type name of the Go value's type. It is -// used to determine whether the types of array elements are mixed (which is -// forbidden). If the Go value is nil, then it is illegal for it to be an array -// element, and valueIsNil is returned as true. - -// Returns the TOML type of a Go value. The type may be `nil`, which means -// no concrete TOML type could be found. -func tomlTypeOfGo(rv reflect.Value) tomlType { - if isNil(rv) || !rv.IsValid() { - return nil - } - switch rv.Kind() { - case reflect.Bool: - return tomlBool - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, - reflect.Int64, - reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, - reflect.Uint64: - return tomlInteger - case reflect.Float32, reflect.Float64: - return tomlFloat - case reflect.Array, reflect.Slice: - if typeEqual(tomlHash, tomlArrayType(rv)) { - return tomlArrayHash - } - return tomlArray - case reflect.Ptr, reflect.Interface: - return tomlTypeOfGo(rv.Elem()) - case reflect.String: - return tomlString - case reflect.Map: - return tomlHash - case reflect.Struct: - switch rv.Interface().(type) { - case time.Time: - return tomlDatetime - case TextMarshaler: - return tomlString - default: - return tomlHash - } - default: - panic("unexpected reflect.Kind: " + rv.Kind().String()) - } -} - -// tomlArrayType returns the element type of a TOML array. The type returned -// may be nil if it cannot be determined (e.g., a nil slice or a zero length -// slize). This function may also panic if it finds a type that cannot be -// expressed in TOML (such as nil elements, heterogeneous arrays or directly -// nested arrays of tables). -func tomlArrayType(rv reflect.Value) tomlType { - if isNil(rv) || !rv.IsValid() || rv.Len() == 0 { - return nil - } - firstType := tomlTypeOfGo(rv.Index(0)) - if firstType == nil { - encPanic(errArrayNilElement) - } - - rvlen := rv.Len() - for i := 1; i < rvlen; i++ { - elem := rv.Index(i) - switch elemType := tomlTypeOfGo(elem); { - case elemType == nil: - encPanic(errArrayNilElement) - case !typeEqual(firstType, elemType): - encPanic(errArrayMixedElementTypes) - } - } - // If we have a nested array, then we must make sure that the nested - // array contains ONLY primitives. - // This checks arbitrarily nested arrays. - if typeEqual(firstType, tomlArray) || typeEqual(firstType, tomlArrayHash) { - nest := tomlArrayType(eindirect(rv.Index(0))) - if typeEqual(nest, tomlHash) || typeEqual(nest, tomlArrayHash) { - encPanic(errArrayNoTable) - } - } - return firstType -} - -type tagOptions struct { - skip bool // "-" - name string - omitempty bool - omitzero bool -} - -func getOptions(tag reflect.StructTag) tagOptions { - t := tag.Get("toml") - if t == "-" { - return tagOptions{skip: true} - } - var opts tagOptions - parts := strings.Split(t, ",") - opts.name = parts[0] - for _, s := range parts[1:] { - switch s { - case "omitempty": - opts.omitempty = true - case "omitzero": - opts.omitzero = true - } - } - return opts -} - -func isZero(rv reflect.Value) bool { - switch rv.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return rv.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return rv.Uint() == 0 - case reflect.Float32, reflect.Float64: - return rv.Float() == 0.0 - } - return false -} - -func isEmpty(rv reflect.Value) bool { - switch rv.Kind() { - case reflect.Array, reflect.Slice, reflect.Map, reflect.String: - return rv.Len() == 0 - case reflect.Bool: - return !rv.Bool() - } - return false -} - -func (enc *Encoder) newline() { - if enc.hasWritten { - enc.wf("\n") - } -} - -func (enc *Encoder) keyEqElement(key Key, val reflect.Value) { - if len(key) == 0 { - encPanic(errNoKey) - } - panicIfInvalidKey(key) - enc.wf("%s%s = ", enc.indentStr(key), key.maybeQuoted(len(key)-1)) - enc.eElement(val) - enc.newline() -} - -func (enc *Encoder) wf(format string, v ...interface{}) { - if _, err := fmt.Fprintf(enc.w, format, v...); err != nil { - encPanic(err) - } - enc.hasWritten = true -} - -func (enc *Encoder) indentStr(key Key) string { - return strings.Repeat(enc.Indent, len(key)-1) -} - -func encPanic(err error) { - panic(tomlEncodeError{err}) -} - -func eindirect(v reflect.Value) reflect.Value { - switch v.Kind() { - case reflect.Ptr, reflect.Interface: - return eindirect(v.Elem()) - default: - return v - } -} - -func isNil(rv reflect.Value) bool { - switch rv.Kind() { - case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: - return rv.IsNil() - default: - return false - } -} - -func panicIfInvalidKey(key Key) { - for _, k := range key { - if len(k) == 0 { - encPanic(e("Key '%s' is not a valid table name. Key names "+ - "cannot be empty.", key.maybeQuotedAll())) - } - } -} - -func isValidKeyName(s string) bool { - return len(s) != 0 -} diff --git a/vendor/github.com/BurntSushi/toml/encoding_types.go b/vendor/github.com/BurntSushi/toml/encoding_types.go deleted file mode 100644 index d36e1dd600..0000000000 --- a/vendor/github.com/BurntSushi/toml/encoding_types.go +++ /dev/null @@ -1,19 +0,0 @@ -// +build go1.2 - -package toml - -// In order to support Go 1.1, we define our own TextMarshaler and -// TextUnmarshaler types. For Go 1.2+, we just alias them with the -// standard library interfaces. - -import ( - "encoding" -) - -// TextMarshaler is a synonym for encoding.TextMarshaler. It is defined here -// so that Go 1.1 can be supported. -type TextMarshaler encoding.TextMarshaler - -// TextUnmarshaler is a synonym for encoding.TextUnmarshaler. It is defined -// here so that Go 1.1 can be supported. -type TextUnmarshaler encoding.TextUnmarshaler diff --git a/vendor/github.com/BurntSushi/toml/encoding_types_1.1.go b/vendor/github.com/BurntSushi/toml/encoding_types_1.1.go deleted file mode 100644 index e8d503d046..0000000000 --- a/vendor/github.com/BurntSushi/toml/encoding_types_1.1.go +++ /dev/null @@ -1,18 +0,0 @@ -// +build !go1.2 - -package toml - -// These interfaces were introduced in Go 1.2, so we add them manually when -// compiling for Go 1.1. - -// TextMarshaler is a synonym for encoding.TextMarshaler. It is defined here -// so that Go 1.1 can be supported. -type TextMarshaler interface { - MarshalText() (text []byte, err error) -} - -// TextUnmarshaler is a synonym for encoding.TextUnmarshaler. It is defined -// here so that Go 1.1 can be supported. -type TextUnmarshaler interface { - UnmarshalText(text []byte) error -} diff --git a/vendor/github.com/BurntSushi/toml/lex.go b/vendor/github.com/BurntSushi/toml/lex.go deleted file mode 100644 index e0a742a887..0000000000 --- a/vendor/github.com/BurntSushi/toml/lex.go +++ /dev/null @@ -1,953 +0,0 @@ -package toml - -import ( - "fmt" - "strings" - "unicode" - "unicode/utf8" -) - -type itemType int - -const ( - itemError itemType = iota - itemNIL // used in the parser to indicate no type - itemEOF - itemText - itemString - itemRawString - itemMultilineString - itemRawMultilineString - itemBool - itemInteger - itemFloat - itemDatetime - itemArray // the start of an array - itemArrayEnd - itemTableStart - itemTableEnd - itemArrayTableStart - itemArrayTableEnd - itemKeyStart - itemCommentStart - itemInlineTableStart - itemInlineTableEnd -) - -const ( - eof = 0 - comma = ',' - tableStart = '[' - tableEnd = ']' - arrayTableStart = '[' - arrayTableEnd = ']' - tableSep = '.' - keySep = '=' - arrayStart = '[' - arrayEnd = ']' - commentStart = '#' - stringStart = '"' - stringEnd = '"' - rawStringStart = '\'' - rawStringEnd = '\'' - inlineTableStart = '{' - inlineTableEnd = '}' -) - -type stateFn func(lx *lexer) stateFn - -type lexer struct { - input string - start int - pos int - line int - state stateFn - items chan item - - // Allow for backing up up to three runes. - // This is necessary because TOML contains 3-rune tokens (""" and '''). - prevWidths [3]int - nprev int // how many of prevWidths are in use - // If we emit an eof, we can still back up, but it is not OK to call - // next again. - atEOF bool - - // A stack of state functions used to maintain context. - // The idea is to reuse parts of the state machine in various places. - // For example, values can appear at the top level or within arbitrarily - // nested arrays. The last state on the stack is used after a value has - // been lexed. Similarly for comments. - stack []stateFn -} - -type item struct { - typ itemType - val string - line int -} - -func (lx *lexer) nextItem() item { - for { - select { - case item := <-lx.items: - return item - default: - lx.state = lx.state(lx) - } - } -} - -func lex(input string) *lexer { - lx := &lexer{ - input: input, - state: lexTop, - line: 1, - items: make(chan item, 10), - stack: make([]stateFn, 0, 10), - } - return lx -} - -func (lx *lexer) push(state stateFn) { - lx.stack = append(lx.stack, state) -} - -func (lx *lexer) pop() stateFn { - if len(lx.stack) == 0 { - return lx.errorf("BUG in lexer: no states to pop") - } - last := lx.stack[len(lx.stack)-1] - lx.stack = lx.stack[0 : len(lx.stack)-1] - return last -} - -func (lx *lexer) current() string { - return lx.input[lx.start:lx.pos] -} - -func (lx *lexer) emit(typ itemType) { - lx.items <- item{typ, lx.current(), lx.line} - lx.start = lx.pos -} - -func (lx *lexer) emitTrim(typ itemType) { - lx.items <- item{typ, strings.TrimSpace(lx.current()), lx.line} - lx.start = lx.pos -} - -func (lx *lexer) next() (r rune) { - if lx.atEOF { - panic("next called after EOF") - } - if lx.pos >= len(lx.input) { - lx.atEOF = true - return eof - } - - if lx.input[lx.pos] == '\n' { - lx.line++ - } - lx.prevWidths[2] = lx.prevWidths[1] - lx.prevWidths[1] = lx.prevWidths[0] - if lx.nprev < 3 { - lx.nprev++ - } - r, w := utf8.DecodeRuneInString(lx.input[lx.pos:]) - lx.prevWidths[0] = w - lx.pos += w - return r -} - -// ignore skips over the pending input before this point. -func (lx *lexer) ignore() { - lx.start = lx.pos -} - -// backup steps back one rune. Can be called only twice between calls to next. -func (lx *lexer) backup() { - if lx.atEOF { - lx.atEOF = false - return - } - if lx.nprev < 1 { - panic("backed up too far") - } - w := lx.prevWidths[0] - lx.prevWidths[0] = lx.prevWidths[1] - lx.prevWidths[1] = lx.prevWidths[2] - lx.nprev-- - lx.pos -= w - if lx.pos < len(lx.input) && lx.input[lx.pos] == '\n' { - lx.line-- - } -} - -// accept consumes the next rune if it's equal to `valid`. -func (lx *lexer) accept(valid rune) bool { - if lx.next() == valid { - return true - } - lx.backup() - return false -} - -// peek returns but does not consume the next rune in the input. -func (lx *lexer) peek() rune { - r := lx.next() - lx.backup() - return r -} - -// skip ignores all input that matches the given predicate. -func (lx *lexer) skip(pred func(rune) bool) { - for { - r := lx.next() - if pred(r) { - continue - } - lx.backup() - lx.ignore() - return - } -} - -// errorf stops all lexing by emitting an error and returning `nil`. -// Note that any value that is a character is escaped if it's a special -// character (newlines, tabs, etc.). -func (lx *lexer) errorf(format string, values ...interface{}) stateFn { - lx.items <- item{ - itemError, - fmt.Sprintf(format, values...), - lx.line, - } - return nil -} - -// lexTop consumes elements at the top level of TOML data. -func lexTop(lx *lexer) stateFn { - r := lx.next() - if isWhitespace(r) || isNL(r) { - return lexSkip(lx, lexTop) - } - switch r { - case commentStart: - lx.push(lexTop) - return lexCommentStart - case tableStart: - return lexTableStart - case eof: - if lx.pos > lx.start { - return lx.errorf("unexpected EOF") - } - lx.emit(itemEOF) - return nil - } - - // At this point, the only valid item can be a key, so we back up - // and let the key lexer do the rest. - lx.backup() - lx.push(lexTopEnd) - return lexKeyStart -} - -// lexTopEnd is entered whenever a top-level item has been consumed. (A value -// or a table.) It must see only whitespace, and will turn back to lexTop -// upon a newline. If it sees EOF, it will quit the lexer successfully. -func lexTopEnd(lx *lexer) stateFn { - r := lx.next() - switch { - case r == commentStart: - // a comment will read to a newline for us. - lx.push(lexTop) - return lexCommentStart - case isWhitespace(r): - return lexTopEnd - case isNL(r): - lx.ignore() - return lexTop - case r == eof: - lx.emit(itemEOF) - return nil - } - return lx.errorf("expected a top-level item to end with a newline, "+ - "comment, or EOF, but got %q instead", r) -} - -// lexTable lexes the beginning of a table. Namely, it makes sure that -// it starts with a character other than '.' and ']'. -// It assumes that '[' has already been consumed. -// It also handles the case that this is an item in an array of tables. -// e.g., '[[name]]'. -func lexTableStart(lx *lexer) stateFn { - if lx.peek() == arrayTableStart { - lx.next() - lx.emit(itemArrayTableStart) - lx.push(lexArrayTableEnd) - } else { - lx.emit(itemTableStart) - lx.push(lexTableEnd) - } - return lexTableNameStart -} - -func lexTableEnd(lx *lexer) stateFn { - lx.emit(itemTableEnd) - return lexTopEnd -} - -func lexArrayTableEnd(lx *lexer) stateFn { - if r := lx.next(); r != arrayTableEnd { - return lx.errorf("expected end of table array name delimiter %q, "+ - "but got %q instead", arrayTableEnd, r) - } - lx.emit(itemArrayTableEnd) - return lexTopEnd -} - -func lexTableNameStart(lx *lexer) stateFn { - lx.skip(isWhitespace) - switch r := lx.peek(); { - case r == tableEnd || r == eof: - return lx.errorf("unexpected end of table name " + - "(table names cannot be empty)") - case r == tableSep: - return lx.errorf("unexpected table separator " + - "(table names cannot be empty)") - case r == stringStart || r == rawStringStart: - lx.ignore() - lx.push(lexTableNameEnd) - return lexValue // reuse string lexing - default: - return lexBareTableName - } -} - -// lexBareTableName lexes the name of a table. It assumes that at least one -// valid character for the table has already been read. -func lexBareTableName(lx *lexer) stateFn { - r := lx.next() - if isBareKeyChar(r) { - return lexBareTableName - } - lx.backup() - lx.emit(itemText) - return lexTableNameEnd -} - -// lexTableNameEnd reads the end of a piece of a table name, optionally -// consuming whitespace. -func lexTableNameEnd(lx *lexer) stateFn { - lx.skip(isWhitespace) - switch r := lx.next(); { - case isWhitespace(r): - return lexTableNameEnd - case r == tableSep: - lx.ignore() - return lexTableNameStart - case r == tableEnd: - return lx.pop() - default: - return lx.errorf("expected '.' or ']' to end table name, "+ - "but got %q instead", r) - } -} - -// lexKeyStart consumes a key name up until the first non-whitespace character. -// lexKeyStart will ignore whitespace. -func lexKeyStart(lx *lexer) stateFn { - r := lx.peek() - switch { - case r == keySep: - return lx.errorf("unexpected key separator %q", keySep) - case isWhitespace(r) || isNL(r): - lx.next() - return lexSkip(lx, lexKeyStart) - case r == stringStart || r == rawStringStart: - lx.ignore() - lx.emit(itemKeyStart) - lx.push(lexKeyEnd) - return lexValue // reuse string lexing - default: - lx.ignore() - lx.emit(itemKeyStart) - return lexBareKey - } -} - -// lexBareKey consumes the text of a bare key. Assumes that the first character -// (which is not whitespace) has not yet been consumed. -func lexBareKey(lx *lexer) stateFn { - switch r := lx.next(); { - case isBareKeyChar(r): - return lexBareKey - case isWhitespace(r): - lx.backup() - lx.emit(itemText) - return lexKeyEnd - case r == keySep: - lx.backup() - lx.emit(itemText) - return lexKeyEnd - default: - return lx.errorf("bare keys cannot contain %q", r) - } -} - -// lexKeyEnd consumes the end of a key and trims whitespace (up to the key -// separator). -func lexKeyEnd(lx *lexer) stateFn { - switch r := lx.next(); { - case r == keySep: - return lexSkip(lx, lexValue) - case isWhitespace(r): - return lexSkip(lx, lexKeyEnd) - default: - return lx.errorf("expected key separator %q, but got %q instead", - keySep, r) - } -} - -// lexValue starts the consumption of a value anywhere a value is expected. -// lexValue will ignore whitespace. -// After a value is lexed, the last state on the next is popped and returned. -func lexValue(lx *lexer) stateFn { - // We allow whitespace to precede a value, but NOT newlines. - // In array syntax, the array states are responsible for ignoring newlines. - r := lx.next() - switch { - case isWhitespace(r): - return lexSkip(lx, lexValue) - case isDigit(r): - lx.backup() // avoid an extra state and use the same as above - return lexNumberOrDateStart - } - switch r { - case arrayStart: - lx.ignore() - lx.emit(itemArray) - return lexArrayValue - case inlineTableStart: - lx.ignore() - lx.emit(itemInlineTableStart) - return lexInlineTableValue - case stringStart: - if lx.accept(stringStart) { - if lx.accept(stringStart) { - lx.ignore() // Ignore """ - return lexMultilineString - } - lx.backup() - } - lx.ignore() // ignore the '"' - return lexString - case rawStringStart: - if lx.accept(rawStringStart) { - if lx.accept(rawStringStart) { - lx.ignore() // Ignore """ - return lexMultilineRawString - } - lx.backup() - } - lx.ignore() // ignore the "'" - return lexRawString - case '+', '-': - return lexNumberStart - case '.': // special error case, be kind to users - return lx.errorf("floats must start with a digit, not '.'") - } - if unicode.IsLetter(r) { - // Be permissive here; lexBool will give a nice error if the - // user wrote something like - // x = foo - // (i.e. not 'true' or 'false' but is something else word-like.) - lx.backup() - return lexBool - } - return lx.errorf("expected value but found %q instead", r) -} - -// lexArrayValue consumes one value in an array. It assumes that '[' or ',' -// have already been consumed. All whitespace and newlines are ignored. -func lexArrayValue(lx *lexer) stateFn { - r := lx.next() - switch { - case isWhitespace(r) || isNL(r): - return lexSkip(lx, lexArrayValue) - case r == commentStart: - lx.push(lexArrayValue) - return lexCommentStart - case r == comma: - return lx.errorf("unexpected comma") - case r == arrayEnd: - // NOTE(caleb): The spec isn't clear about whether you can have - // a trailing comma or not, so we'll allow it. - return lexArrayEnd - } - - lx.backup() - lx.push(lexArrayValueEnd) - return lexValue -} - -// lexArrayValueEnd consumes everything between the end of an array value and -// the next value (or the end of the array): it ignores whitespace and newlines -// and expects either a ',' or a ']'. -func lexArrayValueEnd(lx *lexer) stateFn { - r := lx.next() - switch { - case isWhitespace(r) || isNL(r): - return lexSkip(lx, lexArrayValueEnd) - case r == commentStart: - lx.push(lexArrayValueEnd) - return lexCommentStart - case r == comma: - lx.ignore() - return lexArrayValue // move on to the next value - case r == arrayEnd: - return lexArrayEnd - } - return lx.errorf( - "expected a comma or array terminator %q, but got %q instead", - arrayEnd, r, - ) -} - -// lexArrayEnd finishes the lexing of an array. -// It assumes that a ']' has just been consumed. -func lexArrayEnd(lx *lexer) stateFn { - lx.ignore() - lx.emit(itemArrayEnd) - return lx.pop() -} - -// lexInlineTableValue consumes one key/value pair in an inline table. -// It assumes that '{' or ',' have already been consumed. Whitespace is ignored. -func lexInlineTableValue(lx *lexer) stateFn { - r := lx.next() - switch { - case isWhitespace(r): - return lexSkip(lx, lexInlineTableValue) - case isNL(r): - return lx.errorf("newlines not allowed within inline tables") - case r == commentStart: - lx.push(lexInlineTableValue) - return lexCommentStart - case r == comma: - return lx.errorf("unexpected comma") - case r == inlineTableEnd: - return lexInlineTableEnd - } - lx.backup() - lx.push(lexInlineTableValueEnd) - return lexKeyStart -} - -// lexInlineTableValueEnd consumes everything between the end of an inline table -// key/value pair and the next pair (or the end of the table): -// it ignores whitespace and expects either a ',' or a '}'. -func lexInlineTableValueEnd(lx *lexer) stateFn { - r := lx.next() - switch { - case isWhitespace(r): - return lexSkip(lx, lexInlineTableValueEnd) - case isNL(r): - return lx.errorf("newlines not allowed within inline tables") - case r == commentStart: - lx.push(lexInlineTableValueEnd) - return lexCommentStart - case r == comma: - lx.ignore() - return lexInlineTableValue - case r == inlineTableEnd: - return lexInlineTableEnd - } - return lx.errorf("expected a comma or an inline table terminator %q, "+ - "but got %q instead", inlineTableEnd, r) -} - -// lexInlineTableEnd finishes the lexing of an inline table. -// It assumes that a '}' has just been consumed. -func lexInlineTableEnd(lx *lexer) stateFn { - lx.ignore() - lx.emit(itemInlineTableEnd) - return lx.pop() -} - -// lexString consumes the inner contents of a string. It assumes that the -// beginning '"' has already been consumed and ignored. -func lexString(lx *lexer) stateFn { - r := lx.next() - switch { - case r == eof: - return lx.errorf("unexpected EOF") - case isNL(r): - return lx.errorf("strings cannot contain newlines") - case r == '\\': - lx.push(lexString) - return lexStringEscape - case r == stringEnd: - lx.backup() - lx.emit(itemString) - lx.next() - lx.ignore() - return lx.pop() - } - return lexString -} - -// lexMultilineString consumes the inner contents of a string. It assumes that -// the beginning '"""' has already been consumed and ignored. -func lexMultilineString(lx *lexer) stateFn { - switch lx.next() { - case eof: - return lx.errorf("unexpected EOF") - case '\\': - return lexMultilineStringEscape - case stringEnd: - if lx.accept(stringEnd) { - if lx.accept(stringEnd) { - lx.backup() - lx.backup() - lx.backup() - lx.emit(itemMultilineString) - lx.next() - lx.next() - lx.next() - lx.ignore() - return lx.pop() - } - lx.backup() - } - } - return lexMultilineString -} - -// lexRawString consumes a raw string. Nothing can be escaped in such a string. -// It assumes that the beginning "'" has already been consumed and ignored. -func lexRawString(lx *lexer) stateFn { - r := lx.next() - switch { - case r == eof: - return lx.errorf("unexpected EOF") - case isNL(r): - return lx.errorf("strings cannot contain newlines") - case r == rawStringEnd: - lx.backup() - lx.emit(itemRawString) - lx.next() - lx.ignore() - return lx.pop() - } - return lexRawString -} - -// lexMultilineRawString consumes a raw string. Nothing can be escaped in such -// a string. It assumes that the beginning "'''" has already been consumed and -// ignored. -func lexMultilineRawString(lx *lexer) stateFn { - switch lx.next() { - case eof: - return lx.errorf("unexpected EOF") - case rawStringEnd: - if lx.accept(rawStringEnd) { - if lx.accept(rawStringEnd) { - lx.backup() - lx.backup() - lx.backup() - lx.emit(itemRawMultilineString) - lx.next() - lx.next() - lx.next() - lx.ignore() - return lx.pop() - } - lx.backup() - } - } - return lexMultilineRawString -} - -// lexMultilineStringEscape consumes an escaped character. It assumes that the -// preceding '\\' has already been consumed. -func lexMultilineStringEscape(lx *lexer) stateFn { - // Handle the special case first: - if isNL(lx.next()) { - return lexMultilineString - } - lx.backup() - lx.push(lexMultilineString) - return lexStringEscape(lx) -} - -func lexStringEscape(lx *lexer) stateFn { - r := lx.next() - switch r { - case 'b': - fallthrough - case 't': - fallthrough - case 'n': - fallthrough - case 'f': - fallthrough - case 'r': - fallthrough - case '"': - fallthrough - case '\\': - return lx.pop() - case 'u': - return lexShortUnicodeEscape - case 'U': - return lexLongUnicodeEscape - } - return lx.errorf("invalid escape character %q; only the following "+ - "escape characters are allowed: "+ - `\b, \t, \n, \f, \r, \", \\, \uXXXX, and \UXXXXXXXX`, r) -} - -func lexShortUnicodeEscape(lx *lexer) stateFn { - var r rune - for i := 0; i < 4; i++ { - r = lx.next() - if !isHexadecimal(r) { - return lx.errorf(`expected four hexadecimal digits after '\u', `+ - "but got %q instead", lx.current()) - } - } - return lx.pop() -} - -func lexLongUnicodeEscape(lx *lexer) stateFn { - var r rune - for i := 0; i < 8; i++ { - r = lx.next() - if !isHexadecimal(r) { - return lx.errorf(`expected eight hexadecimal digits after '\U', `+ - "but got %q instead", lx.current()) - } - } - return lx.pop() -} - -// lexNumberOrDateStart consumes either an integer, a float, or datetime. -func lexNumberOrDateStart(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexNumberOrDate - } - switch r { - case '_': - return lexNumber - case 'e', 'E': - return lexFloat - case '.': - return lx.errorf("floats must start with a digit, not '.'") - } - return lx.errorf("expected a digit but got %q", r) -} - -// lexNumberOrDate consumes either an integer, float or datetime. -func lexNumberOrDate(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexNumberOrDate - } - switch r { - case '-': - return lexDatetime - case '_': - return lexNumber - case '.', 'e', 'E': - return lexFloat - } - - lx.backup() - lx.emit(itemInteger) - return lx.pop() -} - -// lexDatetime consumes a Datetime, to a first approximation. -// The parser validates that it matches one of the accepted formats. -func lexDatetime(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexDatetime - } - switch r { - case '-', 'T', ':', '.', 'Z', '+': - return lexDatetime - } - - lx.backup() - lx.emit(itemDatetime) - return lx.pop() -} - -// lexNumberStart consumes either an integer or a float. It assumes that a sign -// has already been read, but that *no* digits have been consumed. -// lexNumberStart will move to the appropriate integer or float states. -func lexNumberStart(lx *lexer) stateFn { - // We MUST see a digit. Even floats have to start with a digit. - r := lx.next() - if !isDigit(r) { - if r == '.' { - return lx.errorf("floats must start with a digit, not '.'") - } - return lx.errorf("expected a digit but got %q", r) - } - return lexNumber -} - -// lexNumber consumes an integer or a float after seeing the first digit. -func lexNumber(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexNumber - } - switch r { - case '_': - return lexNumber - case '.', 'e', 'E': - return lexFloat - } - - lx.backup() - lx.emit(itemInteger) - return lx.pop() -} - -// lexFloat consumes the elements of a float. It allows any sequence of -// float-like characters, so floats emitted by the lexer are only a first -// approximation and must be validated by the parser. -func lexFloat(lx *lexer) stateFn { - r := lx.next() - if isDigit(r) { - return lexFloat - } - switch r { - case '_', '.', '-', '+', 'e', 'E': - return lexFloat - } - - lx.backup() - lx.emit(itemFloat) - return lx.pop() -} - -// lexBool consumes a bool string: 'true' or 'false. -func lexBool(lx *lexer) stateFn { - var rs []rune - for { - r := lx.next() - if !unicode.IsLetter(r) { - lx.backup() - break - } - rs = append(rs, r) - } - s := string(rs) - switch s { - case "true", "false": - lx.emit(itemBool) - return lx.pop() - } - return lx.errorf("expected value but found %q instead", s) -} - -// lexCommentStart begins the lexing of a comment. It will emit -// itemCommentStart and consume no characters, passing control to lexComment. -func lexCommentStart(lx *lexer) stateFn { - lx.ignore() - lx.emit(itemCommentStart) - return lexComment -} - -// lexComment lexes an entire comment. It assumes that '#' has been consumed. -// It will consume *up to* the first newline character, and pass control -// back to the last state on the stack. -func lexComment(lx *lexer) stateFn { - r := lx.peek() - if isNL(r) || r == eof { - lx.emit(itemText) - return lx.pop() - } - lx.next() - return lexComment -} - -// lexSkip ignores all slurped input and moves on to the next state. -func lexSkip(lx *lexer, nextState stateFn) stateFn { - return func(lx *lexer) stateFn { - lx.ignore() - return nextState - } -} - -// isWhitespace returns true if `r` is a whitespace character according -// to the spec. -func isWhitespace(r rune) bool { - return r == '\t' || r == ' ' -} - -func isNL(r rune) bool { - return r == '\n' || r == '\r' -} - -func isDigit(r rune) bool { - return r >= '0' && r <= '9' -} - -func isHexadecimal(r rune) bool { - return (r >= '0' && r <= '9') || - (r >= 'a' && r <= 'f') || - (r >= 'A' && r <= 'F') -} - -func isBareKeyChar(r rune) bool { - return (r >= 'A' && r <= 'Z') || - (r >= 'a' && r <= 'z') || - (r >= '0' && r <= '9') || - r == '_' || - r == '-' -} - -func (itype itemType) String() string { - switch itype { - case itemError: - return "Error" - case itemNIL: - return "NIL" - case itemEOF: - return "EOF" - case itemText: - return "Text" - case itemString, itemRawString, itemMultilineString, itemRawMultilineString: - return "String" - case itemBool: - return "Bool" - case itemInteger: - return "Integer" - case itemFloat: - return "Float" - case itemDatetime: - return "DateTime" - case itemTableStart: - return "TableStart" - case itemTableEnd: - return "TableEnd" - case itemKeyStart: - return "KeyStart" - case itemArray: - return "Array" - case itemArrayEnd: - return "ArrayEnd" - case itemCommentStart: - return "CommentStart" - } - panic(fmt.Sprintf("BUG: Unknown type '%d'.", int(itype))) -} - -func (item item) String() string { - return fmt.Sprintf("(%s, %s)", item.typ.String(), item.val) -} diff --git a/vendor/github.com/BurntSushi/toml/parse.go b/vendor/github.com/BurntSushi/toml/parse.go deleted file mode 100644 index 50869ef926..0000000000 --- a/vendor/github.com/BurntSushi/toml/parse.go +++ /dev/null @@ -1,592 +0,0 @@ -package toml - -import ( - "fmt" - "strconv" - "strings" - "time" - "unicode" - "unicode/utf8" -) - -type parser struct { - mapping map[string]interface{} - types map[string]tomlType - lx *lexer - - // A list of keys in the order that they appear in the TOML data. - ordered []Key - - // the full key for the current hash in scope - context Key - - // the base key name for everything except hashes - currentKey string - - // rough approximation of line number - approxLine int - - // A map of 'key.group.names' to whether they were created implicitly. - implicits map[string]bool -} - -type parseError string - -func (pe parseError) Error() string { - return string(pe) -} - -func parse(data string) (p *parser, err error) { - defer func() { - if r := recover(); r != nil { - var ok bool - if err, ok = r.(parseError); ok { - return - } - panic(r) - } - }() - - p = &parser{ - mapping: make(map[string]interface{}), - types: make(map[string]tomlType), - lx: lex(data), - ordered: make([]Key, 0), - implicits: make(map[string]bool), - } - for { - item := p.next() - if item.typ == itemEOF { - break - } - p.topLevel(item) - } - - return p, nil -} - -func (p *parser) panicf(format string, v ...interface{}) { - msg := fmt.Sprintf("Near line %d (last key parsed '%s'): %s", - p.approxLine, p.current(), fmt.Sprintf(format, v...)) - panic(parseError(msg)) -} - -func (p *parser) next() item { - it := p.lx.nextItem() - if it.typ == itemError { - p.panicf("%s", it.val) - } - return it -} - -func (p *parser) bug(format string, v ...interface{}) { - panic(fmt.Sprintf("BUG: "+format+"\n\n", v...)) -} - -func (p *parser) expect(typ itemType) item { - it := p.next() - p.assertEqual(typ, it.typ) - return it -} - -func (p *parser) assertEqual(expected, got itemType) { - if expected != got { - p.bug("Expected '%s' but got '%s'.", expected, got) - } -} - -func (p *parser) topLevel(item item) { - switch item.typ { - case itemCommentStart: - p.approxLine = item.line - p.expect(itemText) - case itemTableStart: - kg := p.next() - p.approxLine = kg.line - - var key Key - for ; kg.typ != itemTableEnd && kg.typ != itemEOF; kg = p.next() { - key = append(key, p.keyString(kg)) - } - p.assertEqual(itemTableEnd, kg.typ) - - p.establishContext(key, false) - p.setType("", tomlHash) - p.ordered = append(p.ordered, key) - case itemArrayTableStart: - kg := p.next() - p.approxLine = kg.line - - var key Key - for ; kg.typ != itemArrayTableEnd && kg.typ != itemEOF; kg = p.next() { - key = append(key, p.keyString(kg)) - } - p.assertEqual(itemArrayTableEnd, kg.typ) - - p.establishContext(key, true) - p.setType("", tomlArrayHash) - p.ordered = append(p.ordered, key) - case itemKeyStart: - kname := p.next() - p.approxLine = kname.line - p.currentKey = p.keyString(kname) - - val, typ := p.value(p.next()) - p.setValue(p.currentKey, val) - p.setType(p.currentKey, typ) - p.ordered = append(p.ordered, p.context.add(p.currentKey)) - p.currentKey = "" - default: - p.bug("Unexpected type at top level: %s", item.typ) - } -} - -// Gets a string for a key (or part of a key in a table name). -func (p *parser) keyString(it item) string { - switch it.typ { - case itemText: - return it.val - case itemString, itemMultilineString, - itemRawString, itemRawMultilineString: - s, _ := p.value(it) - return s.(string) - default: - p.bug("Unexpected key type: %s", it.typ) - panic("unreachable") - } -} - -// value translates an expected value from the lexer into a Go value wrapped -// as an empty interface. -func (p *parser) value(it item) (interface{}, tomlType) { - switch it.typ { - case itemString: - return p.replaceEscapes(it.val), p.typeOfPrimitive(it) - case itemMultilineString: - trimmed := stripFirstNewline(stripEscapedWhitespace(it.val)) - return p.replaceEscapes(trimmed), p.typeOfPrimitive(it) - case itemRawString: - return it.val, p.typeOfPrimitive(it) - case itemRawMultilineString: - return stripFirstNewline(it.val), p.typeOfPrimitive(it) - case itemBool: - switch it.val { - case "true": - return true, p.typeOfPrimitive(it) - case "false": - return false, p.typeOfPrimitive(it) - } - p.bug("Expected boolean value, but got '%s'.", it.val) - case itemInteger: - if !numUnderscoresOK(it.val) { - p.panicf("Invalid integer %q: underscores must be surrounded by digits", - it.val) - } - val := strings.Replace(it.val, "_", "", -1) - num, err := strconv.ParseInt(val, 10, 64) - if err != nil { - // Distinguish integer values. Normally, it'd be a bug if the lexer - // provides an invalid integer, but it's possible that the number is - // out of range of valid values (which the lexer cannot determine). - // So mark the former as a bug but the latter as a legitimate user - // error. - if e, ok := err.(*strconv.NumError); ok && - e.Err == strconv.ErrRange { - - p.panicf("Integer '%s' is out of the range of 64-bit "+ - "signed integers.", it.val) - } else { - p.bug("Expected integer value, but got '%s'.", it.val) - } - } - return num, p.typeOfPrimitive(it) - case itemFloat: - parts := strings.FieldsFunc(it.val, func(r rune) bool { - switch r { - case '.', 'e', 'E': - return true - } - return false - }) - for _, part := range parts { - if !numUnderscoresOK(part) { - p.panicf("Invalid float %q: underscores must be "+ - "surrounded by digits", it.val) - } - } - if !numPeriodsOK(it.val) { - // As a special case, numbers like '123.' or '1.e2', - // which are valid as far as Go/strconv are concerned, - // must be rejected because TOML says that a fractional - // part consists of '.' followed by 1+ digits. - p.panicf("Invalid float %q: '.' must be followed "+ - "by one or more digits", it.val) - } - val := strings.Replace(it.val, "_", "", -1) - num, err := strconv.ParseFloat(val, 64) - if err != nil { - if e, ok := err.(*strconv.NumError); ok && - e.Err == strconv.ErrRange { - - p.panicf("Float '%s' is out of the range of 64-bit "+ - "IEEE-754 floating-point numbers.", it.val) - } else { - p.panicf("Invalid float value: %q", it.val) - } - } - return num, p.typeOfPrimitive(it) - case itemDatetime: - var t time.Time - var ok bool - var err error - for _, format := range []string{ - "2006-01-02T15:04:05Z07:00", - "2006-01-02T15:04:05", - "2006-01-02", - } { - t, err = time.ParseInLocation(format, it.val, time.Local) - if err == nil { - ok = true - break - } - } - if !ok { - p.panicf("Invalid TOML Datetime: %q.", it.val) - } - return t, p.typeOfPrimitive(it) - case itemArray: - array := make([]interface{}, 0) - types := make([]tomlType, 0) - - for it = p.next(); it.typ != itemArrayEnd; it = p.next() { - if it.typ == itemCommentStart { - p.expect(itemText) - continue - } - - val, typ := p.value(it) - array = append(array, val) - types = append(types, typ) - } - return array, p.typeOfArray(types) - case itemInlineTableStart: - var ( - hash = make(map[string]interface{}) - outerContext = p.context - outerKey = p.currentKey - ) - - p.context = append(p.context, p.currentKey) - p.currentKey = "" - for it := p.next(); it.typ != itemInlineTableEnd; it = p.next() { - if it.typ != itemKeyStart { - p.bug("Expected key start but instead found %q, around line %d", - it.val, p.approxLine) - } - if it.typ == itemCommentStart { - p.expect(itemText) - continue - } - - // retrieve key - k := p.next() - p.approxLine = k.line - kname := p.keyString(k) - - // retrieve value - p.currentKey = kname - val, typ := p.value(p.next()) - // make sure we keep metadata up to date - p.setType(kname, typ) - p.ordered = append(p.ordered, p.context.add(p.currentKey)) - hash[kname] = val - } - p.context = outerContext - p.currentKey = outerKey - return hash, tomlHash - } - p.bug("Unexpected value type: %s", it.typ) - panic("unreachable") -} - -// numUnderscoresOK checks whether each underscore in s is surrounded by -// characters that are not underscores. -func numUnderscoresOK(s string) bool { - accept := false - for _, r := range s { - if r == '_' { - if !accept { - return false - } - accept = false - continue - } - accept = true - } - return accept -} - -// numPeriodsOK checks whether every period in s is followed by a digit. -func numPeriodsOK(s string) bool { - period := false - for _, r := range s { - if period && !isDigit(r) { - return false - } - period = r == '.' - } - return !period -} - -// establishContext sets the current context of the parser, -// where the context is either a hash or an array of hashes. Which one is -// set depends on the value of the `array` parameter. -// -// Establishing the context also makes sure that the key isn't a duplicate, and -// will create implicit hashes automatically. -func (p *parser) establishContext(key Key, array bool) { - var ok bool - - // Always start at the top level and drill down for our context. - hashContext := p.mapping - keyContext := make(Key, 0) - - // We only need implicit hashes for key[0:-1] - for _, k := range key[0 : len(key)-1] { - _, ok = hashContext[k] - keyContext = append(keyContext, k) - - // No key? Make an implicit hash and move on. - if !ok { - p.addImplicit(keyContext) - hashContext[k] = make(map[string]interface{}) - } - - // If the hash context is actually an array of tables, then set - // the hash context to the last element in that array. - // - // Otherwise, it better be a table, since this MUST be a key group (by - // virtue of it not being the last element in a key). - switch t := hashContext[k].(type) { - case []map[string]interface{}: - hashContext = t[len(t)-1] - case map[string]interface{}: - hashContext = t - default: - p.panicf("Key '%s' was already created as a hash.", keyContext) - } - } - - p.context = keyContext - if array { - // If this is the first element for this array, then allocate a new - // list of tables for it. - k := key[len(key)-1] - if _, ok := hashContext[k]; !ok { - hashContext[k] = make([]map[string]interface{}, 0, 5) - } - - // Add a new table. But make sure the key hasn't already been used - // for something else. - if hash, ok := hashContext[k].([]map[string]interface{}); ok { - hashContext[k] = append(hash, make(map[string]interface{})) - } else { - p.panicf("Key '%s' was already created and cannot be used as "+ - "an array.", keyContext) - } - } else { - p.setValue(key[len(key)-1], make(map[string]interface{})) - } - p.context = append(p.context, key[len(key)-1]) -} - -// setValue sets the given key to the given value in the current context. -// It will make sure that the key hasn't already been defined, account for -// implicit key groups. -func (p *parser) setValue(key string, value interface{}) { - var tmpHash interface{} - var ok bool - - hash := p.mapping - keyContext := make(Key, 0) - for _, k := range p.context { - keyContext = append(keyContext, k) - if tmpHash, ok = hash[k]; !ok { - p.bug("Context for key '%s' has not been established.", keyContext) - } - switch t := tmpHash.(type) { - case []map[string]interface{}: - // The context is a table of hashes. Pick the most recent table - // defined as the current hash. - hash = t[len(t)-1] - case map[string]interface{}: - hash = t - default: - p.bug("Expected hash to have type 'map[string]interface{}', but "+ - "it has '%T' instead.", tmpHash) - } - } - keyContext = append(keyContext, key) - - if _, ok := hash[key]; ok { - // Typically, if the given key has already been set, then we have - // to raise an error since duplicate keys are disallowed. However, - // it's possible that a key was previously defined implicitly. In this - // case, it is allowed to be redefined concretely. (See the - // `tests/valid/implicit-and-explicit-after.toml` test in `toml-test`.) - // - // But we have to make sure to stop marking it as an implicit. (So that - // another redefinition provokes an error.) - // - // Note that since it has already been defined (as a hash), we don't - // want to overwrite it. So our business is done. - if p.isImplicit(keyContext) { - p.removeImplicit(keyContext) - return - } - - // Otherwise, we have a concrete key trying to override a previous - // key, which is *always* wrong. - p.panicf("Key '%s' has already been defined.", keyContext) - } - hash[key] = value -} - -// setType sets the type of a particular value at a given key. -// It should be called immediately AFTER setValue. -// -// Note that if `key` is empty, then the type given will be applied to the -// current context (which is either a table or an array of tables). -func (p *parser) setType(key string, typ tomlType) { - keyContext := make(Key, 0, len(p.context)+1) - for _, k := range p.context { - keyContext = append(keyContext, k) - } - if len(key) > 0 { // allow type setting for hashes - keyContext = append(keyContext, key) - } - p.types[keyContext.String()] = typ -} - -// addImplicit sets the given Key as having been created implicitly. -func (p *parser) addImplicit(key Key) { - p.implicits[key.String()] = true -} - -// removeImplicit stops tagging the given key as having been implicitly -// created. -func (p *parser) removeImplicit(key Key) { - p.implicits[key.String()] = false -} - -// isImplicit returns true if the key group pointed to by the key was created -// implicitly. -func (p *parser) isImplicit(key Key) bool { - return p.implicits[key.String()] -} - -// current returns the full key name of the current context. -func (p *parser) current() string { - if len(p.currentKey) == 0 { - return p.context.String() - } - if len(p.context) == 0 { - return p.currentKey - } - return fmt.Sprintf("%s.%s", p.context, p.currentKey) -} - -func stripFirstNewline(s string) string { - if len(s) == 0 || s[0] != '\n' { - return s - } - return s[1:] -} - -func stripEscapedWhitespace(s string) string { - esc := strings.Split(s, "\\\n") - if len(esc) > 1 { - for i := 1; i < len(esc); i++ { - esc[i] = strings.TrimLeftFunc(esc[i], unicode.IsSpace) - } - } - return strings.Join(esc, "") -} - -func (p *parser) replaceEscapes(str string) string { - var replaced []rune - s := []byte(str) - r := 0 - for r < len(s) { - if s[r] != '\\' { - c, size := utf8.DecodeRune(s[r:]) - r += size - replaced = append(replaced, c) - continue - } - r += 1 - if r >= len(s) { - p.bug("Escape sequence at end of string.") - return "" - } - switch s[r] { - default: - p.bug("Expected valid escape code after \\, but got %q.", s[r]) - return "" - case 'b': - replaced = append(replaced, rune(0x0008)) - r += 1 - case 't': - replaced = append(replaced, rune(0x0009)) - r += 1 - case 'n': - replaced = append(replaced, rune(0x000A)) - r += 1 - case 'f': - replaced = append(replaced, rune(0x000C)) - r += 1 - case 'r': - replaced = append(replaced, rune(0x000D)) - r += 1 - case '"': - replaced = append(replaced, rune(0x0022)) - r += 1 - case '\\': - replaced = append(replaced, rune(0x005C)) - r += 1 - case 'u': - // At this point, we know we have a Unicode escape of the form - // `uXXXX` at [r, r+5). (Because the lexer guarantees this - // for us.) - escaped := p.asciiEscapeToUnicode(s[r+1 : r+5]) - replaced = append(replaced, escaped) - r += 5 - case 'U': - // At this point, we know we have a Unicode escape of the form - // `uXXXX` at [r, r+9). (Because the lexer guarantees this - // for us.) - escaped := p.asciiEscapeToUnicode(s[r+1 : r+9]) - replaced = append(replaced, escaped) - r += 9 - } - } - return string(replaced) -} - -func (p *parser) asciiEscapeToUnicode(bs []byte) rune { - s := string(bs) - hex, err := strconv.ParseUint(strings.ToLower(s), 16, 32) - if err != nil { - p.bug("Could not parse '%s' as a hexadecimal number, but the "+ - "lexer claims it's OK: %s", s, err) - } - if !utf8.ValidRune(rune(hex)) { - p.panicf("Escaped character '\\u%s' is not valid UTF-8.", s) - } - return rune(hex) -} - -func isStringType(ty itemType) bool { - return ty == itemString || ty == itemMultilineString || - ty == itemRawString || ty == itemRawMultilineString -} diff --git a/vendor/github.com/BurntSushi/toml/session.vim b/vendor/github.com/BurntSushi/toml/session.vim deleted file mode 100644 index 562164be06..0000000000 --- a/vendor/github.com/BurntSushi/toml/session.vim +++ /dev/null @@ -1 +0,0 @@ -au BufWritePost *.go silent!make tags > /dev/null 2>&1 diff --git a/vendor/github.com/BurntSushi/toml/type_check.go b/vendor/github.com/BurntSushi/toml/type_check.go deleted file mode 100644 index c73f8afc1a..0000000000 --- a/vendor/github.com/BurntSushi/toml/type_check.go +++ /dev/null @@ -1,91 +0,0 @@ -package toml - -// tomlType represents any Go type that corresponds to a TOML type. -// While the first draft of the TOML spec has a simplistic type system that -// probably doesn't need this level of sophistication, we seem to be militating -// toward adding real composite types. -type tomlType interface { - typeString() string -} - -// typeEqual accepts any two types and returns true if they are equal. -func typeEqual(t1, t2 tomlType) bool { - if t1 == nil || t2 == nil { - return false - } - return t1.typeString() == t2.typeString() -} - -func typeIsHash(t tomlType) bool { - return typeEqual(t, tomlHash) || typeEqual(t, tomlArrayHash) -} - -type tomlBaseType string - -func (btype tomlBaseType) typeString() string { - return string(btype) -} - -func (btype tomlBaseType) String() string { - return btype.typeString() -} - -var ( - tomlInteger tomlBaseType = "Integer" - tomlFloat tomlBaseType = "Float" - tomlDatetime tomlBaseType = "Datetime" - tomlString tomlBaseType = "String" - tomlBool tomlBaseType = "Bool" - tomlArray tomlBaseType = "Array" - tomlHash tomlBaseType = "Hash" - tomlArrayHash tomlBaseType = "ArrayHash" -) - -// typeOfPrimitive returns a tomlType of any primitive value in TOML. -// Primitive values are: Integer, Float, Datetime, String and Bool. -// -// Passing a lexer item other than the following will cause a BUG message -// to occur: itemString, itemBool, itemInteger, itemFloat, itemDatetime. -func (p *parser) typeOfPrimitive(lexItem item) tomlType { - switch lexItem.typ { - case itemInteger: - return tomlInteger - case itemFloat: - return tomlFloat - case itemDatetime: - return tomlDatetime - case itemString: - return tomlString - case itemMultilineString: - return tomlString - case itemRawString: - return tomlString - case itemRawMultilineString: - return tomlString - case itemBool: - return tomlBool - } - p.bug("Cannot infer primitive type of lex item '%s'.", lexItem) - panic("unreachable") -} - -// typeOfArray returns a tomlType for an array given a list of types of its -// values. -// -// In the current spec, if an array is homogeneous, then its type is always -// "Array". If the array is not homogeneous, an error is generated. -func (p *parser) typeOfArray(types []tomlType) tomlType { - // Empty arrays are cool. - if len(types) == 0 { - return tomlArray - } - - theType := types[0] - for _, t := range types[1:] { - if !typeEqual(theType, t) { - p.panicf("Array contains values of type '%s' and '%s', but "+ - "arrays must be homogeneous.", theType, t) - } - } - return tomlArray -} diff --git a/vendor/github.com/BurntSushi/toml/type_fields.go b/vendor/github.com/BurntSushi/toml/type_fields.go deleted file mode 100644 index 608997c22f..0000000000 --- a/vendor/github.com/BurntSushi/toml/type_fields.go +++ /dev/null @@ -1,242 +0,0 @@ -package toml - -// Struct field handling is adapted from code in encoding/json: -// -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the Go distribution. - -import ( - "reflect" - "sort" - "sync" -) - -// A field represents a single field found in a struct. -type field struct { - name string // the name of the field (`toml` tag included) - tag bool // whether field has a `toml` tag - index []int // represents the depth of an anonymous field - typ reflect.Type // the type of the field -} - -// byName sorts field by name, breaking ties with depth, -// then breaking ties with "name came from toml tag", then -// breaking ties with index sequence. -type byName []field - -func (x byName) Len() int { return len(x) } - -func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -func (x byName) Less(i, j int) bool { - if x[i].name != x[j].name { - return x[i].name < x[j].name - } - if len(x[i].index) != len(x[j].index) { - return len(x[i].index) < len(x[j].index) - } - if x[i].tag != x[j].tag { - return x[i].tag - } - return byIndex(x).Less(i, j) -} - -// byIndex sorts field by index sequence. -type byIndex []field - -func (x byIndex) Len() int { return len(x) } - -func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -func (x byIndex) Less(i, j int) bool { - for k, xik := range x[i].index { - if k >= len(x[j].index) { - return false - } - if xik != x[j].index[k] { - return xik < x[j].index[k] - } - } - return len(x[i].index) < len(x[j].index) -} - -// typeFields returns a list of fields that TOML should recognize for the given -// type. The algorithm is breadth-first search over the set of structs to -// include - the top struct and then any reachable anonymous structs. -func typeFields(t reflect.Type) []field { - // Anonymous fields to explore at the current level and the next. - current := []field{} - next := []field{{typ: t}} - - // Count of queued names for current level and the next. - count := map[reflect.Type]int{} - nextCount := map[reflect.Type]int{} - - // Types already visited at an earlier level. - visited := map[reflect.Type]bool{} - - // Fields found. - var fields []field - - for len(next) > 0 { - current, next = next, current[:0] - count, nextCount = nextCount, map[reflect.Type]int{} - - for _, f := range current { - if visited[f.typ] { - continue - } - visited[f.typ] = true - - // Scan f.typ for fields to include. - for i := 0; i < f.typ.NumField(); i++ { - sf := f.typ.Field(i) - if sf.PkgPath != "" && !sf.Anonymous { // unexported - continue - } - opts := getOptions(sf.Tag) - if opts.skip { - continue - } - index := make([]int, len(f.index)+1) - copy(index, f.index) - index[len(f.index)] = i - - ft := sf.Type - if ft.Name() == "" && ft.Kind() == reflect.Ptr { - // Follow pointer. - ft = ft.Elem() - } - - // Record found field and index sequence. - if opts.name != "" || !sf.Anonymous || ft.Kind() != reflect.Struct { - tagged := opts.name != "" - name := opts.name - if name == "" { - name = sf.Name - } - fields = append(fields, field{name, tagged, index, ft}) - if count[f.typ] > 1 { - // If there were multiple instances, add a second, - // so that the annihilation code will see a duplicate. - // It only cares about the distinction between 1 or 2, - // so don't bother generating any more copies. - fields = append(fields, fields[len(fields)-1]) - } - continue - } - - // Record new anonymous struct to explore in next round. - nextCount[ft]++ - if nextCount[ft] == 1 { - f := field{name: ft.Name(), index: index, typ: ft} - next = append(next, f) - } - } - } - } - - sort.Sort(byName(fields)) - - // Delete all fields that are hidden by the Go rules for embedded fields, - // except that fields with TOML tags are promoted. - - // The fields are sorted in primary order of name, secondary order - // of field index length. Loop over names; for each name, delete - // hidden fields by choosing the one dominant field that survives. - out := fields[:0] - for advance, i := 0, 0; i < len(fields); i += advance { - // One iteration per name. - // Find the sequence of fields with the name of this first field. - fi := fields[i] - name := fi.name - for advance = 1; i+advance < len(fields); advance++ { - fj := fields[i+advance] - if fj.name != name { - break - } - } - if advance == 1 { // Only one field with this name - out = append(out, fi) - continue - } - dominant, ok := dominantField(fields[i : i+advance]) - if ok { - out = append(out, dominant) - } - } - - fields = out - sort.Sort(byIndex(fields)) - - return fields -} - -// dominantField looks through the fields, all of which are known to -// have the same name, to find the single field that dominates the -// others using Go's embedding rules, modified by the presence of -// TOML tags. If there are multiple top-level fields, the boolean -// will be false: This condition is an error in Go and we skip all -// the fields. -func dominantField(fields []field) (field, bool) { - // The fields are sorted in increasing index-length order. The winner - // must therefore be one with the shortest index length. Drop all - // longer entries, which is easy: just truncate the slice. - length := len(fields[0].index) - tagged := -1 // Index of first tagged field. - for i, f := range fields { - if len(f.index) > length { - fields = fields[:i] - break - } - if f.tag { - if tagged >= 0 { - // Multiple tagged fields at the same level: conflict. - // Return no field. - return field{}, false - } - tagged = i - } - } - if tagged >= 0 { - return fields[tagged], true - } - // All remaining fields have the same length. If there's more than one, - // we have a conflict (two fields named "X" at the same level) and we - // return no field. - if len(fields) > 1 { - return field{}, false - } - return fields[0], true -} - -var fieldCache struct { - sync.RWMutex - m map[reflect.Type][]field -} - -// cachedTypeFields is like typeFields but uses a cache to avoid repeated work. -func cachedTypeFields(t reflect.Type) []field { - fieldCache.RLock() - f := fieldCache.m[t] - fieldCache.RUnlock() - if f != nil { - return f - } - - // Compute fields without lock. - // Might duplicate effort but won't hold other computations back. - f = typeFields(t) - if f == nil { - f = []field{} - } - - fieldCache.Lock() - if fieldCache.m == nil { - fieldCache.m = map[reflect.Type][]field{} - } - fieldCache.m[t] = f - fieldCache.Unlock() - return f -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/AUTHORS b/vendor/github.com/bazelbuild/bazel-gazelle/AUTHORS deleted file mode 100644 index 5abe237dae..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/AUTHORS +++ /dev/null @@ -1,18 +0,0 @@ -# This is the official list of authors for copyright purposes. -# Names should be added to this file as: -# Name or Organization -# The email address is not required for organizations. - -Andy Hochhaus -Antoine Pelisse -GinFungYJF <645116215@qq.com> -Google Inc. -Improbable Worlds Ltd -Jeff Hodges -John Millikin -Melinda Lu -Peter McAlpine -RS -Rodrigo Queiro -Tom Payne -Yuki Yugui Sonoda diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/CONTRIBUTORS b/vendor/github.com/bazelbuild/bazel-gazelle/CONTRIBUTORS deleted file mode 100644 index d4ff1901b8..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/CONTRIBUTORS +++ /dev/null @@ -1,29 +0,0 @@ -# People who have agreed to one of the CLAs and can contribute patches. -# The AUTHORS file lists the copyright holders; this file -# lists people. For example, Google employees are listed here -# but not in AUTHORS, because Google holds the copyright. -# -# https://developers.google.com/open-source/cla/individual -# https://developers.google.com/open-source/cla/corporate -# -# Names should be added to this file as: -# Name - -Ainsley Escorce-Jones -Andy Hochhaus -Antoine Pelisse -GinFungYJF <645116215@qq.com> -Ian Cottrell -Jay Conrod -Jeff Grafton -Jeff Hodges -John Millikin -Kristina -Melinda Lu -Paul Bethe -Peter McAlpine -Rodrigo Queiro -RS -Stefan Sakalik -Tom Payne -Yuki Yugui Sonoda diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/LICENSE b/vendor/github.com/bazelbuild/bazel-gazelle/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/BUILD.bazel deleted file mode 100644 index 0cac80b7f0..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/BUILD.bazel +++ /dev/null @@ -1,40 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "diff.go", - "fix.go", - "fix-update.go", - "gazelle.go", - "langs.go", - "metaresolver.go", - "print.go", - "update-repos.go", - "version.go", - ], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle", - importpath = "github.com/bazelbuild/bazel-gazelle/cmd/gazelle", - visibility = ["//visibility:private"], - deps = [ - "//vendor/github.com/bazelbuild/bazel-gazelle/config:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/flag:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/internal/version:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/label:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/language:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/language/go:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/language/proto:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/merger:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/repo:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/resolve:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/rule:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/walk:go_default_library", - "//vendor/github.com/pmezard/go-difflib/difflib:go_default_library", - ], -) - -go_binary( - name = "gazelle", - embed = [":go_default_library"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/diff.go b/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/diff.go deleted file mode 100644 index 2d574090e8..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/diff.go +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright 2016 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package main - -import ( - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/rule" - "github.com/pmezard/go-difflib/difflib" -) - -var exitError = fmt.Errorf("encountered changes while running diff") - -func diffFile(c *config.Config, f *rule.File) error { - rel, err := filepath.Rel(c.RepoRoot, f.Path) - if err != nil { - return fmt.Errorf("error getting old path for file %q: %v", f.Path, err) - } - rel = filepath.ToSlash(rel) - - date := "1970-01-01 00:00:00.000000000 +0000" - diff := difflib.UnifiedDiff{ - Context: 3, - FromDate: date, - ToDate: date, - } - - if oldContent, err := ioutil.ReadFile(f.Path); err != nil && !os.IsNotExist(err) { - return fmt.Errorf("error reading original file: %v", err) - } else if err != nil { - diff.FromFile = "/dev/null" - } else if err == nil { - diff.A = difflib.SplitLines(string(oldContent)) - if c.ReadBuildFilesDir == "" { - path, err := filepath.Rel(c.RepoRoot, f.Path) - if err != nil { - return fmt.Errorf("error getting old path for file %q: %v", f.Path, err) - } - diff.FromFile = filepath.ToSlash(path) - } else { - diff.FromFile = f.Path - } - } - - newContent := f.Format() - diff.B = difflib.SplitLines(string(newContent)) - outPath := findOutputPath(c, f) - if c.WriteBuildFilesDir == "" { - path, err := filepath.Rel(c.RepoRoot, f.Path) - if err != nil { - return fmt.Errorf("error getting new path for file %q: %v", f.Path, err) - } - diff.ToFile = filepath.ToSlash(path) - } else { - diff.ToFile = outPath - } - - uc := getUpdateConfig(c) - var out io.Writer = os.Stdout - if uc.patchPath != "" { - out = &uc.patchBuffer - } - if err := difflib.WriteUnifiedDiff(out, diff); err != nil { - return fmt.Errorf("error diffing %s: %v", f.Path, err) - } - if ds, _ := difflib.GetUnifiedDiffString(diff); ds != "" { - return exitError - } - - return nil -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/fix-update.go b/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/fix-update.go deleted file mode 100644 index 4544e68c23..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/fix-update.go +++ /dev/null @@ -1,592 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package main - -import ( - "bytes" - "flag" - "fmt" - "io/ioutil" - "log" - "os" - "path/filepath" - "sort" - "strings" - - "github.com/bazelbuild/bazel-gazelle/config" - gzflag "github.com/bazelbuild/bazel-gazelle/flag" - "github.com/bazelbuild/bazel-gazelle/label" - "github.com/bazelbuild/bazel-gazelle/language" - "github.com/bazelbuild/bazel-gazelle/merger" - "github.com/bazelbuild/bazel-gazelle/repo" - "github.com/bazelbuild/bazel-gazelle/resolve" - "github.com/bazelbuild/bazel-gazelle/rule" - "github.com/bazelbuild/bazel-gazelle/walk" -) - -// updateConfig holds configuration information needed to run the fix and -// update commands. This includes everything in config.Config, but it also -// includes some additional fields that aren't relevant to other packages. -type updateConfig struct { - dirs []string - emit emitFunc - repos []repo.Repo - workspaceFiles []*rule.File - walkMode walk.Mode - patchPath string - patchBuffer bytes.Buffer -} - -type emitFunc func(c *config.Config, f *rule.File) error - -var modeFromName = map[string]emitFunc{ - "print": printFile, - "fix": fixFile, - "diff": diffFile, -} - -const updateName = "_update" - -func getUpdateConfig(c *config.Config) *updateConfig { - return c.Exts[updateName].(*updateConfig) -} - -type updateConfigurer struct { - mode string - recursive bool - knownImports []string - repoConfigPath string -} - -func (ucr *updateConfigurer) RegisterFlags(fs *flag.FlagSet, cmd string, c *config.Config) { - uc := &updateConfig{} - c.Exts[updateName] = uc - - c.ShouldFix = cmd == "fix" - - fs.StringVar(&ucr.mode, "mode", "fix", "print: prints all of the updated BUILD files\n\tfix: rewrites all of the BUILD files in place\n\tdiff: computes the rewrite but then just does a diff") - fs.BoolVar(&ucr.recursive, "r", true, "when true, gazelle will update subdirectories recursively") - fs.StringVar(&uc.patchPath, "patch", "", "when set with -mode=diff, gazelle will write to a file instead of stdout") - fs.Var(&gzflag.MultiFlag{Values: &ucr.knownImports}, "known_import", "import path for which external resolution is skipped (can specify multiple times)") - fs.StringVar(&ucr.repoConfigPath, "repo_config", "", "file where Gazelle should load repository configuration. Defaults to WORKSPACE.") -} - -func (ucr *updateConfigurer) CheckFlags(fs *flag.FlagSet, c *config.Config) error { - uc := getUpdateConfig(c) - - var ok bool - uc.emit, ok = modeFromName[ucr.mode] - if !ok { - return fmt.Errorf("unrecognized emit mode: %q", ucr.mode) - } - if uc.patchPath != "" && ucr.mode != "diff" { - return fmt.Errorf("-patch set but -mode is %s, not diff", ucr.mode) - } - - dirs := fs.Args() - if len(dirs) == 0 { - dirs = []string{"."} - } - uc.dirs = make([]string, len(dirs)) - for i := range dirs { - dir, err := filepath.Abs(dirs[i]) - if err != nil { - return fmt.Errorf("%s: failed to find absolute path: %v", dirs[i], err) - } - dir, err = filepath.EvalSymlinks(dir) - if err != nil { - return fmt.Errorf("%s: failed to resolve symlinks: %v", dirs[i], err) - } - if !isDescendingDir(dir, c.RepoRoot) { - return fmt.Errorf("dir %q is not a subdirectory of repo root %q", dir, c.RepoRoot) - } - uc.dirs[i] = dir - } - - if ucr.recursive { - uc.walkMode = walk.VisitAllUpdateSubdirsMode - } else if c.IndexLibraries { - uc.walkMode = walk.VisitAllUpdateDirsMode - } else { - uc.walkMode = walk.UpdateDirsMode - } - - // Load the repo configuration file (WORKSPACE by default) to find out - // names and prefixes of other go_repositories. This affects external - // dependency resolution for Go. - // TODO(jayconrod): Go-specific code should be moved to language/go. - if ucr.repoConfigPath == "" { - ucr.repoConfigPath = filepath.Join(c.RepoRoot, "WORKSPACE") - } - repoConfigFile, err := rule.LoadWorkspaceFile(ucr.repoConfigPath, "") - if err != nil && !os.IsNotExist(err) { - return err - } else if err == nil { - c.Repos, _, err = repo.ListRepositories(repoConfigFile) - if err != nil { - return err - } - } - for _, imp := range ucr.knownImports { - uc.repos = append(uc.repos, repo.Repo{ - Name: label.ImportPathToBazelRepoName(imp), - GoPrefix: imp, - }) - } - for _, r := range c.Repos { - if r.Kind() == "go_repository" { - uc.repos = append(uc.repos, repo.Repo{ - Name: r.Name(), - GoPrefix: r.AttrString("importpath"), - }) - } - } - - // If the repo configuration file is not WORKSPACE, also load WORKSPACE - // and any declared macro files so we can apply fixes. - workspacePath := filepath.Join(c.RepoRoot, "WORKSPACE") - var workspace *rule.File - if ucr.repoConfigPath == workspacePath { - workspace = repoConfigFile - } else { - workspace, err = rule.LoadWorkspaceFile(workspacePath, "") - if err != nil && !os.IsNotExist(err) { - return err - } - } - if workspace != nil { - c.RepoName = findWorkspaceName(workspace) - _, repoFileMap, err := repo.ListRepositories(workspace) - if err != nil { - return err - } - seen := make(map[*rule.File]bool) - for _, f := range repoFileMap { - if !seen[f] { - uc.workspaceFiles = append(uc.workspaceFiles, f) - seen[f] = true - } - } - sort.Slice(uc.workspaceFiles, func(i, j int) bool { - return uc.workspaceFiles[i].Path < uc.workspaceFiles[j].Path - }) - } - - return nil -} - -func (ucr *updateConfigurer) KnownDirectives() []string { return nil } - -func (ucr *updateConfigurer) Configure(c *config.Config, rel string, f *rule.File) {} - -// visitRecord stores information about about a directory visited with -// packages.Walk. -type visitRecord struct { - // pkgRel is the slash-separated path to the visited directory, relative to - // the repository root. "" for the repository root itself. - pkgRel string - - // c is the configuration for the directory with directives applied. - c *config.Config - - // rules is a list of generated Go rules. - rules []*rule.Rule - - // imports contains opaque import information for each rule in rules. - imports []interface{} - - // empty is a list of empty Go rules that may be deleted. - empty []*rule.Rule - - // file is the build file being processed. - file *rule.File - - // mappedKinds are mapped kinds used during this visit. - mappedKinds []config.MappedKind - mappedKindInfo map[string]rule.KindInfo -} - -type byPkgRel []visitRecord - -func (vs byPkgRel) Len() int { return len(vs) } -func (vs byPkgRel) Less(i, j int) bool { return vs[i].pkgRel < vs[j].pkgRel } -func (vs byPkgRel) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] } - -var genericLoads = []rule.LoadInfo{ - { - Name: "@bazel_gazelle//:def.bzl", - Symbols: []string{"gazelle"}, - }, -} - -func runFixUpdate(cmd command, args []string) (err error) { - cexts := make([]config.Configurer, 0, len(languages)+3) - cexts = append(cexts, - &config.CommonConfigurer{}, - &updateConfigurer{}, - &walk.Configurer{}, - &resolve.Configurer{}) - mrslv := newMetaResolver() - kinds := make(map[string]rule.KindInfo) - loads := genericLoads - for _, lang := range languages { - cexts = append(cexts, lang) - for kind, info := range lang.Kinds() { - mrslv.AddBuiltin(kind, lang) - kinds[kind] = info - } - loads = append(loads, lang.Loads()...) - } - ruleIndex := resolve.NewRuleIndex(mrslv.Resolver) - - c, err := newFixUpdateConfiguration(cmd, args, cexts) - if err != nil { - return err - } - - if err := fixRepoFiles(c, loads); err != nil { - return err - } - - if cmd == fixCmd { - // Only check the version when "fix" is run. Generated build files - // frequently work with older version of rules_go, and we don't want to - // nag too much since there's no way to disable this warning. - checkRulesGoVersion(c.RepoRoot) - } - - // Visit all directories in the repository. - var visits []visitRecord - uc := getUpdateConfig(c) - walk.Walk(c, cexts, uc.dirs, uc.walkMode, func(dir, rel string, c *config.Config, update bool, f *rule.File, subdirs, regularFiles, genFiles []string) { - // If this file is ignored or if Gazelle was not asked to update this - // directory, just index the build file and move on. - if !update { - if c.IndexLibraries && f != nil { - for _, r := range f.Rules { - ruleIndex.AddRule(c, r, f) - } - } - return - } - - // Fix any problems in the file. - if f != nil { - for _, l := range languages { - l.Fix(c, f) - } - } - - // Generate rules. - var empty, gen []*rule.Rule - var imports []interface{} - for _, l := range languages { - res := l.GenerateRules(language.GenerateArgs{ - Config: c, - Dir: dir, - Rel: rel, - File: f, - Subdirs: subdirs, - RegularFiles: regularFiles, - GenFiles: genFiles, - OtherEmpty: empty, - OtherGen: gen}) - if len(res.Gen) != len(res.Imports) { - log.Panicf("%s: language %s generated %d rules but returned %d imports", rel, l.Name(), len(res.Gen), len(res.Imports)) - } - empty = append(empty, res.Empty...) - gen = append(gen, res.Gen...) - imports = append(imports, res.Imports...) - } - if f == nil && len(gen) == 0 { - return - } - - // Apply and record relevant kind mappings. - var ( - mappedKinds []config.MappedKind - mappedKindInfo = make(map[string]rule.KindInfo) - ) - for _, r := range gen { - if repl, ok := c.KindMap[r.Kind()]; ok { - mappedKindInfo[repl.KindName] = kinds[r.Kind()] - mappedKinds = append(mappedKinds, repl) - mrslv.MappedKind(rel, repl) - r.SetKind(repl.KindName) - } - } - - // Insert or merge rules into the build file. - if f == nil { - f = rule.EmptyFile(filepath.Join(dir, c.DefaultBuildFileName()), rel) - for _, r := range gen { - r.Insert(f) - } - } else { - merger.MergeFile(f, empty, gen, merger.PreResolve, - unionKindInfoMaps(kinds, mappedKindInfo)) - } - visits = append(visits, visitRecord{ - pkgRel: rel, - c: c, - rules: gen, - imports: imports, - empty: empty, - file: f, - mappedKinds: mappedKinds, - mappedKindInfo: mappedKindInfo, - }) - - // Add library rules to the dependency resolution table. - if c.IndexLibraries { - for _, r := range f.Rules { - ruleIndex.AddRule(c, r, f) - } - } - }) - - // Finish building the index for dependency resolution. - ruleIndex.Finish() - - // Resolve dependencies. - rc, cleanupRc := repo.NewRemoteCache(uc.repos) - defer func() { - if cerr := cleanupRc(); err == nil && cerr != nil { - err = cerr - } - }() - for _, v := range visits { - for i, r := range v.rules { - from := label.New(c.RepoName, v.pkgRel, r.Name()) - mrslv.Resolver(r, v.pkgRel).Resolve(v.c, ruleIndex, rc, r, v.imports[i], from) - } - merger.MergeFile(v.file, v.empty, v.rules, merger.PostResolve, - unionKindInfoMaps(kinds, v.mappedKindInfo)) - } - - // Emit merged files. - var exit error - for _, v := range visits { - merger.FixLoads(v.file, applyKindMappings(v.mappedKinds, loads)) - if err := uc.emit(v.c, v.file); err != nil { - if err == exitError { - exit = err - } else { - log.Print(err) - } - } - } - if uc.patchPath != "" { - if err := ioutil.WriteFile(uc.patchPath, uc.patchBuffer.Bytes(), 0666); err != nil { - return err - } - } - - return exit -} - -func newFixUpdateConfiguration(cmd command, args []string, cexts []config.Configurer) (*config.Config, error) { - c := config.New() - - fs := flag.NewFlagSet("gazelle", flag.ContinueOnError) - // Flag will call this on any parse error. Don't print usage unless - // -h or -help were passed explicitly. - fs.Usage = func() {} - - for _, cext := range cexts { - cext.RegisterFlags(fs, cmd.String(), c) - } - - if err := fs.Parse(args); err != nil { - if err == flag.ErrHelp { - fixUpdateUsage(fs) - return nil, err - } - // flag already prints the error; don't print it again. - log.Fatal("Try -help for more information.") - } - - for _, cext := range cexts { - if err := cext.CheckFlags(fs, c); err != nil { - return nil, err - } - } - - return c, nil -} - -func fixUpdateUsage(fs *flag.FlagSet) { - fmt.Fprint(os.Stderr, `usage: gazelle [fix|update] [flags...] [package-dirs...] - -The update command creates new build files and update existing BUILD files -when needed. - -The fix command also creates and updates build files, and in addition, it may -make potentially breaking updates to usage of rules. For example, it may -delete obsolete rules or rename existing rules. - -There are several output modes which can be selected with the -mode flag. The -output mode determines what Gazelle does with updated BUILD files. - - fix (default) - write updated BUILD files back to disk. - print - print updated BUILD files to stdout. - diff - diff updated BUILD files against existing files in unified format. - -Gazelle accepts a list of paths to Go package directories to process (defaults -to the working directory if none are given). It recursively traverses -subdirectories. All directories must be under the directory specified by --repo_root; if -repo_root is not given, this is the directory containing the -WORKSPACE file. - -FLAGS: - -`) - fs.PrintDefaults() -} - -func fixRepoFiles(c *config.Config, loads []rule.LoadInfo) error { - uc := getUpdateConfig(c) - if !c.ShouldFix { - return nil - } - shouldFix := false - for _, d := range uc.dirs { - if d == c.RepoRoot { - shouldFix = true - } - } - if !shouldFix { - return nil - } - - for _, f := range uc.workspaceFiles { - merger.FixLoads(f, loads) - if f.Path == filepath.Join(c.RepoRoot, "WORKSPACE") { - removeLegacyGoRepository(f) - if err := merger.CheckGazelleLoaded(f); err != nil { - return err - } - } - if err := uc.emit(c, f); err != nil { - return err - } - } - return nil -} - -// removeLegacyGoRepository removes loads of go_repository from -// @io_bazel_rules_go. FixLoads should be called after this; it will load from -// @bazel_gazelle. -func removeLegacyGoRepository(f *rule.File) { - for _, l := range f.Loads { - if l.Name() == "@io_bazel_rules_go//go:def.bzl" { - l.Remove("go_repository") - if l.IsEmpty() { - l.Delete() - } - } - } -} - -func findWorkspaceName(f *rule.File) string { - for _, r := range f.Rules { - if r.Kind() == "workspace" { - return r.Name() - } - } - return "" -} - -func isDescendingDir(dir, root string) bool { - rel, err := filepath.Rel(root, dir) - if err != nil { - return false - } - if rel == "." { - return true - } - return !strings.HasPrefix(rel, "..") -} - -func findOutputPath(c *config.Config, f *rule.File) string { - if c.ReadBuildFilesDir == "" && c.WriteBuildFilesDir == "" { - return f.Path - } - baseDir := c.WriteBuildFilesDir - if c.WriteBuildFilesDir == "" { - baseDir = c.RepoRoot - } - outputDir := filepath.Join(baseDir, filepath.FromSlash(f.Pkg)) - defaultOutputPath := filepath.Join(outputDir, c.DefaultBuildFileName()) - files, err := ioutil.ReadDir(outputDir) - if err != nil { - // Ignore error. Directory probably doesn't exist. - return defaultOutputPath - } - outputPath := rule.MatchBuildFileName(outputDir, c.ValidBuildFileNames, files) - if outputPath == "" { - return defaultOutputPath - } - return outputPath -} - -func unionKindInfoMaps(a, b map[string]rule.KindInfo) map[string]rule.KindInfo { - if len(a) == 0 { - return b - } - if len(b) == 0 { - return a - } - result := make(map[string]rule.KindInfo, len(a)+len(b)) - for _, m := range []map[string]rule.KindInfo{a, b} { - for k, v := range m { - result[k] = v - } - } - return result -} - -// applyKindMappings returns a copy of LoadInfo that includes c.KindMap. -func applyKindMappings(mappedKinds []config.MappedKind, loads []rule.LoadInfo) []rule.LoadInfo { - if len(mappedKinds) == 0 { - return loads - } - - // Add new RuleInfos or replace existing ones with merged ones. - mappedLoads := make([]rule.LoadInfo, len(loads)) - copy(mappedLoads, loads) - for _, mappedKind := range mappedKinds { - mappedLoads = appendOrMergeKindMapping(mappedLoads, mappedKind) - } - return mappedLoads -} - -// appendOrMergeKindMapping adds LoadInfo for the given replacement. -func appendOrMergeKindMapping(mappedLoads []rule.LoadInfo, mappedKind config.MappedKind) []rule.LoadInfo { - // If mappedKind.KindLoad already exists in the list, create a merged copy. - for i, load := range mappedLoads { - if load.Name == mappedKind.KindLoad { - mappedLoads[i].Symbols = append(load.Symbols, mappedKind.KindName) - return mappedLoads - } - } - - // Add a new LoadInfo. - return append(mappedLoads, rule.LoadInfo{ - Name: mappedKind.KindLoad, - Symbols: []string{mappedKind.KindName}, - }) -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/fix.go b/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/fix.go deleted file mode 100644 index 2b67bdd56e..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/fix.go +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright 2016 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package main - -import ( - "io/ioutil" - "os" - "path/filepath" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -func fixFile(c *config.Config, f *rule.File) error { - outPath := findOutputPath(c, f) - if err := os.MkdirAll(filepath.Dir(outPath), 0777); err != nil { - return err - } - return ioutil.WriteFile(outPath, f.Format(), 0666) -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/gazelle.go b/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/gazelle.go deleted file mode 100644 index 8ad9f9b3b1..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/gazelle.go +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright 2016 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Command gazelle is a BUILD file generator for Go projects. -// See "gazelle --help" for more details. -package main - -import ( - "flag" - "fmt" - "log" - "os" -) - -type command int - -const ( - updateCmd command = iota - fixCmd - updateReposCmd - helpCmd -) - -var commandFromName = map[string]command{ - "fix": fixCmd, - "help": helpCmd, - "update": updateCmd, - "update-repos": updateReposCmd, -} - -var nameFromCommand = []string{ - // keep in sync with definition above - "update", - "fix", - "update-repos", - "help", -} - -func (cmd command) String() string { - return nameFromCommand[cmd] -} - -func main() { - log.SetPrefix("gazelle: ") - log.SetFlags(0) // don't print timestamps - - if err := run(os.Args[1:]); err != nil && err != flag.ErrHelp { - if err == exitError { - os.Exit(1) - } else { - log.Fatal(err) - } - } -} - -func run(args []string) error { - cmd := updateCmd - if len(args) == 1 && (args[0] == "-h" || args[0] == "-help" || args[0] == "--help") { - cmd = helpCmd - } else if len(args) > 0 { - c, ok := commandFromName[args[0]] - if ok { - cmd = c - args = args[1:] - } - } - - switch cmd { - case fixCmd, updateCmd: - return runFixUpdate(cmd, args) - case helpCmd: - return help() - case updateReposCmd: - return updateRepos(args) - default: - log.Panicf("unknown command: %v", cmd) - } - return nil -} - -func help() error { - fmt.Fprint(os.Stderr, `usage: gazelle [args...] - -Gazelle is a BUILD file generator for Go projects. It can create new BUILD files -for a project that follows "go build" conventions, and it can update BUILD files -if they already exist. It can be invoked directly in a project workspace, or -it can be run on an external dependency during the build as part of the -go_repository rule. - -Gazelle may be run with one of the commands below. If no command is given, -Gazelle defaults to "update". - - update - Gazelle will create new BUILD files or update existing BUILD files - if needed. - fix - in addition to the changes made in update, Gazelle will make potentially - breaking changes. For example, it may delete obsolete rules or rename - existing rules. - update-repos - updates repository rules in the WORKSPACE file. Run with - -h for details. - help - show this message. - -For usage information for a specific command, run the command with the -h flag. -For example: - - gazelle update -h - -Gazelle is under active development, and its interface may change -without notice. - -`) - return flag.ErrHelp -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/langs.go b/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/langs.go deleted file mode 100644 index 0f8e112557..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/langs.go +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package main - -import ( - "github.com/bazelbuild/bazel-gazelle/language" - "github.com/bazelbuild/bazel-gazelle/language/go" - "github.com/bazelbuild/bazel-gazelle/language/proto" -) - -var languages = []language.Language{ - proto.NewLanguage(), - golang.NewLanguage(), -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/metaresolver.go b/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/metaresolver.go deleted file mode 100644 index 028c4f206b..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/metaresolver.go +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright 2019 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package main - -import ( - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/resolve" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// metaResolver provides a rule.Resolver for any rule.Rule. -type metaResolver struct { - // builtins provides a map of the language kinds to their resolver. - builtins map[string]resolve.Resolver - - // mappedKinds provides a list of replacements used by File.Pkg. - mappedKinds map[string][]config.MappedKind -} - -func newMetaResolver() *metaResolver { - return &metaResolver{ - builtins: make(map[string]resolve.Resolver), - mappedKinds: make(map[string][]config.MappedKind), - } -} - -// AddBuiltin registers a builtin kind with its info. -func (mr *metaResolver) AddBuiltin(kindName string, resolver resolve.Resolver) { - mr.builtins[kindName] = resolver -} - -// MappedKind records the fact that the given mapping was applied while -// processing the given package. -func (mr *metaResolver) MappedKind(pkgRel string, kind config.MappedKind) { - mr.mappedKinds[pkgRel] = append(mr.mappedKinds[pkgRel], kind) -} - -// Resolver returns a resolver for the given rule and package, and a bool -// indicating whether one was found. Empty string may be passed for pkgRel, -// which results in consulting the builtin kinds only. -func (mr metaResolver) Resolver(r *rule.Rule, pkgRel string) resolve.Resolver { - for _, mappedKind := range mr.mappedKinds[pkgRel] { - if mappedKind.KindName == r.Kind() { - return mr.builtins[mappedKind.FromKind] - } - } - return mr.builtins[r.Kind()] -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/print.go b/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/print.go deleted file mode 100644 index bf99031124..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/print.go +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright 2016 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package main - -import ( - "os" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -func printFile(c *config.Config, f *rule.File) error { - content := f.Format() - _, err := os.Stdout.Write(content) - return err -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/update-repos.go b/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/update-repos.go deleted file mode 100644 index 0de7d43d78..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/update-repos.go +++ /dev/null @@ -1,368 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package main - -import ( - "errors" - "flag" - "fmt" - "os" - "path/filepath" - "sort" - "strings" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/language" - "github.com/bazelbuild/bazel-gazelle/merger" - "github.com/bazelbuild/bazel-gazelle/repo" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -type updateReposConfig struct { - repoFilePath string - importPaths []string - macroFileName string - macroDefName string - pruneRules bool - workspace *rule.File - repoFileMap map[string]*rule.File -} - -const updateReposName = "_update-repos" - -func getUpdateReposConfig(c *config.Config) *updateReposConfig { - return c.Exts[updateReposName].(*updateReposConfig) -} - -type updateReposConfigurer struct{} - -type macroFlag struct { - macroFileName *string - macroDefName *string -} - -func (f macroFlag) Set(value string) error { - args := strings.Split(value, "%") - if len(args) != 2 { - return fmt.Errorf("Failure parsing to_macro: %s, expected format is macroFile%%defName", value) - } - if strings.HasPrefix(args[0], "..") { - return fmt.Errorf("Failure parsing to_macro: %s, macro file path %s should not start with \"..\"", value, args[0]) - } - *f.macroFileName = args[0] - *f.macroDefName = args[1] - return nil -} - -func (f macroFlag) String() string { - return "" -} - -func (*updateReposConfigurer) RegisterFlags(fs *flag.FlagSet, cmd string, c *config.Config) { - uc := &updateReposConfig{} - c.Exts[updateReposName] = uc - fs.StringVar(&uc.repoFilePath, "from_file", "", "Gazelle will translate repositories listed in this file into repository rules in WORKSPACE or a .bzl macro function. Gopkg.lock and go.mod files are supported") - fs.Var(macroFlag{macroFileName: &uc.macroFileName, macroDefName: &uc.macroDefName}, "to_macro", "Tells Gazelle to write repository rules into a .bzl macro function rather than the WORKSPACE file. . The expected format is: macroFile%defName") - fs.BoolVar(&uc.pruneRules, "prune", false, "When enabled, Gazelle will remove rules that no longer have equivalent repos in the Gopkg.lock/go.mod file. Can only used with -from_file.") -} - -func (*updateReposConfigurer) CheckFlags(fs *flag.FlagSet, c *config.Config) error { - uc := getUpdateReposConfig(c) - switch { - case uc.repoFilePath != "": - if len(fs.Args()) != 0 { - return fmt.Errorf("got %d positional arguments with -from_file; wanted 0.\nTry -help for more information.", len(fs.Args())) - } - - default: - if len(fs.Args()) == 0 { - return fmt.Errorf("no repositories specified\nTry -help for more information.") - } - if uc.pruneRules { - return fmt.Errorf("the -prune option can only be used with -from_file") - } - uc.importPaths = fs.Args() - } - - var err error - workspacePath := filepath.Join(c.RepoRoot, "WORKSPACE") - uc.workspace, err = rule.LoadWorkspaceFile(workspacePath, "") - if err != nil { - return fmt.Errorf("loading WORKSPACE file: %v", err) - } - c.Repos, uc.repoFileMap, err = repo.ListRepositories(uc.workspace) - if err != nil { - return fmt.Errorf("loading WORKSPACE file: %v", err) - } - - return nil -} - -func (*updateReposConfigurer) KnownDirectives() []string { return nil } - -func (*updateReposConfigurer) Configure(c *config.Config, rel string, f *rule.File) {} - -func updateRepos(args []string) (err error) { - // Build configuration with all languages. - cexts := make([]config.Configurer, 0, len(languages)+2) - cexts = append(cexts, &config.CommonConfigurer{}, &updateReposConfigurer{}) - kinds := make(map[string]rule.KindInfo) - loads := []rule.LoadInfo{} - for _, lang := range languages { - cexts = append(cexts, lang) - loads = append(loads, lang.Loads()...) - for kind, info := range lang.Kinds() { - kinds[kind] = info - } - } - c, err := newUpdateReposConfiguration(args, cexts) - if err != nil { - return err - } - uc := getUpdateReposConfig(c) - - // TODO(jayconrod): move Go-specific RemoteCache logic to language/go. - var knownRepos []repo.Repo - for _, r := range c.Repos { - if r.Kind() == "go_repository" { - knownRepos = append(knownRepos, repo.Repo{ - Name: r.Name(), - GoPrefix: r.AttrString("importpath"), - Remote: r.AttrString("remote"), - VCS: r.AttrString("vcs"), - }) - } - } - rc, cleanup := repo.NewRemoteCache(knownRepos) - defer func() { - if cerr := cleanup(); err == nil && cerr != nil { - err = cerr - } - }() - - // Fix the workspace file with each language. - for _, lang := range languages { - lang.Fix(c, uc.workspace) - } - - // Generate rules from command language arguments or by importing a file. - var gen, empty []*rule.Rule - if uc.repoFilePath == "" { - gen, err = updateRepoImports(c, rc) - } else { - gen, empty, err = importRepos(c, rc) - } - if err != nil { - return err - } - - // Organize generated and empty rules by file. A rule should go into the file - // it came from (by name). New rules should go into WORKSPACE or the file - // specified with -to_macro. - var newGen []*rule.Rule - genForFiles := make(map[*rule.File][]*rule.Rule) - emptyForFiles := make(map[*rule.File][]*rule.Rule) - for _, r := range gen { - f := uc.repoFileMap[r.Name()] - if f != nil { - genForFiles[f] = append(genForFiles[f], r) - } else { - newGen = append(newGen, r) - } - } - for _, r := range empty { - f := uc.repoFileMap[r.Name()] - if f == nil { - panic(fmt.Sprintf("empty rule %q for deletion that was not found", r.Name())) - } - emptyForFiles[f] = append(emptyForFiles[f], r) - } - - var newGenFile *rule.File - var macroPath string - if uc.macroFileName != "" { - macroPath = filepath.Join(c.RepoRoot, filepath.Clean(uc.macroFileName)) - } - for f := range genForFiles { - if macroPath == "" && filepath.Base(f.Path) == "WORKSPACE" || - macroPath != "" && f.Path == macroPath && f.DefName == uc.macroDefName { - newGenFile = f - break - } - } - if newGenFile == nil { - if uc.macroFileName == "" { - newGenFile = uc.workspace - } else { - var err error - newGenFile, err = rule.LoadMacroFile(macroPath, "", uc.macroDefName) - if os.IsNotExist(err) { - newGenFile, err = rule.EmptyMacroFile(macroPath, "", uc.macroDefName) - if err != nil { - return fmt.Errorf("error creating %q: %v", macroPath, err) - } - } else if err != nil { - return fmt.Errorf("error loading %q: %v", macroPath, err) - } - } - } - genForFiles[newGenFile] = append(genForFiles[newGenFile], newGen...) - - // Merge rules and fix loads in each file. - seenFile := make(map[*rule.File]bool) - sortedFiles := make([]*rule.File, 0, len(genForFiles)) - for f := range genForFiles { - if !seenFile[f] { - seenFile[f] = true - sortedFiles = append(sortedFiles, f) - } - } - for f := range emptyForFiles { - if !seenFile[f] { - seenFile[f] = true - sortedFiles = append(sortedFiles, f) - } - } - sort.Slice(sortedFiles, func(i, j int) bool { - if cmp := strings.Compare(sortedFiles[i].Path, sortedFiles[j].Path); cmp != 0 { - return cmp < 0 - } - return sortedFiles[i].DefName < sortedFiles[j].DefName - }) - - updatedFiles := make(map[string]*rule.File) - for _, f := range sortedFiles { - merger.MergeFile(f, emptyForFiles[f], genForFiles[f], merger.PreResolve, kinds) - merger.FixLoads(f, loads) - if f == uc.workspace { - if err := merger.CheckGazelleLoaded(f); err != nil { - return err - } - } - f.Sync() - if uf, ok := updatedFiles[f.Path]; ok { - uf.SyncMacroFile(f) - } else { - updatedFiles[f.Path] = f - } - } - for _, f := range sortedFiles { - if uf := updatedFiles[f.Path]; uf != nil { - if err := uf.Save(uf.Path); err != nil { - return err - } - delete(updatedFiles, f.Path) - } - } - - return nil -} - -func newUpdateReposConfiguration(args []string, cexts []config.Configurer) (*config.Config, error) { - c := config.New() - fs := flag.NewFlagSet("gazelle", flag.ContinueOnError) - // Flag will call this on any parse error. Don't print usage unless - // -h or -help were passed explicitly. - fs.Usage = func() {} - for _, cext := range cexts { - cext.RegisterFlags(fs, "update-repos", c) - } - if err := fs.Parse(args); err != nil { - if err == flag.ErrHelp { - updateReposUsage(fs) - return nil, err - } - // flag already prints the error; don't print it again. - return nil, errors.New("Try -help for more information") - } - for _, cext := range cexts { - if err := cext.CheckFlags(fs, c); err != nil { - return nil, err - } - } - return c, nil -} - -func updateReposUsage(fs *flag.FlagSet) { - fmt.Fprint(os.Stderr, `usage: - -# Add/update repositories by import path -gazelle update-repos example.com/repo1 example.com/repo2 - -# Import repositories from lock file -gazelle update-repos -from_file=file - -The update-repos command updates repository rules in the WORKSPACE file. -update-repos can add or update repositories explicitly by import path. -update-repos can also import repository rules from a vendoring tool's lock -file (currently only deps' Gopkg.lock is supported). - -FLAGS: - -`) - fs.PrintDefaults() -} - -func updateRepoImports(c *config.Config, rc *repo.RemoteCache) (gen []*rule.Rule, err error) { - // TODO(jayconrod): let the user pick the language with a command line flag. - // For now, only use the first language that implements the interface. - uc := getUpdateReposConfig(c) - var updater language.RepoUpdater - for _, lang := range languages { - if u, ok := lang.(language.RepoUpdater); ok { - updater = u - break - } - } - if updater == nil { - return nil, fmt.Errorf("no languages can update repositories") - } - res := updater.UpdateRepos(language.UpdateReposArgs{ - Config: c, - Imports: uc.importPaths, - Cache: rc, - }) - return res.Gen, res.Error -} - -func importRepos(c *config.Config, rc *repo.RemoteCache) (gen, empty []*rule.Rule, err error) { - uc := getUpdateReposConfig(c) - importSupported := false - var importer language.RepoImporter - for _, lang := range languages { - if i, ok := lang.(language.RepoImporter); ok { - importSupported = true - if i.CanImport(uc.repoFilePath) { - importer = i - break - } - } - } - if importer == nil { - if importSupported { - return nil, nil, fmt.Errorf("unknown file format: %s", uc.repoFilePath) - } else { - return nil, nil, fmt.Errorf("no supported languages can import configuration files") - } - } - res := importer.ImportRepos(language.ImportReposArgs{ - Config: c, - Path: uc.repoFilePath, - Prune: uc.pruneRules, - Cache: rc, - }) - return res.Gen, res.Empty, res.Error -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/version.go b/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/version.go deleted file mode 100644 index a281dfb779..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/cmd/gazelle/version.go +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package main - -import ( - "io/ioutil" - "log" - "path/filepath" - "regexp" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/internal/version" - "github.com/bazelbuild/bazel-gazelle/repo" -) - -var minimumRulesGoVersion = version.Version{0, 19, 0} - -// checkRulesGoVersion checks whether a compatible version of rules_go is -// being used in the workspace. A message will be logged if an incompatible -// version is found. -// -// Note that we can't always determine the version of rules_go in use. Also, -// if we find an incompatible version, we shouldn't bail out since the -// incompatibility may not matter in the current workspace. -func checkRulesGoVersion(repoRoot string) { - const message = `Gazelle may not be compatible with this version of rules_go. -Update io_bazel_rules_go to a newer version in your WORKSPACE file.` - - rulesGoPath, err := repo.FindExternalRepo(repoRoot, config.RulesGoRepoName) - if err != nil { - return - } - defBzlPath := filepath.Join(rulesGoPath, "go", "def.bzl") - defBzlContent, err := ioutil.ReadFile(defBzlPath) - if err != nil { - return - } - versionRe := regexp.MustCompile(`(?m)^RULES_GO_VERSION = ['"]([0-9.]*)['"]`) - match := versionRe.FindSubmatch(defBzlContent) - if match == nil { - log.Printf("RULES_GO_VERSION not found in @%s//go:def.bzl.\n%s", config.RulesGoRepoName, message) - return - } - vstr := string(match[1]) - v, err := version.ParseVersion(vstr) - if err != nil { - log.Printf("RULES_GO_VERSION %q could not be parsed in @%s//go:def.bzl.\n%s", vstr, config.RulesGoRepoName, message) - } - if v.Compare(minimumRulesGoVersion) < 0 { - log.Printf("Found RULES_GO_VERSION %s. Minimum compatible version is %s.\n%s", v, minimumRulesGoVersion, message) - } -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/config/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/config/BUILD.bazel deleted file mode 100644 index 1824d560e7..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/config/BUILD.bazel +++ /dev/null @@ -1,16 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "constants.go", - ], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/config", - importpath = "github.com/bazelbuild/bazel-gazelle/config", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/bazelbuild/bazel-gazelle/internal/wspace:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/rule:go_default_library", - ], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/config/config.go b/vendor/github.com/bazelbuild/bazel-gazelle/config/config.go deleted file mode 100644 index 27c407041d..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/config/config.go +++ /dev/null @@ -1,252 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package config provides extensible configuration for Gazelle libraries. -// -// Packages may define Configurers which add support for new command-line -// options and directive comments in build files. Note that the -// language.Language interface embeds Configurer, so each language extension -// has the opportunity -// -// When Gazelle walks the directory trees in a repository, it calls the -// Configure method of each Configurer to produce a Config object. -// Config objects are passed as arguments to most functions in Gazelle, so -// this mechanism may be used to control many aspects of Gazelle's behavior. -package config - -import ( - "flag" - "fmt" - "log" - "path/filepath" - "strings" - - "github.com/bazelbuild/bazel-gazelle/internal/wspace" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// Config holds information about how Gazelle should run. This is based on -// command line arguments, directives, other hints in build files. -// -// A Config applies to a single directory. A Config is created for the -// repository root directory, then copied and modified for each subdirectory. -// -// Config itself contains only general information. Most configuration -// information is language-specific and is stored in Exts. This information -// is modified by extensions that implement Configurer. -type Config struct { - // RepoRoot is the absolute, canonical path to the root directory of the - // repository with all symlinks resolved. - RepoRoot string - - // RepoName is the name of the repository. - RepoName string - - // ReadBuildFilesDir is the absolute path to a directory where - // build files should be read from instead of RepoRoot. - ReadBuildFilesDir string - - // WriteBuildFilesDir is the absolute path to a directory where - // build files should be written to instead of RepoRoot. - WriteBuildFilesDir string - - // ValidBuildFileNames is a list of base names that are considered valid - // build files. Some repositories may have files named "BUILD" that are not - // used by Bazel and should be ignored. Must contain at least one string. - ValidBuildFileNames []string - - // ShouldFix determines whether Gazelle attempts to remove and replace - // usage of deprecated rules. - ShouldFix bool - - // IndexLibraries determines whether Gazelle should build an index of - // libraries in the workspace for dependency resolution - IndexLibraries bool - - // KindMap maps from a kind name to its replacement. It provides a way for - // users to customize the kind of rules created by Gazelle, via - // # gazelle:map_kind. - KindMap map[string]MappedKind - - // Repos is a list of repository rules declared in the main WORKSPACE file - // or in macros called by the main WORKSPACE file. This may affect rule - // generation and dependency resolution. - Repos []*rule.Rule - - // Exts is a set of configurable extensions. Generally, each language - // has its own set of extensions, but other modules may provide their own - // extensions as well. Values in here may be populated by command line - // arguments, directives in build files, or other mechanisms. - Exts map[string]interface{} -} - -// MappedKind describes a replacement to use for a built-in kind. -type MappedKind struct { - FromKind, KindName, KindLoad string -} - -func New() *Config { - return &Config{ - ValidBuildFileNames: DefaultValidBuildFileNames, - Exts: make(map[string]interface{}), - } -} - -// Clone creates a copy of the configuration for use in a subdirectory. -// Note that the Exts map is copied, but its contents are not. -// Configurer.Configure should do this, if needed. -func (c *Config) Clone() *Config { - cc := *c - cc.Exts = make(map[string]interface{}) - for k, v := range c.Exts { - cc.Exts[k] = v - } - cc.KindMap = make(map[string]MappedKind) - for k, v := range c.KindMap { - cc.KindMap[k] = v - } - return &cc -} - -var DefaultValidBuildFileNames = []string{"BUILD.bazel", "BUILD"} - -// IsValidBuildFileName returns true if a file with the given base name -// should be treated as a build file. -func (c *Config) IsValidBuildFileName(name string) bool { - for _, n := range c.ValidBuildFileNames { - if name == n { - return true - } - } - return false -} - -// DefaultBuildFileName returns the base name used to create new build files. -func (c *Config) DefaultBuildFileName() string { - return c.ValidBuildFileNames[0] -} - -// Configurer is the interface for language or library-specific configuration -// extensions. Most (ideally all) modifications to Config should happen -// via this interface. -type Configurer interface { - // RegisterFlags registers command-line flags used by the extension. This - // method is called once with the root configuration when Gazelle - // starts. RegisterFlags may set an initial values in Config.Exts. When flags - // are set, they should modify these values. - RegisterFlags(fs *flag.FlagSet, cmd string, c *Config) - - // CheckFlags validates the configuration after command line flags are parsed. - // This is called once with the root configuration when Gazelle starts. - // CheckFlags may set default values in flags or make implied changes. - CheckFlags(fs *flag.FlagSet, c *Config) error - - // KnownDirectives returns a list of directive keys that this Configurer can - // interpret. Gazelle prints errors for directives that are not recoginized by - // any Configurer. - KnownDirectives() []string - - // Configure modifies the configuration using directives and other information - // extracted from a build file. Configure is called in each directory. - // - // c is the configuration for the current directory. It starts out as a copy - // of the configuration for the parent directory. - // - // rel is the slash-separated relative path from the repository root to - // the current directory. It is "" for the root directory itself. - // - // f is the build file for the current directory or nil if there is no - // existing build file. - Configure(c *Config, rel string, f *rule.File) -} - -// CommonConfigurer handles language-agnostic command-line flags and directives, -// i.e., those that apply to Config itself and not to Config.Exts. -type CommonConfigurer struct { - repoRoot, buildFileNames, readBuildFilesDir, writeBuildFilesDir string - indexLibraries bool -} - -func (cc *CommonConfigurer) RegisterFlags(fs *flag.FlagSet, cmd string, c *Config) { - fs.StringVar(&cc.repoRoot, "repo_root", "", "path to a directory which corresponds to go_prefix, otherwise gazelle searches for it.") - fs.StringVar(&cc.buildFileNames, "build_file_name", strings.Join(DefaultValidBuildFileNames, ","), "comma-separated list of valid build file names.\nThe first element of the list is the name of output build files to generate.") - fs.BoolVar(&cc.indexLibraries, "index", true, "when true, gazelle will build an index of libraries in the workspace for dependency resolution") - fs.StringVar(&cc.readBuildFilesDir, "experimental_read_build_files_dir", "", "path to a directory where build files should be read from (instead of -repo_root)") - fs.StringVar(&cc.writeBuildFilesDir, "experimental_write_build_files_dir", "", "path to a directory where build files should be written to (instead of -repo_root)") -} - -func (cc *CommonConfigurer) CheckFlags(fs *flag.FlagSet, c *Config) error { - var err error - if cc.repoRoot == "" { - cc.repoRoot, err = wspace.Find(".") - if err != nil { - return fmt.Errorf("-repo_root not specified, and WORKSPACE cannot be found: %v", err) - } - } - c.RepoRoot, err = filepath.Abs(cc.repoRoot) - if err != nil { - return fmt.Errorf("%s: failed to find absolute path of repo root: %v", cc.repoRoot, err) - } - c.RepoRoot, err = filepath.EvalSymlinks(c.RepoRoot) - if err != nil { - return fmt.Errorf("%s: failed to resolve symlinks: %v", cc.repoRoot, err) - } - c.ValidBuildFileNames = strings.Split(cc.buildFileNames, ",") - if cc.readBuildFilesDir != "" { - c.ReadBuildFilesDir, err = filepath.Abs(cc.readBuildFilesDir) - if err != nil { - return fmt.Errorf("%s: failed to find absolute path of -read_build_files_dir: %v", cc.readBuildFilesDir, err) - } - } - if cc.writeBuildFilesDir != "" { - c.WriteBuildFilesDir, err = filepath.Abs(cc.writeBuildFilesDir) - if err != nil { - return fmt.Errorf("%s: failed to find absolute path of -write_build_files_dir: %v", cc.writeBuildFilesDir, err) - } - } - c.IndexLibraries = cc.indexLibraries - return nil -} - -func (cc *CommonConfigurer) KnownDirectives() []string { - return []string{"build_file_name", "map_kind"} -} - -func (cc *CommonConfigurer) Configure(c *Config, rel string, f *rule.File) { - if f == nil { - return - } - for _, d := range f.Directives { - switch d.Key { - case "build_file_name": - c.ValidBuildFileNames = strings.Split(d.Value, ",") - - case "map_kind": - vals := strings.Fields(d.Value) - if len(vals) != 3 { - log.Printf("expected three arguments (gazelle:map_kind from_kind to_kind load_file), got %v", vals) - continue - } - if c.KindMap == nil { - c.KindMap = make(map[string]MappedKind) - } - c.KindMap[vals[0]] = MappedKind{ - FromKind: vals[0], - KindName: vals[1], - KindLoad: vals[2], - } - } - } -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/config/constants.go b/vendor/github.com/bazelbuild/bazel-gazelle/config/constants.go deleted file mode 100644 index 7bbddf8228..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/config/constants.go +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package config - -const ( - // RulesGoRepoName is the canonical name of the rules_go repository. It must - // match the workspace name in WORKSPACE. - // TODO(jayconrod): move to language/go. - RulesGoRepoName = "io_bazel_rules_go" - - // GazelleImportsKey is an internal attribute that lists imported packages - // on generated rules. It is replaced with "deps" during import resolution. - GazelleImportsKey = "_gazelle_imports" -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/flag/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/flag/BUILD.bazel deleted file mode 100644 index 3e31143b9a..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/flag/BUILD.bazel +++ /dev/null @@ -1,9 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["flag.go"], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/flag", - importpath = "github.com/bazelbuild/bazel-gazelle/flag", - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/flag/flag.go b/vendor/github.com/bazelbuild/bazel-gazelle/flag/flag.go deleted file mode 100644 index be5be2451e..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/flag/flag.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2017 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package flag provides some general-purpose types which satisfy the -// flag.Value interface. -package flag - -import ( - stdflag "flag" - "fmt" - "strings" -) - -// MultiFlag collects repeated string flags into a slice. -type MultiFlag struct { - IsSet *bool - Values *[]string -} - -var _ stdflag.Value = (*MultiFlag)(nil) - -func (m *MultiFlag) Set(v string) error { - if m.IsSet != nil && !*m.IsSet { - *m.IsSet = true - *m.Values = nil // clear any default values - } - *m.Values = append(*m.Values, v) - return nil -} - -func (m *MultiFlag) String() string { - if m == nil || m.Values == nil { - return "" - } - return strings.Join(*m.Values, ",") -} - -// ExplicitFlag is a string flag that tracks whether it was set. -type ExplicitFlag struct { - IsSet *bool - Value *string -} - -var _ stdflag.Value = (*ExplicitFlag)(nil) - -func (f *ExplicitFlag) Set(value string) error { - *f.IsSet = true - *f.Value = value - return nil -} - -func (f *ExplicitFlag) String() string { - if f == nil || f.Value == nil { - return "" - } - return *f.Value -} - -var _ stdflag.Value = (*AllowedStringFlag)(nil) - -type AllowedStringFlag struct { - Allowed []string - Value *string -} - -func (f *AllowedStringFlag) Set(v string) error { - for _, a := range f.Allowed { - if v == a { - *f.Value = v - return nil - } - } - return fmt.Errorf("Invalid argument %q. Possible values are: %s", v, strings.Join(f.Allowed, ", ")) -} - -func (f *AllowedStringFlag) String() string { - if f == nil || f.Value == nil { - return "" - } - return *f.Value -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/internal/version/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/internal/version/BUILD.bazel deleted file mode 100644 index c11ea76d73..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/internal/version/BUILD.bazel +++ /dev/null @@ -1,9 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["version.go"], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/internal/version", - importpath = "github.com/bazelbuild/bazel-gazelle/internal/version", - visibility = ["//vendor/github.com/bazelbuild/bazel-gazelle:__subpackages__"], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/internal/version/version.go b/vendor/github.com/bazelbuild/bazel-gazelle/internal/version/version.go deleted file mode 100644 index 5c56fca72e..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/internal/version/version.go +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package version - -import ( - "fmt" - "strconv" - "strings" -) - -// Version is a tuple of non-negative integers that represents the version of -// a software package. -type Version []int - -func (v Version) String() string { - cstrs := make([]string, len(v)) - for i, cn := range v { - cstrs[i] = strconv.Itoa(cn) - } - return strings.Join(cstrs, ".") -} - -// Compare returns an integer comparing two versions lexicographically. -func (x Version) Compare(y Version) int { - n := len(x) - if len(y) < n { - n = len(y) - } - for i := 0; i < n; i++ { - cmp := x[i] - y[i] - if cmp != 0 { - return cmp - } - } - return len(x) - len(y) -} - -// ParseVersion parses a version of the form "12.34.56-abcd". Non-negative -// integer components are separated by dots. An arbitrary suffix may appear -// after '-', which is ignored. -func ParseVersion(vs string) (Version, error) { - i := strings.IndexByte(vs, '-') - if i >= 0 { - vs = vs[:i] - } - cstrs := strings.Split(vs, ".") - v := make(Version, len(cstrs)) - for i, cstr := range cstrs { - cn, err := strconv.Atoi(cstr) - if err != nil { - return nil, fmt.Errorf("could not parse version string: %q is not an integer", cstr) - } - if cn < 0 { - return nil, fmt.Errorf("could not parse version string: %q is negative", cstr) - } - v[i] = cn - } - return v, nil -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/internal/wspace/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/internal/wspace/BUILD.bazel deleted file mode 100644 index 44a46e6311..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/internal/wspace/BUILD.bazel +++ /dev/null @@ -1,9 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["finder.go"], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/internal/wspace", - importpath = "github.com/bazelbuild/bazel-gazelle/internal/wspace", - visibility = ["//vendor/github.com/bazelbuild/bazel-gazelle:__subpackages__"], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/internal/wspace/finder.go b/vendor/github.com/bazelbuild/bazel-gazelle/internal/wspace/finder.go deleted file mode 100644 index 78935eb5d5..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/internal/wspace/finder.go +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright 2016 The Bazel Authors. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package wspace provides functions to locate and modify a bazel WORKSPACE file. -package wspace - -import ( - "os" - "path/filepath" - "strings" -) - -const workspaceFile = "WORKSPACE" - -// Find searches from the given dir and up for the WORKSPACE file -// returning the directory containing it, or an error if none found in the tree. -func Find(dir string) (string, error) { - dir, err := filepath.Abs(dir) - if err != nil { - return "", err - } - - for { - _, err = os.Stat(filepath.Join(dir, workspaceFile)) - if err == nil { - return dir, nil - } - if !os.IsNotExist(err) { - return "", err - } - if strings.HasSuffix(dir, string(os.PathSeparator)) { // stop at root dir - return "", os.ErrNotExist - } - dir = filepath.Dir(dir) - } -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/label/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/label/BUILD.bazel deleted file mode 100644 index 20cfb261ce..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/label/BUILD.bazel +++ /dev/null @@ -1,10 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["label.go"], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/label", - importpath = "github.com/bazelbuild/bazel-gazelle/label", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/bazelbuild/bazel-gazelle/pathtools:go_default_library"], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/label/label.go b/vendor/github.com/bazelbuild/bazel-gazelle/label/label.go deleted file mode 100644 index 0d8e6c0cb5..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/label/label.go +++ /dev/null @@ -1,201 +0,0 @@ -/* Copyright 2016 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package label provides utilities for parsing and manipulating -// Bazel labels. See -// https://docs.bazel.build/versions/master/build-ref.html#labels -// for more information. -package label - -import ( - "fmt" - "log" - "path" - "regexp" - "strings" - - "github.com/bazelbuild/bazel-gazelle/pathtools" -) - -// A Label represents a label of a build target in Bazel. Labels have three -// parts: a repository name, a package name, and a target name, formatted -// as @repo//pkg:target. -type Label struct { - // Repo is the repository name. If omitted, the label refers to a target - // in the current repository. - Repo string - - // Pkg is the package name, which is usually the directory that contains - // the target. If both Repo and Pkg are omitted, the label is relative. - Pkg string - - // Name is the name of the target the label refers to. If omitted, Name - // is assumed to be the same as Pkg. - Name string - - // Relative indicates whether the label refers to a target in the current - // package. Relative is true if and only if Repo and Pkg are both omitted. - Relative bool -} - -// New constructs a new label from components. -func New(repo, pkg, name string) Label { - return Label{Repo: repo, Pkg: pkg, Name: name} -} - -// NoLabel is the zero value of Label. It is not a valid label and may be -// returned when an error occurs. -var NoLabel = Label{} - -var ( - labelRepoRegexp = regexp.MustCompile(`^[A-Za-z][A-Za-z0-9_]*$`) - labelPkgRegexp = regexp.MustCompile(`^[A-Za-z0-9/._-]*$`) - labelNameRegexp = regexp.MustCompile(`^[A-Za-z0-9_/.+=,@~-]*$`) -) - -// Parse reads a label from a string. -// See https://docs.bazel.build/versions/master/build-ref.html#lexi. -func Parse(s string) (Label, error) { - origStr := s - - relative := true - var repo string - if strings.HasPrefix(s, "@") { - relative = false - endRepo := strings.Index(s, "//") - if endRepo < 0 { - return NoLabel, fmt.Errorf("label parse error: repository does not end with '//': %q", origStr) - } - repo = s[len("@"):endRepo] - if !labelRepoRegexp.MatchString(repo) { - return NoLabel, fmt.Errorf("label parse error: repository has invalid characters: %q", origStr) - } - s = s[endRepo:] - } - - var pkg string - if strings.HasPrefix(s, "//") { - relative = false - endPkg := strings.Index(s, ":") - if endPkg < 0 { - pkg = s[len("//"):] - s = "" - } else { - pkg = s[len("//"):endPkg] - s = s[endPkg:] - } - if !labelPkgRegexp.MatchString(pkg) { - return NoLabel, fmt.Errorf("label parse error: package has invalid characters: %q", origStr) - } - } - - if s == ":" { - return NoLabel, fmt.Errorf("label parse error: empty name: %q", origStr) - } - name := strings.TrimPrefix(s, ":") - if !labelNameRegexp.MatchString(name) { - return NoLabel, fmt.Errorf("label parse error: name has invalid characters: %q", origStr) - } - - if pkg == "" && name == "" { - return NoLabel, fmt.Errorf("label parse error: empty package and name: %q", origStr) - } - if name == "" { - name = path.Base(pkg) - } - - return Label{ - Repo: repo, - Pkg: pkg, - Name: name, - Relative: relative, - }, nil -} - -func (l Label) String() string { - if l.Relative { - return fmt.Sprintf(":%s", l.Name) - } - - var repo string - if l.Repo != "" { - repo = fmt.Sprintf("@%s", l.Repo) - } - - if path.Base(l.Pkg) == l.Name { - return fmt.Sprintf("%s//%s", repo, l.Pkg) - } - return fmt.Sprintf("%s//%s:%s", repo, l.Pkg, l.Name) -} - -// Abs computes an absolute label (one with a repository and package name) -// from this label. If this label is already absolute, it is returned -// unchanged. -func (l Label) Abs(repo, pkg string) Label { - if !l.Relative { - return l - } - return Label{Repo: repo, Pkg: pkg, Name: l.Name} -} - -// Rel attempts to compute a relative label from this label. If this label -// is already relative or is in a different package, this label may be -// returned unchanged. -func (l Label) Rel(repo, pkg string) Label { - if l.Relative || l.Repo != repo { - return l - } - if l.Pkg == pkg { - return Label{Name: l.Name, Relative: true} - } - return Label{Pkg: l.Pkg, Name: l.Name} -} - -// Equal returns whether two labels are exactly the same. It does not return -// true for different labels that refer to the same target. -func (l Label) Equal(other Label) bool { - return l.Repo == other.Repo && - l.Pkg == other.Pkg && - l.Name == other.Name && - l.Relative == other.Relative -} - -// Contains returns whether other is contained by the package of l or a -// sub-package. Neither label may be relative. -func (l Label) Contains(other Label) bool { - if l.Relative { - log.Panicf("l must not be relative: %s", l) - } - if other.Relative { - log.Panicf("other must not be relative: %s", other) - } - result := l.Repo == other.Repo && pathtools.HasPrefix(other.Pkg, l.Pkg) - return result -} - -// ImportPathToBazelRepoName converts a Go import path into a bazel repo name -// following the guidelines in http://bazel.io/docs/be/functions.html#workspace -func ImportPathToBazelRepoName(importpath string) string { - importpath = strings.ToLower(importpath) - components := strings.Split(importpath, "/") - labels := strings.Split(components[0], ".") - var reversed []string - for i := range labels { - l := labels[len(labels)-i-1] - reversed = append(reversed, l) - } - repo := strings.Join(append(reversed, components[1:]...), "_") - return strings.NewReplacer("-", "_", ".", "_").Replace(repo) -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/language/BUILD.bazel deleted file mode 100644 index 59ef2756c5..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/BUILD.bazel +++ /dev/null @@ -1,18 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "lang.go", - "update.go", - ], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/language", - importpath = "github.com/bazelbuild/bazel-gazelle/language", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/bazelbuild/bazel-gazelle/config:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/repo:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/resolve:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/rule:go_default_library", - ], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/BUILD.bazel deleted file mode 100644 index b35122f7d8..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/BUILD.bazel +++ /dev/null @@ -1,40 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "constants.go", - "dep.go", - "fileinfo.go", - "fix.go", - "generate.go", - "godep.go", - "kinds.go", - "known_go_imports.go", - "known_proto_imports.go", - "lang.go", - "modules.go", - "package.go", - "resolve.go", - "std_package_list.go", - "update.go", - ], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/language/go", - importpath = "github.com/bazelbuild/bazel-gazelle/language/go", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/bazelbuild/bazel-gazelle/config:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/flag:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/label:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/language:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/language/proto:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/pathtools:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/repo:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/resolve:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/rule:go_default_library", - "//vendor/github.com/bazelbuild/buildtools/build:go_default_library", - "//vendor/github.com/pelletier/go-toml:go_default_library", - "//vendor/golang.org/x/sync/errgroup:go_default_library", - ], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/config.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/config.go deleted file mode 100644 index 349b6ba2ff..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/config.go +++ /dev/null @@ -1,447 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package golang - -import ( - "flag" - "fmt" - "go/build" - "log" - "os" - "path" - "path/filepath" - "strings" - - "github.com/bazelbuild/bazel-gazelle/config" - gzflag "github.com/bazelbuild/bazel-gazelle/flag" - "github.com/bazelbuild/bazel-gazelle/language/proto" - "github.com/bazelbuild/bazel-gazelle/rule" - bzl "github.com/bazelbuild/buildtools/build" -) - -// goConfig contains configuration values related to Go rules. -type goConfig struct { - // genericTags is a set of tags that Gazelle considers to be true. Set with - // -build_tags or # gazelle:build_tags. Some tags, like gc, are always on. - genericTags map[string]bool - - // prefix is a prefix of an import path, used to generate importpath - // attributes. Set with -go_prefix or # gazelle:prefix. - prefix string - - // prefixRel is the package name of the directory where the prefix was set - // ("" for the root directory). - prefixRel string - - // prefixSet indicates whether the prefix was set explicitly. It is an error - // to infer an importpath for a rule without setting the prefix. - prefixSet bool - - // importMapPrefix is a prefix of a package path, used to generate importmap - // attributes. Set with # gazelle:importmap_prefix. - importMapPrefix string - - // importMapPrefixRel is the package name of the directory where importMapPrefix - // was set ("" for the root directory). - importMapPrefixRel string - - // depMode determines how imports that are not standard, indexed, or local - // (under the current prefix) should be resolved. - depMode dependencyMode - - // goProtoCompilers is the protocol buffers compiler(s) to use for go code. - goProtoCompilers []string - - // goProtoCompilersSet indicates whether goProtoCompiler was set explicitly. - goProtoCompilersSet bool - - // goGrpcCompilers is the gRPC compiler(s) to use for go code. - goGrpcCompilers []string - - // goGrpcCompilersSet indicates whether goGrpcCompiler was set explicitly. - goGrpcCompilersSet bool - - // goRepositoryMode is true if Gazelle was invoked by a go_repository rule. - // In this mode, we won't go out to the network to resolve external deps. - goRepositoryMode bool - - // By default, internal packages are only visible to its siblings. - // goVisibility adds a list of packages the internal packages should be - // visible to - goVisibility []string - - // moduleMode is true if the current directory is intended to be built - // as part of a module. Minimal module compatibility won't be supported - // if this is true in the root directory. External dependencies may be - // resolved differently (also depending on goRepositoryMode). - moduleMode bool - - // submodules is a list of modules which have the current module's path - // as a prefix of their own path. This affects visibility attributes - // in internal packages. - submodules []moduleRepo - - // buildExternalAttr, buildFileNamesAttr, buildFileGenerationAttr, - // buildTagsAttr, buildFileProtoModeAttr, and buildExtraArgsAttr are - // attributes for go_repository rules, set on the command line. - buildExternalAttr, buildFileNamesAttr, buildFileGenerationAttr, buildTagsAttr, buildFileProtoModeAttr, buildExtraArgsAttr string -} - -var ( - defaultGoProtoCompilers = []string{"@io_bazel_rules_go//proto:go_proto"} - defaultGoGrpcCompilers = []string{"@io_bazel_rules_go//proto:go_grpc"} -) - -func newGoConfig() *goConfig { - gc := &goConfig{ - goProtoCompilers: defaultGoProtoCompilers, - goGrpcCompilers: defaultGoGrpcCompilers, - } - gc.preprocessTags() - return gc -} - -func getGoConfig(c *config.Config) *goConfig { - return c.Exts[goName].(*goConfig) -} - -func (gc *goConfig) clone() *goConfig { - gcCopy := *gc - gcCopy.genericTags = make(map[string]bool) - for k, v := range gc.genericTags { - gcCopy.genericTags[k] = v - } - gcCopy.goProtoCompilers = gc.goProtoCompilers[:len(gc.goProtoCompilers):len(gc.goProtoCompilers)] - gcCopy.goGrpcCompilers = gc.goGrpcCompilers[:len(gc.goGrpcCompilers):len(gc.goGrpcCompilers)] - gcCopy.submodules = gc.submodules[:len(gc.submodules):len(gc.submodules)] - return &gcCopy -} - -// preprocessTags adds some tags which are on by default before they are -// used to match files. -func (gc *goConfig) preprocessTags() { - if gc.genericTags == nil { - gc.genericTags = make(map[string]bool) - } - gc.genericTags["gc"] = true -} - -// setBuildTags sets genericTags by parsing as a comma separated list. An -// error will be returned for tags that wouldn't be recognized by "go build". -// preprocessTags should be called before this. -func (gc *goConfig) setBuildTags(tags string) error { - if tags == "" { - return nil - } - for _, t := range strings.Split(tags, ",") { - if strings.HasPrefix(t, "!") { - return fmt.Errorf("build tags can't be negated: %s", t) - } - gc.genericTags[t] = true - } - return nil -} - -func getProtoMode(c *config.Config) proto.Mode { - if pc := proto.GetProtoConfig(c); pc != nil { - return pc.Mode - } else { - return proto.DisableGlobalMode - } -} - -// dependencyMode determines how imports of packages outside of the prefix -// are resolved. -type dependencyMode int - -const ( - // externalMode indicates imports should be resolved to external dependencies - // (declared in WORKSPACE). - externalMode dependencyMode = iota - - // vendorMode indicates imports should be resolved to libraries in the - // vendor directory. - vendorMode -) - -func (m dependencyMode) String() string { - if m == externalMode { - return "external" - } else { - return "vendored" - } -} - -type externalFlag struct { - depMode *dependencyMode -} - -func (f *externalFlag) Set(value string) error { - switch value { - case "external": - *f.depMode = externalMode - case "vendored": - *f.depMode = vendorMode - default: - return fmt.Errorf("unrecognized dependency mode: %q", value) - } - return nil -} - -func (f *externalFlag) String() string { - if f == nil || f.depMode == nil { - return "external" - } - return f.depMode.String() -} - -type tagsFlag func(string) error - -func (f tagsFlag) Set(value string) error { - return f(value) -} - -func (f tagsFlag) String() string { - return "" -} - -type moduleRepo struct { - repoName, modulePath string -} - -var validBuildExternalAttr = []string{"external", "vendored"} -var validBuildFileGenerationAttr = []string{"auto", "on", "off"} -var validBuildFileProtoModeAttr = []string{"default", "legacy", "disable", "disable_global", "package"} - -func (*goLang) KnownDirectives() []string { - return []string{ - "build_tags", - "go_grpc_compilers", - "go_proto_compilers", - "go_visibility", - "importmap_prefix", - "prefix", - } -} - -func (*goLang) RegisterFlags(fs *flag.FlagSet, cmd string, c *config.Config) { - gc := newGoConfig() - switch cmd { - case "fix", "update": - fs.Var( - tagsFlag(gc.setBuildTags), - "build_tags", - "comma-separated list of build tags. If not specified, Gazelle will not\n\tfilter sources with build constraints.") - fs.Var( - &gzflag.ExplicitFlag{Value: &gc.prefix, IsSet: &gc.prefixSet}, - "go_prefix", - "prefix of import paths in the current workspace") - fs.Var( - &externalFlag{&gc.depMode}, - "external", - "external: resolve external packages with go_repository\n\tvendored: resolve external packages as packages in vendor/") - fs.Var( - &gzflag.MultiFlag{Values: &gc.goProtoCompilers, IsSet: &gc.goProtoCompilersSet}, - "go_proto_compiler", - "go_proto_library compiler to use (may be repeated)") - fs.Var( - &gzflag.MultiFlag{Values: &gc.goGrpcCompilers, IsSet: &gc.goGrpcCompilersSet}, - "go_grpc_compiler", - "go_proto_library compiler to use for gRPC (may be repeated)") - fs.BoolVar( - &gc.goRepositoryMode, - "go_repository_mode", - false, - "set when gazelle is invoked by go_repository") - fs.BoolVar( - &gc.moduleMode, - "go_repository_module_mode", - false, - "set when gazelle is invoked by go_repository in module mode") - - case "update-repos": - fs.Var(&gzflag.AllowedStringFlag{Value: &gc.buildExternalAttr, Allowed: validBuildExternalAttr}, - "build_external", - "Sets the build_external attribute for the generated go_repository rule(s).") - fs.StringVar(&gc.buildExtraArgsAttr, - "build_extra_args", - "", - "Sets the build_extra_args attribute for the generated go_repository rule(s).") - fs.Var(&gzflag.AllowedStringFlag{Value: &gc.buildFileGenerationAttr, Allowed: validBuildFileGenerationAttr}, - "build_file_generation", - "Sets the build_file_generation attribute for the generated go_repository rule(s).") - fs.StringVar(&gc.buildFileNamesAttr, - "build_file_names", - "", - "Sets the build_file_name attribute for the generated go_repository rule(s).") - fs.Var(&gzflag.AllowedStringFlag{Value: &gc.buildFileProtoModeAttr, Allowed: validBuildFileProtoModeAttr}, - "build_file_proto_mode", - "Sets the build_file_proto_mode attribute for the generated go_repository rule(s).") - fs.StringVar(&gc.buildTagsAttr, - "build_tags", - "", - "Sets the build_tags attribute for the generated go_repository rule(s).") - } - c.Exts[goName] = gc -} - -func (*goLang) CheckFlags(fs *flag.FlagSet, c *config.Config) error { - // The base of the -go_prefix flag may be used to generate proto_library - // rule names when there are no .proto sources (empty rules to be deleted) - // or when the package name can't be determined. - // TODO(jayconrod): deprecate and remove this behavior. - gc := getGoConfig(c) - if pc := proto.GetProtoConfig(c); pc != nil { - pc.GoPrefix = gc.prefix - } - - // List modules that may refer to internal packages in this module. - for _, r := range c.Repos { - if r.Kind() != "go_repository" { - continue - } - modulePath := r.AttrString("importpath") - if !strings.HasPrefix(modulePath, gc.prefix+"/") { - continue - } - m := moduleRepo{ - repoName: r.Name(), - modulePath: modulePath, - } - gc.submodules = append(gc.submodules, m) - } - - return nil -} - -func (*goLang) Configure(c *config.Config, rel string, f *rule.File) { - var gc *goConfig - if raw, ok := c.Exts[goName]; !ok { - gc = newGoConfig() - } else { - gc = raw.(*goConfig).clone() - } - c.Exts[goName] = gc - - if !gc.moduleMode { - st, err := os.Stat(filepath.Join(c.RepoRoot, filepath.FromSlash(rel), "go.mod")) - if err == nil && !st.IsDir() { - gc.moduleMode = true - } - } - - if path.Base(rel) == "vendor" { - gc.importMapPrefix = inferImportPath(gc, rel) - gc.importMapPrefixRel = rel - gc.prefix = "" - gc.prefixRel = rel - } - - if f != nil { - setPrefix := func(prefix string) { - if err := checkPrefix(prefix); err != nil { - log.Print(err) - return - } - gc.prefix = prefix - gc.prefixSet = true - gc.prefixRel = rel - } - for _, d := range f.Directives { - switch d.Key { - case "build_tags": - if err := gc.setBuildTags(d.Value); err != nil { - log.Print(err) - continue - } - gc.preprocessTags() - gc.setBuildTags(d.Value) - - case "go_grpc_compilers": - // Special syntax (empty value) to reset directive. - if d.Value == "" { - gc.goGrpcCompilersSet = false - gc.goGrpcCompilers = defaultGoGrpcCompilers - } else { - gc.goGrpcCompilersSet = true - gc.goGrpcCompilers = splitValue(d.Value) - } - - case "go_proto_compilers": - // Special syntax (empty value) to reset directive. - if d.Value == "" { - gc.goProtoCompilersSet = false - gc.goProtoCompilers = defaultGoProtoCompilers - } else { - gc.goProtoCompilersSet = true - gc.goProtoCompilers = splitValue(d.Value) - } - - case "go_visibility": - gc.goVisibility = append(gc.goVisibility, strings.TrimSpace(d.Value)) - - case "importmap_prefix": - gc.importMapPrefix = d.Value - gc.importMapPrefixRel = rel - - case "prefix": - setPrefix(d.Value) - } - } - if !gc.prefixSet { - for _, r := range f.Rules { - switch r.Kind() { - case "go_prefix": - args := r.Args() - if len(args) != 1 { - continue - } - s, ok := args[0].(*bzl.StringExpr) - if !ok { - continue - } - setPrefix(s.Value) - - case "gazelle": - if prefix := r.AttrString("prefix"); prefix != "" { - setPrefix(prefix) - } - } - } - } - } -} - -// checkPrefix checks that a string may be used as a prefix. We forbid local -// (relative) imports and those beginning with "/". We allow the empty string, -// but generated rules must not have an empty importpath. -func checkPrefix(prefix string) error { - if strings.HasPrefix(prefix, "/") || build.IsLocalImport(prefix) { - return fmt.Errorf("invalid prefix: %q", prefix) - } - return nil -} - -// splitDirective splits a comma-separated directive value into its component -// parts, trimming each of any whitespace characters. -func splitValue(value string) []string { - parts := strings.Split(value, ",") - values := make([]string, 0, len(parts)) - for _, part := range parts { - values = append(values, strings.TrimSpace(part)) - } - return values -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/constants.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/constants.go deleted file mode 100644 index 14a343c260..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/constants.go +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package golang - -const ( - // defaultLibName is the name of the default go_library rule in a Go - // package directory. This name was originally chosen so that rules_go - // could translate between Bazel labels and Go import paths using go_prefix. - // It is no longer needed since go_prefix was deleted. - defaultLibName = "go_default_library" - - // defaultTestName is a name of an internal test corresponding to - // defaultLibName. It does not need to be consistent to something but it - // just needs to be unique in the Bazel package - defaultTestName = "go_default_test" - - // legacyProtoFilegroupName is the anme of a filegroup created in legacy - // mode for libraries that contained .pb.go files and .proto files. - legacyProtoFilegroupName = "go_default_library_protos" - - // grpcCompilerLabel is the label for the gRPC compiler plugin, used in the - // "compilers" attribute of go_proto_library rules. - grpcCompilerLabel = "@io_bazel_rules_go//proto:go_grpc" - - // wellKnownTypesGoPrefix is the import path for the Go repository containing - // pre-generated code for the Well Known Types. - wellKnownTypesGoPrefix = "github.com/golang/protobuf" - - // wellKnownTypesPkg is the package name for the predefined WKTs in rules_go. - wellKnownTypesPkg = "proto/wkt" -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/def.bzl b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/def.bzl deleted file mode 100644 index 77922ca365..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/def.bzl +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_context", "go_rule") - -def _std_package_list_impl(ctx): - go = go_context(ctx) - args = ctx.actions.args() - args.add_all([go.package_list, ctx.outputs.out]) - ctx.actions.run( - inputs = [go.package_list], - outputs = [ctx.outputs.out], - executable = ctx.executable._gen_std_package_list, - arguments = [args], - mnemonic = "GoStdPackageList", - ) - return [DefaultInfo(files = depset([ctx.outputs.out]))] - -std_package_list = go_rule( - _std_package_list_impl, - attrs = { - "out": attr.output(mandatory = True), - "_gen_std_package_list": attr.label( - default = "//language/go/gen_std_package_list", - cfg = "host", - executable = True, - ), - }, -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/dep.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/dep.go deleted file mode 100644 index 5e13fbc2e9..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/dep.go +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package golang - -import ( - "io/ioutil" - "sort" - - "github.com/bazelbuild/bazel-gazelle/label" - "github.com/bazelbuild/bazel-gazelle/language" - "github.com/bazelbuild/bazel-gazelle/rule" - toml "github.com/pelletier/go-toml" -) - -type depLockFile struct { - Projects []depProject `toml:"projects"` -} - -type depProject struct { - Name string `toml:"name"` - Revision string `toml:"revision"` - Source string `toml:"source"` -} - -func importReposFromDep(args language.ImportReposArgs) language.ImportReposResult { - data, err := ioutil.ReadFile(args.Path) - if err != nil { - return language.ImportReposResult{Error: err} - } - var file depLockFile - if err := toml.Unmarshal(data, &file); err != nil { - return language.ImportReposResult{Error: err} - } - - gen := make([]*rule.Rule, len(file.Projects)) - for i, p := range file.Projects { - gen[i] = rule.NewRule("go_repository", label.ImportPathToBazelRepoName(p.Name)) - gen[i].SetAttr("importpath", p.Name) - gen[i].SetAttr("commit", p.Revision) - if p.Source != "" { - // TODO(#411): Handle source directives correctly. It may be an import - // path, or a URL. In the case of an import path, we should resolve it - // to the correct remote and vcs. In the case of a URL, we should - // correctly determine what VCS to use (the URL will usually start - // with "https://", which is used by multiple VCSs). - gen[i].SetAttr("remote", p.Source) - gen[i].SetAttr("vcs", "git") - } - } - sort.SliceStable(gen, func(i, j int) bool { - return gen[i].Name() < gen[j].Name() - }) - - return language.ImportReposResult{Gen: gen} -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/fileinfo.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/fileinfo.go deleted file mode 100644 index a409ebe39f..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/fileinfo.go +++ /dev/null @@ -1,695 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package golang - -import ( - "bufio" - "bytes" - "errors" - "fmt" - "go/ast" - "go/parser" - "go/token" - "log" - "os" - "path" - "path/filepath" - "strconv" - "strings" - "unicode" - "unicode/utf8" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/language/proto" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// fileInfo holds information used to decide how to build a file. This -// information comes from the file's name, from package and import declarations -// (in .go files), and from +build and cgo comments. -type fileInfo struct { - path string - name string - - // ext is the type of file, based on extension. - ext ext - - // packageName is the Go package name of a .go file, without the - // "_test" suffix if it was present. It is empty for non-Go files. - packageName string - - // importPath is the canonical import path for this file's package. - // This may be read from a package comment (in Go) or a go_package - // option (in proto). This field is empty for files that don't specify - // an import path. - importPath string - - // isTest is true if the file stem (the part before the extension) - // ends with "_test.go". This is never true for non-Go files. - isTest bool - - // imports is a list of packages imported by a file. It does not include - // "C" or anything from the standard library. - imports []string - - // isCgo is true for .go files that import "C". - isCgo bool - - // goos and goarch contain the OS and architecture suffixes in the filename, - // if they were present. - goos, goarch string - - // tags is a list of build tag lines. Each entry is the trimmed text of - // a line after a "+build" prefix. - tags []tagLine - - // copts and clinkopts contain flags that are part of CFLAGS, CPPFLAGS, - // CXXFLAGS, and LDFLAGS directives in cgo comments. - copts, clinkopts []taggedOpts - - // hasServices indicates whether a .proto file has service definitions. - hasServices bool -} - -// tagLine represents the space-separated disjunction of build tag groups -// in a line comment. -type tagLine []tagGroup - -// check returns true if at least one of the tag groups is satisfied. -func (l tagLine) check(c *config.Config, os, arch string) bool { - if len(l) == 0 { - return false - } - for _, g := range l { - if g.check(c, os, arch) { - return true - } - } - return false -} - -// tagGroup represents a comma-separated conjuction of build tags. -type tagGroup []string - -// check returns true if all of the tags are true. Tags that start with -// "!" are negated (but "!!") is not allowed. Go release tags (e.g., "go1.8") -// are ignored. If the group contains an os or arch tag, but the os or arch -// parameters are empty, check returns false even if the tag is negated. -func (g tagGroup) check(c *config.Config, os, arch string) bool { - goConf := getGoConfig(c) - for _, t := range g { - if strings.HasPrefix(t, "!!") { // bad syntax, reject always - return false - } - not := strings.HasPrefix(t, "!") - if not { - t = t[1:] - } - if isIgnoredTag(t) { - // Release tags are treated as "unknown" and are considered true, - // whether or not they are negated. - continue - } - var match bool - if _, ok := rule.KnownOSSet[t]; ok { - if os == "" { - return false - } - match = matchesOS(os, t) - } else if _, ok := rule.KnownArchSet[t]; ok { - if arch == "" { - return false - } - match = arch == t - } else { - match = goConf.genericTags[t] - } - if not { - match = !match - } - if !match { - return false - } - } - return true -} - -// taggedOpts a list of compile or link options which should only be applied -// if the given set of build tags are satisfied. These options have already -// been tokenized using the same algorithm that "go build" uses, then joined -// with OptSeparator. -type taggedOpts struct { - tags tagLine - opts string -} - -// optSeparator is a special character inserted between options that appeared -// together in a #cgo directive. This allows options to be split, modified, -// and escaped by other packages. -// -// It's important to keep options grouped together in the same string. For -// example, if we have "-framework IOKit" together in a #cgo directive, -// "-framework" shouldn't be treated as a separate string for the purposes of -// sorting and de-duplicating. -const optSeparator = "\x1D" - -// ext indicates how a file should be treated, based on extension. -type ext int - -const ( - // unknownExt is applied files that aren't buildable with Go. - unknownExt ext = iota - - // goExt is applied to .go files. - goExt - - // cExt is applied to C and C++ files. - cExt - - // hExt is applied to header files. If cgo code is present, these may be - // C or C++ headers. If not, they are treated as Go assembly headers. - hExt - - // sExt is applied to Go assembly files, ending with .s. - sExt - - // csExt is applied to other assembly files, ending with .S. These are built - // with the C compiler if cgo code is present. - csExt - - // protoExt is applied to .proto files. - protoExt -) - -// fileNameInfo returns information that can be inferred from the name of -// a file. It does not read data from the file. -func fileNameInfo(path_ string) fileInfo { - name := filepath.Base(path_) - var ext ext - switch path.Ext(name) { - case ".go": - ext = goExt - case ".c", ".cc", ".cpp", ".cxx", ".m", ".mm": - ext = cExt - case ".h", ".hh", ".hpp", ".hxx": - ext = hExt - case ".s": - ext = sExt - case ".S": - ext = csExt - case ".proto": - ext = protoExt - default: - ext = unknownExt - } - if strings.HasPrefix(name, ".") || strings.HasPrefix(name, "_") { - ext = unknownExt - } - - // Determine test, goos, and goarch. This is intended to match the logic - // in goodOSArchFile in go/build. - var isTest bool - var goos, goarch string - l := strings.Split(name[:len(name)-len(path.Ext(name))], "_") - if len(l) >= 2 && l[len(l)-1] == "test" { - isTest = ext == goExt - l = l[:len(l)-1] - } - switch { - case len(l) >= 3 && rule.KnownOSSet[l[len(l)-2]] && rule.KnownArchSet[l[len(l)-1]]: - goos = l[len(l)-2] - goarch = l[len(l)-1] - case len(l) >= 2 && rule.KnownOSSet[l[len(l)-1]]: - goos = l[len(l)-1] - case len(l) >= 2 && rule.KnownArchSet[l[len(l)-1]]: - goarch = l[len(l)-1] - } - - return fileInfo{ - path: path_, - name: name, - ext: ext, - isTest: isTest, - goos: goos, - goarch: goarch, - } -} - -// otherFileInfo returns information about a non-.go file. It will parse -// part of the file to determine build tags. If the file can't be read, an -// error will be logged, and partial information will be returned. -func otherFileInfo(path string) fileInfo { - info := fileNameInfo(path) - if info.ext == unknownExt { - return info - } - - tags, err := readTags(info.path) - if err != nil { - log.Printf("%s: error reading file: %v", info.path, err) - return info - } - info.tags = tags - return info -} - -// goFileInfo returns information about a .go file. It will parse part of the -// file to determine the package name, imports, and build constraints. -// If the file can't be read, an error will be logged, and partial information -// will be returned. -// This function is intended to match go/build.Context.Import. -// TODD(#53): extract canonical import path -func goFileInfo(path, rel string) fileInfo { - info := fileNameInfo(path) - fset := token.NewFileSet() - pf, err := parser.ParseFile(fset, info.path, nil, parser.ImportsOnly|parser.ParseComments) - if err != nil { - log.Printf("%s: error reading go file: %v", info.path, err) - return info - } - - info.packageName = pf.Name.Name - if info.isTest && strings.HasSuffix(info.packageName, "_test") { - info.packageName = info.packageName[:len(info.packageName)-len("_test")] - } - - for _, decl := range pf.Decls { - d, ok := decl.(*ast.GenDecl) - if !ok { - continue - } - for _, dspec := range d.Specs { - spec, ok := dspec.(*ast.ImportSpec) - if !ok { - continue - } - quoted := spec.Path.Value - path, err := strconv.Unquote(quoted) - if err != nil { - log.Printf("%s: error reading go file: %v", info.path, err) - continue - } - - if path == "C" { - if info.isTest { - log.Printf("%s: warning: use of cgo in test not supported", info.path) - } - info.isCgo = true - cg := spec.Doc - if cg == nil && len(d.Specs) == 1 { - cg = d.Doc - } - if cg != nil { - if err := saveCgo(&info, rel, cg); err != nil { - log.Printf("%s: error reading go file: %v", info.path, err) - } - } - continue - } - info.imports = append(info.imports, path) - } - } - - tags, err := readTags(info.path) - if err != nil { - log.Printf("%s: error reading go file: %v", info.path, err) - return info - } - info.tags = tags - - return info -} - -// saveCgo extracts CFLAGS, CPPFLAGS, CXXFLAGS, and LDFLAGS directives -// from a comment above a "C" import. This is intended to match logic in -// go/build.Context.saveCgo. -func saveCgo(info *fileInfo, rel string, cg *ast.CommentGroup) error { - text := cg.Text() - for _, line := range strings.Split(text, "\n") { - orig := line - - // Line is - // #cgo [GOOS/GOARCH...] LDFLAGS: stuff - // - line = strings.TrimSpace(line) - if len(line) < 5 || line[:4] != "#cgo" || (line[4] != ' ' && line[4] != '\t') { - continue - } - - // Split at colon. - line = strings.TrimSpace(line[4:]) - i := strings.Index(line, ":") - if i < 0 { - return fmt.Errorf("%s: invalid #cgo line: %s", info.path, orig) - } - line, optstr := strings.TrimSpace(line[:i]), strings.TrimSpace(line[i+1:]) - - // Parse tags and verb. - f := strings.Fields(line) - if len(f) < 1 { - return fmt.Errorf("%s: invalid #cgo line: %s", info.path, orig) - } - verb := f[len(f)-1] - tags := parseTagsInGroups(f[:len(f)-1]) - - // Parse options. - opts, err := splitQuoted(optstr) - if err != nil { - return fmt.Errorf("%s: invalid #cgo line: %s", info.path, orig) - } - var ok bool - for i, opt := range opts { - if opt, ok = expandSrcDir(opt, rel); !ok { - return fmt.Errorf("%s: malformed #cgo argument: %s", info.path, orig) - } - opts[i] = opt - } - joinedStr := strings.Join(opts, optSeparator) - - // Add tags to appropriate list. - switch verb { - case "CFLAGS", "CPPFLAGS", "CXXFLAGS": - info.copts = append(info.copts, taggedOpts{tags, joinedStr}) - case "LDFLAGS": - info.clinkopts = append(info.clinkopts, taggedOpts{tags, joinedStr}) - case "pkg-config": - return fmt.Errorf("%s: pkg-config not supported: %s", info.path, orig) - default: - return fmt.Errorf("%s: invalid #cgo verb: %s", info.path, orig) - } - } - return nil -} - -// splitQuoted splits the string s around each instance of one or more consecutive -// white space characters while taking into account quotes and escaping, and -// returns an array of substrings of s or an empty list if s contains only white space. -// Single quotes and double quotes are recognized to prevent splitting within the -// quoted region, and are removed from the resulting substrings. If a quote in s -// isn't closed err will be set and r will have the unclosed argument as the -// last element. The backslash is used for escaping. -// -// For example, the following string: -// -// a b:"c d" 'e''f' "g\"" -// -// Would be parsed as: -// -// []string{"a", "b:c d", "ef", `g"`} -// -// Copied from go/build.splitQuoted -func splitQuoted(s string) (r []string, err error) { - var args []string - arg := make([]rune, len(s)) - escaped := false - quoted := false - quote := '\x00' - i := 0 - for _, rune := range s { - switch { - case escaped: - escaped = false - case rune == '\\': - escaped = true - continue - case quote != '\x00': - if rune == quote { - quote = '\x00' - continue - } - case rune == '"' || rune == '\'': - quoted = true - quote = rune - continue - case unicode.IsSpace(rune): - if quoted || i > 0 { - quoted = false - args = append(args, string(arg[:i])) - i = 0 - } - continue - } - arg[i] = rune - i++ - } - if quoted || i > 0 { - args = append(args, string(arg[:i])) - } - if quote != 0 { - err = errors.New("unclosed quote") - } else if escaped { - err = errors.New("unfinished escaping") - } - return args, err -} - -// expandSrcDir expands any occurrence of ${SRCDIR}, making sure -// the result is safe for the shell. -// -// Copied from go/build.expandSrcDir -func expandSrcDir(str string, srcdir string) (string, bool) { - // "\" delimited paths cause safeCgoName to fail - // so convert native paths with a different delimiter - // to "/" before starting (eg: on windows). - srcdir = filepath.ToSlash(srcdir) - if srcdir == "" { - srcdir = "." - } - - // Spaces are tolerated in ${SRCDIR}, but not anywhere else. - chunks := strings.Split(str, "${SRCDIR}") - if len(chunks) < 2 { - return str, safeCgoName(str, false) - } - ok := true - for _, chunk := range chunks { - ok = ok && (chunk == "" || safeCgoName(chunk, false)) - } - ok = ok && (srcdir == "" || safeCgoName(srcdir, true)) - res := strings.Join(chunks, srcdir) - return res, ok && res != "" -} - -// NOTE: $ is not safe for the shell, but it is allowed here because of linker options like -Wl,$ORIGIN. -// We never pass these arguments to a shell (just to programs we construct argv for), so this should be okay. -// See golang.org/issue/6038. -// The @ is for OS X. See golang.org/issue/13720. -// The % is for Jenkins. See golang.org/issue/16959. -const safeString = "+-.,/0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz:$@%" -const safeSpaces = " " - -var safeBytes = []byte(safeSpaces + safeString) - -// Copied from go/build.safeCgoName -func safeCgoName(s string, spaces bool) bool { - if s == "" { - return false - } - safe := safeBytes - if !spaces { - safe = safe[len(safeSpaces):] - } - for i := 0; i < len(s); i++ { - if c := s[i]; c < utf8.RuneSelf && bytes.IndexByte(safe, c) < 0 { - return false - } - } - return true -} - -// readTags reads and extracts build tags from the block of comments -// and blank lines at the start of a file which is separated from the -// rest of the file by a blank line. Each string in the returned slice -// is the trimmed text of a line after a "+build" prefix. -// Based on go/build.Context.shouldBuild. -func readTags(path string) ([]tagLine, error) { - f, err := os.Open(path) - if err != nil { - return nil, err - } - defer f.Close() - scanner := bufio.NewScanner(f) - - // Pass 1: Identify leading run of // comments and blank lines, - // which must be followed by a blank line. - var lines []string - end := 0 - for scanner.Scan() { - line := strings.TrimSpace(scanner.Text()) - if line == "" { - end = len(lines) - continue - } - if strings.HasPrefix(line, "//") { - lines = append(lines, line[len("//"):]) - continue - } - break - } - if err := scanner.Err(); err != nil { - return nil, err - } - lines = lines[:end] - - // Pass 2: Process each line in the run. - var tagLines []tagLine - for _, line := range lines { - fields := strings.Fields(line) - if len(fields) > 0 && fields[0] == "+build" { - tagLines = append(tagLines, parseTagsInGroups(fields[1:])) - } - } - return tagLines, nil -} - -func parseTagsInGroups(groups []string) tagLine { - var l tagLine - for _, g := range groups { - l = append(l, tagGroup(strings.Split(g, ","))) - } - return l -} - -func isOSArchSpecific(info fileInfo, cgoTags tagLine) (osSpecific, archSpecific bool) { - if info.goos != "" { - osSpecific = true - } - if info.goarch != "" { - archSpecific = true - } - lines := info.tags - if len(cgoTags) > 0 { - lines = append(lines, cgoTags) - } - for _, line := range lines { - for _, group := range line { - for _, tag := range group { - if strings.HasPrefix(tag, "!") { - tag = tag[1:] - } - _, osOk := rule.KnownOSSet[tag] - if osOk { - osSpecific = true - } - _, archOk := rule.KnownArchSet[tag] - if archOk { - archSpecific = true - } - } - } - } - return osSpecific, archSpecific -} - -// matchesOS checks if a value is equal to either an OS value or to any of its -// aliases. -func matchesOS(os, value string) bool { - if os == value { - return true - } - for _, alias := range rule.OSAliases[os] { - if alias == value { - return true - } - } - return false -} - -// checkConstraints determines whether build constraints are satisfied on -// a given platform. -// -// The first few arguments describe the platform. genericTags is the set -// of build tags that are true on all platforms. os and arch are the platform -// GOOS and GOARCH strings. If os or arch is empty, checkConstraints will -// return false in the presence of OS and architecture constraints, even -// if they are negated. -// -// The remaining arguments describe the file being tested. All of these may -// be empty or nil. osSuffix and archSuffix are filename suffixes. fileTags -// is a list tags from +build comments found near the top of the file. cgoTags -// is an extra set of tags in a #cgo directive. -func checkConstraints(c *config.Config, os, arch, osSuffix, archSuffix string, fileTags []tagLine, cgoTags tagLine) bool { - if osSuffix != "" && !matchesOS(os, osSuffix) || archSuffix != "" && archSuffix != arch { - return false - } - for _, l := range fileTags { - if !l.check(c, os, arch) { - return false - } - } - if len(cgoTags) > 0 && !cgoTags.check(c, os, arch) { - return false - } - return true -} - -// isIgnoredTag returns whether the tag is "cgo" or is a release tag. -// Release tags match the pattern "go[0-9]\.[0-9]+". -// Gazelle won't consider whether an ignored tag is satisfied when evaluating -// build constraints for a file. -func isIgnoredTag(tag string) bool { - if tag == "cgo" || tag == "race" || tag == "msan" { - return true - } - if len(tag) < 5 || !strings.HasPrefix(tag, "go") { - return false - } - if tag[2] < '0' || tag[2] > '9' || tag[3] != '.' { - return false - } - for _, c := range tag[4:] { - if c < '0' || c > '9' { - return false - } - } - return true -} - -// protoFileInfo extracts metadata from a proto file. The proto extension -// already "parses" these and stores metadata in proto.FileInfo, so this is -// just processing relevant options. -func protoFileInfo(path_ string, protoInfo proto.FileInfo) fileInfo { - info := fileNameInfo(path_) - - // Look for "option go_package". If there's no / in the package option, then - // it's just a simple package name, not a full import path. - for _, opt := range protoInfo.Options { - if opt.Key != "go_package" { - continue - } - if strings.LastIndexByte(opt.Value, '/') == -1 { - info.packageName = opt.Value - } else { - if i := strings.LastIndexByte(opt.Value, ';'); i != -1 { - info.importPath = opt.Value[:i] - info.packageName = opt.Value[i+1:] - } else { - info.importPath = opt.Value - info.packageName = path.Base(opt.Value) - } - } - } - - // Set the Go package name from the proto package name if there was no - // option go_package. - if info.packageName == "" && protoInfo.PackageName != "" { - info.packageName = strings.Replace(protoInfo.PackageName, ".", "_", -1) - } - - info.imports = protoInfo.Imports - info.hasServices = protoInfo.HasServices - return info -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/fix.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/fix.go deleted file mode 100644 index 88d99963e1..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/fix.go +++ /dev/null @@ -1,253 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package golang - -import ( - "log" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/language/proto" - "github.com/bazelbuild/bazel-gazelle/rule" - bzl "github.com/bazelbuild/buildtools/build" -) - -func (_ *goLang) Fix(c *config.Config, f *rule.File) { - migrateLibraryEmbed(c, f) - migrateGrpcCompilers(c, f) - flattenSrcs(c, f) - squashCgoLibrary(c, f) - squashXtest(c, f) - removeLegacyProto(c, f) - removeLegacyGazelle(c, f) -} - -// migrateLibraryEmbed converts "library" attributes to "embed" attributes, -// preserving comments. This only applies to Go rules, and only if there is -// no keep comment on "library" and no existing "embed" attribute. -func migrateLibraryEmbed(c *config.Config, f *rule.File) { - for _, r := range f.Rules { - if !isGoRule(r.Kind()) { - continue - } - libExpr := r.Attr("library") - if libExpr == nil || rule.ShouldKeep(libExpr) || r.Attr("embed") != nil { - continue - } - r.DelAttr("library") - r.SetAttr("embed", &bzl.ListExpr{List: []bzl.Expr{libExpr}}) - } -} - -// migrateGrpcCompilers converts "go_grpc_library" rules into "go_proto_library" -// rules with a "compilers" attribute. -func migrateGrpcCompilers(c *config.Config, f *rule.File) { - for _, r := range f.Rules { - if r.Kind() != "go_grpc_library" || r.ShouldKeep() || r.Attr("compilers") != nil { - continue - } - r.SetKind("go_proto_library") - r.SetAttr("compilers", []string{grpcCompilerLabel}) - } -} - -// squashCgoLibrary removes cgo_library rules with the default name and -// merges their attributes with go_library with the default name. If no -// go_library rule exists, a new one will be created. -// -// Note that the library attribute is disregarded, so cgo_library and -// go_library attributes will be squashed even if the cgo_library was unlinked. -// MergeFile will remove unused values and attributes later. -func squashCgoLibrary(c *config.Config, f *rule.File) { - // Find the default cgo_library and go_library rules. - var cgoLibrary, goLibrary *rule.Rule - for _, r := range f.Rules { - if r.Kind() == "cgo_library" && r.Name() == "cgo_default_library" && !r.ShouldKeep() { - if cgoLibrary != nil { - log.Printf("%s: when fixing existing file, multiple cgo_library rules with default name found", f.Path) - continue - } - cgoLibrary = r - continue - } - if r.Kind() == "go_library" && r.Name() == defaultLibName { - if goLibrary != nil { - log.Printf("%s: when fixing existing file, multiple go_library rules with default name referencing cgo_library found", f.Path) - } - goLibrary = r - continue - } - } - - if cgoLibrary == nil { - return - } - if !c.ShouldFix { - log.Printf("%s: cgo_library is deprecated. Run 'gazelle fix' to squash with go_library.", f.Path) - return - } - - if goLibrary == nil { - cgoLibrary.SetKind("go_library") - cgoLibrary.SetName(defaultLibName) - cgoLibrary.SetAttr("cgo", true) - return - } - - if err := rule.SquashRules(cgoLibrary, goLibrary, f.Path); err != nil { - log.Print(err) - return - } - goLibrary.DelAttr("embed") - goLibrary.SetAttr("cgo", true) - cgoLibrary.Delete() -} - -// squashXtest removes go_test rules with the default external name and merges -// their attributes with a go_test rule with the default internal name. If -// no internal go_test rule exists, a new one will be created (effectively -// renaming the old rule). -func squashXtest(c *config.Config, f *rule.File) { - // Search for internal and external tests. - var itest, xtest *rule.Rule - for _, r := range f.Rules { - if r.Kind() != "go_test" { - continue - } - if r.Name() == defaultTestName { - itest = r - } else if r.Name() == "go_default_xtest" { - xtest = r - } - } - - if xtest == nil || xtest.ShouldKeep() || (itest != nil && itest.ShouldKeep()) { - return - } - if !c.ShouldFix { - if itest == nil { - log.Printf("%s: go_default_xtest is no longer necessary. Run 'gazelle fix' to rename to go_default_test.", f.Path) - } else { - log.Printf("%s: go_default_xtest is no longer necessary. Run 'gazelle fix' to squash with go_default_test.", f.Path) - } - return - } - - // If there was no internal test, we can just rename the external test. - if itest == nil { - xtest.SetName(defaultTestName) - return - } - - // Attempt to squash. - if err := rule.SquashRules(xtest, itest, f.Path); err != nil { - log.Print(err) - return - } - xtest.Delete() -} - -// flattenSrcs transforms srcs attributes structured as concatenations of -// lists and selects (generated from PlatformStrings; see -// extractPlatformStringsExprs for matching details) into a sorted, -// de-duplicated list. Comments are accumulated and de-duplicated across -// duplicate expressions. -func flattenSrcs(c *config.Config, f *rule.File) { - for _, r := range f.Rules { - if !isGoRule(r.Kind()) { - continue - } - oldSrcs := r.Attr("srcs") - if oldSrcs == nil { - continue - } - flatSrcs := rule.FlattenExpr(oldSrcs) - if flatSrcs != oldSrcs { - r.SetAttr("srcs", flatSrcs) - } - } -} - -// removeLegacyProto removes uses of the old proto rules. It deletes loads -// from go_proto_library.bzl. It deletes proto filegroups. It removes -// go_proto_library attributes which are no longer recognized. New rules -// are generated in place of the deleted rules, but attributes and comments -// are not migrated. -func removeLegacyProto(c *config.Config, f *rule.File) { - // Don't fix if the proto mode was set to something other than the default. - if pcMode := getProtoMode(c); pcMode != proto.DefaultMode { - return - } - - // Scan for definitions to delete. - var protoLoads []*rule.Load - for _, l := range f.Loads { - if l.Name() == "@io_bazel_rules_go//proto:go_proto_library.bzl" { - protoLoads = append(protoLoads, l) - } - } - var protoFilegroups, protoRules []*rule.Rule - for _, r := range f.Rules { - if r.Kind() == "filegroup" && r.Name() == legacyProtoFilegroupName { - protoFilegroups = append(protoFilegroups, r) - } - if r.Kind() == "go_proto_library" { - protoRules = append(protoRules, r) - } - } - if len(protoLoads)+len(protoFilegroups) == 0 { - return - } - if !c.ShouldFix { - log.Printf("%s: go_proto_library.bzl is deprecated. Run 'gazelle fix' to replace old rules.", f.Path) - return - } - - // Delete legacy proto loads and filegroups. Only delete go_proto_library - // rules if we deleted a load. - for _, l := range protoLoads { - l.Delete() - } - for _, r := range protoFilegroups { - r.Delete() - } - if len(protoLoads) > 0 { - for _, r := range protoRules { - r.Delete() - } - } -} - -// removeLegacyGazelle removes loads of the "gazelle" macro from -// @io_bazel_rules_go//go:def.bzl. The definition has moved to -// @bazel_gazelle//:def.bzl, and the old one will be deleted soon. -func removeLegacyGazelle(c *config.Config, f *rule.File) { - for _, l := range f.Loads { - if l.Name() == "@io_bazel_rules_go//go:def.bzl" && l.Has("gazelle") { - l.Remove("gazelle") - if l.IsEmpty() { - l.Delete() - } - } - } -} - -func isGoRule(kind string) bool { - return kind == "go_library" || - kind == "go_binary" || - kind == "go_test" || - kind == "go_proto_library" || - kind == "go_grpc_library" -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/generate.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/generate.go deleted file mode 100644 index c9b398ebf5..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/generate.go +++ /dev/null @@ -1,638 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package golang - -import ( - "fmt" - "go/build" - "log" - "path" - "path/filepath" - "sort" - "strings" - "sync" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/language" - "github.com/bazelbuild/bazel-gazelle/language/proto" - "github.com/bazelbuild/bazel-gazelle/pathtools" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -func (gl *goLang) GenerateRules(args language.GenerateArgs) language.GenerateResult { - // Extract information about proto files. We need this to exclude .pb.go - // files and generate go_proto_library rules. - c := args.Config - gc := getGoConfig(c) - pcMode := getProtoMode(c) - - // This is a collection of proto_library rule names that have a corresponding - // go_proto_library rule already generated. - goProtoRules := make(map[string]struct{}) - - var protoRuleNames []string - protoPackages := make(map[string]proto.Package) - protoFileInfo := make(map[string]proto.FileInfo) - for _, r := range args.OtherGen { - if r.Kind() == "go_proto_library" { - if proto := r.AttrString("proto"); proto != "" { - goProtoRules[proto] = struct{}{} - } - if protos := r.AttrStrings("protos"); protos != nil { - for _, proto := range protos { - goProtoRules[proto] = struct{}{} - } - } - - } - if r.Kind() != "proto_library" { - continue - } - pkg := r.PrivateAttr(proto.PackageKey).(proto.Package) - protoPackages[r.Name()] = pkg - for name, info := range pkg.Files { - protoFileInfo[name] = info - } - protoRuleNames = append(protoRuleNames, r.Name()) - } - sort.Strings(protoRuleNames) - var emptyProtoRuleNames []string - for _, r := range args.OtherEmpty { - if r.Kind() == "proto_library" { - emptyProtoRuleNames = append(emptyProtoRuleNames, r.Name()) - } - } - - // If proto rule generation is enabled, exclude .pb.go files that correspond - // to any .proto files present. - regularFiles := append([]string{}, args.RegularFiles...) - genFiles := append([]string{}, args.GenFiles...) - if !pcMode.ShouldIncludePregeneratedFiles() { - keep := func(f string) bool { - if strings.HasSuffix(f, ".pb.go") { - _, ok := protoFileInfo[strings.TrimSuffix(f, ".pb.go")+".proto"] - return !ok - } - return true - } - filterFiles(®ularFiles, keep) - filterFiles(&genFiles, keep) - } - - // Split regular files into files which can determine the package name and - // import path and other files. - var goFiles, otherFiles []string - for _, f := range regularFiles { - if strings.HasSuffix(f, ".go") { - goFiles = append(goFiles, f) - } else { - otherFiles = append(otherFiles, f) - } - } - - // Look for a subdirectory named testdata. Only treat it as data if it does - // not contain a buildable package. - var hasTestdata bool - for _, sub := range args.Subdirs { - if sub == "testdata" { - hasTestdata = !gl.goPkgRels[path.Join(args.Rel, "testdata")] - break - } - } - - // Build a set of packages from files in this directory. - goPackageMap, goFilesWithUnknownPackage := buildPackages(c, args.Dir, args.Rel, goFiles, hasTestdata) - - // Select a package to generate rules for. If there is no package, create - // an empty package so we can generate empty rules. - var protoName string - pkg, err := selectPackage(c, args.Dir, goPackageMap) - if err != nil { - if _, ok := err.(*build.NoGoError); ok { - if len(protoPackages) == 1 { - for name, ppkg := range protoPackages { - if _, ok := goProtoRules[":"+name]; ok { - // if a go_proto_library rule already exists for this - // proto package, treat it as if the proto package - // doesn't exist. - pkg = emptyPackage(c, args.Dir, args.Rel) - break - } - pkg = &goPackage{ - name: goProtoPackageName(ppkg), - importPath: goProtoImportPath(gc, ppkg, args.Rel), - proto: protoTargetFromProtoPackage(name, ppkg), - } - protoName = name - break - } - } else { - pkg = emptyPackage(c, args.Dir, args.Rel) - } - } else { - log.Print(err) - } - } - - // Try to link the selected package with a proto package. - if pkg != nil { - if pkg.importPath == "" { - if err := pkg.inferImportPath(c); err != nil && pkg.firstGoFile() != "" { - inferImportPathErrorOnce.Do(func() { log.Print(err) }) - } - } - for _, name := range protoRuleNames { - ppkg := protoPackages[name] - if pkg.importPath == goProtoImportPath(gc, ppkg, args.Rel) { - protoName = name - pkg.proto = protoTargetFromProtoPackage(name, ppkg) - break - } - } - } - - // Generate rules for proto packages. These should come before the other - // Go rules. - g := &generator{ - c: c, - rel: args.Rel, - shouldSetVisibility: args.File == nil || !args.File.HasDefaultVisibility(), - } - var res language.GenerateResult - var rules []*rule.Rule - var protoEmbed string - for _, name := range protoRuleNames { - if _, ok := goProtoRules[":"+name]; ok { - // if a go_proto_library rule exists for this proto_library rule - // already, skip creating another go_proto_library for it, assuming - // that a different gazelle extension is responsible for - // go_proto_library rule generation. - continue - } - ppkg := protoPackages[name] - var rs []*rule.Rule - if name == protoName { - protoEmbed, rs = g.generateProto(pcMode, pkg.proto, pkg.importPath) - } else { - target := protoTargetFromProtoPackage(name, ppkg) - importPath := goProtoImportPath(gc, ppkg, args.Rel) - _, rs = g.generateProto(pcMode, target, importPath) - } - rules = append(rules, rs...) - } - for _, name := range emptyProtoRuleNames { - goProtoName := strings.TrimSuffix(name, "_proto") + "_go_proto" - res.Empty = append(res.Empty, rule.NewRule("go_proto_library", goProtoName)) - } - if pkg != nil && pcMode == proto.PackageMode && pkg.firstGoFile() == "" { - // In proto package mode, don't generate a go_library embedding a - // go_proto_library unless there are actually go files. - protoEmbed = "" - } - - // Complete the Go package and generate rules for that. - if pkg != nil { - // Add files with unknown packages. This happens when there are parse - // or I/O errors. We should keep the file in the srcs list and let the - // compiler deal with the error. - cgo := pkg.haveCgo() - for _, info := range goFilesWithUnknownPackage { - if err := pkg.addFile(c, info, cgo); err != nil { - log.Print(err) - } - } - - // Process the other static files. - for _, file := range otherFiles { - info := otherFileInfo(filepath.Join(args.Dir, file)) - if err := pkg.addFile(c, info, cgo); err != nil { - log.Print(err) - } - } - - // Process generated files. Note that generated files may have the same names - // as static files. Bazel will use the generated files, but we will look at - // the content of static files, assuming they will be the same. - regularFileSet := make(map[string]bool) - for _, f := range regularFiles { - regularFileSet[f] = true - } - // Some of the generated files may have been consumed by other rules - consumedFileSet := make(map[string]bool) - for _, r := range args.OtherGen { - for _, f := range r.AttrStrings("srcs") { - consumedFileSet[f] = true - } - if f := r.AttrString("src"); f != "" { - consumedFileSet[f] = true - } - } - for _, f := range genFiles { - if regularFileSet[f] || consumedFileSet[f] { - continue - } - info := fileNameInfo(filepath.Join(args.Dir, f)) - if err := pkg.addFile(c, info, cgo); err != nil { - log.Print(err) - } - } - - // Generate Go rules. - if protoName == "" { - // Empty proto rules for deletion. - _, rs := g.generateProto(pcMode, pkg.proto, pkg.importPath) - rules = append(rules, rs...) - } - lib := g.generateLib(pkg, protoEmbed) - var libName string - if !lib.IsEmpty(goKinds[lib.Kind()]) { - libName = lib.Name() - } - rules = append(rules, lib) - rules = append(rules, - g.generateBin(pkg, libName), - g.generateTest(pkg, libName)) - } - - for _, r := range rules { - if r.IsEmpty(goKinds[r.Kind()]) { - res.Empty = append(res.Empty, r) - } else { - res.Gen = append(res.Gen, r) - res.Imports = append(res.Imports, r.PrivateAttr(config.GazelleImportsKey)) - } - } - - if args.File != nil || len(res.Gen) > 0 { - gl.goPkgRels[args.Rel] = true - } else { - for _, sub := range args.Subdirs { - if gl.goPkgRels[path.Join(args.Rel, sub)] { - gl.goPkgRels[args.Rel] = true - break - } - } - } - - return res -} - -func filterFiles(files *[]string, pred func(string) bool) { - w := 0 - for r := 0; r < len(*files); r++ { - f := (*files)[r] - if pred(f) { - (*files)[w] = f - w++ - } - } - *files = (*files)[:w] -} - -func buildPackages(c *config.Config, dir, rel string, goFiles []string, hasTestdata bool) (packageMap map[string]*goPackage, goFilesWithUnknownPackage []fileInfo) { - // Process .go and .proto files first, since these determine the package name. - packageMap = make(map[string]*goPackage) - for _, f := range goFiles { - path := filepath.Join(dir, f) - info := goFileInfo(path, rel) - if info.packageName == "" { - goFilesWithUnknownPackage = append(goFilesWithUnknownPackage, info) - continue - } - if info.packageName == "documentation" { - // go/build ignores this package - continue - } - - if _, ok := packageMap[info.packageName]; !ok { - packageMap[info.packageName] = &goPackage{ - name: info.packageName, - dir: dir, - rel: rel, - hasTestdata: hasTestdata, - } - } - if err := packageMap[info.packageName].addFile(c, info, false); err != nil { - log.Print(err) - } - } - return packageMap, goFilesWithUnknownPackage -} - -var inferImportPathErrorOnce sync.Once - -// selectPackages selects one Go packages out of the buildable packages found -// in a directory. If multiple packages are found, it returns the package -// whose name matches the directory if such a package exists. -func selectPackage(c *config.Config, dir string, packageMap map[string]*goPackage) (*goPackage, error) { - buildablePackages := make(map[string]*goPackage) - for name, pkg := range packageMap { - if pkg.isBuildable(c) { - buildablePackages[name] = pkg - } - } - - if len(buildablePackages) == 0 { - return nil, &build.NoGoError{Dir: dir} - } - - if len(buildablePackages) == 1 { - for _, pkg := range buildablePackages { - return pkg, nil - } - } - - if pkg, ok := buildablePackages[defaultPackageName(c, dir)]; ok { - return pkg, nil - } - - err := &build.MultiplePackageError{Dir: dir} - for name, pkg := range buildablePackages { - // Add the first file for each package for the error message. - // Error() method expects these lists to be the same length. File - // lists must be non-empty. These lists are only created by - // buildPackage for packages with .go files present. - err.Packages = append(err.Packages, name) - err.Files = append(err.Files, pkg.firstGoFile()) - } - return nil, err -} - -func emptyPackage(c *config.Config, dir, rel string) *goPackage { - pkg := &goPackage{ - name: defaultPackageName(c, dir), - dir: dir, - rel: rel, - } - pkg.inferImportPath(c) - return pkg -} - -func defaultPackageName(c *config.Config, rel string) string { - gc := getGoConfig(c) - return pathtools.RelBaseName(rel, gc.prefix, "") -} - -type generator struct { - c *config.Config - rel string - shouldSetVisibility bool -} - -func (g *generator) generateProto(mode proto.Mode, target protoTarget, importPath string) (string, []*rule.Rule) { - if !mode.ShouldGenerateRules() && mode != proto.LegacyMode { - // Don't create or delete proto rules in this mode. Any existing rules - // are likely hand-written. - return "", nil - } - - gc := getGoConfig(g.c) - filegroupName := legacyProtoFilegroupName - protoName := target.name - if protoName == "" { - importPath := inferImportPath(gc, g.rel) - protoName = proto.RuleName(importPath) - } - goProtoName := strings.TrimSuffix(protoName, "_proto") + "_go_proto" - visibility := g.commonVisibility(importPath) - - if mode == proto.LegacyMode { - filegroup := rule.NewRule("filegroup", filegroupName) - if target.sources.isEmpty() { - return "", []*rule.Rule{filegroup} - } - filegroup.SetAttr("srcs", target.sources.build()) - if g.shouldSetVisibility { - filegroup.SetAttr("visibility", visibility) - } - return "", []*rule.Rule{filegroup} - } - - if target.sources.isEmpty() { - return "", []*rule.Rule{ - rule.NewRule("filegroup", filegroupName), - rule.NewRule("go_proto_library", goProtoName), - } - } - - goProtoLibrary := rule.NewRule("go_proto_library", goProtoName) - goProtoLibrary.SetAttr("proto", ":"+protoName) - g.setImportAttrs(goProtoLibrary, importPath) - if target.hasServices { - goProtoLibrary.SetAttr("compilers", gc.goGrpcCompilers) - } else if gc.goProtoCompilersSet { - goProtoLibrary.SetAttr("compilers", gc.goProtoCompilers) - } - if g.shouldSetVisibility { - goProtoLibrary.SetAttr("visibility", visibility) - } - goProtoLibrary.SetPrivateAttr(config.GazelleImportsKey, target.imports.build()) - return goProtoName, []*rule.Rule{goProtoLibrary} -} - -func (g *generator) generateLib(pkg *goPackage, embed string) *rule.Rule { - goLibrary := rule.NewRule("go_library", defaultLibName) - if !pkg.library.sources.hasGo() && embed == "" { - return goLibrary // empty - } - var visibility []string - if pkg.isCommand() { - // Libraries made for a go_binary should not be exposed to the public. - visibility = []string{"//visibility:private"} - } else { - visibility = g.commonVisibility(pkg.importPath) - } - g.setCommonAttrs(goLibrary, pkg.rel, visibility, pkg.library, embed) - g.setImportAttrs(goLibrary, pkg.importPath) - return goLibrary -} - -func (g *generator) generateBin(pkg *goPackage, library string) *rule.Rule { - name := pathtools.RelBaseName(pkg.rel, getGoConfig(g.c).prefix, g.c.RepoRoot) - goBinary := rule.NewRule("go_binary", name) - if !pkg.isCommand() || pkg.binary.sources.isEmpty() && library == "" { - return goBinary // empty - } - visibility := g.commonVisibility(pkg.importPath) - g.setCommonAttrs(goBinary, pkg.rel, visibility, pkg.binary, library) - return goBinary -} - -func (g *generator) generateTest(pkg *goPackage, library string) *rule.Rule { - goTest := rule.NewRule("go_test", defaultTestName) - if !pkg.test.sources.hasGo() { - return goTest // empty - } - g.setCommonAttrs(goTest, pkg.rel, nil, pkg.test, library) - if pkg.hasTestdata { - goTest.SetAttr("data", rule.GlobValue{Patterns: []string{"testdata/**"}}) - } - return goTest -} - -func (g *generator) setCommonAttrs(r *rule.Rule, pkgRel string, visibility []string, target goTarget, embed string) { - if !target.sources.isEmpty() { - r.SetAttr("srcs", target.sources.buildFlat()) - } - if target.cgo { - r.SetAttr("cgo", true) - } - if !target.clinkopts.isEmpty() { - r.SetAttr("clinkopts", g.options(target.clinkopts.build(), pkgRel)) - } - if !target.copts.isEmpty() { - r.SetAttr("copts", g.options(target.copts.build(), pkgRel)) - } - if g.shouldSetVisibility && len(visibility) > 0 { - r.SetAttr("visibility", visibility) - } - if embed != "" { - r.SetAttr("embed", []string{":" + embed}) - } - r.SetPrivateAttr(config.GazelleImportsKey, target.imports.build()) -} - -func (g *generator) setImportAttrs(r *rule.Rule, importPath string) { - gc := getGoConfig(g.c) - r.SetAttr("importpath", importPath) - - // Set importpath_aliases if we need minimal module compatibility. - // If a package is part of a module with a v2+ semantic import version - // suffix, packages that are not part of modules may import it without - // the suffix. - if gc.goRepositoryMode && gc.moduleMode && pathtools.HasPrefix(importPath, gc.prefix) && gc.prefixRel == "" { - if mmcImportPath := pathWithoutSemver(importPath); mmcImportPath != "" { - r.SetAttr("importpath_aliases", []string{mmcImportPath}) - } - } - - if gc.importMapPrefix != "" { - fromPrefixRel := pathtools.TrimPrefix(g.rel, gc.importMapPrefixRel) - importMap := path.Join(gc.importMapPrefix, fromPrefixRel) - if importMap != importPath { - r.SetAttr("importmap", importMap) - } - } -} - -func (g *generator) commonVisibility(importPath string) []string { - // If the Bazel package name (rel) contains "internal", add visibility for - // subpackages of the parent. - // If the import path contains "internal" but rel does not, this is - // probably an internal submodule. Add visibility for all subpackages. - relIndex := pathtools.Index(g.rel, "internal") - importIndex := pathtools.Index(importPath, "internal") - visibility := getGoConfig(g.c).goVisibility - if relIndex >= 0 { - parent := strings.TrimSuffix(g.rel[:relIndex], "/") - visibility = append(visibility, fmt.Sprintf("//%s:__subpackages__", parent)) - } else if importIndex >= 0 { - visibility = append(visibility, "//:__subpackages__") - } else { - return []string{"//visibility:public"} - } - - // Add visibility for any submodules that have the internal parent as - // a prefix of their module path. - if importIndex >= 0 { - gc := getGoConfig(g.c) - internalRoot := strings.TrimSuffix(importPath[:importIndex], "/") - for _, m := range gc.submodules { - if strings.HasPrefix(m.modulePath, internalRoot) { - visibility = append(visibility, fmt.Sprintf("@%s//:__subpackages__", m.repoName)) - } - } - } - - return visibility -} - -var ( - // shortOptPrefixes are strings that come at the beginning of an option - // argument that includes a path, e.g., -Ifoo/bar. - shortOptPrefixes = []string{"-I", "-L", "-F"} - - // longOptPrefixes are separate arguments that come before a path argument, - // e.g., -iquote foo/bar. - longOptPrefixes = []string{"-I", "-L", "-F", "-iquote", "-isystem"} -) - -// options transforms package-relative paths in cgo options into repository- -// root-relative paths that Bazel can understand. For example, if a cgo file -// in //foo declares an include flag in its copts: "-Ibar", this method -// will transform that flag into "-Ifoo/bar". -func (g *generator) options(opts rule.PlatformStrings, pkgRel string) rule.PlatformStrings { - fixPath := func(opt string) string { - if strings.HasPrefix(opt, "/") { - return opt - } - return path.Clean(path.Join(pkgRel, opt)) - } - - fixGroups := func(groups []string) ([]string, error) { - fixedGroups := make([]string, len(groups)) - for i, group := range groups { - opts := strings.Split(group, optSeparator) - fixedOpts := make([]string, len(opts)) - isPath := false - for j, opt := range opts { - if isPath { - opt = fixPath(opt) - isPath = false - goto next - } - - for _, short := range shortOptPrefixes { - if strings.HasPrefix(opt, short) && len(opt) > len(short) { - opt = short + fixPath(opt[len(short):]) - goto next - } - } - - for _, long := range longOptPrefixes { - if opt == long { - isPath = true - goto next - } - } - - next: - fixedOpts[j] = escapeOption(opt) - } - fixedGroups[i] = strings.Join(fixedOpts, " ") - } - - return fixedGroups, nil - } - - opts, errs := opts.MapSlice(fixGroups) - if errs != nil { - log.Panicf("unexpected error when transforming options with pkg %q: %v", pkgRel, errs) - } - return opts -} - -func escapeOption(opt string) string { - return strings.NewReplacer( - `\`, `\\`, - `'`, `\'`, - `"`, `\"`, - ` `, `\ `, - "\t", "\\\t", - "\n", "\\\n", - "\r", "\\\r", - ).Replace(opt) -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/godep.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/godep.go deleted file mode 100644 index 83337b7b3e..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/godep.go +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright 2019 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package golang - -import ( - "encoding/json" - "fmt" - "io/ioutil" - - "github.com/bazelbuild/bazel-gazelle/label" - "github.com/bazelbuild/bazel-gazelle/language" - "github.com/bazelbuild/bazel-gazelle/rule" - "golang.org/x/sync/errgroup" -) - -type goDepLockFile struct { - ImportPath string - GoVersion string - GodepVersion string - Packages []string - Deps []goDepProject -} - -type goDepProject struct { - ImportPath string - Rev string -} - -func importReposFromGodep(args language.ImportReposArgs) language.ImportReposResult { - data, err := ioutil.ReadFile(args.Path) - if err != nil { - return language.ImportReposResult{Error: err} - } - - file := goDepLockFile{} - if err := json.Unmarshal(data, &file); err != nil { - return language.ImportReposResult{Error: err} - } - - var eg errgroup.Group - roots := make([]string, len(file.Deps)) - for i := range file.Deps { - i := i - eg.Go(func() error { - p := file.Deps[i] - repoRoot, _, err := args.Cache.Root(p.ImportPath) - if err != nil { - return err - } - roots[i] = repoRoot - return nil - }) - } - if err := eg.Wait(); err != nil { - return language.ImportReposResult{Error: err} - } - - gen := make([]*rule.Rule, 0, len(file.Deps)) - repoToRev := make(map[string]string) - for i, p := range file.Deps { - repoRoot := roots[i] - if rev, ok := repoToRev[repoRoot]; !ok { - r := rule.NewRule("go_repository", label.ImportPathToBazelRepoName(repoRoot)) - r.SetAttr("importpath", repoRoot) - r.SetAttr("commit", p.Rev) - repoToRev[repoRoot] = p.Rev - gen = append(gen, r) - } else { - if p.Rev != rev { - return language.ImportReposResult{Error: fmt.Errorf("repo %s imported at multiple revisions: %s, %s", repoRoot, p.Rev, rev)} - } - } - } - return language.ImportReposResult{Gen: gen} -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/kinds.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/kinds.go deleted file mode 100644 index fa89023727..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/kinds.go +++ /dev/null @@ -1,153 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package golang - -import "github.com/bazelbuild/bazel-gazelle/rule" - -var goKinds = map[string]rule.KindInfo{ - "filegroup": { - NonEmptyAttrs: map[string]bool{"srcs": true}, - MergeableAttrs: map[string]bool{"srcs": true}, - }, - "go_binary": { - MatchAny: true, - NonEmptyAttrs: map[string]bool{ - "deps": true, - "embed": true, - "srcs": true, - }, - SubstituteAttrs: map[string]bool{"embed": true}, - MergeableAttrs: map[string]bool{ - "cgo": true, - "clinkopts": true, - "copts": true, - "embed": true, - "srcs": true, - }, - ResolveAttrs: map[string]bool{"deps": true}, - }, - "go_library": { - MatchAttrs: []string{"importpath"}, - NonEmptyAttrs: map[string]bool{ - "deps": true, - "embed": true, - "srcs": true, - }, - SubstituteAttrs: map[string]bool{ - "embed": true, - }, - MergeableAttrs: map[string]bool{ - "cgo": true, - "clinkopts": true, - "copts": true, - "embed": true, - "importmap": true, - "importpath": true, - "srcs": true, - }, - ResolveAttrs: map[string]bool{"deps": true}, - }, - "go_proto_library": { - MatchAttrs: []string{"importpath"}, - NonEmptyAttrs: map[string]bool{ - "deps": true, - "embed": true, - "proto": true, - "srcs": true, - }, - SubstituteAttrs: map[string]bool{"proto": true}, - MergeableAttrs: map[string]bool{ - "srcs": true, - "importpath": true, - "importmap": true, - "cgo": true, - "clinkopts": true, - "copts": true, - "embed": true, - "proto": true, - "compilers": true, - }, - ResolveAttrs: map[string]bool{"deps": true}, - }, - "go_repository": { - MatchAttrs: []string{"importpath"}, - NonEmptyAttrs: map[string]bool{ - "importpath": true, - }, - MergeableAttrs: map[string]bool{ - "commit": true, - "importpath": true, - "remote": true, - "replace": true, - "sha256": true, - "strip_prefix": true, - "sum": true, - "tag": true, - "type": true, - "urls": true, - "vcs": true, - "version": true, - }, - }, - "go_test": { - NonEmptyAttrs: map[string]bool{ - "deps": true, - "embed": true, - "srcs": true, - }, - MergeableAttrs: map[string]bool{ - "cgo": true, - "clinkopts": true, - "copts": true, - "embed": true, - "srcs": true, - }, - ResolveAttrs: map[string]bool{"deps": true}, - }, -} - -var goLoads = []rule.LoadInfo{ - { - Name: "@io_bazel_rules_go//go:def.bzl", - Symbols: []string{ - "cgo_library", - "go_binary", - "go_library", - "go_prefix", - "go_repository", - "go_test", - }, - }, { - Name: "@io_bazel_rules_go//proto:def.bzl", - Symbols: []string{ - "go_grpc_library", - "go_proto_library", - }, - }, { - Name: "@bazel_gazelle//:deps.bzl", - Symbols: []string{ - "go_repository", - }, - After: []string{ - "go_rules_dependencies", - "go_register_toolchains", - "gazelle_dependencies", - }, - }, -} - -func (_ *goLang) Kinds() map[string]rule.KindInfo { return goKinds } -func (_ *goLang) Loads() []rule.LoadInfo { return goLoads } diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/known_go_imports.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/known_go_imports.go deleted file mode 100644 index 5ee9815da1..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/known_go_imports.go +++ /dev/null @@ -1,201 +0,0 @@ -// Generated by language/proto/gen/gen_known_imports.go -// From language/proto/proto.csv - -package golang - -import "github.com/bazelbuild/bazel-gazelle/label" - -var knownGoProtoImports = map[string]label.Label{ - - "github.com/golang/protobuf/ptypes/any": label.New("io_bazel_rules_go", "proto/wkt", "any_go_proto"), - "google.golang.org/genproto/protobuf/api": label.New("io_bazel_rules_go", "proto/wkt", "api_go_proto"), - "github.com/golang/protobuf/protoc-gen-go/plugin": label.New("io_bazel_rules_go", "proto/wkt", "compiler_plugin_go_proto"), - "github.com/golang/protobuf/protoc-gen-go/descriptor": label.New("io_bazel_rules_go", "proto/wkt", "descriptor_go_proto"), - "github.com/golang/protobuf/ptypes/duration": label.New("io_bazel_rules_go", "proto/wkt", "duration_go_proto"), - "github.com/golang/protobuf/ptypes/empty": label.New("io_bazel_rules_go", "proto/wkt", "empty_go_proto"), - "google.golang.org/genproto/protobuf/field_mask": label.New("io_bazel_rules_go", "proto/wkt", "field_mask_go_proto"), - "google.golang.org/genproto/protobuf/source_context": label.New("io_bazel_rules_go", "proto/wkt", "source_context_go_proto"), - "github.com/golang/protobuf/ptypes/struct": label.New("io_bazel_rules_go", "proto/wkt", "struct_go_proto"), - "github.com/golang/protobuf/ptypes/timestamp": label.New("io_bazel_rules_go", "proto/wkt", "timestamp_go_proto"), - "google.golang.org/genproto/protobuf/ptype": label.New("io_bazel_rules_go", "proto/wkt", "type_go_proto"), - "github.com/golang/protobuf/ptypes/wrappers": label.New("io_bazel_rules_go", "proto/wkt", "wrappers_go_proto"), - "google.golang.org/genproto/googleapis/ads/googleads/v1/common": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google.golang.org/genproto/googleapis/ads/googleads/v1/enums": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google.golang.org/genproto/googleapis/ads/googleads/v1/errors": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google.golang.org/genproto/googleapis/ads/googleads/v1/resources": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google.golang.org/genproto/googleapis/ads/googleads/v1/services": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google.golang.org/genproto/googleapis/ads/googleads/v2/common": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google.golang.org/genproto/googleapis/ads/googleads/v2/enums": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google.golang.org/genproto/googleapis/ads/googleads/v2/errors": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google.golang.org/genproto/googleapis/ads/googleads/v2/resources": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google.golang.org/genproto/googleapis/ads/googleads/v2/services": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google.golang.org/genproto/googleapis/api/annotations": label.New("go_googleapis", "google/api", "annotations_go_proto"), - "google.golang.org/genproto/googleapis/api/serviceconfig": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google.golang.org/genproto/googleapis/api/configchange": label.New("go_googleapis", "google/api", "configchange_go_proto"), - "google.golang.org/genproto/googleapis/api/distribution": label.New("go_googleapis", "google/api", "distribution_go_proto"), - "google.golang.org/genproto/googleapis/api/expr/v1alpha1": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_go_proto"), - "google.golang.org/genproto/googleapis/api/expr/v1beta1": label.New("go_googleapis", "google/api/expr/v1beta1", "expr_go_proto"), - "google.golang.org/genproto/googleapis/api/httpbody": label.New("go_googleapis", "google/api", "httpbody_go_proto"), - "google.golang.org/genproto/googleapis/api/label": label.New("go_googleapis", "google/api", "label_go_proto"), - "google.golang.org/genproto/googleapis/api": label.New("go_googleapis", "google/api", "api_go_proto"), - "google.golang.org/genproto/googleapis/api/metric": label.New("go_googleapis", "google/api", "metric_go_proto"), - "google.golang.org/genproto/googleapis/api/monitoredres": label.New("go_googleapis", "google/api", "monitoredres_go_proto"), - "google.golang.org/genproto/googleapis/api/servicecontrol/v1": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_go_proto"), - "google.golang.org/genproto/googleapis/api/servicemanagement/v1": label.New("go_googleapis", "google/api/servicemanagement/v1", "servicemanagement_go_proto"), - "google.golang.org/genproto/googleapis/appengine/legacy": label.New("go_googleapis", "google/appengine/legacy", "legacy_go_proto"), - "google.golang.org/genproto/googleapis/appengine/logging/v1": label.New("go_googleapis", "google/appengine/logging/v1", "logging_go_proto"), - "google.golang.org/genproto/googleapis/appengine/v1": label.New("go_googleapis", "google/appengine/v1", "appengine_go_proto"), - "google.golang.org/genproto/googleapis/assistant/embedded/v1alpha1": label.New("go_googleapis", "google/assistant/embedded/v1alpha1", "embedded_go_proto"), - "google.golang.org/genproto/googleapis/assistant/embedded/v1alpha2": label.New("go_googleapis", "google/assistant/embedded/v1alpha2", "embedded_go_proto"), - "google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1": label.New("go_googleapis", "google/bigtable/admin/cluster/v1", "cluster_go_proto"), - "google.golang.org/genproto/googleapis/bigtable/admin/table/v1": label.New("go_googleapis", "google/bigtable/admin/table/v1", "table_go_proto"), - "google.golang.org/genproto/googleapis/bigtable/admin/v2": label.New("go_googleapis", "google/bigtable/admin/v2", "admin_go_proto"), - "google.golang.org/genproto/googleapis/bigtable/v1": label.New("go_googleapis", "google/bigtable/v1", "bigtable_go_proto"), - "google.golang.org/genproto/googleapis/bigtable/v2": label.New("go_googleapis", "google/bigtable/v2", "bigtable_go_proto"), - "google.golang.org/genproto/googleapis/bytestream": label.New("go_googleapis", "google/bytestream", "bytestream_go_proto"), - "google.golang.org/genproto/googleapis/cloud/asset/v1": label.New("go_googleapis", "google/cloud/asset/v1", "asset_go_proto"), - "google.golang.org/genproto/googleapis/cloud/asset/v1beta1": label.New("go_googleapis", "google/cloud/asset/v1beta1", "asset_go_proto"), - "google.golang.org/genproto/googleapis/cloud/asset/v1p2beta1": label.New("go_googleapis", "google/cloud/asset/v1p2beta1", "asset_go_proto"), - "google.golang.org/genproto/googleapis/cloud/audit": label.New("go_googleapis", "google/cloud/audit", "audit_go_proto"), - "google.golang.org/genproto/googleapis/cloud/automl/v1": label.New("go_googleapis", "google/cloud/automl/v1", "automl_go_proto"), - "google.golang.org/genproto/googleapis/cloud/automl/v1beta1": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1": label.New("go_googleapis", "google/cloud/bigquery/datatransfer/v1", "datatransfer_go_proto"), - "google.golang.org/genproto/googleapis/cloud/bigquery/logging/v1": label.New("go_googleapis", "google/cloud/bigquery/logging/v1", "logging_go_proto"), - "google.golang.org/genproto/googleapis/cloud/bigquery/storage/v1beta1": label.New("go_googleapis", "google/cloud/bigquery/storage/v1beta1", "storage_go_proto"), - "google.golang.org/genproto/googleapis/cloud/bigquery/v2": label.New("go_googleapis", "google/cloud/bigquery/v2", "bigquery_go_proto"), - "google.golang.org/genproto/googleapis/cloud/billing/v1": label.New("go_googleapis", "google/cloud/billing/v1", "billing_go_proto"), - "google.golang.org/genproto/googleapis/cloud/binaryauthorization/v1beta1": label.New("go_googleapis", "google/cloud/binaryauthorization/v1beta1", "binaryauthorization_go_proto"), - "google.golang.org/genproto/googleapis/cloud/datacatalog/v1beta1": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_go_proto"), - "google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_go_proto"), - "google.golang.org/genproto/googleapis/cloud/dataproc/v1": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_go_proto"), - "google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_go_proto"), - "google.golang.org/genproto/googleapis/cloud/dialogflow/v2": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_go_proto"), - "google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google.golang.org/genproto/googleapis/cloud/document/v1beta1": label.New("go_googleapis", "google/cloud/document/v1beta1", "document_go_proto"), - "google.golang.org/genproto/googleapis/cloud/functions/v1beta2": label.New("go_googleapis", "google/cloud/functions/v1beta2", "functions_go_proto"), - "google.golang.org/genproto/googleapis/cloud/iot/v1": label.New("go_googleapis", "google/cloud/iot/v1", "iot_go_proto"), - "google.golang.org/genproto/googleapis/cloud/irm/v1alpha2": label.New("go_googleapis", "google/cloud/irm/v1alpha2", "irm_go_proto"), - "google.golang.org/genproto/googleapis/cloud/kms/v1": label.New("go_googleapis", "google/cloud/kms/v1", "kms_go_proto"), - "google.golang.org/genproto/googleapis/cloud/language/v1": label.New("go_googleapis", "google/cloud/language/v1", "language_go_proto"), - "google.golang.org/genproto/googleapis/cloud/language/v1beta1": label.New("go_googleapis", "google/cloud/language/v1beta1", "language_go_proto"), - "google.golang.org/genproto/googleapis/cloud/language/v1beta2": label.New("go_googleapis", "google/cloud/language/v1beta2", "language_go_proto"), - "google.golang.org/genproto/googleapis/cloud/location": label.New("go_googleapis", "google/cloud/location", "location_go_proto"), - "google.golang.org/genproto/googleapis/cloud/ml/v1": label.New("go_googleapis", "google/cloud/ml/v1", "ml_go_proto"), - "google.golang.org/genproto/googleapis/cloud/oslogin/common": label.New("go_googleapis", "google/cloud/oslogin/common", "common_go_proto"), - "google.golang.org/genproto/googleapis/cloud/oslogin/v1": label.New("go_googleapis", "google/cloud/oslogin/v1", "oslogin_go_proto"), - "google.golang.org/genproto/googleapis/cloud/oslogin/v1alpha": label.New("go_googleapis", "google/cloud/oslogin/v1alpha", "oslogin_go_proto"), - "google.golang.org/genproto/googleapis/cloud/oslogin/v1beta": label.New("go_googleapis", "google/cloud/oslogin/v1beta", "oslogin_go_proto"), - "google.golang.org/genproto/googleapis/cloud/phishingprotection/v1beta1": label.New("go_googleapis", "google/cloud/phishingprotection/v1beta1", "phishingprotection_go_proto"), - "google.golang.org/genproto/googleapis/cloud/recaptchaenterprise/v1beta1": label.New("go_googleapis", "google/cloud/recaptchaenterprise/v1beta1", "recaptchaenterprise_go_proto"), - "google.golang.org/genproto/googleapis/cloud/recommender/v1beta1": label.New("go_googleapis", "google/cloud/recommender/v1beta1", "recommender_go_proto"), - "google.golang.org/genproto/googleapis/cloud/redis/v1": label.New("go_googleapis", "google/cloud/redis/v1", "redis_go_proto"), - "google.golang.org/genproto/googleapis/cloud/redis/v1beta1": label.New("go_googleapis", "google/cloud/redis/v1beta1", "redis_go_proto"), - "google.golang.org/genproto/googleapis/cloud/resourcemanager/v2": label.New("go_googleapis", "google/cloud/resourcemanager/v2", "resourcemanager_go_proto"), - "google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1": label.New("go_googleapis", "google/cloud/runtimeconfig/v1beta1", "runtimeconfig_go_proto"), - "google.golang.org/genproto/googleapis/cloud/scheduler/v1": label.New("go_googleapis", "google/cloud/scheduler/v1", "scheduler_go_proto"), - "google.golang.org/genproto/googleapis/cloud/scheduler/v1beta1": label.New("go_googleapis", "google/cloud/scheduler/v1beta1", "scheduler_go_proto"), - "google.golang.org/genproto/googleapis/cloud/securitycenter/v1": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_go_proto"), - "google.golang.org/genproto/googleapis/cloud/securitycenter/v1beta1": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_go_proto"), - "google.golang.org/genproto/googleapis/cloud/speech/v1": label.New("go_googleapis", "google/cloud/speech/v1", "speech_go_proto"), - "google.golang.org/genproto/googleapis/cloud/speech/v1p1beta1": label.New("go_googleapis", "google/cloud/speech/v1p1beta1", "speech_go_proto"), - "google.golang.org/genproto/googleapis/cloud/support/common": label.New("go_googleapis", "google/cloud/support", "common_go_proto"), - "google.golang.org/genproto/googleapis/cloud/support/v1alpha1": label.New("go_googleapis", "google/cloud/support/v1alpha1", "support_go_proto"), - "google.golang.org/genproto/googleapis/cloud/talent/v4beta1": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google.golang.org/genproto/googleapis/cloud/tasks/v2": label.New("go_googleapis", "google/cloud/tasks/v2", "tasks_go_proto"), - "google.golang.org/genproto/googleapis/cloud/tasks/v2beta2": label.New("go_googleapis", "google/cloud/tasks/v2beta2", "tasks_go_proto"), - "google.golang.org/genproto/googleapis/cloud/tasks/v2beta3": label.New("go_googleapis", "google/cloud/tasks/v2beta3", "tasks_go_proto"), - "google.golang.org/genproto/googleapis/cloud/texttospeech/v1": label.New("go_googleapis", "google/cloud/texttospeech/v1", "texttospeech_go_proto"), - "google.golang.org/genproto/googleapis/cloud/texttospeech/v1beta1": label.New("go_googleapis", "google/cloud/texttospeech/v1beta1", "texttospeech_go_proto"), - "google.golang.org/genproto/googleapis/cloud/translate/v3": label.New("go_googleapis", "google/cloud/translate/v3", "translate_go_proto"), - "google.golang.org/genproto/googleapis/cloud/translate/v3beta1": label.New("go_googleapis", "google/cloud/translate/v3beta1", "translate_go_proto"), - "google.golang.org/genproto/googleapis/cloud/videointelligence/v1": label.New("go_googleapis", "google/cloud/videointelligence/v1", "videointelligence_go_proto"), - "google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta1": label.New("go_googleapis", "google/cloud/videointelligence/v1beta1", "videointelligence_go_proto"), - "google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta2": label.New("go_googleapis", "google/cloud/videointelligence/v1beta2", "videointelligence_go_proto"), - "google.golang.org/genproto/googleapis/cloud/videointelligence/v1p1beta1": label.New("go_googleapis", "google/cloud/videointelligence/v1p1beta1", "videointelligence_go_proto"), - "google.golang.org/genproto/googleapis/cloud/videointelligence/v1p2beta1": label.New("go_googleapis", "google/cloud/videointelligence/v1p2beta1", "videointelligence_go_proto"), - "google.golang.org/genproto/googleapis/cloud/videointelligence/v1p3beta1": label.New("go_googleapis", "google/cloud/videointelligence/v1p3beta1", "videointelligence_go_proto"), - "google.golang.org/genproto/googleapis/cloud/vision/v1": label.New("go_googleapis", "google/cloud/vision/v1", "vision_go_proto"), - "google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1": label.New("go_googleapis", "google/cloud/vision/v1p1beta1", "vision_go_proto"), - "google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1": label.New("go_googleapis", "google/cloud/vision/v1p2beta1", "vision_go_proto"), - "google.golang.org/genproto/googleapis/cloud/vision/v1p3beta1": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_go_proto"), - "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_go_proto"), - "google.golang.org/genproto/googleapis/cloud/webrisk/v1beta1": label.New("go_googleapis", "google/cloud/webrisk/v1beta1", "webrisk_go_proto"), - "google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1alpha": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_go_proto"), - "google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1beta": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_go_proto"), - "google.golang.org/genproto/googleapis/container/v1": label.New("go_googleapis", "google/container/v1", "container_go_proto"), - "google.golang.org/genproto/googleapis/container/v1alpha1": label.New("go_googleapis", "google/container/v1alpha1", "container_go_proto"), - "google.golang.org/genproto/googleapis/container/v1beta1": label.New("go_googleapis", "google/container/v1beta1", "container_go_proto"), - "google.golang.org/genproto/googleapis/datastore/admin/v1": label.New("go_googleapis", "google/datastore/admin/v1", "admin_go_proto"), - "google.golang.org/genproto/googleapis/datastore/admin/v1beta1": label.New("go_googleapis", "google/datastore/admin/v1beta1", "admin_go_proto"), - "google.golang.org/genproto/googleapis/datastore/v1": label.New("go_googleapis", "google/datastore/v1", "datastore_go_proto"), - "google.golang.org/genproto/googleapis/datastore/v1beta3": label.New("go_googleapis", "google/datastore/v1beta3", "datastore_go_proto"), - "google.golang.org/genproto/googleapis/devtools/build/v1": label.New("go_googleapis", "google/devtools/build/v1", "build_go_proto"), - "google.golang.org/genproto/googleapis/devtools/cloudbuild/v1": label.New("go_googleapis", "google/devtools/cloudbuild/v1", "cloudbuild_go_proto"), - "google.golang.org/genproto/googleapis/devtools/clouddebugger/v2": label.New("go_googleapis", "google/devtools/clouddebugger/v2", "clouddebugger_go_proto"), - "google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1": label.New("go_googleapis", "google/devtools/clouderrorreporting/v1beta1", "clouderrorreporting_go_proto"), - "google.golang.org/genproto/googleapis/devtools/cloudprofiler/v2": label.New("go_googleapis", "google/devtools/cloudprofiler/v2", "cloudprofiler_go_proto"), - "google.golang.org/genproto/googleapis/devtools/cloudtrace/v1": label.New("go_googleapis", "google/devtools/cloudtrace/v1", "cloudtrace_go_proto"), - "google.golang.org/genproto/googleapis/devtools/cloudtrace/v2": label.New("go_googleapis", "google/devtools/cloudtrace/v2", "cloudtrace_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1": label.New("go_googleapis", "google/devtools/containeranalysis/v1", "containeranalysis_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/attestation": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/attestation", "attestation_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/build": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/build", "build_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/common": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/common", "common_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1", "containeranalysis_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/deployment": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/deployment", "deployment_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/discovery": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/discovery", "discovery_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/grafeas": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/grafeas", "grafeas_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/image": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/image", "image_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/package": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/package", "package_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/provenance": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/provenance", "provenance_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/source": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/source", "source_go_proto"), - "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/vulnerability": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/vulnerability", "vulnerability_go_proto"), - "google.golang.org/genproto/googleapis/devtools/remoteexecution/v1test": label.New("go_googleapis", "google/devtools/remoteexecution/v1test", "remoteexecution_go_proto"), - "google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2": label.New("go_googleapis", "google/devtools/remoteworkers/v1test2", "remoteworkers_go_proto"), - "google.golang.org/genproto/googleapis/devtools/resultstore/v2": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google.golang.org/genproto/googleapis/devtools/source/v1": label.New("go_googleapis", "google/devtools/source/v1", "source_go_proto"), - "google.golang.org/genproto/googleapis/devtools/sourcerepo/v1": label.New("go_googleapis", "google/devtools/sourcerepo/v1", "sourcerepo_go_proto"), - "google.golang.org/genproto/googleapis/example/library/v1": label.New("go_googleapis", "google/example/library/v1", "library_go_proto"), - "google.golang.org/genproto/googleapis/firebase/fcm/connection/v1alpha1": label.New("go_googleapis", "google/firebase/fcm/connection/v1alpha1", "connection_go_proto"), - "google.golang.org/genproto/googleapis/firestore/admin/v1": label.New("go_googleapis", "google/firestore/admin/v1", "admin_go_proto"), - "google.golang.org/genproto/googleapis/firestore/admin/v1beta1": label.New("go_googleapis", "google/firestore/admin/v1beta1", "admin_go_proto"), - "google.golang.org/genproto/googleapis/firestore/admin/v1beta2": label.New("go_googleapis", "google/firestore/admin/v1beta2", "admin_go_proto"), - "google.golang.org/genproto/googleapis/firestore/v1": label.New("go_googleapis", "google/firestore/v1", "firestore_go_proto"), - "google.golang.org/genproto/googleapis/firestore/v1beta1": label.New("go_googleapis", "google/firestore/v1beta1", "firestore_go_proto"), - "google.golang.org/genproto/googleapis/genomics/v1": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google.golang.org/genproto/googleapis/genomics/v1alpha2": label.New("go_googleapis", "google/genomics/v1alpha2", "genomics_go_proto"), - "google.golang.org/genproto/googleapis/geo/type/viewport": label.New("go_googleapis", "google/geo/type", "viewport_go_proto"), - "google.golang.org/genproto/googleapis/home/graph/v1": label.New("go_googleapis", "google/home/graph/v1", "graph_go_proto"), - "google.golang.org/genproto/googleapis/iam/admin/v1": label.New("go_googleapis", "google/iam/admin/v1", "admin_go_proto"), - "google.golang.org/genproto/googleapis/iam/credentials/v1": label.New("go_googleapis", "google/iam/credentials/v1", "credentials_go_proto"), - "google.golang.org/genproto/googleapis/iam/v1": label.New("go_googleapis", "google/iam/v1", "iam_go_proto"), - "google.golang.org/genproto/googleapis/iam/v1/logging": label.New("go_googleapis", "google/iam/v1/logging", "logging_go_proto"), - "google.golang.org/genproto/googleapis/logging/type": label.New("go_googleapis", "google/logging/type", "ltype_go_proto"), - "google.golang.org/genproto/googleapis/logging/v2": label.New("go_googleapis", "google/logging/v2", "logging_go_proto"), - "google.golang.org/genproto/googleapis/longrunning": label.New("go_googleapis", "google/longrunning", "longrunning_go_proto"), - "google.golang.org/genproto/googleapis/monitoring/v3": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google.golang.org/genproto/googleapis/privacy/dlp/v2": label.New("go_googleapis", "google/privacy/dlp/v2", "dlp_go_proto"), - "google.golang.org/genproto/googleapis/pubsub/v1": label.New("go_googleapis", "google/pubsub/v1", "pubsub_go_proto"), - "google.golang.org/genproto/googleapis/pubsub/v1beta2": label.New("go_googleapis", "google/pubsub/v1beta2", "pubsub_go_proto"), - "google.golang.org/genproto/googleapis/rpc/code": label.New("go_googleapis", "google/rpc", "code_go_proto"), - "google.golang.org/genproto/googleapis/rpc/errdetails": label.New("go_googleapis", "google/rpc", "errdetails_go_proto"), - "google.golang.org/genproto/googleapis/rpc/status": label.New("go_googleapis", "google/rpc", "status_go_proto"), - "google.golang.org/genproto/googleapis/spanner/admin/database/v1": label.New("go_googleapis", "google/spanner/admin/database/v1", "database_go_proto"), - "google.golang.org/genproto/googleapis/spanner/admin/instance/v1": label.New("go_googleapis", "google/spanner/admin/instance/v1", "instance_go_proto"), - "google.golang.org/genproto/googleapis/spanner/v1": label.New("go_googleapis", "google/spanner/v1", "spanner_go_proto"), - "google.golang.org/genproto/googleapis/storagetransfer/v1": label.New("go_googleapis", "google/storagetransfer/v1", "storagetransfer_go_proto"), - "google.golang.org/genproto/googleapis/streetview/publish/v1": label.New("go_googleapis", "google/streetview/publish/v1", "publish_go_proto"), - "google.golang.org/genproto/googleapis/type/calendarperiod": label.New("go_googleapis", "google/type", "calendarperiod_go_proto"), - "google.golang.org/genproto/googleapis/type/color": label.New("go_googleapis", "google/type", "color_go_proto"), - "google.golang.org/genproto/googleapis/type/date": label.New("go_googleapis", "google/type", "date_go_proto"), - "google.golang.org/genproto/googleapis/type/dayofweek": label.New("go_googleapis", "google/type", "dayofweek_go_proto"), - "google.golang.org/genproto/googleapis/type/expr": label.New("go_googleapis", "google/type", "expr_go_proto"), - "google.golang.org/genproto/googleapis/type/fraction": label.New("go_googleapis", "google/type", "fraction_go_proto"), - "google.golang.org/genproto/googleapis/type/latlng": label.New("go_googleapis", "google/type", "latlng_go_proto"), - "google.golang.org/genproto/googleapis/type/money": label.New("go_googleapis", "google/type", "money_go_proto"), - "google.golang.org/genproto/googleapis/type/postaladdress": label.New("go_googleapis", "google/type", "postaladdress_go_proto"), - "google.golang.org/genproto/googleapis/type/quaternion": label.New("go_googleapis", "google/type", "quaternion_go_proto"), - "google.golang.org/genproto/googleapis/type/timeofday": label.New("go_googleapis", "google/type", "timeofday_go_proto"), - "google.golang.org/genproto/googleapis/watcher/v1": label.New("go_googleapis", "google/watcher/v1", "watcher_go_proto"), - "google.golang.org/genproto/googleapis/grafeas/v1": label.New("go_googleapis", "grafeas/v1", "grafeas_go_proto"), -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/known_proto_imports.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/known_proto_imports.go deleted file mode 100644 index ecb1780265..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/known_proto_imports.go +++ /dev/null @@ -1,1614 +0,0 @@ -// Generated by language/proto/gen/gen_known_imports.go -// From language/proto/proto.csv - -package golang - -import "github.com/bazelbuild/bazel-gazelle/label" - -var knownProtoImports = map[string]label.Label{ - - "google/protobuf/any.proto": label.New("io_bazel_rules_go", "proto/wkt", "any_go_proto"), - "google/protobuf/api.proto": label.New("io_bazel_rules_go", "proto/wkt", "api_go_proto"), - "google/protobuf/compiler/plugin.proto": label.New("io_bazel_rules_go", "proto/wkt", "compiler_plugin_go_proto"), - "google/protobuf/descriptor.proto": label.New("io_bazel_rules_go", "proto/wkt", "descriptor_go_proto"), - "google/protobuf/duration.proto": label.New("io_bazel_rules_go", "proto/wkt", "duration_go_proto"), - "google/protobuf/empty.proto": label.New("io_bazel_rules_go", "proto/wkt", "empty_go_proto"), - "google/protobuf/field_mask.proto": label.New("io_bazel_rules_go", "proto/wkt", "field_mask_go_proto"), - "google/protobuf/source_context.proto": label.New("io_bazel_rules_go", "proto/wkt", "source_context_go_proto"), - "google/protobuf/struct.proto": label.New("io_bazel_rules_go", "proto/wkt", "struct_go_proto"), - "google/protobuf/timestamp.proto": label.New("io_bazel_rules_go", "proto/wkt", "timestamp_go_proto"), - "google/protobuf/type.proto": label.New("io_bazel_rules_go", "proto/wkt", "type_go_proto"), - "google/protobuf/wrappers.proto": label.New("io_bazel_rules_go", "proto/wkt", "wrappers_go_proto"), - "google/ads/googleads/v1/common/ad_asset.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/ad_type_infos.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/asset_types.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/bidding.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/click_location.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/criteria.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/criterion_category_availability.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/custom_parameter.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/dates.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/explorer_auto_optimizer_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/extensions.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/feed_common.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/final_app_url.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/frequency_cap.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/keyword_plan_common.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/matching_function.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/metrics.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/policy.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/real_time_bidding_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/segments.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/simulation.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/tag_snippet.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/targeting_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/text_label.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/url_collection.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/user_lists.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/common/value.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_go_proto"), - "google/ads/googleads/v1/enums/access_reason.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/account_budget_proposal_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/account_budget_proposal_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/account_budget_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/ad_customizer_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/ad_group_ad_rotation_mode.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/ad_group_ad_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/ad_group_criterion_approval_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/ad_group_criterion_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/ad_group_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/ad_group_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/ad_network_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/ad_serving_optimization_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/ad_strength.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/ad_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/advertising_channel_sub_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/advertising_channel_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/affiliate_location_feed_relationship_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/affiliate_location_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/age_range_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/app_campaign_app_store.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/app_campaign_bidding_strategy_goal_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/app_payment_model_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/app_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/app_store.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/app_url_operating_system_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/asset_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/attribution_model.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/bid_modifier_source.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/bidding_source.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/bidding_strategy_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/bidding_strategy_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/billing_setup_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/brand_safety_suitability.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/budget_delivery_method.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/budget_period.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/budget_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/budget_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/call_conversion_reporting_state.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/call_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/callout_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/campaign_criterion_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/campaign_draft_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/campaign_experiment_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/campaign_experiment_traffic_split_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/campaign_experiment_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/campaign_serving_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/campaign_shared_set_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/campaign_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/change_status_operation.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/change_status_resource_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/click_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/content_label_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/conversion_action_category.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/conversion_action_counting_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/conversion_action_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/conversion_action_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/conversion_adjustment_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/conversion_attribution_event_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/conversion_lag_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/conversion_or_adjustment_lag_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/criterion_category_channel_availability_mode.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/criterion_category_locale_availability_mode.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/criterion_system_serving_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/criterion_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/custom_interest_member_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/custom_interest_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/custom_interest_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/custom_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/customer_match_upload_key_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/customer_pay_per_conversion_eligibility_failure_reason.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/data_driven_model_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/day_of_week.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/device.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/display_ad_format_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/display_upload_product_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/dsa_page_feed_criterion_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/education_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/extension_setting_device.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/extension_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/external_conversion_source.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/feed_attribute_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/feed_item_quality_approval_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/feed_item_quality_disapproval_reason.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/feed_item_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/feed_item_target_device.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/feed_item_target_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/feed_item_validation_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/feed_link_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/feed_mapping_criterion_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/feed_mapping_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/feed_origin.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/feed_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/flight_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/frequency_cap_event_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/frequency_cap_level.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/frequency_cap_time_unit.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/gender_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/geo_target_constant_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/geo_targeting_restriction.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/geo_targeting_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/google_ads_field_category.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/google_ads_field_data_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/hotel_date_selection_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/hotel_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/hotel_rate_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/income_range_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/interaction_event_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/interaction_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/job_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/keyword_match_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/keyword_plan_competition_level.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/keyword_plan_forecast_interval.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/keyword_plan_network.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/label_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/legacy_app_install_ad_app_store.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/listing_custom_attribute_index.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/listing_group_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/local_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/location_extension_targeting_criterion_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/location_group_radius_units.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/location_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/manager_link_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/matching_function_context_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/matching_function_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/media_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/merchant_center_link_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/message_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/mime_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/minute_of_hour.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/mobile_device_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/month_of_year.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/mutate_job_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/negative_geo_target_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/operating_system_version_operator_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/page_one_promoted_strategy_goal.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/parental_status_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/payment_mode.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/placeholder_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/placement_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/policy_approval_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/policy_review_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/policy_topic_entry_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/policy_topic_evidence_destination_mismatch_url_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/policy_topic_evidence_destination_not_working_device.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/positive_geo_target_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/preferred_content_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/price_extension_price_qualifier.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/price_extension_price_unit.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/price_extension_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/price_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/product_bidding_category_level.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/product_bidding_category_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/product_channel.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/product_channel_exclusivity.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/product_condition.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/product_type_level.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/promotion_extension_discount_modifier.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/promotion_extension_occasion.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/promotion_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/proximity_radius_units.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/quality_score_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/real_estate_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/recommendation_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/search_engine_results_page_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/search_term_match_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/search_term_targeting_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/served_asset_field_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/shared_set_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/shared_set_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/simulation_modification_method.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/simulation_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/sitelink_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/slot.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/spending_limit_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/structured_snippet_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/system_managed_entity_source.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/target_cpa_opt_in_recommendation_goal.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/target_impression_share_location.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/targeting_dimension.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/time_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/tracking_code_page_format.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/tracking_code_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/travel_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_interest_taxonomy_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_access_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_closing_reason.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_combined_rule_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_crm_data_source_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_date_rule_item_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_logical_rule_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_membership_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_number_rule_item_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_prepopulation_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_rule_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_size_range.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_string_rule_item_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/user_list_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/vanity_pharma_display_url_mode.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/vanity_pharma_text.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/webpage_condition_operand.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/enums/webpage_condition_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_go_proto"), - "google/ads/googleads/v1/errors/account_budget_proposal_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/ad_customizer_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/ad_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/ad_group_ad_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/ad_group_bid_modifier_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/ad_group_criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/ad_group_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/ad_group_feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/ad_parameter_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/ad_sharing_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/adx_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/asset_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/authentication_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/authorization_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/bidding_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/bidding_strategy_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/billing_setup_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/campaign_budget_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/campaign_criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/campaign_draft_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/campaign_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/campaign_experiment_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/campaign_feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/campaign_shared_set_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/change_status_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/collection_size_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/context_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/conversion_action_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/conversion_adjustment_upload_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/conversion_upload_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/country_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/custom_interest_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/customer_client_link_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/customer_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/customer_feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/customer_manager_link_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/database_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/date_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/date_range_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/distinct_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/enum_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/errors.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/extension_feed_item_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/extension_setting_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/feed_attribute_reference_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/feed_item_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/feed_item_target_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/feed_item_validation_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/feed_mapping_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/field_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/field_mask_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/function_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/function_parsing_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/geo_target_constant_suggestion_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/header_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/id_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/image_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/internal_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/keyword_plan_ad_group_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/keyword_plan_campaign_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/keyword_plan_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/keyword_plan_idea_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/keyword_plan_keyword_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/keyword_plan_negative_keyword_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/label_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/language_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/list_operation_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/manager_link_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/media_bundle_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/media_file_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/media_upload_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/multiplier_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/mutate_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/mutate_job_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/new_resource_creation_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/not_empty_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/not_whitelisted_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/null_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/operation_access_denied_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/operator_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/partial_failure_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/policy_finding_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/policy_validation_parameter_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/policy_violation_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/query_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/quota_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/range_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/recommendation_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/region_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/request_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/resource_access_denied_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/resource_count_limit_exceeded_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/setting_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/shared_criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/shared_set_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/size_limit_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/string_format_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/string_length_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/url_field_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/user_list_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/errors/youtube_video_registration_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_go_proto"), - "google/ads/googleads/v1/resources/account_budget.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/account_budget_proposal.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_group.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_group_ad.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_group_ad_label.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_group_audience_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_group_bid_modifier.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_group_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_group_criterion_label.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_group_criterion_simulation.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_group_extension_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_group_feed.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_group_label.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_group_simulation.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_parameter.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/ad_schedule_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/age_range_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/asset.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/bidding_strategy.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/billing_setup.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/campaign.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/campaign_audience_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/campaign_bid_modifier.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/campaign_budget.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/campaign_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/campaign_criterion_simulation.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/campaign_draft.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/campaign_experiment.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/campaign_extension_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/campaign_feed.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/campaign_label.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/campaign_shared_set.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/carrier_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/change_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/click_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/conversion_action.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/custom_interest.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/customer.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/customer_client.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/customer_client_link.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/customer_extension_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/customer_feed.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/customer_label.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/customer_manager_link.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/customer_negative_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/detail_placement_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/display_keyword_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/domain_category.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/dynamic_search_ads_search_term_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/expanded_landing_page_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/extension_feed_item.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/feed.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/feed_item.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/feed_item_target.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/feed_mapping.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/feed_placeholder_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/gender_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/geo_target_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/geographic_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/google_ads_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/group_placement_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/hotel_group_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/hotel_performance_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/keyword_plan.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/keyword_plan_ad_group.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/keyword_plan_campaign.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/keyword_plan_keyword.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/keyword_plan_negative_keyword.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/keyword_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/label.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/landing_page_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/language_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/location_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/managed_placement_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/media_file.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/merchant_center_link.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/mobile_app_category_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/mobile_device_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/mutate_job.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/operating_system_version_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/paid_organic_search_term_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/parental_status_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/payments_account.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/product_bidding_category_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/product_group_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/recommendation.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/remarketing_action.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/search_term_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/shared_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/shared_set.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/shopping_performance_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/topic_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/topic_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/user_interest.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/user_list.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/resources/video.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_go_proto"), - "google/ads/googleads/v1/services/account_budget_proposal_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/account_budget_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_group_ad_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_group_ad_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_group_audience_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_group_bid_modifier_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_group_criterion_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_group_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_group_criterion_simulation_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_group_extension_setting_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_group_feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_group_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_group_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_group_simulation_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_parameter_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/ad_schedule_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/age_range_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/asset_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/bidding_strategy_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/billing_setup_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/campaign_audience_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/campaign_bid_modifier_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/campaign_budget_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/campaign_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/campaign_criterion_simulation_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/campaign_draft_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/campaign_experiment_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/campaign_extension_setting_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/campaign_feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/campaign_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/campaign_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/campaign_shared_set_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/carrier_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/change_status_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/click_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/conversion_action_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/conversion_adjustment_upload_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/conversion_upload_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/custom_interest_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/customer_client_link_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/customer_client_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/customer_extension_setting_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/customer_feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/customer_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/customer_manager_link_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/customer_negative_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/customer_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/detail_placement_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/display_keyword_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/domain_category_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/dynamic_search_ads_search_term_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/expanded_landing_page_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/extension_feed_item_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/feed_item_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/feed_item_target_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/feed_mapping_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/feed_placeholder_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/gender_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/geo_target_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/geographic_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/google_ads_field_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/google_ads_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/group_placement_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/hotel_group_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/hotel_performance_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/keyword_plan_ad_group_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/keyword_plan_campaign_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/keyword_plan_idea_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/keyword_plan_keyword_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/keyword_plan_negative_keyword_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/keyword_plan_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/keyword_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/label_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/landing_page_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/language_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/location_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/managed_placement_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/media_file_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/merchant_center_link_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/mobile_app_category_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/mobile_device_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/mutate_job_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/operating_system_version_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/paid_organic_search_term_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/parental_status_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/payments_account_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/product_bidding_category_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/product_group_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/recommendation_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/remarketing_action_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/search_term_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/shared_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/shared_set_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/shopping_performance_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/topic_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/topic_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/user_interest_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/user_list_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v1/services/video_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_go_proto"), - "google/ads/googleads/v2/common/ad_asset.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/ad_type_infos.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/asset_types.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/bidding.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/click_location.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/criteria.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/criterion_category_availability.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/custom_parameter.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/dates.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/explorer_auto_optimizer_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/extensions.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/feed_common.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/final_app_url.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/frequency_cap.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/keyword_plan_common.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/matching_function.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/metrics.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/policy.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/real_time_bidding_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/segments.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/simulation.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/tag_snippet.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/targeting_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/text_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/url_collection.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/user_lists.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/common/value.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_go_proto"), - "google/ads/googleads/v2/enums/access_reason.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/access_role.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/account_budget_proposal_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/account_budget_proposal_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/account_budget_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/ad_customizer_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/ad_group_ad_rotation_mode.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/ad_group_ad_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/ad_group_criterion_approval_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/ad_group_criterion_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/ad_group_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/ad_group_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/ad_network_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/ad_serving_optimization_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/ad_strength.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/ad_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/advertising_channel_sub_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/advertising_channel_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/affiliate_location_feed_relationship_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/affiliate_location_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/age_range_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/app_campaign_app_store.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/app_campaign_bidding_strategy_goal_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/app_payment_model_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/app_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/app_store.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/app_url_operating_system_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/asset_field_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/asset_performance_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/asset_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/attribution_model.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/bid_modifier_source.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/bidding_source.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/bidding_strategy_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/bidding_strategy_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/billing_setup_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/brand_safety_suitability.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/budget_delivery_method.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/budget_period.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/budget_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/budget_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/call_conversion_reporting_state.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/call_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/callout_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/campaign_criterion_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/campaign_draft_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/campaign_experiment_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/campaign_experiment_traffic_split_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/campaign_experiment_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/campaign_serving_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/campaign_shared_set_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/campaign_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/change_status_operation.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/change_status_resource_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/click_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/content_label_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/conversion_action_category.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/conversion_action_counting_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/conversion_action_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/conversion_action_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/conversion_adjustment_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/conversion_attribution_event_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/conversion_lag_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/conversion_or_adjustment_lag_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/criterion_category_channel_availability_mode.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/criterion_category_locale_availability_mode.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/criterion_system_serving_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/criterion_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/custom_interest_member_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/custom_interest_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/custom_interest_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/custom_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/customer_match_upload_key_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/customer_pay_per_conversion_eligibility_failure_reason.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/data_driven_model_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/day_of_week.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/device.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/display_ad_format_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/display_upload_product_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/distance_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/dsa_page_feed_criterion_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/education_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/extension_setting_device.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/extension_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/external_conversion_source.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/feed_attribute_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/feed_item_quality_approval_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/feed_item_quality_disapproval_reason.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/feed_item_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/feed_item_target_device.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/feed_item_target_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/feed_item_validation_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/feed_link_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/feed_mapping_criterion_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/feed_mapping_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/feed_origin.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/feed_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/flight_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/frequency_cap_event_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/frequency_cap_level.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/frequency_cap_time_unit.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/gender_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/geo_target_constant_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/geo_targeting_restriction.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/geo_targeting_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/google_ads_field_category.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/google_ads_field_data_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/hotel_date_selection_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/hotel_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/hotel_price_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/hotel_rate_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/income_range_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/interaction_event_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/interaction_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/invoice_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/job_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/keyword_match_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/keyword_plan_competition_level.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/keyword_plan_forecast_interval.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/keyword_plan_network.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/label_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/legacy_app_install_ad_app_store.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/listing_custom_attribute_index.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/listing_group_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/local_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/location_extension_targeting_criterion_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/location_group_radius_units.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/location_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/manager_link_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/matching_function_context_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/matching_function_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/media_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/merchant_center_link_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/message_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/mime_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/minute_of_hour.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/mobile_device_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/month_of_year.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/mutate_job_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/negative_geo_target_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/operating_system_version_operator_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/page_one_promoted_strategy_goal.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/parental_status_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/payment_mode.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/placeholder_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/placement_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/policy_approval_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/policy_review_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/policy_topic_entry_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/policy_topic_evidence_destination_mismatch_url_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/policy_topic_evidence_destination_not_working_device.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/policy_topic_evidence_destination_not_working_dns_error_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/positive_geo_target_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/preferred_content_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/price_extension_price_qualifier.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/price_extension_price_unit.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/price_extension_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/price_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/product_bidding_category_level.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/product_bidding_category_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/product_channel.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/product_channel_exclusivity.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/product_condition.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/product_type_level.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/promotion_extension_discount_modifier.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/promotion_extension_occasion.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/promotion_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/proximity_radius_units.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/quality_score_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/reach_plan_ad_length.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/reach_plan_age_range.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/real_estate_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/recommendation_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/search_engine_results_page_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/search_term_match_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/search_term_targeting_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/served_asset_field_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/shared_set_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/shared_set_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/simulation_modification_method.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/simulation_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/sitelink_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/slot.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/spending_limit_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/structured_snippet_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/system_managed_entity_source.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/target_cpa_opt_in_recommendation_goal.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/target_impression_share_location.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/targeting_dimension.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/time_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/tracking_code_page_format.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/tracking_code_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/travel_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_interest_taxonomy_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_access_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_closing_reason.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_combined_rule_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_crm_data_source_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_date_rule_item_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_logical_rule_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_membership_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_number_rule_item_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_prepopulation_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_rule_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_size_range.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_string_rule_item_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/user_list_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/vanity_pharma_display_url_mode.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/vanity_pharma_text.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/webpage_condition_operand.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/enums/webpage_condition_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_go_proto"), - "google/ads/googleads/v2/errors/access_invitation_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/account_budget_proposal_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/ad_customizer_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/ad_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/ad_group_ad_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/ad_group_bid_modifier_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/ad_group_criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/ad_group_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/ad_group_feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/ad_parameter_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/ad_sharing_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/adx_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/asset_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/authentication_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/authorization_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/bidding_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/bidding_strategy_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/billing_setup_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/campaign_budget_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/campaign_criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/campaign_draft_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/campaign_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/campaign_experiment_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/campaign_feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/campaign_shared_set_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/change_status_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/collection_size_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/context_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/conversion_action_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/conversion_adjustment_upload_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/conversion_upload_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/country_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/currency_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/custom_interest_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/customer_client_link_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/customer_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/customer_feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/customer_manager_link_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/database_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/date_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/date_range_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/distinct_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/enum_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/errors.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/extension_feed_item_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/extension_setting_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/feed_attribute_reference_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/feed_item_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/feed_item_target_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/feed_item_validation_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/feed_mapping_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/field_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/field_mask_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/function_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/function_parsing_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/geo_target_constant_suggestion_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/header_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/id_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/image_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/internal_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/invoice_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/keyword_plan_ad_group_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/keyword_plan_campaign_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/keyword_plan_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/keyword_plan_idea_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/keyword_plan_keyword_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/keyword_plan_negative_keyword_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/label_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/language_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/list_operation_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/manager_link_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/media_bundle_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/media_file_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/media_upload_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/multiplier_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/mutate_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/mutate_job_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/new_resource_creation_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/not_empty_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/not_whitelisted_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/null_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/operation_access_denied_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/operator_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/partial_failure_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/policy_finding_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/policy_validation_parameter_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/policy_violation_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/query_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/quota_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/range_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/reach_plan_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/recommendation_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/region_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/request_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/resource_access_denied_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/resource_count_limit_exceeded_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/setting_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/shared_criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/shared_set_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/size_limit_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/string_format_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/string_length_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/url_field_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/user_list_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/errors/youtube_video_registration_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_go_proto"), - "google/ads/googleads/v2/resources/account_budget.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/account_budget_proposal.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group_ad.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group_ad_asset_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group_ad_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group_audience_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group_bid_modifier.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group_criterion_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group_criterion_simulation.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group_extension_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group_feed.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_group_simulation.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_parameter.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/ad_schedule_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/age_range_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/asset.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/bidding_strategy.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/billing_setup.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/campaign.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/campaign_audience_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/campaign_bid_modifier.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/campaign_budget.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/campaign_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/campaign_criterion_simulation.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/campaign_draft.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/campaign_experiment.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/campaign_extension_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/campaign_feed.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/campaign_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/campaign_shared_set.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/carrier_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/change_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/click_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/conversion_action.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/custom_interest.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/customer.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/customer_client.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/customer_client_link.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/customer_extension_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/customer_feed.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/customer_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/customer_manager_link.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/customer_negative_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/detail_placement_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/display_keyword_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/distance_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/domain_category.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/dynamic_search_ads_search_term_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/expanded_landing_page_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/extension_feed_item.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/feed.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/feed_item.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/feed_item_target.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/feed_mapping.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/feed_placeholder_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/gender_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/geo_target_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/geographic_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/google_ads_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/group_placement_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/hotel_group_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/hotel_performance_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/invoice.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/keyword_plan.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/keyword_plan_ad_group.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/keyword_plan_campaign.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/keyword_plan_keyword.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/keyword_plan_negative_keyword.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/keyword_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/label.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/landing_page_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/language_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/location_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/managed_placement_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/media_file.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/merchant_center_link.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/mobile_app_category_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/mobile_device_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/mutate_job.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/operating_system_version_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/paid_organic_search_term_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/parental_status_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/payments_account.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/product_bidding_category_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/product_group_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/recommendation.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/remarketing_action.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/search_term_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/shared_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/shared_set.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/shopping_performance_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/topic_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/topic_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/user_interest.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/user_list.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/user_location_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/resources/video.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_go_proto"), - "google/ads/googleads/v2/services/account_budget_proposal_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/account_budget_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_ad_asset_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_ad_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_ad_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_audience_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_bid_modifier_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_criterion_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_criterion_simulation_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_extension_setting_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_group_simulation_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_parameter_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_schedule_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/ad_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/age_range_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/asset_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/bidding_strategy_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/billing_setup_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/campaign_audience_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/campaign_bid_modifier_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/campaign_budget_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/campaign_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/campaign_criterion_simulation_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/campaign_draft_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/campaign_experiment_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/campaign_extension_setting_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/campaign_feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/campaign_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/campaign_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/campaign_shared_set_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/carrier_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/change_status_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/click_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/conversion_action_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/conversion_adjustment_upload_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/conversion_upload_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/custom_interest_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/customer_client_link_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/customer_client_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/customer_extension_setting_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/customer_feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/customer_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/customer_manager_link_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/customer_negative_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/customer_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/detail_placement_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/display_keyword_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/distance_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/domain_category_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/dynamic_search_ads_search_term_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/expanded_landing_page_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/extension_feed_item_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/feed_item_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/feed_item_target_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/feed_mapping_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/feed_placeholder_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/gender_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/geo_target_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/geographic_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/google_ads_field_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/google_ads_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/group_placement_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/hotel_group_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/hotel_performance_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/invoice_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/keyword_plan_ad_group_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/keyword_plan_campaign_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/keyword_plan_idea_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/keyword_plan_keyword_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/keyword_plan_negative_keyword_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/keyword_plan_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/keyword_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/label_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/landing_page_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/language_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/location_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/managed_placement_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/media_file_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/merchant_center_link_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/mobile_app_category_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/mobile_device_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/mutate_job_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/operating_system_version_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/paid_organic_search_term_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/parental_status_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/payments_account_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/product_bidding_category_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/product_group_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/reach_plan_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/recommendation_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/remarketing_action_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/search_term_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/shared_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/shared_set_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/shopping_performance_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/topic_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/topic_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/user_interest_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/user_list_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/user_location_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/ads/googleads/v2/services/video_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_go_proto"), - "google/api/annotations.proto": label.New("go_googleapis", "google/api", "annotations_go_proto"), - "google/api/auth.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/backend.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/billing.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/client.proto": label.New("go_googleapis", "google/api", "annotations_go_proto"), - "google/api/config_change.proto": label.New("go_googleapis", "google/api", "configchange_go_proto"), - "google/api/consumer.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/context.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/control.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/distribution.proto": label.New("go_googleapis", "google/api", "distribution_go_proto"), - "google/api/documentation.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/endpoint.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/expr/v1alpha1/cel_service.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_go_proto"), - "google/api/expr/v1alpha1/checked.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_go_proto"), - "google/api/expr/v1alpha1/conformance_service.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_go_proto"), - "google/api/expr/v1alpha1/eval.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_go_proto"), - "google/api/expr/v1alpha1/explain.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_go_proto"), - "google/api/expr/v1alpha1/syntax.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_go_proto"), - "google/api/expr/v1alpha1/value.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_go_proto"), - "google/api/expr/v1beta1/decl.proto": label.New("go_googleapis", "google/api/expr/v1beta1", "expr_go_proto"), - "google/api/expr/v1beta1/eval.proto": label.New("go_googleapis", "google/api/expr/v1beta1", "expr_go_proto"), - "google/api/expr/v1beta1/expr.proto": label.New("go_googleapis", "google/api/expr/v1beta1", "expr_go_proto"), - "google/api/expr/v1beta1/source.proto": label.New("go_googleapis", "google/api/expr/v1beta1", "expr_go_proto"), - "google/api/expr/v1beta1/value.proto": label.New("go_googleapis", "google/api/expr/v1beta1", "expr_go_proto"), - "google/api/field_behavior.proto": label.New("go_googleapis", "google/api", "annotations_go_proto"), - "google/api/http.proto": label.New("go_googleapis", "google/api", "annotations_go_proto"), - "google/api/httpbody.proto": label.New("go_googleapis", "google/api", "httpbody_go_proto"), - "google/api/label.proto": label.New("go_googleapis", "google/api", "label_go_proto"), - "google/api/launch_stage.proto": label.New("go_googleapis", "google/api", "api_go_proto"), - "google/api/log.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/logging.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/metric.proto": label.New("go_googleapis", "google/api", "metric_go_proto"), - "google/api/monitored_resource.proto": label.New("go_googleapis", "google/api", "monitoredres_go_proto"), - "google/api/monitoring.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/quota.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/resource.proto": label.New("go_googleapis", "google/api", "annotations_go_proto"), - "google/api/service.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/servicecontrol/v1/check_error.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_go_proto"), - "google/api/servicecontrol/v1/distribution.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_go_proto"), - "google/api/servicecontrol/v1/log_entry.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_go_proto"), - "google/api/servicecontrol/v1/metric_value.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_go_proto"), - "google/api/servicecontrol/v1/operation.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_go_proto"), - "google/api/servicecontrol/v1/quota_controller.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_go_proto"), - "google/api/servicecontrol/v1/service_controller.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_go_proto"), - "google/api/servicemanagement/v1/resources.proto": label.New("go_googleapis", "google/api/servicemanagement/v1", "servicemanagement_go_proto"), - "google/api/servicemanagement/v1/servicemanager.proto": label.New("go_googleapis", "google/api/servicemanagement/v1", "servicemanagement_go_proto"), - "google/api/source_info.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/system_parameter.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/api/usage.proto": label.New("go_googleapis", "google/api", "serviceconfig_go_proto"), - "google/appengine/legacy/audit_data.proto": label.New("go_googleapis", "google/appengine/legacy", "legacy_go_proto"), - "google/appengine/logging/v1/request_log.proto": label.New("go_googleapis", "google/appengine/logging/v1", "logging_go_proto"), - "google/appengine/v1/app_yaml.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_go_proto"), - "google/appengine/v1/appengine.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_go_proto"), - "google/appengine/v1/application.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_go_proto"), - "google/appengine/v1/audit_data.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_go_proto"), - "google/appengine/v1/deploy.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_go_proto"), - "google/appengine/v1/instance.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_go_proto"), - "google/appengine/v1/location.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_go_proto"), - "google/appengine/v1/operation.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_go_proto"), - "google/appengine/v1/service.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_go_proto"), - "google/appengine/v1/version.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_go_proto"), - "google/assistant/embedded/v1alpha1/embedded_assistant.proto": label.New("go_googleapis", "google/assistant/embedded/v1alpha1", "embedded_go_proto"), - "google/assistant/embedded/v1alpha2/embedded_assistant.proto": label.New("go_googleapis", "google/assistant/embedded/v1alpha2", "embedded_go_proto"), - "google/bigtable/admin/cluster/v1/bigtable_cluster_data.proto": label.New("go_googleapis", "google/bigtable/admin/cluster/v1", "cluster_go_proto"), - "google/bigtable/admin/cluster/v1/bigtable_cluster_service.proto": label.New("go_googleapis", "google/bigtable/admin/cluster/v1", "cluster_go_proto"), - "google/bigtable/admin/cluster/v1/bigtable_cluster_service_messages.proto": label.New("go_googleapis", "google/bigtable/admin/cluster/v1", "cluster_go_proto"), - "google/bigtable/admin/table/v1/bigtable_table_data.proto": label.New("go_googleapis", "google/bigtable/admin/table/v1", "table_go_proto"), - "google/bigtable/admin/table/v1/bigtable_table_service.proto": label.New("go_googleapis", "google/bigtable/admin/table/v1", "table_go_proto"), - "google/bigtable/admin/table/v1/bigtable_table_service_messages.proto": label.New("go_googleapis", "google/bigtable/admin/table/v1", "table_go_proto"), - "google/bigtable/admin/v2/bigtable_instance_admin.proto": label.New("go_googleapis", "google/bigtable/admin/v2", "admin_go_proto"), - "google/bigtable/admin/v2/bigtable_table_admin.proto": label.New("go_googleapis", "google/bigtable/admin/v2", "admin_go_proto"), - "google/bigtable/admin/v2/common.proto": label.New("go_googleapis", "google/bigtable/admin/v2", "admin_go_proto"), - "google/bigtable/admin/v2/instance.proto": label.New("go_googleapis", "google/bigtable/admin/v2", "admin_go_proto"), - "google/bigtable/admin/v2/table.proto": label.New("go_googleapis", "google/bigtable/admin/v2", "admin_go_proto"), - "google/bigtable/v1/bigtable_data.proto": label.New("go_googleapis", "google/bigtable/v1", "bigtable_go_proto"), - "google/bigtable/v1/bigtable_service.proto": label.New("go_googleapis", "google/bigtable/v1", "bigtable_go_proto"), - "google/bigtable/v1/bigtable_service_messages.proto": label.New("go_googleapis", "google/bigtable/v1", "bigtable_go_proto"), - "google/bigtable/v2/bigtable.proto": label.New("go_googleapis", "google/bigtable/v2", "bigtable_go_proto"), - "google/bigtable/v2/data.proto": label.New("go_googleapis", "google/bigtable/v2", "bigtable_go_proto"), - "google/bytestream/bytestream.proto": label.New("go_googleapis", "google/bytestream", "bytestream_go_proto"), - "google/cloud/asset/v1/asset_service.proto": label.New("go_googleapis", "google/cloud/asset/v1", "asset_go_proto"), - "google/cloud/asset/v1/assets.proto": label.New("go_googleapis", "google/cloud/asset/v1", "asset_go_proto"), - "google/cloud/asset/v1beta1/asset_service.proto": label.New("go_googleapis", "google/cloud/asset/v1beta1", "asset_go_proto"), - "google/cloud/asset/v1beta1/assets.proto": label.New("go_googleapis", "google/cloud/asset/v1beta1", "asset_go_proto"), - "google/cloud/asset/v1p2beta1/asset_service.proto": label.New("go_googleapis", "google/cloud/asset/v1p2beta1", "asset_go_proto"), - "google/cloud/asset/v1p2beta1/assets.proto": label.New("go_googleapis", "google/cloud/asset/v1p2beta1", "asset_go_proto"), - "google/cloud/audit/audit_log.proto": label.New("go_googleapis", "google/cloud/audit", "audit_go_proto"), - "google/cloud/automl/v1/annotation_payload.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_go_proto"), - "google/cloud/automl/v1/data_items.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_go_proto"), - "google/cloud/automl/v1/dataset.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_go_proto"), - "google/cloud/automl/v1/io.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_go_proto"), - "google/cloud/automl/v1/model.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_go_proto"), - "google/cloud/automl/v1/model_evaluation.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_go_proto"), - "google/cloud/automl/v1/operations.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_go_proto"), - "google/cloud/automl/v1/prediction_service.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_go_proto"), - "google/cloud/automl/v1/service.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_go_proto"), - "google/cloud/automl/v1/translation.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_go_proto"), - "google/cloud/automl/v1beta1/annotation_payload.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/annotation_spec.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/classification.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/column_spec.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/data_items.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/data_stats.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/data_types.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/dataset.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/detection.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/geometry.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/image.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/io.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/model.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/model_evaluation.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/operations.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/prediction_service.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/ranges.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/regression.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/service.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/table_spec.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/tables.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/temporal.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/text.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/text_extraction.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/text_segment.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/text_sentiment.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/translation.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/automl/v1beta1/video.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_go_proto"), - "google/cloud/bigquery/datatransfer/v1/datasource.proto": label.New("go_googleapis", "google/cloud/bigquery/datatransfer/v1", "datatransfer_go_proto"), - "google/cloud/bigquery/datatransfer/v1/datatransfer.proto": label.New("go_googleapis", "google/cloud/bigquery/datatransfer/v1", "datatransfer_go_proto"), - "google/cloud/bigquery/datatransfer/v1/transfer.proto": label.New("go_googleapis", "google/cloud/bigquery/datatransfer/v1", "datatransfer_go_proto"), - "google/cloud/bigquery/logging/v1/audit_data.proto": label.New("go_googleapis", "google/cloud/bigquery/logging/v1", "logging_go_proto"), - "google/cloud/bigquery/storage/v1beta1/arrow.proto": label.New("go_googleapis", "google/cloud/bigquery/storage/v1beta1", "storage_go_proto"), - "google/cloud/bigquery/storage/v1beta1/avro.proto": label.New("go_googleapis", "google/cloud/bigquery/storage/v1beta1", "storage_go_proto"), - "google/cloud/bigquery/storage/v1beta1/read_options.proto": label.New("go_googleapis", "google/cloud/bigquery/storage/v1beta1", "storage_go_proto"), - "google/cloud/bigquery/storage/v1beta1/storage.proto": label.New("go_googleapis", "google/cloud/bigquery/storage/v1beta1", "storage_go_proto"), - "google/cloud/bigquery/storage/v1beta1/table_reference.proto": label.New("go_googleapis", "google/cloud/bigquery/storage/v1beta1", "storage_go_proto"), - "google/cloud/bigquery/v2/encryption_config.proto": label.New("go_googleapis", "google/cloud/bigquery/v2", "bigquery_go_proto"), - "google/cloud/bigquery/v2/model.proto": label.New("go_googleapis", "google/cloud/bigquery/v2", "bigquery_go_proto"), - "google/cloud/bigquery/v2/model_reference.proto": label.New("go_googleapis", "google/cloud/bigquery/v2", "bigquery_go_proto"), - "google/cloud/bigquery/v2/standard_sql.proto": label.New("go_googleapis", "google/cloud/bigquery/v2", "bigquery_go_proto"), - "google/cloud/billing/v1/cloud_billing.proto": label.New("go_googleapis", "google/cloud/billing/v1", "billing_go_proto"), - "google/cloud/binaryauthorization/v1beta1/resources.proto": label.New("go_googleapis", "google/cloud/binaryauthorization/v1beta1", "binaryauthorization_go_proto"), - "google/cloud/binaryauthorization/v1beta1/service.proto": label.New("go_googleapis", "google/cloud/binaryauthorization/v1beta1", "binaryauthorization_go_proto"), - "google/cloud/datacatalog/v1beta1/datacatalog.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_go_proto"), - "google/cloud/datacatalog/v1beta1/gcs_fileset_spec.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_go_proto"), - "google/cloud/datacatalog/v1beta1/schema.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_go_proto"), - "google/cloud/datacatalog/v1beta1/search.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_go_proto"), - "google/cloud/datacatalog/v1beta1/table_spec.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_go_proto"), - "google/cloud/datacatalog/v1beta1/tags.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_go_proto"), - "google/cloud/datacatalog/v1beta1/timestamps.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_go_proto"), - "google/cloud/datalabeling/v1beta1/annotation.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_go_proto"), - "google/cloud/datalabeling/v1beta1/annotation_spec_set.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_go_proto"), - "google/cloud/datalabeling/v1beta1/data_labeling_service.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_go_proto"), - "google/cloud/datalabeling/v1beta1/data_payloads.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_go_proto"), - "google/cloud/datalabeling/v1beta1/dataset.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_go_proto"), - "google/cloud/datalabeling/v1beta1/evaluation.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_go_proto"), - "google/cloud/datalabeling/v1beta1/evaluation_job.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_go_proto"), - "google/cloud/datalabeling/v1beta1/human_annotation_config.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_go_proto"), - "google/cloud/datalabeling/v1beta1/instruction.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_go_proto"), - "google/cloud/datalabeling/v1beta1/operations.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_go_proto"), - "google/cloud/dataproc/v1/autoscaling_policies.proto": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_go_proto"), - "google/cloud/dataproc/v1/clusters.proto": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_go_proto"), - "google/cloud/dataproc/v1/jobs.proto": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_go_proto"), - "google/cloud/dataproc/v1/operations.proto": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_go_proto"), - "google/cloud/dataproc/v1/shared.proto": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_go_proto"), - "google/cloud/dataproc/v1/workflow_templates.proto": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_go_proto"), - "google/cloud/dataproc/v1beta2/autoscaling_policies.proto": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_go_proto"), - "google/cloud/dataproc/v1beta2/clusters.proto": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_go_proto"), - "google/cloud/dataproc/v1beta2/jobs.proto": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_go_proto"), - "google/cloud/dataproc/v1beta2/operations.proto": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_go_proto"), - "google/cloud/dataproc/v1beta2/shared.proto": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_go_proto"), - "google/cloud/dataproc/v1beta2/workflow_templates.proto": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_go_proto"), - "google/cloud/dialogflow/v2/agent.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2/audio_config.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2/context.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2/entity_type.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2/intent.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2/session.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2/session_entity_type.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2/webhook.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2beta1/agent.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2beta1/audio_config.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2beta1/context.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2beta1/document.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2beta1/entity_type.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2beta1/gcs.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2beta1/intent.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2beta1/knowledge_base.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2beta1/session.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2beta1/session_entity_type.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2beta1/validation_result.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google/cloud/dialogflow/v2beta1/webhook.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_go_proto"), - "google/cloud/document/v1beta1/document.proto": label.New("go_googleapis", "google/cloud/document/v1beta1", "document_go_proto"), - "google/cloud/document/v1beta1/document_understanding.proto": label.New("go_googleapis", "google/cloud/document/v1beta1", "document_go_proto"), - "google/cloud/document/v1beta1/geometry.proto": label.New("go_googleapis", "google/cloud/document/v1beta1", "document_go_proto"), - "google/cloud/functions/v1beta2/functions.proto": label.New("go_googleapis", "google/cloud/functions/v1beta2", "functions_go_proto"), - "google/cloud/functions/v1beta2/operations.proto": label.New("go_googleapis", "google/cloud/functions/v1beta2", "functions_go_proto"), - "google/cloud/iot/v1/device_manager.proto": label.New("go_googleapis", "google/cloud/iot/v1", "iot_go_proto"), - "google/cloud/iot/v1/resources.proto": label.New("go_googleapis", "google/cloud/iot/v1", "iot_go_proto"), - "google/cloud/irm/v1alpha2/incidents.proto": label.New("go_googleapis", "google/cloud/irm/v1alpha2", "irm_go_proto"), - "google/cloud/irm/v1alpha2/incidents_service.proto": label.New("go_googleapis", "google/cloud/irm/v1alpha2", "irm_go_proto"), - "google/cloud/kms/v1/resources.proto": label.New("go_googleapis", "google/cloud/kms/v1", "kms_go_proto"), - "google/cloud/kms/v1/service.proto": label.New("go_googleapis", "google/cloud/kms/v1", "kms_go_proto"), - "google/cloud/language/v1/language_service.proto": label.New("go_googleapis", "google/cloud/language/v1", "language_go_proto"), - "google/cloud/language/v1beta1/language_service.proto": label.New("go_googleapis", "google/cloud/language/v1beta1", "language_go_proto"), - "google/cloud/language/v1beta2/language_service.proto": label.New("go_googleapis", "google/cloud/language/v1beta2", "language_go_proto"), - "google/cloud/location/locations.proto": label.New("go_googleapis", "google/cloud/location", "location_go_proto"), - "google/cloud/ml/v1/job_service.proto": label.New("go_googleapis", "google/cloud/ml/v1", "ml_go_proto"), - "google/cloud/ml/v1/model_service.proto": label.New("go_googleapis", "google/cloud/ml/v1", "ml_go_proto"), - "google/cloud/ml/v1/operation_metadata.proto": label.New("go_googleapis", "google/cloud/ml/v1", "ml_go_proto"), - "google/cloud/ml/v1/prediction_service.proto": label.New("go_googleapis", "google/cloud/ml/v1", "ml_go_proto"), - "google/cloud/ml/v1/project_service.proto": label.New("go_googleapis", "google/cloud/ml/v1", "ml_go_proto"), - "google/cloud/oslogin/common/common.proto": label.New("go_googleapis", "google/cloud/oslogin/common", "common_go_proto"), - "google/cloud/oslogin/v1/oslogin.proto": label.New("go_googleapis", "google/cloud/oslogin/v1", "oslogin_go_proto"), - "google/cloud/oslogin/v1alpha/oslogin.proto": label.New("go_googleapis", "google/cloud/oslogin/v1alpha", "oslogin_go_proto"), - "google/cloud/oslogin/v1beta/oslogin.proto": label.New("go_googleapis", "google/cloud/oslogin/v1beta", "oslogin_go_proto"), - "google/cloud/phishingprotection/v1beta1/phishingprotection.proto": label.New("go_googleapis", "google/cloud/phishingprotection/v1beta1", "phishingprotection_go_proto"), - "google/cloud/recaptchaenterprise/v1beta1/recaptchaenterprise.proto": label.New("go_googleapis", "google/cloud/recaptchaenterprise/v1beta1", "recaptchaenterprise_go_proto"), - "google/cloud/recommender/v1beta1/recommendation.proto": label.New("go_googleapis", "google/cloud/recommender/v1beta1", "recommender_go_proto"), - "google/cloud/recommender/v1beta1/recommender_service.proto": label.New("go_googleapis", "google/cloud/recommender/v1beta1", "recommender_go_proto"), - "google/cloud/redis/v1/cloud_redis.proto": label.New("go_googleapis", "google/cloud/redis/v1", "redis_go_proto"), - "google/cloud/redis/v1beta1/cloud_redis.proto": label.New("go_googleapis", "google/cloud/redis/v1beta1", "redis_go_proto"), - "google/cloud/resourcemanager/v2/folders.proto": label.New("go_googleapis", "google/cloud/resourcemanager/v2", "resourcemanager_go_proto"), - "google/cloud/runtimeconfig/v1beta1/resources.proto": label.New("go_googleapis", "google/cloud/runtimeconfig/v1beta1", "runtimeconfig_go_proto"), - "google/cloud/runtimeconfig/v1beta1/runtimeconfig.proto": label.New("go_googleapis", "google/cloud/runtimeconfig/v1beta1", "runtimeconfig_go_proto"), - "google/cloud/scheduler/v1/cloudscheduler.proto": label.New("go_googleapis", "google/cloud/scheduler/v1", "scheduler_go_proto"), - "google/cloud/scheduler/v1/job.proto": label.New("go_googleapis", "google/cloud/scheduler/v1", "scheduler_go_proto"), - "google/cloud/scheduler/v1/target.proto": label.New("go_googleapis", "google/cloud/scheduler/v1", "scheduler_go_proto"), - "google/cloud/scheduler/v1beta1/cloudscheduler.proto": label.New("go_googleapis", "google/cloud/scheduler/v1beta1", "scheduler_go_proto"), - "google/cloud/scheduler/v1beta1/job.proto": label.New("go_googleapis", "google/cloud/scheduler/v1beta1", "scheduler_go_proto"), - "google/cloud/scheduler/v1beta1/target.proto": label.New("go_googleapis", "google/cloud/scheduler/v1beta1", "scheduler_go_proto"), - "google/cloud/securitycenter/v1/asset.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_go_proto"), - "google/cloud/securitycenter/v1/finding.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_go_proto"), - "google/cloud/securitycenter/v1/organization_settings.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_go_proto"), - "google/cloud/securitycenter/v1/run_asset_discovery_response.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_go_proto"), - "google/cloud/securitycenter/v1/security_marks.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_go_proto"), - "google/cloud/securitycenter/v1/securitycenter_service.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_go_proto"), - "google/cloud/securitycenter/v1/source.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_go_proto"), - "google/cloud/securitycenter/v1beta1/asset.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_go_proto"), - "google/cloud/securitycenter/v1beta1/finding.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_go_proto"), - "google/cloud/securitycenter/v1beta1/organization_settings.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_go_proto"), - "google/cloud/securitycenter/v1beta1/security_marks.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_go_proto"), - "google/cloud/securitycenter/v1beta1/securitycenter_service.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_go_proto"), - "google/cloud/securitycenter/v1beta1/source.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_go_proto"), - "google/cloud/speech/v1/cloud_speech.proto": label.New("go_googleapis", "google/cloud/speech/v1", "speech_go_proto"), - "google/cloud/speech/v1p1beta1/cloud_speech.proto": label.New("go_googleapis", "google/cloud/speech/v1p1beta1", "speech_go_proto"), - "google/cloud/support/common.proto": label.New("go_googleapis", "google/cloud/support", "common_go_proto"), - "google/cloud/support/v1alpha1/cloud_support.proto": label.New("go_googleapis", "google/cloud/support/v1alpha1", "support_go_proto"), - "google/cloud/talent/v4beta1/application.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/application_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/batch.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/common.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/company.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/company_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/completion_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/event.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/event_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/filters.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/histogram.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/job.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/job_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/profile.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/profile_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/tenant.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/talent/v4beta1/tenant_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_go_proto"), - "google/cloud/tasks/v2/cloudtasks.proto": label.New("go_googleapis", "google/cloud/tasks/v2", "tasks_go_proto"), - "google/cloud/tasks/v2/queue.proto": label.New("go_googleapis", "google/cloud/tasks/v2", "tasks_go_proto"), - "google/cloud/tasks/v2/target.proto": label.New("go_googleapis", "google/cloud/tasks/v2", "tasks_go_proto"), - "google/cloud/tasks/v2/task.proto": label.New("go_googleapis", "google/cloud/tasks/v2", "tasks_go_proto"), - "google/cloud/tasks/v2beta2/cloudtasks.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta2", "tasks_go_proto"), - "google/cloud/tasks/v2beta2/queue.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta2", "tasks_go_proto"), - "google/cloud/tasks/v2beta2/target.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta2", "tasks_go_proto"), - "google/cloud/tasks/v2beta2/task.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta2", "tasks_go_proto"), - "google/cloud/tasks/v2beta3/cloudtasks.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta3", "tasks_go_proto"), - "google/cloud/tasks/v2beta3/queue.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta3", "tasks_go_proto"), - "google/cloud/tasks/v2beta3/target.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta3", "tasks_go_proto"), - "google/cloud/tasks/v2beta3/task.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta3", "tasks_go_proto"), - "google/cloud/texttospeech/v1/cloud_tts.proto": label.New("go_googleapis", "google/cloud/texttospeech/v1", "texttospeech_go_proto"), - "google/cloud/texttospeech/v1beta1/cloud_tts.proto": label.New("go_googleapis", "google/cloud/texttospeech/v1beta1", "texttospeech_go_proto"), - "google/cloud/translate/v3/translation_service.proto": label.New("go_googleapis", "google/cloud/translate/v3", "translate_go_proto"), - "google/cloud/translate/v3beta1/translation_service.proto": label.New("go_googleapis", "google/cloud/translate/v3beta1", "translate_go_proto"), - "google/cloud/videointelligence/v1/video_intelligence.proto": label.New("go_googleapis", "google/cloud/videointelligence/v1", "videointelligence_go_proto"), - "google/cloud/videointelligence/v1beta1/video_intelligence.proto": label.New("go_googleapis", "google/cloud/videointelligence/v1beta1", "videointelligence_go_proto"), - "google/cloud/videointelligence/v1beta2/video_intelligence.proto": label.New("go_googleapis", "google/cloud/videointelligence/v1beta2", "videointelligence_go_proto"), - "google/cloud/videointelligence/v1p1beta1/video_intelligence.proto": label.New("go_googleapis", "google/cloud/videointelligence/v1p1beta1", "videointelligence_go_proto"), - "google/cloud/videointelligence/v1p2beta1/video_intelligence.proto": label.New("go_googleapis", "google/cloud/videointelligence/v1p2beta1", "videointelligence_go_proto"), - "google/cloud/videointelligence/v1p3beta1/video_intelligence.proto": label.New("go_googleapis", "google/cloud/videointelligence/v1p3beta1", "videointelligence_go_proto"), - "google/cloud/vision/v1/geometry.proto": label.New("go_googleapis", "google/cloud/vision/v1", "vision_go_proto"), - "google/cloud/vision/v1/image_annotator.proto": label.New("go_googleapis", "google/cloud/vision/v1", "vision_go_proto"), - "google/cloud/vision/v1/product_search.proto": label.New("go_googleapis", "google/cloud/vision/v1", "vision_go_proto"), - "google/cloud/vision/v1/product_search_service.proto": label.New("go_googleapis", "google/cloud/vision/v1", "vision_go_proto"), - "google/cloud/vision/v1/text_annotation.proto": label.New("go_googleapis", "google/cloud/vision/v1", "vision_go_proto"), - "google/cloud/vision/v1/web_detection.proto": label.New("go_googleapis", "google/cloud/vision/v1", "vision_go_proto"), - "google/cloud/vision/v1p1beta1/geometry.proto": label.New("go_googleapis", "google/cloud/vision/v1p1beta1", "vision_go_proto"), - "google/cloud/vision/v1p1beta1/image_annotator.proto": label.New("go_googleapis", "google/cloud/vision/v1p1beta1", "vision_go_proto"), - "google/cloud/vision/v1p1beta1/text_annotation.proto": label.New("go_googleapis", "google/cloud/vision/v1p1beta1", "vision_go_proto"), - "google/cloud/vision/v1p1beta1/web_detection.proto": label.New("go_googleapis", "google/cloud/vision/v1p1beta1", "vision_go_proto"), - "google/cloud/vision/v1p2beta1/geometry.proto": label.New("go_googleapis", "google/cloud/vision/v1p2beta1", "vision_go_proto"), - "google/cloud/vision/v1p2beta1/image_annotator.proto": label.New("go_googleapis", "google/cloud/vision/v1p2beta1", "vision_go_proto"), - "google/cloud/vision/v1p2beta1/text_annotation.proto": label.New("go_googleapis", "google/cloud/vision/v1p2beta1", "vision_go_proto"), - "google/cloud/vision/v1p2beta1/web_detection.proto": label.New("go_googleapis", "google/cloud/vision/v1p2beta1", "vision_go_proto"), - "google/cloud/vision/v1p3beta1/geometry.proto": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_go_proto"), - "google/cloud/vision/v1p3beta1/image_annotator.proto": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_go_proto"), - "google/cloud/vision/v1p3beta1/product_search.proto": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_go_proto"), - "google/cloud/vision/v1p3beta1/product_search_service.proto": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_go_proto"), - "google/cloud/vision/v1p3beta1/text_annotation.proto": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_go_proto"), - "google/cloud/vision/v1p3beta1/web_detection.proto": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_go_proto"), - "google/cloud/vision/v1p4beta1/geometry.proto": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_go_proto"), - "google/cloud/vision/v1p4beta1/image_annotator.proto": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_go_proto"), - "google/cloud/vision/v1p4beta1/product_search.proto": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_go_proto"), - "google/cloud/vision/v1p4beta1/product_search_service.proto": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_go_proto"), - "google/cloud/vision/v1p4beta1/text_annotation.proto": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_go_proto"), - "google/cloud/vision/v1p4beta1/web_detection.proto": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_go_proto"), - "google/cloud/webrisk/v1beta1/webrisk.proto": label.New("go_googleapis", "google/cloud/webrisk/v1beta1", "webrisk_go_proto"), - "google/cloud/websecurityscanner/v1alpha/crawled_url.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1alpha/finding.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1alpha/finding_addon.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1alpha/finding_type_stats.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1alpha/scan_config.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1alpha/scan_run.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1alpha/web_security_scanner.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1beta/crawled_url.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1beta/finding.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1beta/finding_addon.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1beta/finding_type_stats.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1beta/scan_config.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1beta/scan_config_error.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1beta/scan_run.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1beta/scan_run_error_trace.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1beta/scan_run_warning_trace.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_go_proto"), - "google/cloud/websecurityscanner/v1beta/web_security_scanner.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_go_proto"), - "google/container/v1/cluster_service.proto": label.New("go_googleapis", "google/container/v1", "container_go_proto"), - "google/container/v1alpha1/cluster_service.proto": label.New("go_googleapis", "google/container/v1alpha1", "container_go_proto"), - "google/container/v1beta1/cluster_service.proto": label.New("go_googleapis", "google/container/v1beta1", "container_go_proto"), - "google/datastore/admin/v1/datastore_admin.proto": label.New("go_googleapis", "google/datastore/admin/v1", "admin_go_proto"), - "google/datastore/admin/v1/index.proto": label.New("go_googleapis", "google/datastore/admin/v1", "admin_go_proto"), - "google/datastore/admin/v1beta1/datastore_admin.proto": label.New("go_googleapis", "google/datastore/admin/v1beta1", "admin_go_proto"), - "google/datastore/v1/datastore.proto": label.New("go_googleapis", "google/datastore/v1", "datastore_go_proto"), - "google/datastore/v1/entity.proto": label.New("go_googleapis", "google/datastore/v1", "datastore_go_proto"), - "google/datastore/v1/query.proto": label.New("go_googleapis", "google/datastore/v1", "datastore_go_proto"), - "google/datastore/v1beta3/datastore.proto": label.New("go_googleapis", "google/datastore/v1beta3", "datastore_go_proto"), - "google/datastore/v1beta3/entity.proto": label.New("go_googleapis", "google/datastore/v1beta3", "datastore_go_proto"), - "google/datastore/v1beta3/query.proto": label.New("go_googleapis", "google/datastore/v1beta3", "datastore_go_proto"), - "google/devtools/build/v1/build_events.proto": label.New("go_googleapis", "google/devtools/build/v1", "build_go_proto"), - "google/devtools/build/v1/build_status.proto": label.New("go_googleapis", "google/devtools/build/v1", "build_go_proto"), - "google/devtools/build/v1/publish_build_event.proto": label.New("go_googleapis", "google/devtools/build/v1", "build_go_proto"), - "google/devtools/cloudbuild/v1/cloudbuild.proto": label.New("go_googleapis", "google/devtools/cloudbuild/v1", "cloudbuild_go_proto"), - "google/devtools/clouddebugger/v2/controller.proto": label.New("go_googleapis", "google/devtools/clouddebugger/v2", "clouddebugger_go_proto"), - "google/devtools/clouddebugger/v2/data.proto": label.New("go_googleapis", "google/devtools/clouddebugger/v2", "clouddebugger_go_proto"), - "google/devtools/clouddebugger/v2/debugger.proto": label.New("go_googleapis", "google/devtools/clouddebugger/v2", "clouddebugger_go_proto"), - "google/devtools/clouderrorreporting/v1beta1/common.proto": label.New("go_googleapis", "google/devtools/clouderrorreporting/v1beta1", "clouderrorreporting_go_proto"), - "google/devtools/clouderrorreporting/v1beta1/error_group_service.proto": label.New("go_googleapis", "google/devtools/clouderrorreporting/v1beta1", "clouderrorreporting_go_proto"), - "google/devtools/clouderrorreporting/v1beta1/error_stats_service.proto": label.New("go_googleapis", "google/devtools/clouderrorreporting/v1beta1", "clouderrorreporting_go_proto"), - "google/devtools/clouderrorreporting/v1beta1/report_errors_service.proto": label.New("go_googleapis", "google/devtools/clouderrorreporting/v1beta1", "clouderrorreporting_go_proto"), - "google/devtools/cloudprofiler/v2/profiler.proto": label.New("go_googleapis", "google/devtools/cloudprofiler/v2", "cloudprofiler_go_proto"), - "google/devtools/cloudtrace/v1/trace.proto": label.New("go_googleapis", "google/devtools/cloudtrace/v1", "cloudtrace_go_proto"), - "google/devtools/cloudtrace/v2/trace.proto": label.New("go_googleapis", "google/devtools/cloudtrace/v2", "cloudtrace_go_proto"), - "google/devtools/cloudtrace/v2/tracing.proto": label.New("go_googleapis", "google/devtools/cloudtrace/v2", "cloudtrace_go_proto"), - "google/devtools/containeranalysis/v1/containeranalysis.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1", "containeranalysis_go_proto"), - "google/devtools/containeranalysis/v1alpha1/bill_of_materials.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_go_proto"), - "google/devtools/containeranalysis/v1alpha1/containeranalysis.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_go_proto"), - "google/devtools/containeranalysis/v1alpha1/image_basis.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_go_proto"), - "google/devtools/containeranalysis/v1alpha1/package_vulnerability.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_go_proto"), - "google/devtools/containeranalysis/v1alpha1/provenance.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_go_proto"), - "google/devtools/containeranalysis/v1alpha1/source_context.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_go_proto"), - "google/devtools/containeranalysis/v1beta1/attestation/attestation.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/attestation", "attestation_go_proto"), - "google/devtools/containeranalysis/v1beta1/build/build.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/build", "build_go_proto"), - "google/devtools/containeranalysis/v1beta1/common/common.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/common", "common_go_proto"), - "google/devtools/containeranalysis/v1beta1/containeranalysis.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1", "containeranalysis_go_proto"), - "google/devtools/containeranalysis/v1beta1/deployment/deployment.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/deployment", "deployment_go_proto"), - "google/devtools/containeranalysis/v1beta1/discovery/discovery.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/discovery", "discovery_go_proto"), - "google/devtools/containeranalysis/v1beta1/grafeas/grafeas.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/grafeas", "grafeas_go_proto"), - "google/devtools/containeranalysis/v1beta1/image/image.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/image", "image_go_proto"), - "google/devtools/containeranalysis/v1beta1/package/package.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/package", "package_go_proto"), - "google/devtools/containeranalysis/v1beta1/provenance/provenance.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/provenance", "provenance_go_proto"), - "google/devtools/containeranalysis/v1beta1/source/source.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/source", "source_go_proto"), - "google/devtools/containeranalysis/v1beta1/vulnerability/vulnerability.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/vulnerability", "vulnerability_go_proto"), - "google/devtools/remoteexecution/v1test/remote_execution.proto": label.New("go_googleapis", "google/devtools/remoteexecution/v1test", "remoteexecution_go_proto"), - "google/devtools/remoteworkers/v1test2/bots.proto": label.New("go_googleapis", "google/devtools/remoteworkers/v1test2", "remoteworkers_go_proto"), - "google/devtools/remoteworkers/v1test2/command.proto": label.New("go_googleapis", "google/devtools/remoteworkers/v1test2", "remoteworkers_go_proto"), - "google/devtools/remoteworkers/v1test2/tasks.proto": label.New("go_googleapis", "google/devtools/remoteworkers/v1test2", "remoteworkers_go_proto"), - "google/devtools/remoteworkers/v1test2/worker.proto": label.New("go_googleapis", "google/devtools/remoteworkers/v1test2", "remoteworkers_go_proto"), - "google/devtools/resultstore/v2/action.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/common.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/configuration.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/configured_target.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/coverage.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/coverage_summary.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/download_metadata.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/file.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/file_processing_error.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/file_set.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/invocation.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/resultstore_download.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/resultstore_file_download.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/resultstore_upload.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/target.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/test_suite.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/resultstore/v2/upload_metadata.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_go_proto"), - "google/devtools/source/v1/source_context.proto": label.New("go_googleapis", "google/devtools/source/v1", "source_go_proto"), - "google/devtools/sourcerepo/v1/sourcerepo.proto": label.New("go_googleapis", "google/devtools/sourcerepo/v1", "sourcerepo_go_proto"), - "google/example/library/v1/library.proto": label.New("go_googleapis", "google/example/library/v1", "library_go_proto"), - "google/firebase/fcm/connection/v1alpha1/connection_api.proto": label.New("go_googleapis", "google/firebase/fcm/connection/v1alpha1", "connection_go_proto"), - "google/firestore/admin/v1/field.proto": label.New("go_googleapis", "google/firestore/admin/v1", "admin_go_proto"), - "google/firestore/admin/v1/firestore_admin.proto": label.New("go_googleapis", "google/firestore/admin/v1", "admin_go_proto"), - "google/firestore/admin/v1/index.proto": label.New("go_googleapis", "google/firestore/admin/v1", "admin_go_proto"), - "google/firestore/admin/v1/location.proto": label.New("go_googleapis", "google/firestore/admin/v1", "admin_go_proto"), - "google/firestore/admin/v1/operation.proto": label.New("go_googleapis", "google/firestore/admin/v1", "admin_go_proto"), - "google/firestore/admin/v1beta1/firestore_admin.proto": label.New("go_googleapis", "google/firestore/admin/v1beta1", "admin_go_proto"), - "google/firestore/admin/v1beta1/index.proto": label.New("go_googleapis", "google/firestore/admin/v1beta1", "admin_go_proto"), - "google/firestore/admin/v1beta1/location.proto": label.New("go_googleapis", "google/firestore/admin/v1beta1", "admin_go_proto"), - "google/firestore/admin/v1beta2/field.proto": label.New("go_googleapis", "google/firestore/admin/v1beta2", "admin_go_proto"), - "google/firestore/admin/v1beta2/firestore_admin.proto": label.New("go_googleapis", "google/firestore/admin/v1beta2", "admin_go_proto"), - "google/firestore/admin/v1beta2/index.proto": label.New("go_googleapis", "google/firestore/admin/v1beta2", "admin_go_proto"), - "google/firestore/admin/v1beta2/operation.proto": label.New("go_googleapis", "google/firestore/admin/v1beta2", "admin_go_proto"), - "google/firestore/v1/common.proto": label.New("go_googleapis", "google/firestore/v1", "firestore_go_proto"), - "google/firestore/v1/document.proto": label.New("go_googleapis", "google/firestore/v1", "firestore_go_proto"), - "google/firestore/v1/firestore.proto": label.New("go_googleapis", "google/firestore/v1", "firestore_go_proto"), - "google/firestore/v1/query.proto": label.New("go_googleapis", "google/firestore/v1", "firestore_go_proto"), - "google/firestore/v1/write.proto": label.New("go_googleapis", "google/firestore/v1", "firestore_go_proto"), - "google/firestore/v1beta1/common.proto": label.New("go_googleapis", "google/firestore/v1beta1", "firestore_go_proto"), - "google/firestore/v1beta1/document.proto": label.New("go_googleapis", "google/firestore/v1beta1", "firestore_go_proto"), - "google/firestore/v1beta1/firestore.proto": label.New("go_googleapis", "google/firestore/v1beta1", "firestore_go_proto"), - "google/firestore/v1beta1/query.proto": label.New("go_googleapis", "google/firestore/v1beta1", "firestore_go_proto"), - "google/firestore/v1beta1/write.proto": label.New("go_googleapis", "google/firestore/v1beta1", "firestore_go_proto"), - "google/genomics/v1/annotations.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google/genomics/v1/cigar.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google/genomics/v1/datasets.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google/genomics/v1/operations.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google/genomics/v1/position.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google/genomics/v1/range.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google/genomics/v1/readalignment.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google/genomics/v1/readgroup.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google/genomics/v1/readgroupset.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google/genomics/v1/reads.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google/genomics/v1/references.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google/genomics/v1/variants.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_go_proto"), - "google/genomics/v1alpha2/pipelines.proto": label.New("go_googleapis", "google/genomics/v1alpha2", "genomics_go_proto"), - "google/geo/type/viewport.proto": label.New("go_googleapis", "google/geo/type", "viewport_go_proto"), - "google/home/graph/v1/device.proto": label.New("go_googleapis", "google/home/graph/v1", "graph_go_proto"), - "google/home/graph/v1/homegraph.proto": label.New("go_googleapis", "google/home/graph/v1", "graph_go_proto"), - "google/iam/admin/v1/iam.proto": label.New("go_googleapis", "google/iam/admin/v1", "admin_go_proto"), - "google/iam/credentials/v1/common.proto": label.New("go_googleapis", "google/iam/credentials/v1", "credentials_go_proto"), - "google/iam/credentials/v1/iamcredentials.proto": label.New("go_googleapis", "google/iam/credentials/v1", "credentials_go_proto"), - "google/iam/v1/iam_policy.proto": label.New("go_googleapis", "google/iam/v1", "iam_go_proto"), - "google/iam/v1/logging/audit_data.proto": label.New("go_googleapis", "google/iam/v1/logging", "logging_go_proto"), - "google/iam/v1/options.proto": label.New("go_googleapis", "google/iam/v1", "iam_go_proto"), - "google/iam/v1/policy.proto": label.New("go_googleapis", "google/iam/v1", "iam_go_proto"), - "google/logging/type/http_request.proto": label.New("go_googleapis", "google/logging/type", "ltype_go_proto"), - "google/logging/type/log_severity.proto": label.New("go_googleapis", "google/logging/type", "ltype_go_proto"), - "google/logging/v2/log_entry.proto": label.New("go_googleapis", "google/logging/v2", "logging_go_proto"), - "google/logging/v2/logging.proto": label.New("go_googleapis", "google/logging/v2", "logging_go_proto"), - "google/logging/v2/logging_config.proto": label.New("go_googleapis", "google/logging/v2", "logging_go_proto"), - "google/logging/v2/logging_metrics.proto": label.New("go_googleapis", "google/logging/v2", "logging_go_proto"), - "google/longrunning/operations.proto": label.New("go_googleapis", "google/longrunning", "longrunning_go_proto"), - "google/monitoring/v3/alert.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/alert_service.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/common.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/dropped_labels.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/group.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/group_service.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/metric.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/metric_service.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/mutation_record.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/notification.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/notification_service.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/span_context.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/uptime.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/monitoring/v3/uptime_service.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_go_proto"), - "google/privacy/dlp/v2/dlp.proto": label.New("go_googleapis", "google/privacy/dlp/v2", "dlp_go_proto"), - "google/privacy/dlp/v2/storage.proto": label.New("go_googleapis", "google/privacy/dlp/v2", "dlp_go_proto"), - "google/pubsub/v1/pubsub.proto": label.New("go_googleapis", "google/pubsub/v1", "pubsub_go_proto"), - "google/pubsub/v1beta2/pubsub.proto": label.New("go_googleapis", "google/pubsub/v1beta2", "pubsub_go_proto"), - "google/rpc/code.proto": label.New("go_googleapis", "google/rpc", "code_go_proto"), - "google/rpc/error_details.proto": label.New("go_googleapis", "google/rpc", "errdetails_go_proto"), - "google/rpc/status.proto": label.New("go_googleapis", "google/rpc", "status_go_proto"), - "google/spanner/admin/database/v1/spanner_database_admin.proto": label.New("go_googleapis", "google/spanner/admin/database/v1", "database_go_proto"), - "google/spanner/admin/instance/v1/spanner_instance_admin.proto": label.New("go_googleapis", "google/spanner/admin/instance/v1", "instance_go_proto"), - "google/spanner/v1/keys.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_go_proto"), - "google/spanner/v1/mutation.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_go_proto"), - "google/spanner/v1/query_plan.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_go_proto"), - "google/spanner/v1/result_set.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_go_proto"), - "google/spanner/v1/spanner.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_go_proto"), - "google/spanner/v1/transaction.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_go_proto"), - "google/spanner/v1/type.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_go_proto"), - "google/storagetransfer/v1/transfer.proto": label.New("go_googleapis", "google/storagetransfer/v1", "storagetransfer_go_proto"), - "google/storagetransfer/v1/transfer_types.proto": label.New("go_googleapis", "google/storagetransfer/v1", "storagetransfer_go_proto"), - "google/streetview/publish/v1/resources.proto": label.New("go_googleapis", "google/streetview/publish/v1", "publish_go_proto"), - "google/streetview/publish/v1/rpcmessages.proto": label.New("go_googleapis", "google/streetview/publish/v1", "publish_go_proto"), - "google/streetview/publish/v1/streetview_publish.proto": label.New("go_googleapis", "google/streetview/publish/v1", "publish_go_proto"), - "google/type/calendar_period.proto": label.New("go_googleapis", "google/type", "calendarperiod_go_proto"), - "google/type/color.proto": label.New("go_googleapis", "google/type", "color_go_proto"), - "google/type/date.proto": label.New("go_googleapis", "google/type", "date_go_proto"), - "google/type/dayofweek.proto": label.New("go_googleapis", "google/type", "dayofweek_go_proto"), - "google/type/expr.proto": label.New("go_googleapis", "google/type", "expr_go_proto"), - "google/type/fraction.proto": label.New("go_googleapis", "google/type", "fraction_go_proto"), - "google/type/latlng.proto": label.New("go_googleapis", "google/type", "latlng_go_proto"), - "google/type/money.proto": label.New("go_googleapis", "google/type", "money_go_proto"), - "google/type/postal_address.proto": label.New("go_googleapis", "google/type", "postaladdress_go_proto"), - "google/type/quaternion.proto": label.New("go_googleapis", "google/type", "quaternion_go_proto"), - "google/type/timeofday.proto": label.New("go_googleapis", "google/type", "timeofday_go_proto"), - "google/watcher/v1/watch.proto": label.New("go_googleapis", "google/watcher/v1", "watcher_go_proto"), - "grafeas/v1/attestation.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_go_proto"), - "grafeas/v1/build.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_go_proto"), - "grafeas/v1/common.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_go_proto"), - "grafeas/v1/cvss.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_go_proto"), - "grafeas/v1/deployment.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_go_proto"), - "grafeas/v1/discovery.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_go_proto"), - "grafeas/v1/grafeas.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_go_proto"), - "grafeas/v1/image.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_go_proto"), - "grafeas/v1/package.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_go_proto"), - "grafeas/v1/provenance.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_go_proto"), - "grafeas/v1/vulnerability.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_go_proto"), -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/lang.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/lang.go deleted file mode 100644 index 27d50cae29..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/lang.go +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package golang provides support for Go and Go proto rules. It generates -// go_library, go_binary, go_test, and go_proto_library rules. -// -// Configuration -// -// Go rules support the flags -build_tags, -go_prefix, and -external. -// They also support the directives # gazelle:build_tags, # gazelle:prefix, -// and # gazelle:importmap_prefix. See -// https://github.com/bazelbuild/bazel-gazelle/blob/master/README.rst#directives -// for information on these. -// -// Rule generation -// -// Currently, Gazelle generates rules for one Go package per directory. In -// general, we aim to support Go code which is compatible with "go build". If -// there are no buildable packages, Gazelle will delete existing rules with -// default names. If there are multiple packages, Gazelle will pick one that -// matches the directory name or will print an error if no such package is -// found. -// -// Gazelle names library and test rules somewhat oddly: go_default_library, and -// go_default_test. This is for historic reasons: before the importpath -// attribute was mandatory, import paths were inferred from label names. Even if -// we never support multiple packages in the future (we should), we should -// migrate away from this because it's surprising. Libraries should generally -// be named after their directories. -// -// Dependency resolution -// -// Go libraries are indexed by their importpath attribute. Gazelle attempts to -// resolve libraries by import path using the index, filtered using the -// vendoring algorithm. If an import doesn't match any known library, Gazelle -// guesses a name for it, locally (if the import path is under the current -// prefix), or in an external repository or vendor directory (depending -// on external mode). -// -// Gazelle has special cases for import paths associated with proto Well -// Known Types and Google APIs. rules_go declares canonical rules for these. -package golang - -import "github.com/bazelbuild/bazel-gazelle/language" - -const goName = "go" - -type goLang struct { - // goPkgDirs is a set of relative paths to directories containing buildable - // Go code, including in subdirectories. - goPkgRels map[string]bool -} - -func (_ *goLang) Name() string { return goName } - -func NewLanguage() language.Language { - return &goLang{goPkgRels: make(map[string]bool)} -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/modules.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/modules.go deleted file mode 100644 index c195b0eecd..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/modules.go +++ /dev/null @@ -1,214 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package golang - -import ( - "bytes" - "encoding/json" - "go/build" - "io" - "io/ioutil" - "log" - "os" - "os/exec" - "path/filepath" - "runtime" - "sort" - "strings" - - "github.com/bazelbuild/bazel-gazelle/label" - "github.com/bazelbuild/bazel-gazelle/language" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -func importReposFromModules(args language.ImportReposArgs) language.ImportReposResult { - // Copy go.mod to temporary directory. We may run commands that modify it, - // and we want to leave the original alone. - tempDir, err := copyGoModToTemp(args.Path) - if err != nil { - return language.ImportReposResult{Error: err} - } - defer os.RemoveAll(tempDir) - - // List all modules except for the main module, including implicit indirect - // dependencies. - type module struct { - Path, Version, Sum string - Main bool - Replace *struct { - Path, Version string - } - } - // path@version can be used as a unique identifier for looking up sums - pathToModule := map[string]*module{} - data, err := goListModules(tempDir) - if err != nil { - return language.ImportReposResult{Error: err} - } - dec := json.NewDecoder(bytes.NewReader(data)) - for dec.More() { - mod := new(module) - if err := dec.Decode(mod); err != nil { - return language.ImportReposResult{Error: err} - } - if mod.Main { - continue - } - if mod.Replace != nil { - if filepath.IsAbs(mod.Replace.Path) || build.IsLocalImport(mod.Replace.Path) { - log.Printf("go_repository does not support file path replacements for %s -> %s", mod.Path, - mod.Replace.Path) - continue - } - pathToModule[mod.Replace.Path+"@"+mod.Replace.Version] = mod - } else { - pathToModule[mod.Path+"@"+mod.Version] = mod - } - } - // Load sums from go.sum. Ideally, they're all there. - goSumPath := filepath.Join(filepath.Dir(args.Path), "go.sum") - data, _ = ioutil.ReadFile(goSumPath) - lines := bytes.Split(data, []byte("\n")) - for _, line := range lines { - line = bytes.TrimSpace(line) - fields := bytes.Fields(line) - if len(fields) != 3 { - continue - } - path, version, sum := string(fields[0]), string(fields[1]), string(fields[2]) - if strings.HasSuffix(version, "/go.mod") { - continue - } - if mod, ok := pathToModule[path+"@"+version]; ok { - mod.Sum = sum - } - } - // If sums are missing, run go mod download to get them. - var missingSumArgs []string - for pathVer, mod := range pathToModule { - if mod.Sum == "" { - missingSumArgs = append(missingSumArgs, pathVer) - } - } - if len(missingSumArgs) > 0 { - data, err := goModDownload(tempDir, missingSumArgs) - if err != nil { - return language.ImportReposResult{Error: err} - } - dec = json.NewDecoder(bytes.NewReader(data)) - for dec.More() { - var dl module - if err := dec.Decode(&dl); err != nil { - return language.ImportReposResult{Error: err} - } - if mod, ok := pathToModule[dl.Path+"@"+dl.Version]; ok { - mod.Sum = dl.Sum - } - } - } - - // Translate to repository rules. - gen := make([]*rule.Rule, 0, len(pathToModule)) - for pathVer, mod := range pathToModule { - if mod.Sum == "" { - log.Printf("could not determine sum for module %s", pathVer) - continue - } - r := rule.NewRule("go_repository", label.ImportPathToBazelRepoName(mod.Path)) - r.SetAttr("importpath", mod.Path) - r.SetAttr("sum", mod.Sum) - if mod.Replace == nil { - r.SetAttr("version", mod.Version) - } else { - r.SetAttr("replace", mod.Replace.Path) - r.SetAttr("version", mod.Replace.Version) - } - gen = append(gen, r) - } - sort.Slice(gen, func(i, j int) bool { - return gen[i].Name() < gen[j].Name() - }) - return language.ImportReposResult{Gen: gen} -} - -// goListModules invokes "go list" in a directory containing a go.mod file. -var goListModules = func(dir string) ([]byte, error) { - goTool := findGoTool() - cmd := exec.Command(goTool, "list", "-m", "-json", "all") - cmd.Stderr = os.Stderr - cmd.Dir = dir - return cmd.Output() -} - -// goModDownload invokes "go mod download" in a directory containing a -// go.mod file. -var goModDownload = func(dir string, args []string) ([]byte, error) { - goTool := findGoTool() - cmd := exec.Command(goTool, "mod", "download", "-json") - cmd.Args = append(cmd.Args, args...) - cmd.Stderr = os.Stderr - cmd.Dir = dir - return cmd.Output() -} - -// copyGoModToTemp copies to given go.mod file to a temporary directory. -// go list tends to mutate go.mod files, but gazelle shouldn't do that. -func copyGoModToTemp(filename string) (tempDir string, err error) { - goModOrig, err := os.Open(filename) - if err != nil { - return "", err - } - defer goModOrig.Close() - - tempDir, err = ioutil.TempDir("", "gazelle-temp-gomod") - if err != nil { - return "", err - } - - goModCopy, err := os.Create(filepath.Join(tempDir, "go.mod")) - if err != nil { - os.Remove(tempDir) - return "", err - } - defer func() { - if cerr := goModCopy.Close(); err == nil && cerr != nil { - err = cerr - } - }() - - _, err = io.Copy(goModCopy, goModOrig) - if err != nil { - os.RemoveAll(tempDir) - return "", err - } - return tempDir, err -} - -// findGoTool attempts to locate the go executable. If GOROOT is set, we'll -// prefer the one in there; otherwise, we'll rely on PATH. If the wrapper -// script generated by the gazelle rule is invoked by Bazel, it will set -// GOROOT to the configured SDK. We don't want to rely on the host SDK in -// that situation. -func findGoTool() string { - path := "go" // rely on PATH by default - if goroot, ok := os.LookupEnv("GOROOT"); ok { - path = filepath.Join(goroot, "bin", "go") - } - if runtime.GOOS == "windows" { - path += ".exe" - } - return path -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/package.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/package.go deleted file mode 100644 index 4de0c2fdb6..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/package.go +++ /dev/null @@ -1,507 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package golang - -import ( - "fmt" - "log" - "path" - "regexp" - "sort" - "strings" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/language/proto" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// goPackage contains metadata for a set of .go and .proto files that can be -// used to generate Go rules. -type goPackage struct { - name, dir, rel string - library, binary, test goTarget - proto protoTarget - hasTestdata bool - importPath string -} - -// goTarget contains information used to generate an individual Go rule -// (library, binary, or test). -type goTarget struct { - sources, imports, copts, clinkopts platformStringsBuilder - cgo bool -} - -// protoTarget contains information used to generate a go_proto_library rule. -type protoTarget struct { - name string - sources platformStringsBuilder - imports platformStringsBuilder - hasServices bool -} - -// platformStringsBuilder is used to construct rule.PlatformStrings. Bazel -// has some requirements for deps list (a dependency cannot appear in more -// than one select expression; dependencies cannot be duplicated), so we need -// to build these carefully. -type platformStringsBuilder struct { - strs map[string]platformStringInfo -} - -// platformStringInfo contains information about a single string (source, -// import, or option). -type platformStringInfo struct { - set platformStringSet - oss map[string]bool - archs map[string]bool - platforms map[rule.Platform]bool -} - -type platformStringSet int - -const ( - genericSet platformStringSet = iota - osSet - archSet - platformSet -) - -// addFile adds the file described by "info" to a target in the package "p" if -// the file is buildable. -// -// "cgo" tells whether any ".go" file in the package contains cgo code. This -// affects whether C files are added to targets. -// -// An error is returned if a file is buildable but invalid (for example, a -// test .go file containing cgo code). Files that are not buildable will not -// be added to any target (for example, .txt files). -func (pkg *goPackage) addFile(c *config.Config, info fileInfo, cgo bool) error { - switch { - case info.ext == unknownExt || !cgo && (info.ext == cExt || info.ext == csExt): - return nil - case info.ext == protoExt: - if pcMode := getProtoMode(c); pcMode == proto.LegacyMode { - // Only add files in legacy mode. This is used to generate a filegroup - // that contains all protos. In order modes, we get the .proto files - // from information emitted by the proto language extension. - pkg.proto.addFile(c, info) - } - case info.isTest: - if info.isCgo { - return fmt.Errorf("%s: use of cgo in test not supported", info.path) - } - pkg.test.addFile(c, info) - default: - pkg.library.addFile(c, info) - } - - return nil -} - -// isCommand returns true if the package name is "main". -func (pkg *goPackage) isCommand() bool { - return pkg.name == "main" -} - -// isBuildable returns true if anything in the package is buildable. -// This is true if the package has Go code that satisfies build constraints -// on any platform or has proto files not in legacy mode. -func (pkg *goPackage) isBuildable(c *config.Config) bool { - return pkg.firstGoFile() != "" || !pkg.proto.sources.isEmpty() -} - -// firstGoFile returns the name of a .go file if the package contains at least -// one .go file, or "" otherwise. -func (pkg *goPackage) firstGoFile() string { - goSrcs := []platformStringsBuilder{ - pkg.library.sources, - pkg.binary.sources, - pkg.test.sources, - } - for _, sb := range goSrcs { - if sb.strs != nil { - for s := range sb.strs { - if strings.HasSuffix(s, ".go") { - return s - } - } - } - } - return "" -} - -func (pkg *goPackage) haveCgo() bool { - return pkg.library.cgo || pkg.binary.cgo || pkg.test.cgo -} - -func (pkg *goPackage) inferImportPath(c *config.Config) error { - if pkg.importPath != "" { - log.Panic("importPath already set") - } - gc := getGoConfig(c) - if !gc.prefixSet { - return fmt.Errorf("%s: go prefix is not set, so importpath can't be determined for rules. Set a prefix with a '# gazelle:prefix' comment or with -go_prefix on the command line", pkg.dir) - } - pkg.importPath = inferImportPath(gc, pkg.rel) - - if pkg.rel == gc.prefixRel { - pkg.importPath = gc.prefix - } else { - fromPrefixRel := strings.TrimPrefix(pkg.rel, gc.prefixRel+"/") - pkg.importPath = path.Join(gc.prefix, fromPrefixRel) - } - return nil -} - -func inferImportPath(gc *goConfig, rel string) string { - if rel == gc.prefixRel { - return gc.prefix - } else { - fromPrefixRel := strings.TrimPrefix(rel, gc.prefixRel+"/") - return path.Join(gc.prefix, fromPrefixRel) - } -} - -func goProtoPackageName(pkg proto.Package) string { - if value, ok := pkg.Options["go_package"]; ok { - if strings.LastIndexByte(value, '/') == -1 { - return value - } else { - if i := strings.LastIndexByte(value, ';'); i != -1 { - return value[i+1:] - } else { - return path.Base(value) - } - } - } - return strings.Replace(pkg.Name, ".", "_", -1) -} - -func goProtoImportPath(gc *goConfig, pkg proto.Package, rel string) string { - if value, ok := pkg.Options["go_package"]; ok { - if strings.LastIndexByte(value, '/') == -1 { - return inferImportPath(gc, rel) - } else if i := strings.LastIndexByte(value, ';'); i != -1 { - return value[:i] - } else { - return value - } - } - return inferImportPath(gc, rel) -} - -func (t *goTarget) addFile(c *config.Config, info fileInfo) { - t.cgo = t.cgo || info.isCgo - add := getPlatformStringsAddFunction(c, info, nil) - add(&t.sources, info.name) - add(&t.imports, info.imports...) - for _, copts := range info.copts { - optAdd := add - if len(copts.tags) > 0 { - optAdd = getPlatformStringsAddFunction(c, info, copts.tags) - } - optAdd(&t.copts, copts.opts) - } - for _, clinkopts := range info.clinkopts { - optAdd := add - if len(clinkopts.tags) > 0 { - optAdd = getPlatformStringsAddFunction(c, info, clinkopts.tags) - } - optAdd(&t.clinkopts, clinkopts.opts) - } -} - -func protoTargetFromProtoPackage(name string, pkg proto.Package) protoTarget { - target := protoTarget{name: name} - for f := range pkg.Files { - target.sources.addGenericString(f) - } - for i := range pkg.Imports { - target.imports.addGenericString(i) - } - target.hasServices = pkg.HasServices - return target -} - -func (t *protoTarget) addFile(c *config.Config, info fileInfo) { - t.sources.addGenericString(info.name) - for _, imp := range info.imports { - t.imports.addGenericString(imp) - } - t.hasServices = t.hasServices || info.hasServices -} - -// getPlatformStringsAddFunction returns a function used to add strings to -// a *platformStringsBuilder under the same set of constraints. This is a -// performance optimization to avoid evaluating constraints repeatedly. -func getPlatformStringsAddFunction(c *config.Config, info fileInfo, cgoTags tagLine) func(sb *platformStringsBuilder, ss ...string) { - isOSSpecific, isArchSpecific := isOSArchSpecific(info, cgoTags) - - switch { - case !isOSSpecific && !isArchSpecific: - if checkConstraints(c, "", "", info.goos, info.goarch, info.tags, cgoTags) { - return func(sb *platformStringsBuilder, ss ...string) { - for _, s := range ss { - sb.addGenericString(s) - } - } - } - - case isOSSpecific && !isArchSpecific: - var osMatch []string - for _, os := range rule.KnownOSs { - if checkConstraints(c, os, "", info.goos, info.goarch, info.tags, cgoTags) { - osMatch = append(osMatch, os) - } - } - if len(osMatch) > 0 { - return func(sb *platformStringsBuilder, ss ...string) { - for _, s := range ss { - sb.addOSString(s, osMatch) - } - } - } - - case !isOSSpecific && isArchSpecific: - var archMatch []string - for _, arch := range rule.KnownArchs { - if checkConstraints(c, "", arch, info.goos, info.goarch, info.tags, cgoTags) { - archMatch = append(archMatch, arch) - } - } - if len(archMatch) > 0 { - return func(sb *platformStringsBuilder, ss ...string) { - for _, s := range ss { - sb.addArchString(s, archMatch) - } - } - } - - default: - var platformMatch []rule.Platform - for _, platform := range rule.KnownPlatforms { - if checkConstraints(c, platform.OS, platform.Arch, info.goos, info.goarch, info.tags, cgoTags) { - platformMatch = append(platformMatch, platform) - } - } - if len(platformMatch) > 0 { - return func(sb *platformStringsBuilder, ss ...string) { - for _, s := range ss { - sb.addPlatformString(s, platformMatch) - } - } - } - } - - return func(_ *platformStringsBuilder, _ ...string) {} -} - -func (sb *platformStringsBuilder) isEmpty() bool { - return sb.strs == nil -} - -func (sb *platformStringsBuilder) hasGo() bool { - for s := range sb.strs { - if strings.HasSuffix(s, ".go") { - return true - } - } - return false -} - -func (sb *platformStringsBuilder) addGenericString(s string) { - if sb.strs == nil { - sb.strs = make(map[string]platformStringInfo) - } - sb.strs[s] = platformStringInfo{set: genericSet} -} - -func (sb *platformStringsBuilder) addOSString(s string, oss []string) { - if sb.strs == nil { - sb.strs = make(map[string]platformStringInfo) - } - si, ok := sb.strs[s] - if !ok { - si.set = osSet - si.oss = make(map[string]bool) - } - switch si.set { - case genericSet: - return - case osSet: - for _, os := range oss { - si.oss[os] = true - } - default: - si.convertToPlatforms() - for _, os := range oss { - for _, arch := range rule.KnownOSArchs[os] { - si.platforms[rule.Platform{OS: os, Arch: arch}] = true - } - } - } - sb.strs[s] = si -} - -func (sb *platformStringsBuilder) addArchString(s string, archs []string) { - if sb.strs == nil { - sb.strs = make(map[string]platformStringInfo) - } - si, ok := sb.strs[s] - if !ok { - si.set = archSet - si.archs = make(map[string]bool) - } - switch si.set { - case genericSet: - return - case archSet: - for _, arch := range archs { - si.archs[arch] = true - } - default: - si.convertToPlatforms() - for _, arch := range archs { - for _, os := range rule.KnownArchOSs[arch] { - si.platforms[rule.Platform{OS: os, Arch: arch}] = true - } - } - } - sb.strs[s] = si -} - -func (sb *platformStringsBuilder) addPlatformString(s string, platforms []rule.Platform) { - if sb.strs == nil { - sb.strs = make(map[string]platformStringInfo) - } - si, ok := sb.strs[s] - if !ok { - si.set = platformSet - si.platforms = make(map[rule.Platform]bool) - } - switch si.set { - case genericSet: - return - default: - si.convertToPlatforms() - for _, p := range platforms { - si.platforms[p] = true - } - } - sb.strs[s] = si -} - -func (sb *platformStringsBuilder) build() rule.PlatformStrings { - var ps rule.PlatformStrings - for s, si := range sb.strs { - switch si.set { - case genericSet: - ps.Generic = append(ps.Generic, s) - case osSet: - if ps.OS == nil { - ps.OS = make(map[string][]string) - } - for os := range si.oss { - ps.OS[os] = append(ps.OS[os], s) - } - case archSet: - if ps.Arch == nil { - ps.Arch = make(map[string][]string) - } - for arch := range si.archs { - ps.Arch[arch] = append(ps.Arch[arch], s) - } - case platformSet: - if ps.Platform == nil { - ps.Platform = make(map[rule.Platform][]string) - } - for p := range si.platforms { - ps.Platform[p] = append(ps.Platform[p], s) - } - } - } - sort.Strings(ps.Generic) - if ps.OS != nil { - for _, ss := range ps.OS { - sort.Strings(ss) - } - } - if ps.Arch != nil { - for _, ss := range ps.Arch { - sort.Strings(ss) - } - } - if ps.Platform != nil { - for _, ss := range ps.Platform { - sort.Strings(ss) - } - } - return ps -} - -func (sb *platformStringsBuilder) buildFlat() []string { - strs := make([]string, 0, len(sb.strs)) - for s := range sb.strs { - strs = append(strs, s) - } - sort.Strings(strs) - return strs -} - -func (si *platformStringInfo) convertToPlatforms() { - switch si.set { - case genericSet: - log.Panic("cannot convert generic string to platforms") - case platformSet: - return - case osSet: - si.set = platformSet - si.platforms = make(map[rule.Platform]bool) - for os := range si.oss { - for _, arch := range rule.KnownOSArchs[os] { - si.platforms[rule.Platform{OS: os, Arch: arch}] = true - } - } - si.oss = nil - case archSet: - si.set = platformSet - si.platforms = make(map[rule.Platform]bool) - for arch := range si.archs { - for _, os := range rule.KnownArchOSs[arch] { - si.platforms[rule.Platform{OS: os, Arch: arch}] = true - } - } - si.archs = nil - } -} - -var semverRex = regexp.MustCompile(`^.*?(/v\d+)(?:/.*)?$`) - -// pathWithoutSemver removes a semantic version suffix from path. -// For example, if path is "example.com/foo/v2/bar", pathWithoutSemver -// will return "example.com/foo/bar". If there is no semantic version suffix, -// "" will be returned. -func pathWithoutSemver(path string) string { - m := semverRex.FindStringSubmatchIndex(path) - if m == nil { - return "" - } - v := path[m[2]+2 : m[3]] - if v[0] == '0' || v == "1" { - return "" - } - return path[:m[2]] + path[m[3]:] -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/resolve.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/resolve.go deleted file mode 100644 index e4e5f486c0..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/resolve.go +++ /dev/null @@ -1,373 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package golang - -import ( - "errors" - "fmt" - "go/build" - "log" - "path" - "regexp" - "strings" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/label" - "github.com/bazelbuild/bazel-gazelle/pathtools" - "github.com/bazelbuild/bazel-gazelle/repo" - "github.com/bazelbuild/bazel-gazelle/resolve" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -func (_ *goLang) Imports(_ *config.Config, r *rule.Rule, f *rule.File) []resolve.ImportSpec { - if !isGoLibrary(r.Kind()) { - return nil - } - if importPath := r.AttrString("importpath"); importPath == "" { - return []resolve.ImportSpec{} - } else { - return []resolve.ImportSpec{{goName, importPath}} - } -} - -func (_ *goLang) Embeds(r *rule.Rule, from label.Label) []label.Label { - embedStrings := r.AttrStrings("embed") - if isGoProtoLibrary(r.Kind()) { - embedStrings = append(embedStrings, r.AttrString("proto")) - } - embedLabels := make([]label.Label, 0, len(embedStrings)) - for _, s := range embedStrings { - l, err := label.Parse(s) - if err != nil { - continue - } - l = l.Abs(from.Repo, from.Pkg) - embedLabels = append(embedLabels, l) - } - return embedLabels -} - -func (gl *goLang) Resolve(c *config.Config, ix *resolve.RuleIndex, rc *repo.RemoteCache, r *rule.Rule, importsRaw interface{}, from label.Label) { - if importsRaw == nil { - // may not be set in tests. - return - } - imports := importsRaw.(rule.PlatformStrings) - r.DelAttr("deps") - resolve := ResolveGo - if r.Kind() == "go_proto_library" { - resolve = resolveProto - } - deps, errs := imports.Map(func(imp string) (string, error) { - l, err := resolve(c, ix, rc, imp, from) - if err == skipImportError { - return "", nil - } else if err != nil { - return "", err - } - for _, embed := range gl.Embeds(r, from) { - if embed.Equal(l) { - return "", nil - } - } - l = l.Rel(from.Repo, from.Pkg) - return l.String(), nil - }) - for _, err := range errs { - log.Print(err) - } - if !deps.IsEmpty() { - if r.Kind() == "go_proto_library" { - // protos may import the same library multiple times by different names, - // so we need to de-duplicate them. Protos are not platform-specific, - // so it's safe to just flatten them. - r.SetAttr("deps", deps.Flat()) - } else { - r.SetAttr("deps", deps) - } - } -} - -var ( - skipImportError = errors.New("std or self import") - notFoundError = errors.New("rule not found") -) - -// ResolveGo resolves a Go import path to a Bazel label, possibly using the -// given rule index and remote cache. Some special cases may be applied to -// known proto import paths, depending on the current proto mode. -// -// This may be used directly by other language extensions related to Go -// (gomock). Gazelle calls Language.Resolve instead. -func ResolveGo(c *config.Config, ix *resolve.RuleIndex, rc *repo.RemoteCache, imp string, from label.Label) (label.Label, error) { - gc := getGoConfig(c) - pcMode := getProtoMode(c) - if build.IsLocalImport(imp) { - cleanRel := path.Clean(path.Join(from.Pkg, imp)) - if build.IsLocalImport(cleanRel) { - return label.NoLabel, fmt.Errorf("relative import path %q from %q points outside of repository", imp, from.Pkg) - } - imp = path.Join(gc.prefix, cleanRel) - } - - if IsStandard(imp) { - return label.NoLabel, skipImportError - } - - if l, ok := resolve.FindRuleWithOverride(c, resolve.ImportSpec{Lang: "go", Imp: imp}, "go"); ok { - return l, nil - } - - if pcMode.ShouldUseKnownImports() { - // These are commonly used libraries that depend on Well Known Types. - // They depend on the generated versions of these protos to avoid conflicts. - // However, since protoc-gen-go depends on these libraries, we generate - // its rules in disable_global mode (to avoid cyclic dependency), so the - // "go_default_library" versions of these libraries depend on the - // pre-generated versions of the proto libraries. - switch imp { - case "github.com/golang/protobuf/proto": - return label.New("com_github_golang_protobuf", "proto", "go_default_library"), nil - case "github.com/golang/protobuf/jsonpb": - return label.New("com_github_golang_protobuf", "jsonpb", "go_default_library_gen"), nil - case "github.com/golang/protobuf/descriptor": - return label.New("com_github_golang_protobuf", "descriptor", "go_default_library_gen"), nil - case "github.com/golang/protobuf/ptypes": - return label.New("com_github_golang_protobuf", "ptypes", "go_default_library_gen"), nil - case "github.com/golang/protobuf/protoc-gen-go/generator": - return label.New("com_github_golang_protobuf", "protoc-gen-go/generator", "go_default_library_gen"), nil - case "google.golang.org/grpc": - return label.New("org_golang_google_grpc", "", "go_default_library"), nil - } - if l, ok := knownGoProtoImports[imp]; ok { - return l, nil - } - } - - if l, err := resolveWithIndexGo(ix, imp, from); err == nil || err == skipImportError { - return l, err - } else if err != notFoundError { - return label.NoLabel, err - } - - // Special cases for rules_go and bazel_gazelle. - // These have names that don't following conventions and they're - // typeically declared with http_archive, not go_repository, so Gazelle - // won't recognize them. - if pathtools.HasPrefix(imp, "github.com/bazelbuild/rules_go") { - pkg := pathtools.TrimPrefix(imp, "github.com/bazelbuild/rules_go") - return label.New("io_bazel_rules_go", pkg, "go_default_library"), nil - } else if pathtools.HasPrefix(imp, "github.com/bazelbuild/bazel-gazelle") { - pkg := pathtools.TrimPrefix(imp, "github.com/bazelbuild/bazel-gazelle") - return label.New("bazel_gazelle", pkg, "go_default_library"), nil - } - - if !c.IndexLibraries { - // packages in current repo were not indexed, relying on prefix to decide what may have been in - // current repo - if pathtools.HasPrefix(imp, gc.prefix) { - pkg := path.Join(gc.prefixRel, pathtools.TrimPrefix(imp, gc.prefix)) - return label.New("", pkg, defaultLibName), nil - } - } - - if gc.depMode == externalMode { - return resolveExternal(gc.moduleMode, rc, imp) - } else { - return resolveVendored(rc, imp) - } -} - -// IsStandard returns whether a package is in the standard library. -func IsStandard(imp string) bool { - return stdPackages[imp] -} - -func resolveWithIndexGo(ix *resolve.RuleIndex, imp string, from label.Label) (label.Label, error) { - matches := ix.FindRulesByImport(resolve.ImportSpec{Lang: "go", Imp: imp}, "go") - var bestMatch resolve.FindResult - var bestMatchIsVendored bool - var bestMatchVendorRoot string - var matchError error - - for _, m := range matches { - // Apply vendoring logic for Go libraries. A library in a vendor directory - // is only visible in the parent tree. Vendored libraries supercede - // non-vendored libraries, and libraries closer to from.Pkg supercede - // those further up the tree. - isVendored := false - vendorRoot := "" - parts := strings.Split(m.Label.Pkg, "/") - for i := len(parts) - 1; i >= 0; i-- { - if parts[i] == "vendor" { - isVendored = true - vendorRoot = strings.Join(parts[:i], "/") - break - } - } - if isVendored { - } - if isVendored && !label.New(m.Label.Repo, vendorRoot, "").Contains(from) { - // vendor directory not visible - continue - } - if bestMatch.Label.Equal(label.NoLabel) || isVendored && (!bestMatchIsVendored || len(vendorRoot) > len(bestMatchVendorRoot)) { - // Current match is better - bestMatch = m - bestMatchIsVendored = isVendored - bestMatchVendorRoot = vendorRoot - matchError = nil - } else if (!isVendored && bestMatchIsVendored) || (isVendored && len(vendorRoot) < len(bestMatchVendorRoot)) { - // Current match is worse - } else { - // Match is ambiguous - // TODO: consider listing all the ambiguous rules here. - matchError = fmt.Errorf("rule %s imports %q which matches multiple rules: %s and %s. # gazelle:resolve may be used to disambiguate", from, imp, bestMatch.Label, m.Label) - } - } - if matchError != nil { - return label.NoLabel, matchError - } - if bestMatch.Label.Equal(label.NoLabel) { - return label.NoLabel, notFoundError - } - if bestMatch.IsSelfImport(from) { - return label.NoLabel, skipImportError - } - return bestMatch.Label, nil -} - -var modMajorRex = regexp.MustCompile(`/v\d+(?:/|$)`) - -func resolveExternal(moduleMode bool, rc *repo.RemoteCache, imp string) (label.Label, error) { - // If we're in module mode, use "go list" to find the module path and - // repository name. Otherwise, use special cases (for github.com, golang.org) - // or send a GET with ?go-get=1 to find the root. If the path contains - // a major version suffix (e.g., /v2), treat it as a module anyway though. - // - // Eventually module mode will be the only mode. But for now, it's expensive - // and not the common case, especially when known repositories aren't - // listed in WORKSPACE (which is currently the case within go_repository). - if !moduleMode { - moduleMode = pathWithoutSemver(imp) != "" - } - - var prefix, repo string - var err error - if moduleMode { - prefix, repo, err = rc.Mod(imp) - } else { - prefix, repo, err = rc.Root(imp) - } - if err != nil { - return label.NoLabel, err - } - - var pkg string - if pathtools.HasPrefix(imp, prefix) { - pkg = pathtools.TrimPrefix(imp, prefix) - } else if impWithoutSemver := pathWithoutSemver(imp); pathtools.HasPrefix(impWithoutSemver, prefix) { - // We may have used minimal module compatibility to resolve a path - // without a semantic import version suffix to a repository that has one. - pkg = pathtools.TrimPrefix(impWithoutSemver, prefix) - } - - return label.New(repo, pkg, defaultLibName), nil -} - -func resolveVendored(rc *repo.RemoteCache, imp string) (label.Label, error) { - return label.New("", path.Join("vendor", imp), defaultLibName), nil -} - -func resolveProto(c *config.Config, ix *resolve.RuleIndex, rc *repo.RemoteCache, imp string, from label.Label) (label.Label, error) { - pcMode := getProtoMode(c) - - if wellKnownProtos[imp] { - return label.NoLabel, skipImportError - } - - if l, ok := resolve.FindRuleWithOverride(c, resolve.ImportSpec{Lang: "proto", Imp: imp}, "go"); ok { - return l, nil - } - - if l, ok := knownProtoImports[imp]; ok && pcMode.ShouldUseKnownImports() { - if l.Equal(from) { - return label.NoLabel, skipImportError - } else { - return l, nil - } - } - - if l, err := resolveWithIndexProto(ix, imp, from); err == nil || err == skipImportError { - return l, err - } else if err != notFoundError { - return label.NoLabel, err - } - - // As a fallback, guess the label based on the proto file name. We assume - // all proto files in a directory belong to the same package, and the - // package name matches the directory base name. We also assume that protos - // in the vendor directory must refer to something else in vendor. - rel := path.Dir(imp) - if rel == "." { - rel = "" - } - if from.Pkg == "vendor" || strings.HasPrefix(from.Pkg, "vendor/") { - rel = path.Join("vendor", rel) - } - return label.New("", rel, defaultLibName), nil -} - -// wellKnownProtos is the set of proto sets for which we don't need to add -// an explicit dependency in go_proto_library. -// TODO(jayconrod): generate from -// @io_bazel_rules_go//proto/wkt:WELL_KNOWN_TYPE_PACKAGES -var wellKnownProtos = map[string]bool{ - "google/protobuf/any.proto": true, - "google/protobuf/api.proto": true, - "google/protobuf/compiler/plugin.proto": true, - "google/protobuf/descriptor.proto": true, - "google/protobuf/duration.proto": true, - "google/protobuf/empty.proto": true, - "google/protobuf/field_mask.proto": true, - "google/protobuf/source_context.proto": true, - "google/protobuf/struct.proto": true, - "google/protobuf/timestamp.proto": true, - "google/protobuf/type.proto": true, - "google/protobuf/wrappers.proto": true, -} - -func resolveWithIndexProto(ix *resolve.RuleIndex, imp string, from label.Label) (label.Label, error) { - matches := ix.FindRulesByImport(resolve.ImportSpec{Lang: "proto", Imp: imp}, "go") - if len(matches) == 0 { - return label.NoLabel, notFoundError - } - if len(matches) > 1 { - return label.NoLabel, fmt.Errorf("multiple rules (%s and %s) may be imported with %q from %s", matches[0].Label, matches[1].Label, imp, from) - } - if matches[0].IsSelfImport(from) { - return label.NoLabel, skipImportError - } - return matches[0].Label, nil -} - -func isGoLibrary(kind string) bool { - return kind == "go_library" || isGoProtoLibrary(kind) -} - -func isGoProtoLibrary(kind string) bool { - return kind == "go_proto_library" || kind == "go_grpc_library" -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/std_package_list.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/std_package_list.go deleted file mode 100644 index cf90887248..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/std_package_list.go +++ /dev/null @@ -1,678 +0,0 @@ - -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Generated by gen_std_package_list.go -// DO NOT EDIT - -package golang - -var stdPackages = map[string]bool{ - "archive/tar": true, - "archive/tar/testdata": true, - "archive/zip": true, - "archive/zip/testdata": true, - "bufio": true, - "builtin": true, - "bytes": true, - "cmd": true, - "cmd/addr2line": true, - "cmd/api": true, - "cmd/api/testdata/src/issue21181/dep": true, - "cmd/api/testdata/src/issue21181/indirect": true, - "cmd/api/testdata/src/issue21181/p": true, - "cmd/api/testdata/src/issue29837/p": true, - "cmd/api/testdata/src/pkg/p1": true, - "cmd/api/testdata/src/pkg/p2": true, - "cmd/api/testdata/src/pkg/p3": true, - "cmd/asm": true, - "cmd/asm/internal/arch": true, - "cmd/asm/internal/asm": true, - "cmd/asm/internal/asm/testdata": true, - "cmd/asm/internal/asm/testdata/avx512enc": true, - "cmd/asm/internal/flags": true, - "cmd/asm/internal/lex": true, - "cmd/buildid": true, - "cmd/cgo": true, - "cmd/compile": true, - "cmd/compile/internal/amd64": true, - "cmd/compile/internal/arm": true, - "cmd/compile/internal/arm64": true, - "cmd/compile/internal/gc": true, - "cmd/compile/internal/gc/builtin": true, - "cmd/compile/internal/gc/testdata": true, - "cmd/compile/internal/gc/testdata/gen": true, - "cmd/compile/internal/gc/testdata/reproducible": true, - "cmd/compile/internal/mips": true, - "cmd/compile/internal/mips64": true, - "cmd/compile/internal/ppc64": true, - "cmd/compile/internal/s390x": true, - "cmd/compile/internal/ssa": true, - "cmd/compile/internal/ssa/gen": true, - "cmd/compile/internal/ssa/testdata": true, - "cmd/compile/internal/syntax": true, - "cmd/compile/internal/syntax/testdata": true, - "cmd/compile/internal/test": true, - "cmd/compile/internal/types": true, - "cmd/compile/internal/wasm": true, - "cmd/compile/internal/x86": true, - "cmd/cover": true, - "cmd/cover/testdata": true, - "cmd/cover/testdata/html": true, - "cmd/dist": true, - "cmd/doc": true, - "cmd/doc/testdata": true, - "cmd/doc/testdata/nested": true, - "cmd/doc/testdata/nested/nested": true, - "cmd/fix": true, - "cmd/go": true, - "cmd/go/internal/auth": true, - "cmd/go/internal/base": true, - "cmd/go/internal/bug": true, - "cmd/go/internal/cache": true, - "cmd/go/internal/cfg": true, - "cmd/go/internal/clean": true, - "cmd/go/internal/cmdflag": true, - "cmd/go/internal/dirhash": true, - "cmd/go/internal/doc": true, - "cmd/go/internal/envcmd": true, - "cmd/go/internal/fix": true, - "cmd/go/internal/fmtcmd": true, - "cmd/go/internal/generate": true, - "cmd/go/internal/get": true, - "cmd/go/internal/help": true, - "cmd/go/internal/imports": true, - "cmd/go/internal/imports/testdata/android": true, - "cmd/go/internal/imports/testdata/illumos": true, - "cmd/go/internal/imports/testdata/star": true, - "cmd/go/internal/list": true, - "cmd/go/internal/load": true, - "cmd/go/internal/lockedfile": true, - "cmd/go/internal/lockedfile/internal/filelock": true, - "cmd/go/internal/modcmd": true, - "cmd/go/internal/modconv": true, - "cmd/go/internal/modconv/testdata": true, - "cmd/go/internal/modfetch": true, - "cmd/go/internal/modfetch/codehost": true, - "cmd/go/internal/modfile": true, - "cmd/go/internal/modfile/testdata": true, - "cmd/go/internal/modget": true, - "cmd/go/internal/modinfo": true, - "cmd/go/internal/modload": true, - "cmd/go/internal/module": true, - "cmd/go/internal/mvs": true, - "cmd/go/internal/note": true, - "cmd/go/internal/par": true, - "cmd/go/internal/renameio": true, - "cmd/go/internal/robustio": true, - "cmd/go/internal/run": true, - "cmd/go/internal/search": true, - "cmd/go/internal/semver": true, - "cmd/go/internal/str": true, - "cmd/go/internal/sumweb": true, - "cmd/go/internal/test": true, - "cmd/go/internal/tlog": true, - "cmd/go/internal/tool": true, - "cmd/go/internal/txtar": true, - "cmd/go/internal/version": true, - "cmd/go/internal/vet": true, - "cmd/go/internal/web": true, - "cmd/go/internal/work": true, - "cmd/go/testdata": true, - "cmd/go/testdata/badmod": true, - "cmd/go/testdata/failssh": true, - "cmd/go/testdata/generate": true, - "cmd/go/testdata/importcom": true, - "cmd/go/testdata/importcom/src/bad": true, - "cmd/go/testdata/importcom/src/conflict": true, - "cmd/go/testdata/importcom/src/works/x": true, - "cmd/go/testdata/importcom/src/wrongplace": true, - "cmd/go/testdata/importcycle/src/selfimport": true, - "cmd/go/testdata/local": true, - "cmd/go/testdata/local/easysub": true, - "cmd/go/testdata/local/sub": true, - "cmd/go/testdata/local/sub/sub": true, - "cmd/go/testdata/mod": true, - "cmd/go/testdata/modlegacy/src/new": true, - "cmd/go/testdata/modlegacy/src/new/p1": true, - "cmd/go/testdata/modlegacy/src/new/p2": true, - "cmd/go/testdata/modlegacy/src/new/sub": true, - "cmd/go/testdata/modlegacy/src/new/sub/inner": true, - "cmd/go/testdata/modlegacy/src/new/sub/inner/x": true, - "cmd/go/testdata/modlegacy/src/new/sub/x/v1/y": true, - "cmd/go/testdata/modlegacy/src/old/p1": true, - "cmd/go/testdata/modlegacy/src/old/p2": true, - "cmd/go/testdata/norunexample": true, - "cmd/go/testdata/rundir": true, - "cmd/go/testdata/rundir/sub": true, - "cmd/go/testdata/script": true, - "cmd/go/testdata/shadow/root1/src/foo": true, - "cmd/go/testdata/shadow/root1/src/math": true, - "cmd/go/testdata/shadow/root2/src/foo": true, - "cmd/go/testdata/src": true, - "cmd/go/testdata/src/badc": true, - "cmd/go/testdata/src/badpkg": true, - "cmd/go/testdata/src/bench": true, - "cmd/go/testdata/src/benchfatal": true, - "cmd/go/testdata/src/canonical/a": true, - "cmd/go/testdata/src/canonical/a/vendor/c": true, - "cmd/go/testdata/src/canonical/b": true, - "cmd/go/testdata/src/canonical/d": true, - "cmd/go/testdata/src/cgoasm": true, - "cmd/go/testdata/src/cgocover": true, - "cmd/go/testdata/src/cgocover2": true, - "cmd/go/testdata/src/cgocover3": true, - "cmd/go/testdata/src/cgocover4": true, - "cmd/go/testdata/src/cgotest": true, - "cmd/go/testdata/src/coverasm": true, - "cmd/go/testdata/src/coverbad": true, - "cmd/go/testdata/src/coverdep": true, - "cmd/go/testdata/src/coverdep/p1": true, - "cmd/go/testdata/src/coverdep2/p1": true, - "cmd/go/testdata/src/coverdep2/p2": true, - "cmd/go/testdata/src/coverdot1": true, - "cmd/go/testdata/src/coverdot2": true, - "cmd/go/testdata/src/dupload": true, - "cmd/go/testdata/src/dupload/p": true, - "cmd/go/testdata/src/dupload/p2": true, - "cmd/go/testdata/src/dupload/vendor/p": true, - "cmd/go/testdata/src/empty/pkg": true, - "cmd/go/testdata/src/empty/pkgtest": true, - "cmd/go/testdata/src/empty/pkgtestxtest": true, - "cmd/go/testdata/src/empty/pkgxtest": true, - "cmd/go/testdata/src/empty/test": true, - "cmd/go/testdata/src/empty/testxtest": true, - "cmd/go/testdata/src/empty/xtest": true, - "cmd/go/testdata/src/exclude": true, - "cmd/go/testdata/src/exclude/empty": true, - "cmd/go/testdata/src/exclude/ignore": true, - "cmd/go/testdata/src/gencycle": true, - "cmd/go/testdata/src/go-cmd-test": true, - "cmd/go/testdata/src/hello": true, - "cmd/go/testdata/src/importmain/ismain": true, - "cmd/go/testdata/src/importmain/test": true, - "cmd/go/testdata/src/main_test": true, - "cmd/go/testdata/src/multimain": true, - "cmd/go/testdata/src/my.pkg": true, - "cmd/go/testdata/src/my.pkg/main": true, - "cmd/go/testdata/src/not_main": true, - "cmd/go/testdata/src/notest": true, - "cmd/go/testdata/src/run": true, - "cmd/go/testdata/src/run/internal": true, - "cmd/go/testdata/src/run/subdir/internal/private": true, - "cmd/go/testdata/src/skipper": true, - "cmd/go/testdata/src/sleepy1": true, - "cmd/go/testdata/src/sleepy2": true, - "cmd/go/testdata/src/sleepybad": true, - "cmd/go/testdata/src/syntaxerror": true, - "cmd/go/testdata/src/testcache": true, - "cmd/go/testdata/src/testcycle/p1": true, - "cmd/go/testdata/src/testcycle/p2": true, - "cmd/go/testdata/src/testcycle/p3": true, - "cmd/go/testdata/src/testcycle/q1": true, - "cmd/go/testdata/src/testdep/p1": true, - "cmd/go/testdata/src/testdep/p2": true, - "cmd/go/testdata/src/testdep/p3": true, - "cmd/go/testdata/src/testlist": true, - "cmd/go/testdata/src/testnorun": true, - "cmd/go/testdata/src/testrace": true, - "cmd/go/testdata/src/testregexp": true, - "cmd/go/testdata/src/vend": true, - "cmd/go/testdata/src/vend/dir1": true, - "cmd/go/testdata/src/vend/hello": true, - "cmd/go/testdata/src/vend/subdir": true, - "cmd/go/testdata/src/vend/vendor/p": true, - "cmd/go/testdata/src/vend/vendor/q": true, - "cmd/go/testdata/src/vend/vendor/strings": true, - "cmd/go/testdata/src/vend/vendor/vend/dir1/dir2": true, - "cmd/go/testdata/src/vend/x": true, - "cmd/go/testdata/src/vend/x/invalid": true, - "cmd/go/testdata/src/vend/x/vendor/p": true, - "cmd/go/testdata/src/vend/x/vendor/p/p": true, - "cmd/go/testdata/src/vend/x/vendor/r": true, - "cmd/go/testdata/src/vetcycle": true, - "cmd/go/testdata/src/vetfail/p1": true, - "cmd/go/testdata/src/vetfail/p2": true, - "cmd/go/testdata/src/vetpkg": true, - "cmd/go/testdata/src/xtestonly": true, - "cmd/go/testdata/testcover/pkg1": true, - "cmd/go/testdata/testcover/pkg2": true, - "cmd/go/testdata/testcover/pkg3": true, - "cmd/go/testdata/testcover/pkg4": true, - "cmd/go/testdata/testimport": true, - "cmd/go/testdata/testimport/p1": true, - "cmd/go/testdata/testimport/p2": true, - "cmd/go/testdata/testinternal": true, - "cmd/go/testdata/testinternal2": true, - "cmd/go/testdata/testinternal2/x/y/z/internal/w": true, - "cmd/go/testdata/testinternal3": true, - "cmd/go/testdata/testinternal4/src/p": true, - "cmd/go/testdata/testinternal4/src/q/internal/x": true, - "cmd/go/testdata/testinternal4/src/q/j": true, - "cmd/go/testdata/testonly": true, - "cmd/go/testdata/testonly2": true, - "cmd/go/testdata/testterminal18153": true, - "cmd/go/testdata/testvendor/src/p": true, - "cmd/go/testdata/testvendor/src/q/vendor/x": true, - "cmd/go/testdata/testvendor/src/q/y": true, - "cmd/go/testdata/testvendor/src/q/z": true, - "cmd/go/testdata/testvendor2/src/p": true, - "cmd/go/testdata/testvendor2/vendor/x": true, - "cmd/gofmt": true, - "cmd/gofmt/testdata": true, - "cmd/internal/bio": true, - "cmd/internal/browser": true, - "cmd/internal/buildid": true, - "cmd/internal/buildid/testdata": true, - "cmd/internal/dwarf": true, - "cmd/internal/edit": true, - "cmd/internal/gcprog": true, - "cmd/internal/goobj": true, - "cmd/internal/goobj/testdata": true, - "cmd/internal/goobj/testdata/mycgo": true, - "cmd/internal/obj": true, - "cmd/internal/obj/arm": true, - "cmd/internal/obj/arm64": true, - "cmd/internal/obj/mips": true, - "cmd/internal/obj/ppc64": true, - "cmd/internal/obj/s390x": true, - "cmd/internal/obj/wasm": true, - "cmd/internal/obj/x86": true, - "cmd/internal/objabi": true, - "cmd/internal/objfile": true, - "cmd/internal/src": true, - "cmd/internal/sys": true, - "cmd/internal/test2json": true, - "cmd/internal/test2json/testdata": true, - "cmd/link": true, - "cmd/link/internal/amd64": true, - "cmd/link/internal/arm": true, - "cmd/link/internal/arm64": true, - "cmd/link/internal/ld": true, - "cmd/link/internal/ld/testdata/httptest/main": true, - "cmd/link/internal/ld/testdata/issue10978": true, - "cmd/link/internal/ld/testdata/issue25459/a": true, - "cmd/link/internal/ld/testdata/issue25459/main": true, - "cmd/link/internal/ld/testdata/issue26237/b.dir": true, - "cmd/link/internal/ld/testdata/issue26237/main": true, - "cmd/link/internal/ld/testdata/issue32233/lib": true, - "cmd/link/internal/ld/testdata/issue32233/main": true, - "cmd/link/internal/loadelf": true, - "cmd/link/internal/loadmacho": true, - "cmd/link/internal/loadpe": true, - "cmd/link/internal/loadxcoff": true, - "cmd/link/internal/mips": true, - "cmd/link/internal/mips64": true, - "cmd/link/internal/objfile": true, - "cmd/link/internal/ppc64": true, - "cmd/link/internal/s390x": true, - "cmd/link/internal/sym": true, - "cmd/link/internal/wasm": true, - "cmd/link/internal/x86": true, - "cmd/link/testdata": true, - "cmd/nm": true, - "cmd/objdump": true, - "cmd/objdump/testdata": true, - "cmd/pack": true, - "cmd/pprof": true, - "cmd/test2json": true, - "cmd/trace": true, - "cmd/vendor": true, - "cmd/vendor/github.com/google/pprof": true, - "cmd/vendor/github.com/google/pprof/driver": true, - "cmd/vendor/github.com/google/pprof/internal/binutils": true, - "cmd/vendor/github.com/google/pprof/internal/driver": true, - "cmd/vendor/github.com/google/pprof/internal/elfexec": true, - "cmd/vendor/github.com/google/pprof/internal/graph": true, - "cmd/vendor/github.com/google/pprof/internal/measurement": true, - "cmd/vendor/github.com/google/pprof/internal/plugin": true, - "cmd/vendor/github.com/google/pprof/internal/report": true, - "cmd/vendor/github.com/google/pprof/internal/symbolizer": true, - "cmd/vendor/github.com/google/pprof/internal/symbolz": true, - "cmd/vendor/github.com/google/pprof/internal/transport": true, - "cmd/vendor/github.com/google/pprof/profile": true, - "cmd/vendor/github.com/google/pprof/third_party/d3": true, - "cmd/vendor/github.com/google/pprof/third_party/d3flamegraph": true, - "cmd/vendor/github.com/google/pprof/third_party/svgpan": true, - "cmd/vendor/github.com/ianlancetaylor/demangle": true, - "cmd/vendor/golang.org/x/arch": true, - "cmd/vendor/golang.org/x/arch/arm/armasm": true, - "cmd/vendor/golang.org/x/arch/arm64/arm64asm": true, - "cmd/vendor/golang.org/x/arch/ppc64/ppc64asm": true, - "cmd/vendor/golang.org/x/arch/x86/x86asm": true, - "cmd/vendor/golang.org/x/crypto": true, - "cmd/vendor/golang.org/x/crypto/ssh/terminal": true, - "cmd/vendor/golang.org/x/sys": true, - "cmd/vendor/golang.org/x/sys/unix": true, - "cmd/vendor/golang.org/x/sys/windows": true, - "cmd/vendor/golang.org/x/tools": true, - "cmd/vendor/golang.org/x/tools/go/analysis": true, - "cmd/vendor/golang.org/x/tools/go/analysis/internal/analysisflags": true, - "cmd/vendor/golang.org/x/tools/go/analysis/internal/facts": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/assign": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/atomic": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/bools": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/buildtag": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/cgocall": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/composite": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/copylock": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/ctrlflow": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/errorsas": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/httpresponse": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/inspect": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/internal/analysisutil": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/loopclosure": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/lostcancel": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/nilfunc": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/printf": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/shift": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/stdmethods": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/structtag": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/tests": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/unmarshal": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/unreachable": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/unsafeptr": true, - "cmd/vendor/golang.org/x/tools/go/analysis/passes/unusedresult": true, - "cmd/vendor/golang.org/x/tools/go/analysis/unitchecker": true, - "cmd/vendor/golang.org/x/tools/go/ast/astutil": true, - "cmd/vendor/golang.org/x/tools/go/ast/inspector": true, - "cmd/vendor/golang.org/x/tools/go/cfg": true, - "cmd/vendor/golang.org/x/tools/go/types/objectpath": true, - "cmd/vendor/golang.org/x/tools/go/types/typeutil": true, - "cmd/vet": true, - "cmd/vet/testdata/asm": true, - "cmd/vet/testdata/assign": true, - "cmd/vet/testdata/atomic": true, - "cmd/vet/testdata/bool": true, - "cmd/vet/testdata/buildtag": true, - "cmd/vet/testdata/cgo": true, - "cmd/vet/testdata/composite": true, - "cmd/vet/testdata/copylock": true, - "cmd/vet/testdata/deadcode": true, - "cmd/vet/testdata/httpresponse": true, - "cmd/vet/testdata/lostcancel": true, - "cmd/vet/testdata/method": true, - "cmd/vet/testdata/nilfunc": true, - "cmd/vet/testdata/print": true, - "cmd/vet/testdata/rangeloop": true, - "cmd/vet/testdata/shift": true, - "cmd/vet/testdata/structtag": true, - "cmd/vet/testdata/tagtest": true, - "cmd/vet/testdata/testingpkg": true, - "cmd/vet/testdata/unmarshal": true, - "cmd/vet/testdata/unsafeptr": true, - "cmd/vet/testdata/unused": true, - "compress/bzip2": true, - "compress/bzip2/testdata": true, - "compress/flate": true, - "compress/flate/testdata": true, - "compress/gzip": true, - "compress/gzip/testdata": true, - "compress/lzw": true, - "compress/testdata": true, - "compress/zlib": true, - "container/heap": true, - "container/list": true, - "container/ring": true, - "context": true, - "crypto": true, - "crypto/aes": true, - "crypto/cipher": true, - "crypto/des": true, - "crypto/dsa": true, - "crypto/ecdsa": true, - "crypto/ecdsa/testdata": true, - "crypto/ed25519": true, - "crypto/ed25519/internal/edwards25519": true, - "crypto/ed25519/testdata": true, - "crypto/elliptic": true, - "crypto/hmac": true, - "crypto/internal/randutil": true, - "crypto/internal/subtle": true, - "crypto/md5": true, - "crypto/rand": true, - "crypto/rc4": true, - "crypto/rsa": true, - "crypto/rsa/testdata": true, - "crypto/sha1": true, - "crypto/sha256": true, - "crypto/sha512": true, - "crypto/subtle": true, - "crypto/tls": true, - "crypto/tls/testdata": true, - "crypto/x509": true, - "crypto/x509/pkix": true, - "crypto/x509/testdata": true, - "database/sql": true, - "database/sql/driver": true, - "debug/dwarf": true, - "debug/dwarf/testdata": true, - "debug/elf": true, - "debug/elf/testdata": true, - "debug/gosym": true, - "debug/gosym/testdata": true, - "debug/macho": true, - "debug/macho/testdata": true, - "debug/pe": true, - "debug/pe/testdata": true, - "debug/plan9obj": true, - "debug/plan9obj/testdata": true, - "encoding": true, - "encoding/ascii85": true, - "encoding/asn1": true, - "encoding/base32": true, - "encoding/base64": true, - "encoding/binary": true, - "encoding/csv": true, - "encoding/gob": true, - "encoding/hex": true, - "encoding/json": true, - "encoding/json/testdata": true, - "encoding/pem": true, - "encoding/xml": true, - "errors": true, - "expvar": true, - "flag": true, - "fmt": true, - "go/ast": true, - "go/build": true, - "go/build/testdata/doc": true, - "go/build/testdata/empty": true, - "go/build/testdata/multi": true, - "go/build/testdata/other": true, - "go/build/testdata/other/file": true, - "go/build/testdata/withvendor/src/a/b": true, - "go/build/testdata/withvendor/src/a/vendor/c/d": true, - "go/constant": true, - "go/doc": true, - "go/doc/testdata": true, - "go/format": true, - "go/importer": true, - "go/internal/gccgoimporter": true, - "go/internal/gccgoimporter/testdata": true, - "go/internal/gcimporter": true, - "go/internal/gcimporter/testdata": true, - "go/internal/gcimporter/testdata/versions": true, - "go/internal/srcimporter": true, - "go/internal/srcimporter/testdata/issue20855": true, - "go/internal/srcimporter/testdata/issue23092": true, - "go/internal/srcimporter/testdata/issue24392": true, - "go/parser": true, - "go/parser/testdata": true, - "go/printer": true, - "go/printer/testdata": true, - "go/scanner": true, - "go/token": true, - "go/types": true, - "go/types/testdata": true, - "hash": true, - "hash/adler32": true, - "hash/crc32": true, - "hash/crc64": true, - "hash/fnv": true, - "html": true, - "html/template": true, - "image": true, - "image/color": true, - "image/color/palette": true, - "image/draw": true, - "image/gif": true, - "image/internal/imageutil": true, - "image/jpeg": true, - "image/png": true, - "image/png/testdata": true, - "image/png/testdata/pngsuite": true, - "image/testdata": true, - "index/suffixarray": true, - "internal/bytealg": true, - "internal/cfg": true, - "internal/cpu": true, - "internal/fmtsort": true, - "internal/goroot": true, - "internal/goversion": true, - "internal/lazyregexp": true, - "internal/lazytemplate": true, - "internal/nettrace": true, - "internal/oserror": true, - "internal/poll": true, - "internal/race": true, - "internal/reflectlite": true, - "internal/singleflight": true, - "internal/syscall/unix": true, - "internal/syscall/windows": true, - "internal/syscall/windows/registry": true, - "internal/syscall/windows/sysdll": true, - "internal/testenv": true, - "internal/testlog": true, - "internal/trace": true, - "internal/trace/testdata": true, - "internal/xcoff": true, - "internal/xcoff/testdata": true, - "io": true, - "io/ioutil": true, - "io/ioutil/testdata": true, - "log": true, - "log/syslog": true, - "math": true, - "math/big": true, - "math/bits": true, - "math/cmplx": true, - "math/rand": true, - "mime": true, - "mime/multipart": true, - "mime/multipart/testdata": true, - "mime/quotedprintable": true, - "mime/testdata": true, - "net": true, - "net/http": true, - "net/http/cgi": true, - "net/http/cgi/testdata": true, - "net/http/cookiejar": true, - "net/http/fcgi": true, - "net/http/httptest": true, - "net/http/httptrace": true, - "net/http/httputil": true, - "net/http/internal": true, - "net/http/pprof": true, - "net/http/testdata": true, - "net/internal/socktest": true, - "net/mail": true, - "net/rpc": true, - "net/rpc/jsonrpc": true, - "net/smtp": true, - "net/testdata": true, - "net/textproto": true, - "net/url": true, - "os": true, - "os/exec": true, - "os/signal": true, - "os/signal/internal/pty": true, - "os/user": true, - "path": true, - "path/filepath": true, - "plugin": true, - "reflect": true, - "regexp": true, - "regexp/syntax": true, - "regexp/testdata": true, - "runtime": true, - "runtime/cgo": true, - "runtime/debug": true, - "runtime/internal/atomic": true, - "runtime/internal/math": true, - "runtime/internal/sys": true, - "runtime/msan": true, - "runtime/pprof": true, - "runtime/pprof/internal/profile": true, - "runtime/pprof/testdata": true, - "runtime/pprof/testdata/mappingtest": true, - "runtime/race": true, - "runtime/race/testdata": true, - "runtime/testdata/testprog": true, - "runtime/testdata/testprogcgo": true, - "runtime/testdata/testprogcgo/windows": true, - "runtime/testdata/testprognet": true, - "runtime/trace": true, - "sort": true, - "strconv": true, - "strconv/testdata": true, - "strings": true, - "sync": true, - "sync/atomic": true, - "syscall": true, - "syscall/js": true, - "testdata": true, - "testing": true, - "testing/internal/testdeps": true, - "testing/iotest": true, - "testing/quick": true, - "text/scanner": true, - "text/tabwriter": true, - "text/template": true, - "text/template/parse": true, - "text/template/testdata": true, - "time": true, - "unicode": true, - "unicode/utf16": true, - "unicode/utf8": true, - "unsafe": true, - "vendor": true, - "vendor/golang.org/x/crypto": true, - "vendor/golang.org/x/crypto/chacha20poly1305": true, - "vendor/golang.org/x/crypto/cryptobyte": true, - "vendor/golang.org/x/crypto/cryptobyte/asn1": true, - "vendor/golang.org/x/crypto/curve25519": true, - "vendor/golang.org/x/crypto/hkdf": true, - "vendor/golang.org/x/crypto/internal/chacha20": true, - "vendor/golang.org/x/crypto/internal/subtle": true, - "vendor/golang.org/x/crypto/poly1305": true, - "vendor/golang.org/x/net": true, - "vendor/golang.org/x/net/dns/dnsmessage": true, - "vendor/golang.org/x/net/http/httpguts": true, - "vendor/golang.org/x/net/http/httpproxy": true, - "vendor/golang.org/x/net/http2/hpack": true, - "vendor/golang.org/x/net/idna": true, - "vendor/golang.org/x/net/lif": true, - "vendor/golang.org/x/net/nettest": true, - "vendor/golang.org/x/net/route": true, - "vendor/golang.org/x/sys": true, - "vendor/golang.org/x/sys/cpu": true, - "vendor/golang.org/x/text": true, - "vendor/golang.org/x/text/secure/bidirule": true, - "vendor/golang.org/x/text/transform": true, - "vendor/golang.org/x/text/unicode/bidi": true, - "vendor/golang.org/x/text/unicode/norm": true, -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/update.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/go/update.go deleted file mode 100644 index 6a33078d6a..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/go/update.go +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright 2019 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package golang - -import ( - "path/filepath" - "strings" - - "github.com/bazelbuild/bazel-gazelle/language" - "github.com/bazelbuild/bazel-gazelle/rule" - "golang.org/x/sync/errgroup" -) - -// UpdateRepos generates go_repository rules corresponding to modules in -// args.Imports. Each module argument may specify a version with an '@' suffix -// (in the same format as 'go get'). If no version is specified, @latest -// is requested. -func (*goLang) UpdateRepos(args language.UpdateReposArgs) language.UpdateReposResult { - gen := make([]*rule.Rule, len(args.Imports)) - var eg errgroup.Group - for i := range args.Imports { - i := i - eg.Go(func() error { - arg := args.Imports[i] - modPath, query := arg, "latest" - if i := strings.IndexByte(arg, '@'); i >= 0 { - modPath, query = arg[:i], arg[i+1:] - } - name, version, sum, err := args.Cache.ModVersion(modPath, query) - if err != nil { - return err - } - gen[i] = rule.NewRule("go_repository", name) - gen[i].SetAttr("importpath", modPath) - gen[i].SetAttr("version", version) - gen[i].SetAttr("sum", sum) - setBuildAttrs(getGoConfig(args.Config), gen[i]) - return nil - }) - } - if err := eg.Wait(); err != nil { - return language.UpdateReposResult{Error: err} - } - return language.UpdateReposResult{Gen: gen} -} - -var repoImportFuncs = map[string]func(args language.ImportReposArgs) language.ImportReposResult{ - "Gopkg.lock": importReposFromDep, - "go.mod": importReposFromModules, - "Godeps.json": importReposFromGodep, -} - -func (*goLang) CanImport(path string) bool { - return repoImportFuncs[filepath.Base(path)] != nil -} - -func (*goLang) ImportRepos(args language.ImportReposArgs) language.ImportReposResult { - res := repoImportFuncs[filepath.Base(args.Path)](args) - for _, r := range res.Gen { - setBuildAttrs(getGoConfig(args.Config), r) - } - if args.Prune { - genNamesSet := make(map[string]bool) - for _, r := range res.Gen { - genNamesSet[r.Name()] = true - } - for _, r := range args.Config.Repos { - if name := r.Name(); r.Kind() == "go_repository" && !genNamesSet[name] { - res.Empty = append(res.Empty, rule.NewRule("go_repository", name)) - } - } - } - return res -} - -func setBuildAttrs(gc *goConfig, r *rule.Rule) { - if gc.buildExternalAttr != "" { - r.SetAttr("build_external", gc.buildExternalAttr) - } - if gc.buildFileNamesAttr != "" { - r.SetAttr("build_file_name", gc.buildFileNamesAttr) - } - if gc.buildFileGenerationAttr != "" { - r.SetAttr("build_file_generation", gc.buildFileGenerationAttr) - } - if gc.buildTagsAttr != "" { - r.SetAttr("build_tags", gc.buildTagsAttr) - } - if gc.buildFileProtoModeAttr != "" { - r.SetAttr("build_file_proto_mode", gc.buildFileProtoModeAttr) - } - if gc.buildExtraArgsAttr != "" { - extraArgs := strings.Split(gc.buildExtraArgsAttr, ",") - r.SetAttr("build_extra_args", extraArgs) - } -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/lang.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/lang.go deleted file mode 100644 index 5081dc1c55..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/lang.go +++ /dev/null @@ -1,151 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package language provides an interface for language extensions in Gazelle. -// Support for a new language can be added by defining a package with a -// function named "New" that returns a value assignable to this interface. -// -// TODO(jayconrod): document how to incorporate languages into a gazelle -// binary that can be run by Bazel. -package language - -import ( - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/resolve" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// Language describes an extension for Gazelle that provides support for -// a set of Bazel rules. -// -// Languages are used primarily by the fix and update commands. The order -// in which languages are used matters, since languages may depend on -// one another. For example, go depends on proto, since go_proto_libraries -// are generated from metadata stored in proto_libraries. -// -// A single instance of Language is created for each fix / update run. Some -// state may be stored in this instance, but stateless behavior is encouraged, -// especially since some operations may be concurrent in the future. -// -// Tasks languages are used for -// -// * Configuration (embedded interface config.Configurer). Languages may -// define command line flags and alter the configuration in a directory -// based on directives in build files. -// -// * Fixing deprecated usage of rules in build files. -// -// * Generating rules from source files in a directory. -// -// * Resolving library imports (embedded interface resolve.Resolver). For -// example, import strings like "github.com/foo/bar" in Go can be resolved -// into Bazel labels like "@com_github_foo_bar//:go_default_library". -// -// Tasks languages support -// -// * Generating load statements: languages list files and symbols that may -// be loaded. -// -// * Merging generated rules into existing rules: languages provide metadata -// that helps with rule matching, merging, and deletion. -type Language interface { - // TODO(jayconrod): is embedding Configurer strictly necessary? - config.Configurer - resolve.Resolver - - // Kinds returns a map of maps rule names (kinds) and information on how to - // match and merge attributes that may be found in rules of those kinds. All - // kinds of rules generated for this language may be found here. - Kinds() map[string]rule.KindInfo - - // Loads returns .bzl files and symbols they define. Every rule generated by - // GenerateRules, now or in the past, should be loadable from one of these - // files. - Loads() []rule.LoadInfo - - // GenerateRules extracts build metadata from source files in a directory. - // GenerateRules is called in each directory where an update is requested - // in depth-first post-order. - // - // args contains the arguments for GenerateRules. This is passed as a - // struct to avoid breaking implementations in the future when new - // fields are added. - // - // A GenerateResult struct is returned. Optional fields may be added to this - // type in the future. - // - // Any non-fatal errors this function encounters should be logged using - // log.Print. - GenerateRules(args GenerateArgs) GenerateResult - - // Fix repairs deprecated usage of language-specific rules in f. This is - // called before the file is indexed. Unless c.ShouldFix is true, fixes - // that delete or rename rules should not be performed. - Fix(c *config.Config, f *rule.File) -} - -// GenerateArgs contains arguments for language.GenerateRules. Arguments are -// passed in a struct value so that new fields may be added in the future -// without breaking existing implementations. -type GenerateArgs struct { - // Config is the configuration for the directory where rules are being - // generated. - Config *config.Config - - // Dir is the canonical absolute path to the directory. - Dir string - - // Rel is the slash-separated path to the directory, relative to the - // repository root ("" for the root directory itself). This may be used - // as the package name in labels. - Rel string - - // File is the build file for the directory. File is nil if there is - // no existing build file. - File *rule.File - - // Subdirs is a list of subdirectories in the directory, including - // symbolic links to directories that Gazelle will follow. - // RegularFiles is a list of regular files including other symbolic - // links. - // GeneratedFiles is a list of generated files in the directory - // (usually these are mentioned as "out" or "outs" attributes in rules). - Subdirs, RegularFiles, GenFiles []string - - // OtherEmpty is a list of empty rules generated by other languages. - // OtherGen is a list of generated rules generated by other languages. - OtherEmpty, OtherGen []*rule.Rule -} - -// GenerateResult contains return values for language.GenerateRules. -// Results are returned through a struct value so that new (optional) -// fields may be added without breaking existing implementations. -type GenerateResult struct { - // Gen is a list of rules generated from files found in the directory - // GenerateRules was asked to process. These will be merged with existing - // rules or added to the build file. - Gen []*rule.Rule - - // Empty is a list of rules that cannot be built with the files found in the - // directory GenerateRules was asked to process. These will be merged with - // existing rules. If ther merged rules are empty, they will be deleted. - Empty []*rule.Rule - - // Imports contains information about the imported libraries for each - // rule in Gen. Gen and Imports must have the same length, since they - // correspond. These values are passed to Resolve after merge. The type - // is opaque since different languages may use different representations. - Imports []interface{} -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/BUILD.bazel deleted file mode 100644 index 0b8a46aaa7..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/BUILD.bazel +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "constants.go", - "fileinfo.go", - "fix.go", - "generate.go", - "kinds.go", - "known_imports.go", - "lang.go", - "package.go", - "resolve.go", - ], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/language/proto", - importpath = "github.com/bazelbuild/bazel-gazelle/language/proto", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/bazelbuild/bazel-gazelle/config:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/label:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/language:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/repo:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/resolve:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/rule:go_default_library", - ], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/config.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/config.go deleted file mode 100644 index 97c9b22803..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/config.go +++ /dev/null @@ -1,284 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package proto - -import ( - "flag" - "fmt" - "log" - "path" - "strings" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// ProtoConfig contains configuration values related to protos. -// -// This type is public because other languages need to generate rules based -// on protos, so this configuration may be relevant to them. -type ProtoConfig struct { - // Mode determines how rules are generated for protos. - Mode Mode - - // ModeExplicit indicates whether the proto mode was set explicitly. - ModeExplicit bool - - // GoPrefix is the current Go prefix (the Go extension may set this in the - // root directory only). Used to generate proto rule names in the root - // directory when there are no proto files or the proto package name - // can't be determined. - // TODO(jayconrod): deprecate and remove Go-specific behavior. - GoPrefix string - - // groupOption is an option name that Gazelle will use to group .proto - // files into proto_library rules. If unset, the proto package name is used. - groupOption string - - // stripImportPrefix The prefix to strip from the paths of the .proto files. - // If set, Gazelle will apply this value to the strip_import_prefix attribute - // within the proto_library_rule. - stripImportPrefix string - - // importPrefix The prefix to add to the paths of the .proto files. - // If set, Gazelle will apply this value to the import_prefix attribute - // within the proto_library_rule. - importPrefix string -} - -// GetProtoConfig returns the proto language configuration. If the proto -// extension was not run, it will return nil. -func GetProtoConfig(c *config.Config) *ProtoConfig { - pc := c.Exts[protoName] - if pc == nil { - return nil - } - return pc.(*ProtoConfig) -} - -// Mode determines how proto rules are generated. -type Mode int - -const ( - // DefaultMode generates proto_library rules. Other languages should generate - // library rules based on these (e.g., go_proto_library) and should ignore - // checked-in generated files (e.g., .pb.go files) when there is a .proto - // file with a similar name. - DefaultMode Mode = iota - - // DisableMode ignores .proto files and generates empty proto_library rules. - // Checked-in generated files (e.g., .pb.go files) should be treated as - // normal sources. - DisableMode - - // DisableGlobalMode is similar to DisableMode, but it also prevents - // the use of special cases in dependency resolution for well known types - // and Google APIs. - DisableGlobalMode - - // LegacyMode generates filegroups for .proto files if .pb.go files are - // present in the same directory. - LegacyMode - - // PackageMode generates a proto_library for each set of .proto files with - // the same package name in each directory. - PackageMode -) - -func ModeFromString(s string) (Mode, error) { - switch s { - case "default": - return DefaultMode, nil - case "disable": - return DisableMode, nil - case "disable_global": - return DisableGlobalMode, nil - case "legacy": - return LegacyMode, nil - case "package": - return PackageMode, nil - default: - return 0, fmt.Errorf("unrecognized proto mode: %q", s) - } -} - -func (m Mode) String() string { - switch m { - case DefaultMode: - return "default" - case DisableMode: - return "disable" - case DisableGlobalMode: - return "disable_global" - case LegacyMode: - return "legacy" - case PackageMode: - return "package" - default: - log.Panicf("unknown mode %d", m) - return "" - } -} - -func (m Mode) ShouldGenerateRules() bool { - switch m { - case DisableMode, DisableGlobalMode, LegacyMode: - return false - default: - return true - } -} - -func (m Mode) ShouldIncludePregeneratedFiles() bool { - switch m { - case DisableMode, DisableGlobalMode, LegacyMode: - return true - default: - return false - } -} - -func (m Mode) ShouldUseKnownImports() bool { - return m != DisableGlobalMode -} - -type modeFlag struct { - mode *Mode -} - -func (f *modeFlag) Set(value string) error { - if mode, err := ModeFromString(value); err != nil { - return err - } else { - *f.mode = mode - return nil - } -} - -func (f *modeFlag) String() string { - var mode Mode - if f != nil && f.mode != nil { - mode = *f.mode - } - return mode.String() -} - -func (_ *protoLang) RegisterFlags(fs *flag.FlagSet, cmd string, c *config.Config) { - pc := &ProtoConfig{} - c.Exts[protoName] = pc - - // Note: the -proto flag does not set the ModeExplicit flag. We want to - // be able to switch to DisableMode in vendor directories, even when - // this is set for compatibility with older versions. - fs.Var(&modeFlag{&pc.Mode}, "proto", "default: generates a proto_library rule for one package\n\tpackage: generates a proto_library rule for for each package\n\tdisable: does not touch proto rules\n\tdisable_global: does not touch proto rules and does not use special cases for protos in dependency resolution") - fs.StringVar(&pc.groupOption, "proto_group", "", "option name used to group .proto files into proto_library rules") - fs.StringVar(&pc.importPrefix, "proto_import_prefix", "", "When set, .proto source files in the srcs attribute of the rule are accessible at their path with this prefix appended on.") -} - -func (_ *protoLang) CheckFlags(fs *flag.FlagSet, c *config.Config) error { - return nil -} - -func (_ *protoLang) KnownDirectives() []string { - return []string{"proto", "proto_group", "proto_strip_import_prefix", "proto_import_prefix"} -} - -func (_ *protoLang) Configure(c *config.Config, rel string, f *rule.File) { - pc := &ProtoConfig{} - *pc = *GetProtoConfig(c) - c.Exts[protoName] = pc - if f != nil { - for _, d := range f.Directives { - switch d.Key { - case "proto": - mode, err := ModeFromString(d.Value) - if err != nil { - log.Print(err) - continue - } - pc.Mode = mode - pc.ModeExplicit = true - case "proto_group": - pc.groupOption = d.Value - case "proto_strip_import_prefix": - pc.stripImportPrefix = d.Value - if rel != "" { - if err := checkStripImportPrefix(pc.stripImportPrefix, rel); err != nil { - log.Print(err) - } - } - case "proto_import_prefix": - pc.importPrefix = d.Value - } - } - } - inferProtoMode(c, rel, f) -} - -// inferProtoMode sets ProtoConfig.Mode based on the directory name and the -// contents of f. If the proto mode is set explicitly, this function does not -// change it. If this is a vendor directory, or go_proto_library is loaded from -// another file, proto rule generation is disabled. -// -// TODO(jayconrod): this logic is archaic, now that rules are generated by -// separate language extensions. Proto rule generation should be independent -// from Go. -func inferProtoMode(c *config.Config, rel string, f *rule.File) { - pc := GetProtoConfig(c) - if pc.Mode != DefaultMode || pc.ModeExplicit { - return - } - if pc.GoPrefix == wellKnownTypesGoPrefix { - pc.Mode = LegacyMode - return - } - if path.Base(rel) == "vendor" { - pc.Mode = DisableMode - return - } - if f == nil { - return - } - mode := DefaultMode -outer: - for _, l := range f.Loads { - name := l.Name() - if name == "@io_bazel_rules_go//proto:def.bzl" { - break - } - if name == "@io_bazel_rules_go//proto:go_proto_library.bzl" { - mode = LegacyMode - break - } - for _, sym := range l.Symbols() { - if sym == "go_proto_library" { - mode = DisableMode - break outer - } - } - } - if mode == DefaultMode || pc.Mode == mode || c.ShouldFix && mode == LegacyMode { - return - } - pc.Mode = mode -} - -func checkStripImportPrefix(prefix, rel string) error { - if !strings.HasPrefix(prefix, "/") || !strings.HasPrefix(rel, prefix[1:]) { - return fmt.Errorf("invalid proto_strip_import_prefix %q at %s", prefix, rel) - } - return nil -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/constants.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/constants.go deleted file mode 100644 index be6bb4c8d6..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/constants.go +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package proto - -const ( - // PackageInfoKey is the name of a private attribute set on generated - // proto_library rules. This attribute contains a Package record which - // describes the library and its sources. - PackageKey = "_package" - - // wellKnownTypesGoPrefix is the import path for the Go repository containing - // pre-generated code for the Well Known Types. - wellKnownTypesGoPrefix = "github.com/golang/protobuf" -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/fileinfo.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/fileinfo.go deleted file mode 100644 index 640fdb6c08..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/fileinfo.go +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package proto - -import ( - "bytes" - "io/ioutil" - "log" - "path/filepath" - "regexp" - "sort" - "strconv" - "strings" -) - -// FileInfo contains metadata extracted from a .proto file. -type FileInfo struct { - Path, Name string - - PackageName string - - Options []Option - Imports []string - - HasServices bool -} - -// Option represents a top-level option statement in a .proto file. Only -// string options are supported for now. -type Option struct { - Key, Value string -} - -var protoRe = buildProtoRegexp() - -func protoFileInfo(dir, name string) FileInfo { - info := FileInfo{ - Path: filepath.Join(dir, name), - Name: name, - } - content, err := ioutil.ReadFile(info.Path) - if err != nil { - log.Printf("%s: error reading proto file: %v", info.Path, err) - return info - } - - for _, match := range protoRe.FindAllSubmatch(content, -1) { - switch { - case match[importSubexpIndex] != nil: - imp := unquoteProtoString(match[importSubexpIndex]) - info.Imports = append(info.Imports, imp) - - case match[packageSubexpIndex] != nil: - pkg := string(match[packageSubexpIndex]) - if info.PackageName == "" { - info.PackageName = pkg - } - - case match[optkeySubexpIndex] != nil: - key := string(match[optkeySubexpIndex]) - value := unquoteProtoString(match[optvalSubexpIndex]) - info.Options = append(info.Options, Option{key, value}) - - case match[serviceSubexpIndex] != nil: - info.HasServices = true - - default: - // Comment matched. Nothing to extract. - } - } - sort.Strings(info.Imports) - - return info -} - -const ( - importSubexpIndex = 1 - packageSubexpIndex = 2 - optkeySubexpIndex = 3 - optvalSubexpIndex = 4 - serviceSubexpIndex = 5 -) - -// Based on https://developers.google.com/protocol-buffers/docs/reference/proto3-spec -func buildProtoRegexp() *regexp.Regexp { - hexEscape := `\\[xX][0-9a-fA-f]{2}` - octEscape := `\\[0-7]{3}` - charEscape := `\\[abfnrtv'"\\]` - charValue := strings.Join([]string{hexEscape, octEscape, charEscape, "[^\x00\\'\\\"\\\\]"}, "|") - strLit := `'(?:` + charValue + `|")*'|"(?:` + charValue + `|')*"` - ident := `[A-Za-z][A-Za-z0-9_]*` - fullIdent := ident + `(?:\.` + ident + `)*` - importStmt := `\bimport\s*(?:public|weak)?\s*(?P` + strLit + `)\s*;` - packageStmt := `\bpackage\s*(?P` + fullIdent + `)\s*;` - optionStmt := `\boption\s*(?P` + fullIdent + `)\s*=\s*(?P` + strLit + `)\s*;` - serviceStmt := `(?Pservice)` - comment := `//[^\n]*` - protoReSrc := strings.Join([]string{importStmt, packageStmt, optionStmt, serviceStmt, comment}, "|") - return regexp.MustCompile(protoReSrc) -} - -func unquoteProtoString(q []byte) string { - // Adjust quotes so that Unquote is happy. We need a double quoted string - // without unescaped double quote characters inside. - noQuotes := bytes.Split(q[1:len(q)-1], []byte{'"'}) - if len(noQuotes) != 1 { - for i := 0; i < len(noQuotes)-1; i++ { - if len(noQuotes[i]) == 0 || noQuotes[i][len(noQuotes[i])-1] != '\\' { - noQuotes[i] = append(noQuotes[i], '\\') - } - } - q = append([]byte{'"'}, bytes.Join(noQuotes, []byte{'"'})...) - q = append(q, '"') - } - if q[0] == '\'' { - q[0] = '"' - q[len(q)-1] = '"' - } - - s, err := strconv.Unquote(string(q)) - if err != nil { - log.Panicf("unquoting string literal %s from proto: %v", q, err) - } - return s -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/fix.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/fix.go deleted file mode 100644 index c8e67bf8fb..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/fix.go +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package proto - -import ( - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -func (_ *protoLang) Fix(c *config.Config, f *rule.File) { -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/generate.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/generate.go deleted file mode 100644 index e9c1b00c3b..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/generate.go +++ /dev/null @@ -1,265 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package proto - -import ( - "fmt" - "log" - "sort" - "strings" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/language" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -func (_ *protoLang) GenerateRules(args language.GenerateArgs) language.GenerateResult { - c := args.Config - pc := GetProtoConfig(c) - if !pc.Mode.ShouldGenerateRules() { - // Don't create or delete proto rules in this mode. Any existing rules - // are likely hand-written. - return language.GenerateResult{} - } - - var regularProtoFiles []string - for _, name := range args.RegularFiles { - if strings.HasSuffix(name, ".proto") { - regularProtoFiles = append(regularProtoFiles, name) - } - } - var genProtoFiles []string - for _, name := range args.GenFiles { - if strings.HasSuffix(name, ".proto") { - genProtoFiles = append(genProtoFiles, name) - } - } - pkgs := buildPackages(pc, args.Dir, args.Rel, regularProtoFiles, genProtoFiles) - shouldSetVisibility := args.File == nil || !args.File.HasDefaultVisibility() - var res language.GenerateResult - for _, pkg := range pkgs { - r := generateProto(pc, args.Rel, pkg, shouldSetVisibility) - if r.IsEmpty(protoKinds[r.Kind()]) { - res.Empty = append(res.Empty, r) - } else { - res.Gen = append(res.Gen, r) - } - } - sort.SliceStable(res.Gen, func(i, j int) bool { - return res.Gen[i].Name() < res.Gen[j].Name() - }) - res.Imports = make([]interface{}, len(res.Gen)) - for i, r := range res.Gen { - res.Imports[i] = r.PrivateAttr(config.GazelleImportsKey) - } - res.Empty = append(res.Empty, generateEmpty(args.File, regularProtoFiles, genProtoFiles)...) - return res -} - -// RuleName returns a name for a proto_library derived from the given strings. -// For each string, RuleName will look for a non-empty suffix of identifier -// characters and then append "_proto" to that. -func RuleName(names ...string) string { - base := "root" - for _, name := range names { - notIdent := func(c rune) bool { - return !('A' <= c && c <= 'Z' || - 'a' <= c && c <= 'z' || - '0' <= c && c <= '9' || - c == '_') - } - if i := strings.LastIndexFunc(name, notIdent); i >= 0 { - name = name[i+1:] - } - if name != "" { - base = name - break - } - } - return base + "_proto" -} - -// buildPackage extracts metadata from the .proto files in a directory and -// constructs possibly several packages, then selects a package to generate -// a proto_library rule for. -func buildPackages(pc *ProtoConfig, dir, rel string, protoFiles, genFiles []string) []*Package { - packageMap := make(map[string]*Package) - for _, name := range protoFiles { - info := protoFileInfo(dir, name) - key := info.PackageName - if pc.groupOption != "" { - for _, opt := range info.Options { - if opt.Key == pc.groupOption { - key = opt.Value - break - } - } - } - if packageMap[key] == nil { - packageMap[key] = newPackage(info.PackageName) - } - packageMap[key].addFile(info) - } - - switch pc.Mode { - case DefaultMode: - pkg, err := selectPackage(dir, rel, packageMap) - if err != nil { - log.Print(err) - } - if pkg == nil { - return nil // empty rule created in generateEmpty - } - for _, name := range genFiles { - pkg.addGenFile(dir, name) - } - return []*Package{pkg} - - case PackageMode: - pkgs := make([]*Package, 0, len(packageMap)) - for _, pkg := range packageMap { - pkgs = append(pkgs, pkg) - } - return pkgs - - default: - return nil - } -} - -// selectPackage chooses a package to generate rules for. -func selectPackage(dir, rel string, packageMap map[string]*Package) (*Package, error) { - if len(packageMap) == 0 { - return nil, nil - } - if len(packageMap) == 1 { - for _, pkg := range packageMap { - return pkg, nil - } - } - defaultPackageName := strings.Replace(rel, "/", "_", -1) - for _, pkg := range packageMap { - if pkgName := goPackageName(pkg); pkgName != "" && pkgName == defaultPackageName { - return pkg, nil - } - } - return nil, fmt.Errorf("%s: directory contains multiple proto packages. Gazelle can only generate a proto_library for one package.", dir) -} - -// goPackageName guesses the identifier in package declarations at the top of -// the .pb.go files that will be generated for this package. "" is returned -// if the package name cannot be determined. -// -// TODO(jayconrod): remove all Go-specific functionality. This is here -// temporarily for compatibility. -func goPackageName(pkg *Package) string { - if opt, ok := pkg.Options["go_package"]; ok { - if i := strings.IndexByte(opt, ';'); i >= 0 { - return opt[i+1:] - } else if i := strings.LastIndexByte(opt, '/'); i >= 0 { - return opt[i+1:] - } else { - return opt - } - } - if pkg.Name != "" { - return strings.Replace(pkg.Name, ".", "_", -1) - } - if len(pkg.Files) == 1 { - for s := range pkg.Files { - return strings.TrimSuffix(s, ".proto") - } - } - return "" -} - -// generateProto creates a new proto_library rule for a package. The rule may -// be empty if there are no sources. -func generateProto(pc *ProtoConfig, rel string, pkg *Package, shouldSetVisibility bool) *rule.Rule { - var name string - if pc.Mode == DefaultMode { - name = RuleName(goPackageName(pkg), pc.GoPrefix, rel) - } else { - name = RuleName(pkg.Options[pc.groupOption], pkg.Name, rel) - } - r := rule.NewRule("proto_library", name) - srcs := make([]string, 0, len(pkg.Files)) - for f := range pkg.Files { - srcs = append(srcs, f) - } - sort.Strings(srcs) - if len(srcs) > 0 { - r.SetAttr("srcs", srcs) - } - r.SetPrivateAttr(PackageKey, *pkg) - imports := make([]string, 0, len(pkg.Imports)) - for i := range pkg.Imports { - imports = append(imports, i) - } - sort.Strings(imports) - // NOTE: This attribute should not be used outside this extension. It's still - // convenient for testing though. - r.SetPrivateAttr(config.GazelleImportsKey, imports) - for k, v := range pkg.Options { - r.SetPrivateAttr(k, v) - } - if shouldSetVisibility { - vis := rule.CheckInternalVisibility(rel, "//visibility:public") - r.SetAttr("visibility", []string{vis}) - } - if pc.stripImportPrefix != "" { - r.SetAttr("strip_import_prefix", pc.stripImportPrefix) - } - if pc.importPrefix != "" { - r.SetAttr("import_prefix", pc.importPrefix) - } - return r -} - -// generateEmpty generates a list of proto_library rules that may be deleted. -// This is generated from existing proto_library rules with srcs lists that -// don't match any static or generated files. -func generateEmpty(f *rule.File, regularFiles, genFiles []string) []*rule.Rule { - if f == nil { - return nil - } - knownFiles := make(map[string]bool) - for _, f := range regularFiles { - knownFiles[f] = true - } - for _, f := range genFiles { - knownFiles[f] = true - } - var empty []*rule.Rule -outer: - for _, r := range f.Rules { - if r.Kind() != "proto_library" { - continue - } - srcs := r.AttrStrings("srcs") - if len(srcs) == 0 && r.Attr("srcs") != nil { - // srcs is not a string list; leave it alone - continue - } - for _, src := range r.AttrStrings("srcs") { - if knownFiles[src] { - continue outer - } - } - empty = append(empty, rule.NewRule("proto_library", r.Name())) - } - return empty -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/kinds.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/kinds.go deleted file mode 100644 index 902cd6ac03..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/kinds.go +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package proto - -import "github.com/bazelbuild/bazel-gazelle/rule" - -var protoKinds = map[string]rule.KindInfo{ - "proto_library": { - NonEmptyAttrs: map[string]bool{"srcs": true}, - MergeableAttrs: map[string]bool{ - "srcs": true, - }, - ResolveAttrs: map[string]bool{"deps": true}, - }, -} - -func (_ *protoLang) Kinds() map[string]rule.KindInfo { return protoKinds } -func (_ *protoLang) Loads() []rule.LoadInfo { return nil } diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/known_imports.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/known_imports.go deleted file mode 100644 index 6335e0db53..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/known_imports.go +++ /dev/null @@ -1,1614 +0,0 @@ -// Generated by language/proto/gen/gen_known_imports.go -// From proto.csv - -package proto - -import "github.com/bazelbuild/bazel-gazelle/label" - -var knownImports = map[string]label.Label{ - - "google/protobuf/any.proto": label.New("com_google_protobuf", "", "any_proto"), - "google/protobuf/api.proto": label.New("com_google_protobuf", "", "api_proto"), - "google/protobuf/compiler/plugin.proto": label.New("com_google_protobuf", "", "compiler_plugin_proto"), - "google/protobuf/descriptor.proto": label.New("com_google_protobuf", "", "descriptor_proto"), - "google/protobuf/duration.proto": label.New("com_google_protobuf", "", "duration_proto"), - "google/protobuf/empty.proto": label.New("com_google_protobuf", "", "empty_proto"), - "google/protobuf/field_mask.proto": label.New("com_google_protobuf", "", "field_mask_proto"), - "google/protobuf/source_context.proto": label.New("com_google_protobuf", "", "source_context_proto"), - "google/protobuf/struct.proto": label.New("com_google_protobuf", "", "struct_proto"), - "google/protobuf/timestamp.proto": label.New("com_google_protobuf", "", "timestamp_proto"), - "google/protobuf/type.proto": label.New("com_google_protobuf", "", "type_proto"), - "google/protobuf/wrappers.proto": label.New("com_google_protobuf", "", "wrappers_proto"), - "google/ads/googleads/v1/common/ad_asset.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/ad_type_infos.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/asset_types.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/bidding.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/click_location.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/criteria.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/criterion_category_availability.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/custom_parameter.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/dates.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/explorer_auto_optimizer_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/extensions.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/feed_common.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/final_app_url.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/frequency_cap.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/keyword_plan_common.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/matching_function.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/metrics.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/policy.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/real_time_bidding_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/segments.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/simulation.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/tag_snippet.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/targeting_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/text_label.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/url_collection.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/user_lists.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/common/value.proto": label.New("go_googleapis", "google/ads/googleads/v1/common", "common_proto"), - "google/ads/googleads/v1/enums/access_reason.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/account_budget_proposal_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/account_budget_proposal_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/account_budget_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/ad_customizer_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/ad_group_ad_rotation_mode.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/ad_group_ad_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/ad_group_criterion_approval_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/ad_group_criterion_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/ad_group_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/ad_group_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/ad_network_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/ad_serving_optimization_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/ad_strength.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/ad_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/advertising_channel_sub_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/advertising_channel_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/affiliate_location_feed_relationship_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/affiliate_location_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/age_range_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/app_campaign_app_store.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/app_campaign_bidding_strategy_goal_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/app_payment_model_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/app_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/app_store.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/app_url_operating_system_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/asset_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/attribution_model.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/bid_modifier_source.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/bidding_source.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/bidding_strategy_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/bidding_strategy_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/billing_setup_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/brand_safety_suitability.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/budget_delivery_method.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/budget_period.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/budget_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/budget_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/call_conversion_reporting_state.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/call_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/callout_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/campaign_criterion_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/campaign_draft_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/campaign_experiment_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/campaign_experiment_traffic_split_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/campaign_experiment_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/campaign_serving_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/campaign_shared_set_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/campaign_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/change_status_operation.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/change_status_resource_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/click_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/content_label_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/conversion_action_category.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/conversion_action_counting_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/conversion_action_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/conversion_action_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/conversion_adjustment_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/conversion_attribution_event_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/conversion_lag_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/conversion_or_adjustment_lag_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/criterion_category_channel_availability_mode.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/criterion_category_locale_availability_mode.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/criterion_system_serving_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/criterion_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/custom_interest_member_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/custom_interest_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/custom_interest_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/custom_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/customer_match_upload_key_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/customer_pay_per_conversion_eligibility_failure_reason.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/data_driven_model_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/day_of_week.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/device.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/display_ad_format_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/display_upload_product_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/dsa_page_feed_criterion_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/education_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/extension_setting_device.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/extension_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/external_conversion_source.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/feed_attribute_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/feed_item_quality_approval_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/feed_item_quality_disapproval_reason.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/feed_item_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/feed_item_target_device.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/feed_item_target_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/feed_item_validation_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/feed_link_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/feed_mapping_criterion_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/feed_mapping_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/feed_origin.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/feed_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/flight_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/frequency_cap_event_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/frequency_cap_level.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/frequency_cap_time_unit.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/gender_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/geo_target_constant_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/geo_targeting_restriction.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/geo_targeting_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/google_ads_field_category.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/google_ads_field_data_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/hotel_date_selection_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/hotel_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/hotel_rate_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/income_range_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/interaction_event_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/interaction_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/job_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/keyword_match_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/keyword_plan_competition_level.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/keyword_plan_forecast_interval.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/keyword_plan_network.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/label_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/legacy_app_install_ad_app_store.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/listing_custom_attribute_index.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/listing_group_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/local_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/location_extension_targeting_criterion_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/location_group_radius_units.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/location_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/manager_link_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/matching_function_context_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/matching_function_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/media_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/merchant_center_link_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/message_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/mime_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/minute_of_hour.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/mobile_device_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/month_of_year.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/mutate_job_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/negative_geo_target_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/operating_system_version_operator_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/page_one_promoted_strategy_goal.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/parental_status_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/payment_mode.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/placeholder_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/placement_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/policy_approval_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/policy_review_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/policy_topic_entry_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/policy_topic_evidence_destination_mismatch_url_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/policy_topic_evidence_destination_not_working_device.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/positive_geo_target_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/preferred_content_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/price_extension_price_qualifier.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/price_extension_price_unit.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/price_extension_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/price_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/product_bidding_category_level.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/product_bidding_category_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/product_channel.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/product_channel_exclusivity.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/product_condition.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/product_type_level.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/promotion_extension_discount_modifier.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/promotion_extension_occasion.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/promotion_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/proximity_radius_units.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/quality_score_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/real_estate_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/recommendation_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/search_engine_results_page_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/search_term_match_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/search_term_targeting_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/served_asset_field_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/shared_set_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/shared_set_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/simulation_modification_method.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/simulation_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/sitelink_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/slot.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/spending_limit_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/structured_snippet_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/system_managed_entity_source.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/target_cpa_opt_in_recommendation_goal.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/target_impression_share_location.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/targeting_dimension.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/time_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/tracking_code_page_format.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/tracking_code_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/travel_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_interest_taxonomy_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_access_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_closing_reason.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_combined_rule_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_crm_data_source_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_date_rule_item_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_logical_rule_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_membership_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_number_rule_item_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_prepopulation_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_rule_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_size_range.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_string_rule_item_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/user_list_type.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/vanity_pharma_display_url_mode.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/vanity_pharma_text.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/webpage_condition_operand.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/enums/webpage_condition_operator.proto": label.New("go_googleapis", "google/ads/googleads/v1/enums", "enums_proto"), - "google/ads/googleads/v1/errors/account_budget_proposal_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/ad_customizer_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/ad_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/ad_group_ad_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/ad_group_bid_modifier_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/ad_group_criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/ad_group_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/ad_group_feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/ad_parameter_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/ad_sharing_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/adx_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/asset_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/authentication_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/authorization_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/bidding_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/bidding_strategy_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/billing_setup_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/campaign_budget_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/campaign_criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/campaign_draft_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/campaign_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/campaign_experiment_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/campaign_feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/campaign_shared_set_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/change_status_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/collection_size_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/context_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/conversion_action_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/conversion_adjustment_upload_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/conversion_upload_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/country_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/custom_interest_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/customer_client_link_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/customer_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/customer_feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/customer_manager_link_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/database_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/date_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/date_range_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/distinct_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/enum_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/errors.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/extension_feed_item_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/extension_setting_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/feed_attribute_reference_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/feed_item_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/feed_item_target_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/feed_item_validation_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/feed_mapping_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/field_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/field_mask_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/function_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/function_parsing_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/geo_target_constant_suggestion_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/header_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/id_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/image_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/internal_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/keyword_plan_ad_group_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/keyword_plan_campaign_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/keyword_plan_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/keyword_plan_idea_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/keyword_plan_keyword_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/keyword_plan_negative_keyword_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/label_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/language_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/list_operation_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/manager_link_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/media_bundle_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/media_file_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/media_upload_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/multiplier_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/mutate_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/mutate_job_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/new_resource_creation_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/not_empty_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/not_whitelisted_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/null_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/operation_access_denied_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/operator_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/partial_failure_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/policy_finding_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/policy_validation_parameter_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/policy_violation_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/query_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/quota_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/range_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/recommendation_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/region_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/request_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/resource_access_denied_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/resource_count_limit_exceeded_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/setting_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/shared_criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/shared_set_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/size_limit_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/string_format_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/string_length_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/url_field_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/user_list_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/errors/youtube_video_registration_error.proto": label.New("go_googleapis", "google/ads/googleads/v1/errors", "errors_proto"), - "google/ads/googleads/v1/resources/account_budget.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/account_budget_proposal.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_group.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_group_ad.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_group_ad_label.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_group_audience_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_group_bid_modifier.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_group_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_group_criterion_label.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_group_criterion_simulation.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_group_extension_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_group_feed.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_group_label.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_group_simulation.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_parameter.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/ad_schedule_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/age_range_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/asset.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/bidding_strategy.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/billing_setup.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/campaign.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/campaign_audience_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/campaign_bid_modifier.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/campaign_budget.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/campaign_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/campaign_criterion_simulation.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/campaign_draft.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/campaign_experiment.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/campaign_extension_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/campaign_feed.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/campaign_label.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/campaign_shared_set.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/carrier_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/change_status.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/click_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/conversion_action.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/custom_interest.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/customer.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/customer_client.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/customer_client_link.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/customer_extension_setting.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/customer_feed.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/customer_label.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/customer_manager_link.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/customer_negative_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/detail_placement_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/display_keyword_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/domain_category.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/dynamic_search_ads_search_term_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/expanded_landing_page_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/extension_feed_item.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/feed.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/feed_item.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/feed_item_target.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/feed_mapping.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/feed_placeholder_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/gender_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/geo_target_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/geographic_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/google_ads_field.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/group_placement_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/hotel_group_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/hotel_performance_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/keyword_plan.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/keyword_plan_ad_group.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/keyword_plan_campaign.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/keyword_plan_keyword.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/keyword_plan_negative_keyword.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/keyword_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/label.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/landing_page_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/language_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/location_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/managed_placement_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/media_file.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/merchant_center_link.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/mobile_app_category_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/mobile_device_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/mutate_job.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/operating_system_version_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/paid_organic_search_term_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/parental_status_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/payments_account.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/product_bidding_category_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/product_group_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/recommendation.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/remarketing_action.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/search_term_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/shared_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/shared_set.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/shopping_performance_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/topic_constant.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/topic_view.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/user_interest.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/user_list.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/resources/video.proto": label.New("go_googleapis", "google/ads/googleads/v1/resources", "resources_proto"), - "google/ads/googleads/v1/services/account_budget_proposal_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/account_budget_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_group_ad_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_group_ad_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_group_audience_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_group_bid_modifier_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_group_criterion_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_group_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_group_criterion_simulation_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_group_extension_setting_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_group_feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_group_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_group_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_group_simulation_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_parameter_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/ad_schedule_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/age_range_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/asset_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/bidding_strategy_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/billing_setup_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/campaign_audience_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/campaign_bid_modifier_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/campaign_budget_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/campaign_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/campaign_criterion_simulation_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/campaign_draft_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/campaign_experiment_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/campaign_extension_setting_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/campaign_feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/campaign_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/campaign_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/campaign_shared_set_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/carrier_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/change_status_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/click_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/conversion_action_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/conversion_adjustment_upload_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/conversion_upload_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/custom_interest_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/customer_client_link_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/customer_client_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/customer_extension_setting_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/customer_feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/customer_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/customer_manager_link_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/customer_negative_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/customer_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/detail_placement_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/display_keyword_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/domain_category_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/dynamic_search_ads_search_term_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/expanded_landing_page_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/extension_feed_item_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/feed_item_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/feed_item_target_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/feed_mapping_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/feed_placeholder_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/gender_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/geo_target_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/geographic_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/google_ads_field_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/google_ads_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/group_placement_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/hotel_group_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/hotel_performance_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/keyword_plan_ad_group_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/keyword_plan_campaign_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/keyword_plan_idea_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/keyword_plan_keyword_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/keyword_plan_negative_keyword_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/keyword_plan_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/keyword_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/label_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/landing_page_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/language_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/location_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/managed_placement_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/media_file_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/merchant_center_link_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/mobile_app_category_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/mobile_device_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/mutate_job_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/operating_system_version_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/paid_organic_search_term_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/parental_status_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/payments_account_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/product_bidding_category_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/product_group_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/recommendation_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/remarketing_action_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/search_term_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/shared_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/shared_set_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/shopping_performance_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/topic_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/topic_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/user_interest_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/user_list_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v1/services/video_service.proto": label.New("go_googleapis", "google/ads/googleads/v1/services", "services_proto"), - "google/ads/googleads/v2/common/ad_asset.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/ad_type_infos.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/asset_types.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/bidding.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/click_location.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/criteria.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/criterion_category_availability.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/custom_parameter.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/dates.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/explorer_auto_optimizer_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/extensions.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/feed_common.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/final_app_url.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/frequency_cap.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/keyword_plan_common.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/matching_function.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/metrics.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/policy.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/real_time_bidding_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/segments.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/simulation.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/tag_snippet.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/targeting_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/text_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/url_collection.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/user_lists.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/common/value.proto": label.New("go_googleapis", "google/ads/googleads/v2/common", "common_proto"), - "google/ads/googleads/v2/enums/access_reason.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/access_role.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/account_budget_proposal_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/account_budget_proposal_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/account_budget_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/ad_customizer_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/ad_group_ad_rotation_mode.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/ad_group_ad_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/ad_group_criterion_approval_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/ad_group_criterion_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/ad_group_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/ad_group_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/ad_network_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/ad_serving_optimization_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/ad_strength.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/ad_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/advertising_channel_sub_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/advertising_channel_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/affiliate_location_feed_relationship_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/affiliate_location_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/age_range_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/app_campaign_app_store.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/app_campaign_bidding_strategy_goal_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/app_payment_model_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/app_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/app_store.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/app_url_operating_system_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/asset_field_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/asset_performance_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/asset_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/attribution_model.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/bid_modifier_source.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/bidding_source.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/bidding_strategy_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/bidding_strategy_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/billing_setup_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/brand_safety_suitability.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/budget_delivery_method.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/budget_period.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/budget_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/budget_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/call_conversion_reporting_state.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/call_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/callout_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/campaign_criterion_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/campaign_draft_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/campaign_experiment_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/campaign_experiment_traffic_split_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/campaign_experiment_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/campaign_serving_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/campaign_shared_set_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/campaign_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/change_status_operation.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/change_status_resource_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/click_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/content_label_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/conversion_action_category.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/conversion_action_counting_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/conversion_action_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/conversion_action_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/conversion_adjustment_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/conversion_attribution_event_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/conversion_lag_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/conversion_or_adjustment_lag_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/criterion_category_channel_availability_mode.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/criterion_category_locale_availability_mode.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/criterion_system_serving_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/criterion_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/custom_interest_member_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/custom_interest_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/custom_interest_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/custom_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/customer_match_upload_key_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/customer_pay_per_conversion_eligibility_failure_reason.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/data_driven_model_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/day_of_week.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/device.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/display_ad_format_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/display_upload_product_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/distance_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/dsa_page_feed_criterion_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/education_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/extension_setting_device.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/extension_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/external_conversion_source.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/feed_attribute_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/feed_item_quality_approval_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/feed_item_quality_disapproval_reason.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/feed_item_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/feed_item_target_device.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/feed_item_target_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/feed_item_validation_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/feed_link_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/feed_mapping_criterion_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/feed_mapping_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/feed_origin.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/feed_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/flight_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/frequency_cap_event_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/frequency_cap_level.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/frequency_cap_time_unit.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/gender_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/geo_target_constant_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/geo_targeting_restriction.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/geo_targeting_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/google_ads_field_category.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/google_ads_field_data_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/hotel_date_selection_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/hotel_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/hotel_price_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/hotel_rate_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/income_range_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/interaction_event_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/interaction_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/invoice_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/job_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/keyword_match_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/keyword_plan_competition_level.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/keyword_plan_forecast_interval.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/keyword_plan_network.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/label_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/legacy_app_install_ad_app_store.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/listing_custom_attribute_index.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/listing_group_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/local_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/location_extension_targeting_criterion_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/location_group_radius_units.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/location_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/manager_link_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/matching_function_context_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/matching_function_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/media_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/merchant_center_link_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/message_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/mime_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/minute_of_hour.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/mobile_device_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/month_of_year.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/mutate_job_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/negative_geo_target_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/operating_system_version_operator_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/page_one_promoted_strategy_goal.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/parental_status_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/payment_mode.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/placeholder_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/placement_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/policy_approval_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/policy_review_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/policy_topic_entry_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/policy_topic_evidence_destination_mismatch_url_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/policy_topic_evidence_destination_not_working_device.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/policy_topic_evidence_destination_not_working_dns_error_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/positive_geo_target_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/preferred_content_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/price_extension_price_qualifier.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/price_extension_price_unit.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/price_extension_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/price_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/product_bidding_category_level.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/product_bidding_category_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/product_channel.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/product_channel_exclusivity.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/product_condition.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/product_type_level.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/promotion_extension_discount_modifier.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/promotion_extension_occasion.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/promotion_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/proximity_radius_units.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/quality_score_bucket.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/reach_plan_ad_length.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/reach_plan_age_range.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/real_estate_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/recommendation_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/search_engine_results_page_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/search_term_match_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/search_term_targeting_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/served_asset_field_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/shared_set_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/shared_set_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/simulation_modification_method.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/simulation_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/sitelink_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/slot.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/spending_limit_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/structured_snippet_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/system_managed_entity_source.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/target_cpa_opt_in_recommendation_goal.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/target_impression_share_location.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/targeting_dimension.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/time_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/tracking_code_page_format.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/tracking_code_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/travel_placeholder_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_interest_taxonomy_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_access_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_closing_reason.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_combined_rule_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_crm_data_source_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_date_rule_item_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_logical_rule_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_membership_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_number_rule_item_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_prepopulation_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_rule_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_size_range.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_string_rule_item_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/user_list_type.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/vanity_pharma_display_url_mode.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/vanity_pharma_text.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/webpage_condition_operand.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/enums/webpage_condition_operator.proto": label.New("go_googleapis", "google/ads/googleads/v2/enums", "enums_proto"), - "google/ads/googleads/v2/errors/access_invitation_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/account_budget_proposal_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/ad_customizer_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/ad_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/ad_group_ad_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/ad_group_bid_modifier_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/ad_group_criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/ad_group_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/ad_group_feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/ad_parameter_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/ad_sharing_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/adx_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/asset_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/authentication_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/authorization_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/bidding_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/bidding_strategy_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/billing_setup_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/campaign_budget_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/campaign_criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/campaign_draft_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/campaign_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/campaign_experiment_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/campaign_feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/campaign_shared_set_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/change_status_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/collection_size_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/context_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/conversion_action_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/conversion_adjustment_upload_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/conversion_upload_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/country_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/currency_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/custom_interest_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/customer_client_link_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/customer_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/customer_feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/customer_manager_link_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/database_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/date_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/date_range_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/distinct_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/enum_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/errors.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/extension_feed_item_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/extension_setting_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/feed_attribute_reference_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/feed_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/feed_item_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/feed_item_target_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/feed_item_validation_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/feed_mapping_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/field_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/field_mask_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/function_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/function_parsing_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/geo_target_constant_suggestion_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/header_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/id_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/image_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/internal_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/invoice_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/keyword_plan_ad_group_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/keyword_plan_campaign_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/keyword_plan_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/keyword_plan_idea_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/keyword_plan_keyword_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/keyword_plan_negative_keyword_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/label_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/language_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/list_operation_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/manager_link_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/media_bundle_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/media_file_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/media_upload_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/multiplier_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/mutate_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/mutate_job_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/new_resource_creation_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/not_empty_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/not_whitelisted_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/null_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/operation_access_denied_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/operator_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/partial_failure_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/policy_finding_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/policy_validation_parameter_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/policy_violation_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/query_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/quota_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/range_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/reach_plan_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/recommendation_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/region_code_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/request_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/resource_access_denied_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/resource_count_limit_exceeded_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/setting_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/shared_criterion_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/shared_set_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/size_limit_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/string_format_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/string_length_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/url_field_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/user_list_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/errors/youtube_video_registration_error.proto": label.New("go_googleapis", "google/ads/googleads/v2/errors", "errors_proto"), - "google/ads/googleads/v2/resources/account_budget.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/account_budget_proposal.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group_ad.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group_ad_asset_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group_ad_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group_audience_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group_bid_modifier.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group_criterion_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group_criterion_simulation.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group_extension_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group_feed.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_group_simulation.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_parameter.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/ad_schedule_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/age_range_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/asset.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/bidding_strategy.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/billing_setup.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/campaign.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/campaign_audience_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/campaign_bid_modifier.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/campaign_budget.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/campaign_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/campaign_criterion_simulation.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/campaign_draft.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/campaign_experiment.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/campaign_extension_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/campaign_feed.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/campaign_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/campaign_shared_set.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/carrier_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/change_status.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/click_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/conversion_action.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/custom_interest.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/customer.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/customer_client.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/customer_client_link.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/customer_extension_setting.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/customer_feed.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/customer_label.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/customer_manager_link.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/customer_negative_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/detail_placement_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/display_keyword_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/distance_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/domain_category.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/dynamic_search_ads_search_term_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/expanded_landing_page_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/extension_feed_item.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/feed.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/feed_item.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/feed_item_target.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/feed_mapping.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/feed_placeholder_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/gender_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/geo_target_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/geographic_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/google_ads_field.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/group_placement_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/hotel_group_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/hotel_performance_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/invoice.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/keyword_plan.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/keyword_plan_ad_group.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/keyword_plan_campaign.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/keyword_plan_keyword.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/keyword_plan_negative_keyword.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/keyword_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/label.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/landing_page_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/language_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/location_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/managed_placement_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/media_file.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/merchant_center_link.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/mobile_app_category_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/mobile_device_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/mutate_job.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/operating_system_version_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/paid_organic_search_term_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/parental_status_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/payments_account.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/product_bidding_category_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/product_group_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/recommendation.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/remarketing_action.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/search_term_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/shared_criterion.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/shared_set.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/shopping_performance_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/topic_constant.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/topic_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/user_interest.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/user_list.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/user_location_view.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/resources/video.proto": label.New("go_googleapis", "google/ads/googleads/v2/resources", "resources_proto"), - "google/ads/googleads/v2/services/account_budget_proposal_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/account_budget_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_ad_asset_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_ad_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_ad_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_audience_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_bid_modifier_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_criterion_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_criterion_simulation_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_extension_setting_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_group_simulation_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_parameter_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_schedule_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/ad_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/age_range_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/asset_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/bidding_strategy_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/billing_setup_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/campaign_audience_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/campaign_bid_modifier_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/campaign_budget_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/campaign_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/campaign_criterion_simulation_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/campaign_draft_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/campaign_experiment_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/campaign_extension_setting_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/campaign_feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/campaign_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/campaign_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/campaign_shared_set_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/carrier_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/change_status_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/click_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/conversion_action_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/conversion_adjustment_upload_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/conversion_upload_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/custom_interest_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/customer_client_link_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/customer_client_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/customer_extension_setting_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/customer_feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/customer_label_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/customer_manager_link_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/customer_negative_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/customer_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/detail_placement_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/display_keyword_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/distance_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/domain_category_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/dynamic_search_ads_search_term_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/expanded_landing_page_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/extension_feed_item_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/feed_item_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/feed_item_target_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/feed_mapping_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/feed_placeholder_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/feed_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/gender_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/geo_target_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/geographic_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/google_ads_field_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/google_ads_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/group_placement_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/hotel_group_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/hotel_performance_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/invoice_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/keyword_plan_ad_group_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/keyword_plan_campaign_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/keyword_plan_idea_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/keyword_plan_keyword_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/keyword_plan_negative_keyword_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/keyword_plan_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/keyword_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/label_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/landing_page_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/language_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/location_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/managed_placement_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/media_file_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/merchant_center_link_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/mobile_app_category_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/mobile_device_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/mutate_job_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/operating_system_version_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/paid_organic_search_term_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/parental_status_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/payments_account_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/product_bidding_category_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/product_group_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/reach_plan_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/recommendation_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/remarketing_action_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/search_term_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/shared_criterion_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/shared_set_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/shopping_performance_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/topic_constant_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/topic_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/user_interest_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/user_list_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/user_location_view_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/ads/googleads/v2/services/video_service.proto": label.New("go_googleapis", "google/ads/googleads/v2/services", "services_proto"), - "google/api/annotations.proto": label.New("go_googleapis", "google/api", "annotations_proto"), - "google/api/auth.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/backend.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/billing.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/client.proto": label.New("go_googleapis", "google/api", "annotations_proto"), - "google/api/config_change.proto": label.New("go_googleapis", "google/api", "configchange_proto"), - "google/api/consumer.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/context.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/control.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/distribution.proto": label.New("go_googleapis", "google/api", "distribution_proto"), - "google/api/documentation.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/endpoint.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/expr/v1alpha1/cel_service.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_proto"), - "google/api/expr/v1alpha1/checked.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_proto"), - "google/api/expr/v1alpha1/conformance_service.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_proto"), - "google/api/expr/v1alpha1/eval.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_proto"), - "google/api/expr/v1alpha1/explain.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_proto"), - "google/api/expr/v1alpha1/syntax.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_proto"), - "google/api/expr/v1alpha1/value.proto": label.New("go_googleapis", "google/api/expr/v1alpha1", "expr_proto"), - "google/api/expr/v1beta1/decl.proto": label.New("go_googleapis", "google/api/expr/v1beta1", "expr_proto"), - "google/api/expr/v1beta1/eval.proto": label.New("go_googleapis", "google/api/expr/v1beta1", "expr_proto"), - "google/api/expr/v1beta1/expr.proto": label.New("go_googleapis", "google/api/expr/v1beta1", "expr_proto"), - "google/api/expr/v1beta1/source.proto": label.New("go_googleapis", "google/api/expr/v1beta1", "expr_proto"), - "google/api/expr/v1beta1/value.proto": label.New("go_googleapis", "google/api/expr/v1beta1", "expr_proto"), - "google/api/field_behavior.proto": label.New("go_googleapis", "google/api", "annotations_proto"), - "google/api/http.proto": label.New("go_googleapis", "google/api", "annotations_proto"), - "google/api/httpbody.proto": label.New("go_googleapis", "google/api", "httpbody_proto"), - "google/api/label.proto": label.New("go_googleapis", "google/api", "label_proto"), - "google/api/launch_stage.proto": label.New("go_googleapis", "google/api", "api_proto"), - "google/api/log.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/logging.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/metric.proto": label.New("go_googleapis", "google/api", "metric_proto"), - "google/api/monitored_resource.proto": label.New("go_googleapis", "google/api", "monitoredres_proto"), - "google/api/monitoring.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/quota.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/resource.proto": label.New("go_googleapis", "google/api", "annotations_proto"), - "google/api/service.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/servicecontrol/v1/check_error.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_proto"), - "google/api/servicecontrol/v1/distribution.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_proto"), - "google/api/servicecontrol/v1/log_entry.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_proto"), - "google/api/servicecontrol/v1/metric_value.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_proto"), - "google/api/servicecontrol/v1/operation.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_proto"), - "google/api/servicecontrol/v1/quota_controller.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_proto"), - "google/api/servicecontrol/v1/service_controller.proto": label.New("go_googleapis", "google/api/servicecontrol/v1", "servicecontrol_proto"), - "google/api/servicemanagement/v1/resources.proto": label.New("go_googleapis", "google/api/servicemanagement/v1", "servicemanagement_proto"), - "google/api/servicemanagement/v1/servicemanager.proto": label.New("go_googleapis", "google/api/servicemanagement/v1", "servicemanagement_proto"), - "google/api/source_info.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/system_parameter.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/api/usage.proto": label.New("go_googleapis", "google/api", "serviceconfig_proto"), - "google/appengine/legacy/audit_data.proto": label.New("go_googleapis", "google/appengine/legacy", "legacy_proto"), - "google/appengine/logging/v1/request_log.proto": label.New("go_googleapis", "google/appengine/logging/v1", "logging_proto"), - "google/appengine/v1/app_yaml.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_proto"), - "google/appengine/v1/appengine.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_proto"), - "google/appengine/v1/application.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_proto"), - "google/appengine/v1/audit_data.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_proto"), - "google/appengine/v1/deploy.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_proto"), - "google/appengine/v1/instance.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_proto"), - "google/appengine/v1/location.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_proto"), - "google/appengine/v1/operation.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_proto"), - "google/appengine/v1/service.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_proto"), - "google/appengine/v1/version.proto": label.New("go_googleapis", "google/appengine/v1", "appengine_proto"), - "google/assistant/embedded/v1alpha1/embedded_assistant.proto": label.New("go_googleapis", "google/assistant/embedded/v1alpha1", "embedded_proto"), - "google/assistant/embedded/v1alpha2/embedded_assistant.proto": label.New("go_googleapis", "google/assistant/embedded/v1alpha2", "embedded_proto"), - "google/bigtable/admin/cluster/v1/bigtable_cluster_data.proto": label.New("go_googleapis", "google/bigtable/admin/cluster/v1", "cluster_proto"), - "google/bigtable/admin/cluster/v1/bigtable_cluster_service.proto": label.New("go_googleapis", "google/bigtable/admin/cluster/v1", "cluster_proto"), - "google/bigtable/admin/cluster/v1/bigtable_cluster_service_messages.proto": label.New("go_googleapis", "google/bigtable/admin/cluster/v1", "cluster_proto"), - "google/bigtable/admin/table/v1/bigtable_table_data.proto": label.New("go_googleapis", "google/bigtable/admin/table/v1", "table_proto"), - "google/bigtable/admin/table/v1/bigtable_table_service.proto": label.New("go_googleapis", "google/bigtable/admin/table/v1", "table_proto"), - "google/bigtable/admin/table/v1/bigtable_table_service_messages.proto": label.New("go_googleapis", "google/bigtable/admin/table/v1", "table_proto"), - "google/bigtable/admin/v2/bigtable_instance_admin.proto": label.New("go_googleapis", "google/bigtable/admin/v2", "admin_proto"), - "google/bigtable/admin/v2/bigtable_table_admin.proto": label.New("go_googleapis", "google/bigtable/admin/v2", "admin_proto"), - "google/bigtable/admin/v2/common.proto": label.New("go_googleapis", "google/bigtable/admin/v2", "admin_proto"), - "google/bigtable/admin/v2/instance.proto": label.New("go_googleapis", "google/bigtable/admin/v2", "admin_proto"), - "google/bigtable/admin/v2/table.proto": label.New("go_googleapis", "google/bigtable/admin/v2", "admin_proto"), - "google/bigtable/v1/bigtable_data.proto": label.New("go_googleapis", "google/bigtable/v1", "bigtable_proto"), - "google/bigtable/v1/bigtable_service.proto": label.New("go_googleapis", "google/bigtable/v1", "bigtable_proto"), - "google/bigtable/v1/bigtable_service_messages.proto": label.New("go_googleapis", "google/bigtable/v1", "bigtable_proto"), - "google/bigtable/v2/bigtable.proto": label.New("go_googleapis", "google/bigtable/v2", "bigtable_proto"), - "google/bigtable/v2/data.proto": label.New("go_googleapis", "google/bigtable/v2", "bigtable_proto"), - "google/bytestream/bytestream.proto": label.New("go_googleapis", "google/bytestream", "bytestream_proto"), - "google/cloud/asset/v1/asset_service.proto": label.New("go_googleapis", "google/cloud/asset/v1", "asset_proto"), - "google/cloud/asset/v1/assets.proto": label.New("go_googleapis", "google/cloud/asset/v1", "asset_proto"), - "google/cloud/asset/v1beta1/asset_service.proto": label.New("go_googleapis", "google/cloud/asset/v1beta1", "asset_proto"), - "google/cloud/asset/v1beta1/assets.proto": label.New("go_googleapis", "google/cloud/asset/v1beta1", "asset_proto"), - "google/cloud/asset/v1p2beta1/asset_service.proto": label.New("go_googleapis", "google/cloud/asset/v1p2beta1", "asset_proto"), - "google/cloud/asset/v1p2beta1/assets.proto": label.New("go_googleapis", "google/cloud/asset/v1p2beta1", "asset_proto"), - "google/cloud/audit/audit_log.proto": label.New("go_googleapis", "google/cloud/audit", "audit_proto"), - "google/cloud/automl/v1/annotation_payload.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_proto"), - "google/cloud/automl/v1/data_items.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_proto"), - "google/cloud/automl/v1/dataset.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_proto"), - "google/cloud/automl/v1/io.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_proto"), - "google/cloud/automl/v1/model.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_proto"), - "google/cloud/automl/v1/model_evaluation.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_proto"), - "google/cloud/automl/v1/operations.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_proto"), - "google/cloud/automl/v1/prediction_service.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_proto"), - "google/cloud/automl/v1/service.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_proto"), - "google/cloud/automl/v1/translation.proto": label.New("go_googleapis", "google/cloud/automl/v1", "automl_proto"), - "google/cloud/automl/v1beta1/annotation_payload.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/annotation_spec.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/classification.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/column_spec.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/data_items.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/data_stats.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/data_types.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/dataset.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/detection.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/geometry.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/image.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/io.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/model.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/model_evaluation.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/operations.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/prediction_service.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/ranges.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/regression.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/service.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/table_spec.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/tables.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/temporal.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/text.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/text_extraction.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/text_segment.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/text_sentiment.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/translation.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/automl/v1beta1/video.proto": label.New("go_googleapis", "google/cloud/automl/v1beta1", "automl_proto"), - "google/cloud/bigquery/datatransfer/v1/datasource.proto": label.New("go_googleapis", "google/cloud/bigquery/datatransfer/v1", "datatransfer_proto"), - "google/cloud/bigquery/datatransfer/v1/datatransfer.proto": label.New("go_googleapis", "google/cloud/bigquery/datatransfer/v1", "datatransfer_proto"), - "google/cloud/bigquery/datatransfer/v1/transfer.proto": label.New("go_googleapis", "google/cloud/bigquery/datatransfer/v1", "datatransfer_proto"), - "google/cloud/bigquery/logging/v1/audit_data.proto": label.New("go_googleapis", "google/cloud/bigquery/logging/v1", "logging_proto"), - "google/cloud/bigquery/storage/v1beta1/arrow.proto": label.New("go_googleapis", "google/cloud/bigquery/storage/v1beta1", "storage_proto"), - "google/cloud/bigquery/storage/v1beta1/avro.proto": label.New("go_googleapis", "google/cloud/bigquery/storage/v1beta1", "storage_proto"), - "google/cloud/bigquery/storage/v1beta1/read_options.proto": label.New("go_googleapis", "google/cloud/bigquery/storage/v1beta1", "storage_proto"), - "google/cloud/bigquery/storage/v1beta1/storage.proto": label.New("go_googleapis", "google/cloud/bigquery/storage/v1beta1", "storage_proto"), - "google/cloud/bigquery/storage/v1beta1/table_reference.proto": label.New("go_googleapis", "google/cloud/bigquery/storage/v1beta1", "storage_proto"), - "google/cloud/bigquery/v2/encryption_config.proto": label.New("go_googleapis", "google/cloud/bigquery/v2", "bigquery_proto"), - "google/cloud/bigquery/v2/model.proto": label.New("go_googleapis", "google/cloud/bigquery/v2", "bigquery_proto"), - "google/cloud/bigquery/v2/model_reference.proto": label.New("go_googleapis", "google/cloud/bigquery/v2", "bigquery_proto"), - "google/cloud/bigquery/v2/standard_sql.proto": label.New("go_googleapis", "google/cloud/bigquery/v2", "bigquery_proto"), - "google/cloud/billing/v1/cloud_billing.proto": label.New("go_googleapis", "google/cloud/billing/v1", "billing_proto"), - "google/cloud/binaryauthorization/v1beta1/resources.proto": label.New("go_googleapis", "google/cloud/binaryauthorization/v1beta1", "binaryauthorization_proto"), - "google/cloud/binaryauthorization/v1beta1/service.proto": label.New("go_googleapis", "google/cloud/binaryauthorization/v1beta1", "binaryauthorization_proto"), - "google/cloud/datacatalog/v1beta1/datacatalog.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_proto"), - "google/cloud/datacatalog/v1beta1/gcs_fileset_spec.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_proto"), - "google/cloud/datacatalog/v1beta1/schema.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_proto"), - "google/cloud/datacatalog/v1beta1/search.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_proto"), - "google/cloud/datacatalog/v1beta1/table_spec.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_proto"), - "google/cloud/datacatalog/v1beta1/tags.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_proto"), - "google/cloud/datacatalog/v1beta1/timestamps.proto": label.New("go_googleapis", "google/cloud/datacatalog/v1beta1", "datacatalog_proto"), - "google/cloud/datalabeling/v1beta1/annotation.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_proto"), - "google/cloud/datalabeling/v1beta1/annotation_spec_set.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_proto"), - "google/cloud/datalabeling/v1beta1/data_labeling_service.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_proto"), - "google/cloud/datalabeling/v1beta1/data_payloads.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_proto"), - "google/cloud/datalabeling/v1beta1/dataset.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_proto"), - "google/cloud/datalabeling/v1beta1/evaluation.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_proto"), - "google/cloud/datalabeling/v1beta1/evaluation_job.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_proto"), - "google/cloud/datalabeling/v1beta1/human_annotation_config.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_proto"), - "google/cloud/datalabeling/v1beta1/instruction.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_proto"), - "google/cloud/datalabeling/v1beta1/operations.proto": label.New("go_googleapis", "google/cloud/datalabeling/v1beta1", "datalabeling_proto"), - "google/cloud/dataproc/v1/autoscaling_policies.proto": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_proto"), - "google/cloud/dataproc/v1/clusters.proto": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_proto"), - "google/cloud/dataproc/v1/jobs.proto": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_proto"), - "google/cloud/dataproc/v1/operations.proto": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_proto"), - "google/cloud/dataproc/v1/shared.proto": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_proto"), - "google/cloud/dataproc/v1/workflow_templates.proto": label.New("go_googleapis", "google/cloud/dataproc/v1", "dataproc_proto"), - "google/cloud/dataproc/v1beta2/autoscaling_policies.proto": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_proto"), - "google/cloud/dataproc/v1beta2/clusters.proto": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_proto"), - "google/cloud/dataproc/v1beta2/jobs.proto": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_proto"), - "google/cloud/dataproc/v1beta2/operations.proto": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_proto"), - "google/cloud/dataproc/v1beta2/shared.proto": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_proto"), - "google/cloud/dataproc/v1beta2/workflow_templates.proto": label.New("go_googleapis", "google/cloud/dataproc/v1beta2", "dataproc_proto"), - "google/cloud/dialogflow/v2/agent.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_proto"), - "google/cloud/dialogflow/v2/audio_config.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_proto"), - "google/cloud/dialogflow/v2/context.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_proto"), - "google/cloud/dialogflow/v2/entity_type.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_proto"), - "google/cloud/dialogflow/v2/intent.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_proto"), - "google/cloud/dialogflow/v2/session.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_proto"), - "google/cloud/dialogflow/v2/session_entity_type.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_proto"), - "google/cloud/dialogflow/v2/webhook.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2", "dialogflow_proto"), - "google/cloud/dialogflow/v2beta1/agent.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_proto"), - "google/cloud/dialogflow/v2beta1/audio_config.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_proto"), - "google/cloud/dialogflow/v2beta1/context.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_proto"), - "google/cloud/dialogflow/v2beta1/document.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_proto"), - "google/cloud/dialogflow/v2beta1/entity_type.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_proto"), - "google/cloud/dialogflow/v2beta1/gcs.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_proto"), - "google/cloud/dialogflow/v2beta1/intent.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_proto"), - "google/cloud/dialogflow/v2beta1/knowledge_base.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_proto"), - "google/cloud/dialogflow/v2beta1/session.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_proto"), - "google/cloud/dialogflow/v2beta1/session_entity_type.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_proto"), - "google/cloud/dialogflow/v2beta1/validation_result.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_proto"), - "google/cloud/dialogflow/v2beta1/webhook.proto": label.New("go_googleapis", "google/cloud/dialogflow/v2beta1", "dialogflow_proto"), - "google/cloud/document/v1beta1/document.proto": label.New("go_googleapis", "google/cloud/document/v1beta1", "document_proto"), - "google/cloud/document/v1beta1/document_understanding.proto": label.New("go_googleapis", "google/cloud/document/v1beta1", "document_proto"), - "google/cloud/document/v1beta1/geometry.proto": label.New("go_googleapis", "google/cloud/document/v1beta1", "document_proto"), - "google/cloud/functions/v1beta2/functions.proto": label.New("go_googleapis", "google/cloud/functions/v1beta2", "functions_proto"), - "google/cloud/functions/v1beta2/operations.proto": label.New("go_googleapis", "google/cloud/functions/v1beta2", "functions_proto"), - "google/cloud/iot/v1/device_manager.proto": label.New("go_googleapis", "google/cloud/iot/v1", "iot_proto"), - "google/cloud/iot/v1/resources.proto": label.New("go_googleapis", "google/cloud/iot/v1", "iot_proto"), - "google/cloud/irm/v1alpha2/incidents.proto": label.New("go_googleapis", "google/cloud/irm/v1alpha2", "irm_proto"), - "google/cloud/irm/v1alpha2/incidents_service.proto": label.New("go_googleapis", "google/cloud/irm/v1alpha2", "irm_proto"), - "google/cloud/kms/v1/resources.proto": label.New("go_googleapis", "google/cloud/kms/v1", "kms_proto"), - "google/cloud/kms/v1/service.proto": label.New("go_googleapis", "google/cloud/kms/v1", "kms_proto"), - "google/cloud/language/v1/language_service.proto": label.New("go_googleapis", "google/cloud/language/v1", "language_proto"), - "google/cloud/language/v1beta1/language_service.proto": label.New("go_googleapis", "google/cloud/language/v1beta1", "language_proto"), - "google/cloud/language/v1beta2/language_service.proto": label.New("go_googleapis", "google/cloud/language/v1beta2", "language_proto"), - "google/cloud/location/locations.proto": label.New("go_googleapis", "google/cloud/location", "location_proto"), - "google/cloud/ml/v1/job_service.proto": label.New("go_googleapis", "google/cloud/ml/v1", "ml_proto"), - "google/cloud/ml/v1/model_service.proto": label.New("go_googleapis", "google/cloud/ml/v1", "ml_proto"), - "google/cloud/ml/v1/operation_metadata.proto": label.New("go_googleapis", "google/cloud/ml/v1", "ml_proto"), - "google/cloud/ml/v1/prediction_service.proto": label.New("go_googleapis", "google/cloud/ml/v1", "ml_proto"), - "google/cloud/ml/v1/project_service.proto": label.New("go_googleapis", "google/cloud/ml/v1", "ml_proto"), - "google/cloud/oslogin/common/common.proto": label.New("go_googleapis", "google/cloud/oslogin/common", "common_proto"), - "google/cloud/oslogin/v1/oslogin.proto": label.New("go_googleapis", "google/cloud/oslogin/v1", "oslogin_proto"), - "google/cloud/oslogin/v1alpha/oslogin.proto": label.New("go_googleapis", "google/cloud/oslogin/v1alpha", "oslogin_proto"), - "google/cloud/oslogin/v1beta/oslogin.proto": label.New("go_googleapis", "google/cloud/oslogin/v1beta", "oslogin_proto"), - "google/cloud/phishingprotection/v1beta1/phishingprotection.proto": label.New("go_googleapis", "google/cloud/phishingprotection/v1beta1", "phishingprotection_proto"), - "google/cloud/recaptchaenterprise/v1beta1/recaptchaenterprise.proto": label.New("go_googleapis", "google/cloud/recaptchaenterprise/v1beta1", "recaptchaenterprise_proto"), - "google/cloud/recommender/v1beta1/recommendation.proto": label.New("go_googleapis", "google/cloud/recommender/v1beta1", "recommender_proto"), - "google/cloud/recommender/v1beta1/recommender_service.proto": label.New("go_googleapis", "google/cloud/recommender/v1beta1", "recommender_proto"), - "google/cloud/redis/v1/cloud_redis.proto": label.New("go_googleapis", "google/cloud/redis/v1", "redis_proto"), - "google/cloud/redis/v1beta1/cloud_redis.proto": label.New("go_googleapis", "google/cloud/redis/v1beta1", "redis_proto"), - "google/cloud/resourcemanager/v2/folders.proto": label.New("go_googleapis", "google/cloud/resourcemanager/v2", "resourcemanager_proto"), - "google/cloud/runtimeconfig/v1beta1/resources.proto": label.New("go_googleapis", "google/cloud/runtimeconfig/v1beta1", "runtimeconfig_proto"), - "google/cloud/runtimeconfig/v1beta1/runtimeconfig.proto": label.New("go_googleapis", "google/cloud/runtimeconfig/v1beta1", "runtimeconfig_proto"), - "google/cloud/scheduler/v1/cloudscheduler.proto": label.New("go_googleapis", "google/cloud/scheduler/v1", "scheduler_proto"), - "google/cloud/scheduler/v1/job.proto": label.New("go_googleapis", "google/cloud/scheduler/v1", "scheduler_proto"), - "google/cloud/scheduler/v1/target.proto": label.New("go_googleapis", "google/cloud/scheduler/v1", "scheduler_proto"), - "google/cloud/scheduler/v1beta1/cloudscheduler.proto": label.New("go_googleapis", "google/cloud/scheduler/v1beta1", "scheduler_proto"), - "google/cloud/scheduler/v1beta1/job.proto": label.New("go_googleapis", "google/cloud/scheduler/v1beta1", "scheduler_proto"), - "google/cloud/scheduler/v1beta1/target.proto": label.New("go_googleapis", "google/cloud/scheduler/v1beta1", "scheduler_proto"), - "google/cloud/securitycenter/v1/asset.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_proto"), - "google/cloud/securitycenter/v1/finding.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_proto"), - "google/cloud/securitycenter/v1/organization_settings.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_proto"), - "google/cloud/securitycenter/v1/run_asset_discovery_response.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_proto"), - "google/cloud/securitycenter/v1/security_marks.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_proto"), - "google/cloud/securitycenter/v1/securitycenter_service.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_proto"), - "google/cloud/securitycenter/v1/source.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1", "securitycenter_proto"), - "google/cloud/securitycenter/v1beta1/asset.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_proto"), - "google/cloud/securitycenter/v1beta1/finding.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_proto"), - "google/cloud/securitycenter/v1beta1/organization_settings.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_proto"), - "google/cloud/securitycenter/v1beta1/security_marks.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_proto"), - "google/cloud/securitycenter/v1beta1/securitycenter_service.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_proto"), - "google/cloud/securitycenter/v1beta1/source.proto": label.New("go_googleapis", "google/cloud/securitycenter/v1beta1", "securitycenter_proto"), - "google/cloud/speech/v1/cloud_speech.proto": label.New("go_googleapis", "google/cloud/speech/v1", "speech_proto"), - "google/cloud/speech/v1p1beta1/cloud_speech.proto": label.New("go_googleapis", "google/cloud/speech/v1p1beta1", "speech_proto"), - "google/cloud/support/common.proto": label.New("go_googleapis", "google/cloud/support", "common_proto"), - "google/cloud/support/v1alpha1/cloud_support.proto": label.New("go_googleapis", "google/cloud/support/v1alpha1", "support_proto"), - "google/cloud/talent/v4beta1/application.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/application_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/batch.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/common.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/company.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/company_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/completion_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/event.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/event_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/filters.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/histogram.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/job.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/job_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/profile.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/profile_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/tenant.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/talent/v4beta1/tenant_service.proto": label.New("go_googleapis", "google/cloud/talent/v4beta1", "talent_proto"), - "google/cloud/tasks/v2/cloudtasks.proto": label.New("go_googleapis", "google/cloud/tasks/v2", "tasks_proto"), - "google/cloud/tasks/v2/queue.proto": label.New("go_googleapis", "google/cloud/tasks/v2", "tasks_proto"), - "google/cloud/tasks/v2/target.proto": label.New("go_googleapis", "google/cloud/tasks/v2", "tasks_proto"), - "google/cloud/tasks/v2/task.proto": label.New("go_googleapis", "google/cloud/tasks/v2", "tasks_proto"), - "google/cloud/tasks/v2beta2/cloudtasks.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta2", "tasks_proto"), - "google/cloud/tasks/v2beta2/queue.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta2", "tasks_proto"), - "google/cloud/tasks/v2beta2/target.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta2", "tasks_proto"), - "google/cloud/tasks/v2beta2/task.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta2", "tasks_proto"), - "google/cloud/tasks/v2beta3/cloudtasks.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta3", "tasks_proto"), - "google/cloud/tasks/v2beta3/queue.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta3", "tasks_proto"), - "google/cloud/tasks/v2beta3/target.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta3", "tasks_proto"), - "google/cloud/tasks/v2beta3/task.proto": label.New("go_googleapis", "google/cloud/tasks/v2beta3", "tasks_proto"), - "google/cloud/texttospeech/v1/cloud_tts.proto": label.New("go_googleapis", "google/cloud/texttospeech/v1", "texttospeech_proto"), - "google/cloud/texttospeech/v1beta1/cloud_tts.proto": label.New("go_googleapis", "google/cloud/texttospeech/v1beta1", "texttospeech_proto"), - "google/cloud/translate/v3/translation_service.proto": label.New("go_googleapis", "google/cloud/translate/v3", "translate_proto"), - "google/cloud/translate/v3beta1/translation_service.proto": label.New("go_googleapis", "google/cloud/translate/v3beta1", "translate_proto"), - "google/cloud/videointelligence/v1/video_intelligence.proto": label.New("go_googleapis", "google/cloud/videointelligence/v1", "videointelligence_proto"), - "google/cloud/videointelligence/v1beta1/video_intelligence.proto": label.New("go_googleapis", "google/cloud/videointelligence/v1beta1", "videointelligence_proto"), - "google/cloud/videointelligence/v1beta2/video_intelligence.proto": label.New("go_googleapis", "google/cloud/videointelligence/v1beta2", "videointelligence_proto"), - "google/cloud/videointelligence/v1p1beta1/video_intelligence.proto": label.New("go_googleapis", "google/cloud/videointelligence/v1p1beta1", "videointelligence_proto"), - "google/cloud/videointelligence/v1p2beta1/video_intelligence.proto": label.New("go_googleapis", "google/cloud/videointelligence/v1p2beta1", "videointelligence_proto"), - "google/cloud/videointelligence/v1p3beta1/video_intelligence.proto": label.New("go_googleapis", "google/cloud/videointelligence/v1p3beta1", "videointelligence_proto"), - "google/cloud/vision/v1/geometry.proto": label.New("go_googleapis", "google/cloud/vision/v1", "vision_proto"), - "google/cloud/vision/v1/image_annotator.proto": label.New("go_googleapis", "google/cloud/vision/v1", "vision_proto"), - "google/cloud/vision/v1/product_search.proto": label.New("go_googleapis", "google/cloud/vision/v1", "vision_proto"), - "google/cloud/vision/v1/product_search_service.proto": label.New("go_googleapis", "google/cloud/vision/v1", "vision_proto"), - "google/cloud/vision/v1/text_annotation.proto": label.New("go_googleapis", "google/cloud/vision/v1", "vision_proto"), - "google/cloud/vision/v1/web_detection.proto": label.New("go_googleapis", "google/cloud/vision/v1", "vision_proto"), - "google/cloud/vision/v1p1beta1/geometry.proto": label.New("go_googleapis", "google/cloud/vision/v1p1beta1", "vision_proto"), - "google/cloud/vision/v1p1beta1/image_annotator.proto": label.New("go_googleapis", "google/cloud/vision/v1p1beta1", "vision_proto"), - "google/cloud/vision/v1p1beta1/text_annotation.proto": label.New("go_googleapis", "google/cloud/vision/v1p1beta1", "vision_proto"), - "google/cloud/vision/v1p1beta1/web_detection.proto": label.New("go_googleapis", "google/cloud/vision/v1p1beta1", "vision_proto"), - "google/cloud/vision/v1p2beta1/geometry.proto": label.New("go_googleapis", "google/cloud/vision/v1p2beta1", "vision_proto"), - "google/cloud/vision/v1p2beta1/image_annotator.proto": label.New("go_googleapis", "google/cloud/vision/v1p2beta1", "vision_proto"), - "google/cloud/vision/v1p2beta1/text_annotation.proto": label.New("go_googleapis", "google/cloud/vision/v1p2beta1", "vision_proto"), - "google/cloud/vision/v1p2beta1/web_detection.proto": label.New("go_googleapis", "google/cloud/vision/v1p2beta1", "vision_proto"), - "google/cloud/vision/v1p3beta1/geometry.proto": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_proto"), - "google/cloud/vision/v1p3beta1/image_annotator.proto": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_proto"), - "google/cloud/vision/v1p3beta1/product_search.proto": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_proto"), - "google/cloud/vision/v1p3beta1/product_search_service.proto": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_proto"), - "google/cloud/vision/v1p3beta1/text_annotation.proto": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_proto"), - "google/cloud/vision/v1p3beta1/web_detection.proto": label.New("go_googleapis", "google/cloud/vision/v1p3beta1", "vision_proto"), - "google/cloud/vision/v1p4beta1/geometry.proto": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_proto"), - "google/cloud/vision/v1p4beta1/image_annotator.proto": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_proto"), - "google/cloud/vision/v1p4beta1/product_search.proto": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_proto"), - "google/cloud/vision/v1p4beta1/product_search_service.proto": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_proto"), - "google/cloud/vision/v1p4beta1/text_annotation.proto": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_proto"), - "google/cloud/vision/v1p4beta1/web_detection.proto": label.New("go_googleapis", "google/cloud/vision/v1p4beta1", "vision_proto"), - "google/cloud/webrisk/v1beta1/webrisk.proto": label.New("go_googleapis", "google/cloud/webrisk/v1beta1", "webrisk_proto"), - "google/cloud/websecurityscanner/v1alpha/crawled_url.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1alpha/finding.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1alpha/finding_addon.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1alpha/finding_type_stats.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1alpha/scan_config.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1alpha/scan_run.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1alpha/web_security_scanner.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1alpha", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1beta/crawled_url.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1beta/finding.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1beta/finding_addon.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1beta/finding_type_stats.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1beta/scan_config.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1beta/scan_config_error.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1beta/scan_run.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1beta/scan_run_error_trace.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1beta/scan_run_warning_trace.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_proto"), - "google/cloud/websecurityscanner/v1beta/web_security_scanner.proto": label.New("go_googleapis", "google/cloud/websecurityscanner/v1beta", "websecurityscanner_proto"), - "google/container/v1/cluster_service.proto": label.New("go_googleapis", "google/container/v1", "container_proto"), - "google/container/v1alpha1/cluster_service.proto": label.New("go_googleapis", "google/container/v1alpha1", "container_proto"), - "google/container/v1beta1/cluster_service.proto": label.New("go_googleapis", "google/container/v1beta1", "container_proto"), - "google/datastore/admin/v1/datastore_admin.proto": label.New("go_googleapis", "google/datastore/admin/v1", "admin_proto"), - "google/datastore/admin/v1/index.proto": label.New("go_googleapis", "google/datastore/admin/v1", "admin_proto"), - "google/datastore/admin/v1beta1/datastore_admin.proto": label.New("go_googleapis", "google/datastore/admin/v1beta1", "admin_proto"), - "google/datastore/v1/datastore.proto": label.New("go_googleapis", "google/datastore/v1", "datastore_proto"), - "google/datastore/v1/entity.proto": label.New("go_googleapis", "google/datastore/v1", "datastore_proto"), - "google/datastore/v1/query.proto": label.New("go_googleapis", "google/datastore/v1", "datastore_proto"), - "google/datastore/v1beta3/datastore.proto": label.New("go_googleapis", "google/datastore/v1beta3", "datastore_proto"), - "google/datastore/v1beta3/entity.proto": label.New("go_googleapis", "google/datastore/v1beta3", "datastore_proto"), - "google/datastore/v1beta3/query.proto": label.New("go_googleapis", "google/datastore/v1beta3", "datastore_proto"), - "google/devtools/build/v1/build_events.proto": label.New("go_googleapis", "google/devtools/build/v1", "build_proto"), - "google/devtools/build/v1/build_status.proto": label.New("go_googleapis", "google/devtools/build/v1", "build_proto"), - "google/devtools/build/v1/publish_build_event.proto": label.New("go_googleapis", "google/devtools/build/v1", "build_proto"), - "google/devtools/cloudbuild/v1/cloudbuild.proto": label.New("go_googleapis", "google/devtools/cloudbuild/v1", "cloudbuild_proto"), - "google/devtools/clouddebugger/v2/controller.proto": label.New("go_googleapis", "google/devtools/clouddebugger/v2", "clouddebugger_proto"), - "google/devtools/clouddebugger/v2/data.proto": label.New("go_googleapis", "google/devtools/clouddebugger/v2", "clouddebugger_proto"), - "google/devtools/clouddebugger/v2/debugger.proto": label.New("go_googleapis", "google/devtools/clouddebugger/v2", "clouddebugger_proto"), - "google/devtools/clouderrorreporting/v1beta1/common.proto": label.New("go_googleapis", "google/devtools/clouderrorreporting/v1beta1", "clouderrorreporting_proto"), - "google/devtools/clouderrorreporting/v1beta1/error_group_service.proto": label.New("go_googleapis", "google/devtools/clouderrorreporting/v1beta1", "clouderrorreporting_proto"), - "google/devtools/clouderrorreporting/v1beta1/error_stats_service.proto": label.New("go_googleapis", "google/devtools/clouderrorreporting/v1beta1", "clouderrorreporting_proto"), - "google/devtools/clouderrorreporting/v1beta1/report_errors_service.proto": label.New("go_googleapis", "google/devtools/clouderrorreporting/v1beta1", "clouderrorreporting_proto"), - "google/devtools/cloudprofiler/v2/profiler.proto": label.New("go_googleapis", "google/devtools/cloudprofiler/v2", "cloudprofiler_proto"), - "google/devtools/cloudtrace/v1/trace.proto": label.New("go_googleapis", "google/devtools/cloudtrace/v1", "cloudtrace_proto"), - "google/devtools/cloudtrace/v2/trace.proto": label.New("go_googleapis", "google/devtools/cloudtrace/v2", "cloudtrace_proto"), - "google/devtools/cloudtrace/v2/tracing.proto": label.New("go_googleapis", "google/devtools/cloudtrace/v2", "cloudtrace_proto"), - "google/devtools/containeranalysis/v1/containeranalysis.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1", "containeranalysis_proto"), - "google/devtools/containeranalysis/v1alpha1/bill_of_materials.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_proto"), - "google/devtools/containeranalysis/v1alpha1/containeranalysis.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_proto"), - "google/devtools/containeranalysis/v1alpha1/image_basis.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_proto"), - "google/devtools/containeranalysis/v1alpha1/package_vulnerability.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_proto"), - "google/devtools/containeranalysis/v1alpha1/provenance.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_proto"), - "google/devtools/containeranalysis/v1alpha1/source_context.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1alpha1", "containeranalysis_proto"), - "google/devtools/containeranalysis/v1beta1/attestation/attestation.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/attestation", "attestation_proto"), - "google/devtools/containeranalysis/v1beta1/build/build.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/build", "build_proto"), - "google/devtools/containeranalysis/v1beta1/common/common.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/common", "common_proto"), - "google/devtools/containeranalysis/v1beta1/containeranalysis.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1", "containeranalysis_proto"), - "google/devtools/containeranalysis/v1beta1/deployment/deployment.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/deployment", "deployment_proto"), - "google/devtools/containeranalysis/v1beta1/discovery/discovery.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/discovery", "discovery_proto"), - "google/devtools/containeranalysis/v1beta1/grafeas/grafeas.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/grafeas", "grafeas_proto"), - "google/devtools/containeranalysis/v1beta1/image/image.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/image", "image_proto"), - "google/devtools/containeranalysis/v1beta1/package/package.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/package", "package_proto"), - "google/devtools/containeranalysis/v1beta1/provenance/provenance.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/provenance", "provenance_proto"), - "google/devtools/containeranalysis/v1beta1/source/source.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/source", "source_proto"), - "google/devtools/containeranalysis/v1beta1/vulnerability/vulnerability.proto": label.New("go_googleapis", "google/devtools/containeranalysis/v1beta1/vulnerability", "vulnerability_proto"), - "google/devtools/remoteexecution/v1test/remote_execution.proto": label.New("go_googleapis", "google/devtools/remoteexecution/v1test", "remoteexecution_proto"), - "google/devtools/remoteworkers/v1test2/bots.proto": label.New("go_googleapis", "google/devtools/remoteworkers/v1test2", "remoteworkers_proto"), - "google/devtools/remoteworkers/v1test2/command.proto": label.New("go_googleapis", "google/devtools/remoteworkers/v1test2", "remoteworkers_proto"), - "google/devtools/remoteworkers/v1test2/tasks.proto": label.New("go_googleapis", "google/devtools/remoteworkers/v1test2", "remoteworkers_proto"), - "google/devtools/remoteworkers/v1test2/worker.proto": label.New("go_googleapis", "google/devtools/remoteworkers/v1test2", "remoteworkers_proto"), - "google/devtools/resultstore/v2/action.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/common.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/configuration.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/configured_target.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/coverage.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/coverage_summary.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/download_metadata.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/file.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/file_processing_error.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/file_set.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/invocation.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/resultstore_download.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/resultstore_file_download.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/resultstore_upload.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/target.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/test_suite.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/resultstore/v2/upload_metadata.proto": label.New("go_googleapis", "google/devtools/resultstore/v2", "resultstore_proto"), - "google/devtools/source/v1/source_context.proto": label.New("go_googleapis", "google/devtools/source/v1", "source_proto"), - "google/devtools/sourcerepo/v1/sourcerepo.proto": label.New("go_googleapis", "google/devtools/sourcerepo/v1", "sourcerepo_proto"), - "google/example/library/v1/library.proto": label.New("go_googleapis", "google/example/library/v1", "library_proto"), - "google/firebase/fcm/connection/v1alpha1/connection_api.proto": label.New("go_googleapis", "google/firebase/fcm/connection/v1alpha1", "connection_proto"), - "google/firestore/admin/v1/field.proto": label.New("go_googleapis", "google/firestore/admin/v1", "admin_proto"), - "google/firestore/admin/v1/firestore_admin.proto": label.New("go_googleapis", "google/firestore/admin/v1", "admin_proto"), - "google/firestore/admin/v1/index.proto": label.New("go_googleapis", "google/firestore/admin/v1", "admin_proto"), - "google/firestore/admin/v1/location.proto": label.New("go_googleapis", "google/firestore/admin/v1", "admin_proto"), - "google/firestore/admin/v1/operation.proto": label.New("go_googleapis", "google/firestore/admin/v1", "admin_proto"), - "google/firestore/admin/v1beta1/firestore_admin.proto": label.New("go_googleapis", "google/firestore/admin/v1beta1", "admin_proto"), - "google/firestore/admin/v1beta1/index.proto": label.New("go_googleapis", "google/firestore/admin/v1beta1", "admin_proto"), - "google/firestore/admin/v1beta1/location.proto": label.New("go_googleapis", "google/firestore/admin/v1beta1", "admin_proto"), - "google/firestore/admin/v1beta2/field.proto": label.New("go_googleapis", "google/firestore/admin/v1beta2", "admin_proto"), - "google/firestore/admin/v1beta2/firestore_admin.proto": label.New("go_googleapis", "google/firestore/admin/v1beta2", "admin_proto"), - "google/firestore/admin/v1beta2/index.proto": label.New("go_googleapis", "google/firestore/admin/v1beta2", "admin_proto"), - "google/firestore/admin/v1beta2/operation.proto": label.New("go_googleapis", "google/firestore/admin/v1beta2", "admin_proto"), - "google/firestore/v1/common.proto": label.New("go_googleapis", "google/firestore/v1", "firestore_proto"), - "google/firestore/v1/document.proto": label.New("go_googleapis", "google/firestore/v1", "firestore_proto"), - "google/firestore/v1/firestore.proto": label.New("go_googleapis", "google/firestore/v1", "firestore_proto"), - "google/firestore/v1/query.proto": label.New("go_googleapis", "google/firestore/v1", "firestore_proto"), - "google/firestore/v1/write.proto": label.New("go_googleapis", "google/firestore/v1", "firestore_proto"), - "google/firestore/v1beta1/common.proto": label.New("go_googleapis", "google/firestore/v1beta1", "firestore_proto"), - "google/firestore/v1beta1/document.proto": label.New("go_googleapis", "google/firestore/v1beta1", "firestore_proto"), - "google/firestore/v1beta1/firestore.proto": label.New("go_googleapis", "google/firestore/v1beta1", "firestore_proto"), - "google/firestore/v1beta1/query.proto": label.New("go_googleapis", "google/firestore/v1beta1", "firestore_proto"), - "google/firestore/v1beta1/write.proto": label.New("go_googleapis", "google/firestore/v1beta1", "firestore_proto"), - "google/genomics/v1/annotations.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_proto"), - "google/genomics/v1/cigar.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_proto"), - "google/genomics/v1/datasets.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_proto"), - "google/genomics/v1/operations.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_proto"), - "google/genomics/v1/position.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_proto"), - "google/genomics/v1/range.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_proto"), - "google/genomics/v1/readalignment.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_proto"), - "google/genomics/v1/readgroup.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_proto"), - "google/genomics/v1/readgroupset.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_proto"), - "google/genomics/v1/reads.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_proto"), - "google/genomics/v1/references.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_proto"), - "google/genomics/v1/variants.proto": label.New("go_googleapis", "google/genomics/v1", "genomics_proto"), - "google/genomics/v1alpha2/pipelines.proto": label.New("go_googleapis", "google/genomics/v1alpha2", "genomics_proto"), - "google/geo/type/viewport.proto": label.New("go_googleapis", "google/geo/type", "viewport_proto"), - "google/home/graph/v1/device.proto": label.New("go_googleapis", "google/home/graph/v1", "graph_proto"), - "google/home/graph/v1/homegraph.proto": label.New("go_googleapis", "google/home/graph/v1", "graph_proto"), - "google/iam/admin/v1/iam.proto": label.New("go_googleapis", "google/iam/admin/v1", "admin_proto"), - "google/iam/credentials/v1/common.proto": label.New("go_googleapis", "google/iam/credentials/v1", "credentials_proto"), - "google/iam/credentials/v1/iamcredentials.proto": label.New("go_googleapis", "google/iam/credentials/v1", "credentials_proto"), - "google/iam/v1/iam_policy.proto": label.New("go_googleapis", "google/iam/v1", "iam_proto"), - "google/iam/v1/logging/audit_data.proto": label.New("go_googleapis", "google/iam/v1/logging", "logging_proto"), - "google/iam/v1/options.proto": label.New("go_googleapis", "google/iam/v1", "iam_proto"), - "google/iam/v1/policy.proto": label.New("go_googleapis", "google/iam/v1", "iam_proto"), - "google/logging/type/http_request.proto": label.New("go_googleapis", "google/logging/type", "ltype_proto"), - "google/logging/type/log_severity.proto": label.New("go_googleapis", "google/logging/type", "ltype_proto"), - "google/logging/v2/log_entry.proto": label.New("go_googleapis", "google/logging/v2", "logging_proto"), - "google/logging/v2/logging.proto": label.New("go_googleapis", "google/logging/v2", "logging_proto"), - "google/logging/v2/logging_config.proto": label.New("go_googleapis", "google/logging/v2", "logging_proto"), - "google/logging/v2/logging_metrics.proto": label.New("go_googleapis", "google/logging/v2", "logging_proto"), - "google/longrunning/operations.proto": label.New("go_googleapis", "google/longrunning", "longrunning_proto"), - "google/monitoring/v3/alert.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/alert_service.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/common.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/dropped_labels.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/group.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/group_service.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/metric.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/metric_service.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/mutation_record.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/notification.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/notification_service.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/span_context.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/uptime.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/monitoring/v3/uptime_service.proto": label.New("go_googleapis", "google/monitoring/v3", "monitoring_proto"), - "google/privacy/dlp/v2/dlp.proto": label.New("go_googleapis", "google/privacy/dlp/v2", "dlp_proto"), - "google/privacy/dlp/v2/storage.proto": label.New("go_googleapis", "google/privacy/dlp/v2", "dlp_proto"), - "google/pubsub/v1/pubsub.proto": label.New("go_googleapis", "google/pubsub/v1", "pubsub_proto"), - "google/pubsub/v1beta2/pubsub.proto": label.New("go_googleapis", "google/pubsub/v1beta2", "pubsub_proto"), - "google/rpc/code.proto": label.New("go_googleapis", "google/rpc", "code_proto"), - "google/rpc/error_details.proto": label.New("go_googleapis", "google/rpc", "errdetails_proto"), - "google/rpc/status.proto": label.New("go_googleapis", "google/rpc", "status_proto"), - "google/spanner/admin/database/v1/spanner_database_admin.proto": label.New("go_googleapis", "google/spanner/admin/database/v1", "database_proto"), - "google/spanner/admin/instance/v1/spanner_instance_admin.proto": label.New("go_googleapis", "google/spanner/admin/instance/v1", "instance_proto"), - "google/spanner/v1/keys.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_proto"), - "google/spanner/v1/mutation.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_proto"), - "google/spanner/v1/query_plan.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_proto"), - "google/spanner/v1/result_set.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_proto"), - "google/spanner/v1/spanner.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_proto"), - "google/spanner/v1/transaction.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_proto"), - "google/spanner/v1/type.proto": label.New("go_googleapis", "google/spanner/v1", "spanner_proto"), - "google/storagetransfer/v1/transfer.proto": label.New("go_googleapis", "google/storagetransfer/v1", "storagetransfer_proto"), - "google/storagetransfer/v1/transfer_types.proto": label.New("go_googleapis", "google/storagetransfer/v1", "storagetransfer_proto"), - "google/streetview/publish/v1/resources.proto": label.New("go_googleapis", "google/streetview/publish/v1", "publish_proto"), - "google/streetview/publish/v1/rpcmessages.proto": label.New("go_googleapis", "google/streetview/publish/v1", "publish_proto"), - "google/streetview/publish/v1/streetview_publish.proto": label.New("go_googleapis", "google/streetview/publish/v1", "publish_proto"), - "google/type/calendar_period.proto": label.New("go_googleapis", "google/type", "calendarperiod_proto"), - "google/type/color.proto": label.New("go_googleapis", "google/type", "color_proto"), - "google/type/date.proto": label.New("go_googleapis", "google/type", "date_proto"), - "google/type/dayofweek.proto": label.New("go_googleapis", "google/type", "dayofweek_proto"), - "google/type/expr.proto": label.New("go_googleapis", "google/type", "expr_proto"), - "google/type/fraction.proto": label.New("go_googleapis", "google/type", "fraction_proto"), - "google/type/latlng.proto": label.New("go_googleapis", "google/type", "latlng_proto"), - "google/type/money.proto": label.New("go_googleapis", "google/type", "money_proto"), - "google/type/postal_address.proto": label.New("go_googleapis", "google/type", "postaladdress_proto"), - "google/type/quaternion.proto": label.New("go_googleapis", "google/type", "quaternion_proto"), - "google/type/timeofday.proto": label.New("go_googleapis", "google/type", "timeofday_proto"), - "google/watcher/v1/watch.proto": label.New("go_googleapis", "google/watcher/v1", "watcher_proto"), - "grafeas/v1/attestation.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_proto"), - "grafeas/v1/build.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_proto"), - "grafeas/v1/common.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_proto"), - "grafeas/v1/cvss.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_proto"), - "grafeas/v1/deployment.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_proto"), - "grafeas/v1/discovery.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_proto"), - "grafeas/v1/grafeas.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_proto"), - "grafeas/v1/image.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_proto"), - "grafeas/v1/package.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_proto"), - "grafeas/v1/provenance.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_proto"), - "grafeas/v1/vulnerability.proto": label.New("go_googleapis", "grafeas/v1", "grafeas_proto"), -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/lang.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/lang.go deleted file mode 100644 index fe009df88d..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/lang.go +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package proto provides support for protocol buffer rules. -// It generates proto_library rules only (not go_proto_library or any other -// language-specific implementations). -// -// Configuration -// -// Configuration is largely controlled by Mode. In disable mode, proto rules are -// left alone (neither generated nor deleted). In legacy mode, filegroups are -// emitted containing protos. In default mode, proto_library rules are -// emitted. The proto mode may be set with the -proto command line flag or the -// "# gazelle:proto" directive. -// -// The configuration is largely public, and other languages may depend on it. -// For example, go uses Mode to determine whether to generate go_proto_library -// rules and ignore static .pb.go files. -// -// Rule generation -// -// Currently, Gazelle generates at most one proto_library per directory. Protos -// in the same package are grouped together into a proto_library. If there are -// sources for multiple packages, the package name that matches the directory -// name will be chosen; if there is no such package, an error will be printed. -// We expect to provide support for multiple proto_libraries in the future -// when Go has support for multiple packages and we have better rule matching. -// The generated proto_library will be named after the directory, not the -// proto or the package. For example, for foo/bar/baz.proto, a proto_library -// rule will be generated named //foo/bar:bar_proto. -// -// Dependency resolution -// -// proto_library rules are indexed by their srcs attribute. Gazelle attempts -// to resolve proto imports (e.g., import foo/bar/bar.proto) to the -// proto_library that contains the named source file -// (e.g., //foo/bar:bar_proto). If no indexed proto_library provides the source -// file, Gazelle will guess a label, following conventions. -// -// No attempt is made to resolve protos to rules in external repositories, -// since there's no indication that a proto import comes from an external -// repository. In the future, build files in external repos will be indexed, -// so we can support this (#12). -// -// Gazelle has special cases for Well Known Types (i.e., imports of the form -// google/protobuf/*.proto). These are resolved to rules in -// @com_google_protobuf. -package proto - -import "github.com/bazelbuild/bazel-gazelle/language" - -const protoName = "proto" - -type protoLang struct{} - -func (_ *protoLang) Name() string { return protoName } - -func NewLanguage() language.Language { - return &protoLang{} -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/package.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/package.go deleted file mode 100644 index fba05f0c32..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/package.go +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package proto - -import "path/filepath" - -// Package contains metadata for a set of .proto files that have the -// same package name. This translates to a proto_library rule. -type Package struct { - Name string - Files map[string]FileInfo - Imports map[string]bool - Options map[string]string - HasServices bool -} - -func newPackage(name string) *Package { - return &Package{ - Name: name, - Files: map[string]FileInfo{}, - Imports: map[string]bool{}, - Options: map[string]string{}, - } -} - -func (p *Package) addFile(info FileInfo) { - p.Files[info.Name] = info - for _, imp := range info.Imports { - p.Imports[imp] = true - } - for _, opt := range info.Options { - p.Options[opt.Key] = opt.Value - } - p.HasServices = p.HasServices || info.HasServices -} - -func (p *Package) addGenFile(dir, name string) { - p.Files[name] = FileInfo{ - Name: name, - Path: filepath.Join(dir, filepath.FromSlash(name)), - } -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/proto.csv b/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/proto.csv deleted file mode 100644 index 06bd194c27..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/proto.csv +++ /dev/null @@ -1,1611 +0,0 @@ -# This file lists special protos that Gazelle knows how to import. This is used to generate -# code for proto and Go resolvers. -# -# Generated by internal/language/proto/gen/update_proto_csv.go -# Do not edit directly. -# -# proto name,proto label,go import path,go proto label -google/protobuf/any.proto,@com_google_protobuf//:any_proto,github.com/golang/protobuf/ptypes/any,@io_bazel_rules_go//proto/wkt:any_go_proto -google/protobuf/api.proto,@com_google_protobuf//:api_proto,google.golang.org/genproto/protobuf/api,@io_bazel_rules_go//proto/wkt:api_go_proto -google/protobuf/compiler/plugin.proto,@com_google_protobuf//:compiler_plugin_proto,github.com/golang/protobuf/protoc-gen-go/plugin,@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto -google/protobuf/descriptor.proto,@com_google_protobuf//:descriptor_proto,github.com/golang/protobuf/protoc-gen-go/descriptor,@io_bazel_rules_go//proto/wkt:descriptor_go_proto -google/protobuf/duration.proto,@com_google_protobuf//:duration_proto,github.com/golang/protobuf/ptypes/duration,@io_bazel_rules_go//proto/wkt:duration_go_proto -google/protobuf/empty.proto,@com_google_protobuf//:empty_proto,github.com/golang/protobuf/ptypes/empty,@io_bazel_rules_go//proto/wkt:empty_go_proto -google/protobuf/field_mask.proto,@com_google_protobuf//:field_mask_proto,google.golang.org/genproto/protobuf/field_mask,@io_bazel_rules_go//proto/wkt:field_mask_go_proto -google/protobuf/source_context.proto,@com_google_protobuf//:source_context_proto,google.golang.org/genproto/protobuf/source_context,@io_bazel_rules_go//proto/wkt:source_context_go_proto -google/protobuf/struct.proto,@com_google_protobuf//:struct_proto,github.com/golang/protobuf/ptypes/struct,@io_bazel_rules_go//proto/wkt:struct_go_proto -google/protobuf/timestamp.proto,@com_google_protobuf//:timestamp_proto,github.com/golang/protobuf/ptypes/timestamp,@io_bazel_rules_go//proto/wkt:timestamp_go_proto -google/protobuf/type.proto,@com_google_protobuf//:type_proto,google.golang.org/genproto/protobuf/ptype,@io_bazel_rules_go//proto/wkt:type_go_proto -google/protobuf/wrappers.proto,@com_google_protobuf//:wrappers_proto,github.com/golang/protobuf/ptypes/wrappers,@io_bazel_rules_go//proto/wkt:wrappers_go_proto -google/ads/googleads/v1/common/ad_asset.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/ad_type_infos.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/asset_types.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/bidding.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/click_location.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/criteria.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/criterion_category_availability.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/custom_parameter.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/dates.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/explorer_auto_optimizer_setting.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/extensions.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/feed_common.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/final_app_url.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/frequency_cap.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/keyword_plan_common.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/matching_function.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/metrics.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/policy.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/real_time_bidding_setting.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/segments.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/simulation.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/tag_snippet.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/targeting_setting.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/text_label.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/url_collection.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/user_lists.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/common/value.proto,@go_googleapis//google/ads/googleads/v1/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/common,@go_googleapis//google/ads/googleads/v1/common:common_go_proto -google/ads/googleads/v1/enums/access_reason.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/account_budget_proposal_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/account_budget_proposal_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/account_budget_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/ad_customizer_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/ad_group_ad_rotation_mode.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/ad_group_ad_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/ad_group_criterion_approval_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/ad_group_criterion_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/ad_group_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/ad_group_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/ad_network_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/ad_serving_optimization_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/ad_strength.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/ad_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/advertising_channel_sub_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/advertising_channel_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/affiliate_location_feed_relationship_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/affiliate_location_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/age_range_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/app_campaign_app_store.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/app_campaign_bidding_strategy_goal_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/app_payment_model_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/app_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/app_store.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/app_url_operating_system_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/asset_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/attribution_model.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/bid_modifier_source.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/bidding_source.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/bidding_strategy_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/bidding_strategy_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/billing_setup_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/brand_safety_suitability.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/budget_delivery_method.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/budget_period.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/budget_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/budget_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/call_conversion_reporting_state.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/call_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/callout_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/campaign_criterion_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/campaign_draft_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/campaign_experiment_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/campaign_experiment_traffic_split_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/campaign_experiment_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/campaign_serving_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/campaign_shared_set_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/campaign_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/change_status_operation.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/change_status_resource_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/click_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/content_label_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/conversion_action_category.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/conversion_action_counting_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/conversion_action_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/conversion_action_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/conversion_adjustment_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/conversion_attribution_event_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/conversion_lag_bucket.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/conversion_or_adjustment_lag_bucket.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/criterion_category_channel_availability_mode.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/criterion_category_locale_availability_mode.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/criterion_system_serving_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/criterion_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/custom_interest_member_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/custom_interest_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/custom_interest_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/custom_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/customer_match_upload_key_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/customer_pay_per_conversion_eligibility_failure_reason.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/data_driven_model_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/day_of_week.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/device.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/display_ad_format_setting.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/display_upload_product_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/dsa_page_feed_criterion_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/education_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/extension_setting_device.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/extension_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/external_conversion_source.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/feed_attribute_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/feed_item_quality_approval_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/feed_item_quality_disapproval_reason.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/feed_item_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/feed_item_target_device.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/feed_item_target_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/feed_item_validation_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/feed_link_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/feed_mapping_criterion_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/feed_mapping_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/feed_origin.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/feed_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/flight_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/frequency_cap_event_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/frequency_cap_level.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/frequency_cap_time_unit.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/gender_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/geo_target_constant_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/geo_targeting_restriction.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/geo_targeting_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/google_ads_field_category.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/google_ads_field_data_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/hotel_date_selection_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/hotel_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/hotel_rate_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/income_range_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/interaction_event_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/interaction_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/job_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/keyword_match_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/keyword_plan_competition_level.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/keyword_plan_forecast_interval.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/keyword_plan_network.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/label_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/legacy_app_install_ad_app_store.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/listing_custom_attribute_index.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/listing_group_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/local_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/location_extension_targeting_criterion_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/location_group_radius_units.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/location_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/manager_link_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/matching_function_context_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/matching_function_operator.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/media_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/merchant_center_link_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/message_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/mime_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/minute_of_hour.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/mobile_device_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/month_of_year.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/mutate_job_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/negative_geo_target_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/operating_system_version_operator_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/page_one_promoted_strategy_goal.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/parental_status_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/payment_mode.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/placeholder_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/placement_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/policy_approval_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/policy_review_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/policy_topic_entry_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/policy_topic_evidence_destination_mismatch_url_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/policy_topic_evidence_destination_not_working_device.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/positive_geo_target_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/preferred_content_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/price_extension_price_qualifier.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/price_extension_price_unit.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/price_extension_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/price_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/product_bidding_category_level.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/product_bidding_category_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/product_channel.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/product_channel_exclusivity.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/product_condition.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/product_type_level.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/promotion_extension_discount_modifier.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/promotion_extension_occasion.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/promotion_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/proximity_radius_units.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/quality_score_bucket.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/real_estate_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/recommendation_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/search_engine_results_page_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/search_term_match_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/search_term_targeting_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/served_asset_field_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/shared_set_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/shared_set_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/simulation_modification_method.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/simulation_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/sitelink_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/slot.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/spending_limit_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/structured_snippet_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/system_managed_entity_source.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/target_cpa_opt_in_recommendation_goal.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/target_impression_share_location.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/targeting_dimension.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/time_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/tracking_code_page_format.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/tracking_code_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/travel_placeholder_field.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_interest_taxonomy_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_access_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_closing_reason.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_combined_rule_operator.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_crm_data_source_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_date_rule_item_operator.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_logical_rule_operator.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_membership_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_number_rule_item_operator.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_prepopulation_status.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_rule_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_size_range.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_string_rule_item_operator.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/user_list_type.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/vanity_pharma_display_url_mode.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/vanity_pharma_text.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/webpage_condition_operand.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/enums/webpage_condition_operator.proto,@go_googleapis//google/ads/googleads/v1/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/enums,@go_googleapis//google/ads/googleads/v1/enums:enums_go_proto -google/ads/googleads/v1/errors/account_budget_proposal_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/ad_customizer_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/ad_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/ad_group_ad_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/ad_group_bid_modifier_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/ad_group_criterion_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/ad_group_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/ad_group_feed_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/ad_parameter_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/ad_sharing_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/adx_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/asset_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/authentication_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/authorization_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/bidding_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/bidding_strategy_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/billing_setup_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/campaign_budget_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/campaign_criterion_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/campaign_draft_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/campaign_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/campaign_experiment_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/campaign_feed_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/campaign_shared_set_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/change_status_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/collection_size_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/context_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/conversion_action_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/conversion_adjustment_upload_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/conversion_upload_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/country_code_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/criterion_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/custom_interest_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/customer_client_link_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/customer_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/customer_feed_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/customer_manager_link_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/database_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/date_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/date_range_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/distinct_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/enum_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/errors.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/extension_feed_item_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/extension_setting_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/feed_attribute_reference_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/feed_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/feed_item_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/feed_item_target_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/feed_item_validation_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/feed_mapping_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/field_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/field_mask_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/function_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/function_parsing_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/geo_target_constant_suggestion_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/header_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/id_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/image_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/internal_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/keyword_plan_ad_group_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/keyword_plan_campaign_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/keyword_plan_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/keyword_plan_idea_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/keyword_plan_keyword_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/keyword_plan_negative_keyword_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/label_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/language_code_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/list_operation_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/manager_link_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/media_bundle_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/media_file_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/media_upload_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/multiplier_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/mutate_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/mutate_job_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/new_resource_creation_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/not_empty_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/not_whitelisted_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/null_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/operation_access_denied_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/operator_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/partial_failure_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/policy_finding_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/policy_validation_parameter_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/policy_violation_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/query_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/quota_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/range_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/recommendation_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/region_code_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/request_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/resource_access_denied_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/resource_count_limit_exceeded_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/setting_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/shared_criterion_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/shared_set_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/size_limit_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/string_format_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/string_length_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/url_field_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/user_list_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/errors/youtube_video_registration_error.proto,@go_googleapis//google/ads/googleads/v1/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/errors,@go_googleapis//google/ads/googleads/v1/errors:errors_go_proto -google/ads/googleads/v1/resources/account_budget.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/account_budget_proposal.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_group.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_group_ad.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_group_ad_label.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_group_audience_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_group_bid_modifier.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_group_criterion.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_group_criterion_label.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_group_criterion_simulation.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_group_extension_setting.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_group_feed.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_group_label.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_group_simulation.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_parameter.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/ad_schedule_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/age_range_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/asset.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/bidding_strategy.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/billing_setup.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/campaign.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/campaign_audience_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/campaign_bid_modifier.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/campaign_budget.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/campaign_criterion.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/campaign_criterion_simulation.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/campaign_draft.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/campaign_experiment.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/campaign_extension_setting.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/campaign_feed.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/campaign_label.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/campaign_shared_set.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/carrier_constant.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/change_status.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/click_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/conversion_action.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/custom_interest.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/customer.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/customer_client.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/customer_client_link.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/customer_extension_setting.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/customer_feed.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/customer_label.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/customer_manager_link.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/customer_negative_criterion.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/detail_placement_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/display_keyword_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/domain_category.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/dynamic_search_ads_search_term_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/expanded_landing_page_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/extension_feed_item.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/feed.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/feed_item.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/feed_item_target.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/feed_mapping.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/feed_placeholder_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/gender_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/geo_target_constant.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/geographic_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/google_ads_field.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/group_placement_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/hotel_group_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/hotel_performance_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/keyword_plan.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/keyword_plan_ad_group.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/keyword_plan_campaign.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/keyword_plan_keyword.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/keyword_plan_negative_keyword.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/keyword_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/label.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/landing_page_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/language_constant.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/location_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/managed_placement_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/media_file.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/merchant_center_link.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/mobile_app_category_constant.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/mobile_device_constant.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/mutate_job.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/operating_system_version_constant.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/paid_organic_search_term_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/parental_status_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/payments_account.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/product_bidding_category_constant.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/product_group_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/recommendation.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/remarketing_action.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/search_term_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/shared_criterion.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/shared_set.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/shopping_performance_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/topic_constant.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/topic_view.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/user_interest.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/user_list.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/resources/video.proto,@go_googleapis//google/ads/googleads/v1/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/resources,@go_googleapis//google/ads/googleads/v1/resources:resources_go_proto -google/ads/googleads/v1/services/account_budget_proposal_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/account_budget_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_group_ad_label_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_group_ad_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_group_audience_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_group_bid_modifier_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_group_criterion_label_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_group_criterion_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_group_criterion_simulation_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_group_extension_setting_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_group_feed_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_group_label_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_group_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_group_simulation_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_parameter_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/ad_schedule_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/age_range_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/asset_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/bidding_strategy_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/billing_setup_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/campaign_audience_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/campaign_bid_modifier_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/campaign_budget_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/campaign_criterion_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/campaign_criterion_simulation_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/campaign_draft_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/campaign_experiment_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/campaign_extension_setting_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/campaign_feed_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/campaign_label_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/campaign_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/campaign_shared_set_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/carrier_constant_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/change_status_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/click_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/conversion_action_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/conversion_adjustment_upload_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/conversion_upload_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/custom_interest_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/customer_client_link_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/customer_client_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/customer_extension_setting_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/customer_feed_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/customer_label_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/customer_manager_link_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/customer_negative_criterion_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/customer_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/detail_placement_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/display_keyword_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/domain_category_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/dynamic_search_ads_search_term_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/expanded_landing_page_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/extension_feed_item_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/feed_item_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/feed_item_target_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/feed_mapping_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/feed_placeholder_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/feed_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/gender_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/geo_target_constant_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/geographic_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/google_ads_field_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/google_ads_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/group_placement_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/hotel_group_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/hotel_performance_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/keyword_plan_ad_group_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/keyword_plan_campaign_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/keyword_plan_idea_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/keyword_plan_keyword_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/keyword_plan_negative_keyword_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/keyword_plan_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/keyword_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/label_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/landing_page_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/language_constant_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/location_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/managed_placement_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/media_file_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/merchant_center_link_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/mobile_app_category_constant_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/mobile_device_constant_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/mutate_job_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/operating_system_version_constant_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/paid_organic_search_term_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/parental_status_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/payments_account_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/product_bidding_category_constant_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/product_group_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/recommendation_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/remarketing_action_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/search_term_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/shared_criterion_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/shared_set_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/shopping_performance_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/topic_constant_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/topic_view_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/user_interest_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/user_list_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v1/services/video_service.proto,@go_googleapis//google/ads/googleads/v1/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v1/services,@go_googleapis//google/ads/googleads/v1/services:services_go_proto -google/ads/googleads/v2/common/ad_asset.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/ad_type_infos.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/asset_types.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/bidding.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/click_location.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/criteria.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/criterion_category_availability.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/custom_parameter.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/dates.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/explorer_auto_optimizer_setting.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/extensions.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/feed_common.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/final_app_url.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/frequency_cap.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/keyword_plan_common.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/matching_function.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/metrics.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/policy.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/real_time_bidding_setting.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/segments.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/simulation.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/tag_snippet.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/targeting_setting.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/text_label.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/url_collection.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/user_lists.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/common/value.proto,@go_googleapis//google/ads/googleads/v2/common:common_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/common,@go_googleapis//google/ads/googleads/v2/common:common_go_proto -google/ads/googleads/v2/enums/access_reason.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/access_role.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/account_budget_proposal_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/account_budget_proposal_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/account_budget_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/ad_customizer_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/ad_group_ad_rotation_mode.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/ad_group_ad_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/ad_group_criterion_approval_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/ad_group_criterion_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/ad_group_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/ad_group_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/ad_network_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/ad_serving_optimization_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/ad_strength.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/ad_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/advertising_channel_sub_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/advertising_channel_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/affiliate_location_feed_relationship_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/affiliate_location_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/age_range_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/app_campaign_app_store.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/app_campaign_bidding_strategy_goal_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/app_payment_model_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/app_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/app_store.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/app_url_operating_system_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/asset_field_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/asset_performance_label.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/asset_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/attribution_model.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/bid_modifier_source.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/bidding_source.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/bidding_strategy_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/bidding_strategy_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/billing_setup_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/brand_safety_suitability.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/budget_delivery_method.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/budget_period.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/budget_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/budget_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/call_conversion_reporting_state.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/call_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/callout_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/campaign_criterion_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/campaign_draft_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/campaign_experiment_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/campaign_experiment_traffic_split_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/campaign_experiment_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/campaign_serving_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/campaign_shared_set_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/campaign_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/change_status_operation.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/change_status_resource_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/click_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/content_label_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/conversion_action_category.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/conversion_action_counting_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/conversion_action_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/conversion_action_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/conversion_adjustment_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/conversion_attribution_event_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/conversion_lag_bucket.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/conversion_or_adjustment_lag_bucket.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/criterion_category_channel_availability_mode.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/criterion_category_locale_availability_mode.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/criterion_system_serving_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/criterion_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/custom_interest_member_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/custom_interest_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/custom_interest_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/custom_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/customer_match_upload_key_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/customer_pay_per_conversion_eligibility_failure_reason.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/data_driven_model_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/day_of_week.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/device.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/display_ad_format_setting.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/display_upload_product_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/distance_bucket.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/dsa_page_feed_criterion_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/education_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/extension_setting_device.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/extension_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/external_conversion_source.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/feed_attribute_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/feed_item_quality_approval_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/feed_item_quality_disapproval_reason.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/feed_item_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/feed_item_target_device.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/feed_item_target_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/feed_item_validation_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/feed_link_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/feed_mapping_criterion_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/feed_mapping_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/feed_origin.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/feed_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/flight_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/frequency_cap_event_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/frequency_cap_level.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/frequency_cap_time_unit.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/gender_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/geo_target_constant_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/geo_targeting_restriction.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/geo_targeting_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/google_ads_field_category.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/google_ads_field_data_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/hotel_date_selection_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/hotel_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/hotel_price_bucket.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/hotel_rate_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/income_range_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/interaction_event_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/interaction_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/invoice_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/job_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/keyword_match_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/keyword_plan_competition_level.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/keyword_plan_forecast_interval.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/keyword_plan_network.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/label_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/legacy_app_install_ad_app_store.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/listing_custom_attribute_index.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/listing_group_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/local_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/location_extension_targeting_criterion_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/location_group_radius_units.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/location_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/manager_link_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/matching_function_context_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/matching_function_operator.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/media_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/merchant_center_link_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/message_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/mime_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/minute_of_hour.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/mobile_device_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/month_of_year.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/mutate_job_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/negative_geo_target_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/operating_system_version_operator_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/page_one_promoted_strategy_goal.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/parental_status_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/payment_mode.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/placeholder_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/placement_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/policy_approval_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/policy_review_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/policy_topic_entry_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/policy_topic_evidence_destination_mismatch_url_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/policy_topic_evidence_destination_not_working_device.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/policy_topic_evidence_destination_not_working_dns_error_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/positive_geo_target_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/preferred_content_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/price_extension_price_qualifier.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/price_extension_price_unit.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/price_extension_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/price_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/product_bidding_category_level.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/product_bidding_category_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/product_channel.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/product_channel_exclusivity.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/product_condition.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/product_type_level.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/promotion_extension_discount_modifier.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/promotion_extension_occasion.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/promotion_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/proximity_radius_units.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/quality_score_bucket.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/reach_plan_ad_length.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/reach_plan_age_range.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/real_estate_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/recommendation_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/search_engine_results_page_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/search_term_match_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/search_term_targeting_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/served_asset_field_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/shared_set_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/shared_set_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/simulation_modification_method.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/simulation_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/sitelink_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/slot.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/spending_limit_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/structured_snippet_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/system_managed_entity_source.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/target_cpa_opt_in_recommendation_goal.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/target_impression_share_location.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/targeting_dimension.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/time_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/tracking_code_page_format.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/tracking_code_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/travel_placeholder_field.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_interest_taxonomy_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_access_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_closing_reason.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_combined_rule_operator.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_crm_data_source_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_date_rule_item_operator.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_logical_rule_operator.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_membership_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_number_rule_item_operator.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_prepopulation_status.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_rule_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_size_range.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_string_rule_item_operator.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/user_list_type.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/vanity_pharma_display_url_mode.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/vanity_pharma_text.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/webpage_condition_operand.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/enums/webpage_condition_operator.proto,@go_googleapis//google/ads/googleads/v2/enums:enums_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/enums,@go_googleapis//google/ads/googleads/v2/enums:enums_go_proto -google/ads/googleads/v2/errors/access_invitation_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/account_budget_proposal_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/ad_customizer_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/ad_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/ad_group_ad_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/ad_group_bid_modifier_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/ad_group_criterion_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/ad_group_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/ad_group_feed_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/ad_parameter_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/ad_sharing_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/adx_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/asset_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/authentication_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/authorization_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/bidding_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/bidding_strategy_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/billing_setup_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/campaign_budget_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/campaign_criterion_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/campaign_draft_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/campaign_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/campaign_experiment_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/campaign_feed_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/campaign_shared_set_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/change_status_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/collection_size_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/context_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/conversion_action_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/conversion_adjustment_upload_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/conversion_upload_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/country_code_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/criterion_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/currency_code_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/custom_interest_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/customer_client_link_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/customer_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/customer_feed_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/customer_manager_link_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/database_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/date_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/date_range_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/distinct_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/enum_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/errors.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/extension_feed_item_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/extension_setting_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/feed_attribute_reference_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/feed_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/feed_item_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/feed_item_target_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/feed_item_validation_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/feed_mapping_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/field_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/field_mask_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/function_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/function_parsing_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/geo_target_constant_suggestion_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/header_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/id_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/image_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/internal_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/invoice_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/keyword_plan_ad_group_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/keyword_plan_campaign_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/keyword_plan_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/keyword_plan_idea_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/keyword_plan_keyword_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/keyword_plan_negative_keyword_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/label_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/language_code_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/list_operation_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/manager_link_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/media_bundle_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/media_file_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/media_upload_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/multiplier_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/mutate_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/mutate_job_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/new_resource_creation_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/not_empty_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/not_whitelisted_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/null_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/operation_access_denied_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/operator_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/partial_failure_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/policy_finding_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/policy_validation_parameter_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/policy_violation_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/query_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/quota_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/range_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/reach_plan_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/recommendation_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/region_code_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/request_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/resource_access_denied_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/resource_count_limit_exceeded_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/setting_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/shared_criterion_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/shared_set_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/size_limit_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/string_format_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/string_length_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/url_field_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/user_list_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/errors/youtube_video_registration_error.proto,@go_googleapis//google/ads/googleads/v2/errors:errors_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/errors,@go_googleapis//google/ads/googleads/v2/errors:errors_go_proto -google/ads/googleads/v2/resources/account_budget.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/account_budget_proposal.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group_ad.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group_ad_asset_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group_ad_label.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group_audience_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group_bid_modifier.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group_criterion.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group_criterion_label.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group_criterion_simulation.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group_extension_setting.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group_feed.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group_label.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_group_simulation.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_parameter.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/ad_schedule_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/age_range_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/asset.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/bidding_strategy.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/billing_setup.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/campaign.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/campaign_audience_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/campaign_bid_modifier.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/campaign_budget.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/campaign_criterion.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/campaign_criterion_simulation.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/campaign_draft.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/campaign_experiment.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/campaign_extension_setting.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/campaign_feed.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/campaign_label.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/campaign_shared_set.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/carrier_constant.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/change_status.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/click_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/conversion_action.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/custom_interest.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/customer.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/customer_client.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/customer_client_link.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/customer_extension_setting.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/customer_feed.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/customer_label.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/customer_manager_link.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/customer_negative_criterion.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/detail_placement_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/display_keyword_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/distance_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/domain_category.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/dynamic_search_ads_search_term_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/expanded_landing_page_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/extension_feed_item.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/feed.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/feed_item.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/feed_item_target.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/feed_mapping.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/feed_placeholder_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/gender_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/geo_target_constant.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/geographic_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/google_ads_field.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/group_placement_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/hotel_group_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/hotel_performance_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/invoice.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/keyword_plan.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/keyword_plan_ad_group.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/keyword_plan_campaign.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/keyword_plan_keyword.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/keyword_plan_negative_keyword.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/keyword_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/label.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/landing_page_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/language_constant.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/location_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/managed_placement_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/media_file.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/merchant_center_link.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/mobile_app_category_constant.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/mobile_device_constant.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/mutate_job.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/operating_system_version_constant.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/paid_organic_search_term_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/parental_status_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/payments_account.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/product_bidding_category_constant.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/product_group_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/recommendation.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/remarketing_action.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/search_term_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/shared_criterion.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/shared_set.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/shopping_performance_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/topic_constant.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/topic_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/user_interest.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/user_list.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/user_location_view.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/resources/video.proto,@go_googleapis//google/ads/googleads/v2/resources:resources_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/resources,@go_googleapis//google/ads/googleads/v2/resources:resources_go_proto -google/ads/googleads/v2/services/account_budget_proposal_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/account_budget_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_ad_asset_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_ad_label_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_ad_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_audience_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_bid_modifier_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_criterion_label_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_criterion_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_criterion_simulation_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_extension_setting_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_feed_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_label_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_group_simulation_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_parameter_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_schedule_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/ad_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/age_range_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/asset_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/bidding_strategy_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/billing_setup_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/campaign_audience_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/campaign_bid_modifier_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/campaign_budget_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/campaign_criterion_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/campaign_criterion_simulation_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/campaign_draft_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/campaign_experiment_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/campaign_extension_setting_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/campaign_feed_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/campaign_label_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/campaign_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/campaign_shared_set_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/carrier_constant_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/change_status_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/click_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/conversion_action_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/conversion_adjustment_upload_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/conversion_upload_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/custom_interest_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/customer_client_link_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/customer_client_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/customer_extension_setting_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/customer_feed_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/customer_label_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/customer_manager_link_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/customer_negative_criterion_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/customer_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/detail_placement_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/display_keyword_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/distance_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/domain_category_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/dynamic_search_ads_search_term_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/expanded_landing_page_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/extension_feed_item_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/feed_item_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/feed_item_target_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/feed_mapping_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/feed_placeholder_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/feed_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/gender_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/geo_target_constant_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/geographic_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/google_ads_field_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/google_ads_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/group_placement_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/hotel_group_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/hotel_performance_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/invoice_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/keyword_plan_ad_group_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/keyword_plan_campaign_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/keyword_plan_idea_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/keyword_plan_keyword_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/keyword_plan_negative_keyword_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/keyword_plan_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/keyword_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/label_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/landing_page_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/language_constant_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/location_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/managed_placement_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/media_file_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/merchant_center_link_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/mobile_app_category_constant_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/mobile_device_constant_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/mutate_job_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/operating_system_version_constant_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/paid_organic_search_term_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/parental_status_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/payments_account_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/product_bidding_category_constant_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/product_group_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/reach_plan_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/recommendation_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/remarketing_action_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/search_term_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/shared_criterion_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/shared_set_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/shopping_performance_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/topic_constant_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/topic_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/user_interest_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/user_list_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/user_location_view_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/ads/googleads/v2/services/video_service.proto,@go_googleapis//google/ads/googleads/v2/services:services_proto,google.golang.org/genproto/googleapis/ads/googleads/v2/services,@go_googleapis//google/ads/googleads/v2/services:services_go_proto -google/api/annotations.proto,@go_googleapis//google/api:annotations_proto,google.golang.org/genproto/googleapis/api/annotations,@go_googleapis//google/api:annotations_go_proto -google/api/auth.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/backend.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/billing.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/client.proto,@go_googleapis//google/api:annotations_proto,google.golang.org/genproto/googleapis/api/annotations,@go_googleapis//google/api:annotations_go_proto -google/api/config_change.proto,@go_googleapis//google/api:configchange_proto,google.golang.org/genproto/googleapis/api/configchange,@go_googleapis//google/api:configchange_go_proto -google/api/consumer.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/context.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/control.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/distribution.proto,@go_googleapis//google/api:distribution_proto,google.golang.org/genproto/googleapis/api/distribution,@go_googleapis//google/api:distribution_go_proto -google/api/documentation.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/endpoint.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/expr/v1alpha1/cel_service.proto,@go_googleapis//google/api/expr/v1alpha1:expr_proto,google.golang.org/genproto/googleapis/api/expr/v1alpha1,@go_googleapis//google/api/expr/v1alpha1:expr_go_proto -google/api/expr/v1alpha1/checked.proto,@go_googleapis//google/api/expr/v1alpha1:expr_proto,google.golang.org/genproto/googleapis/api/expr/v1alpha1,@go_googleapis//google/api/expr/v1alpha1:expr_go_proto -google/api/expr/v1alpha1/conformance_service.proto,@go_googleapis//google/api/expr/v1alpha1:expr_proto,google.golang.org/genproto/googleapis/api/expr/v1alpha1,@go_googleapis//google/api/expr/v1alpha1:expr_go_proto -google/api/expr/v1alpha1/eval.proto,@go_googleapis//google/api/expr/v1alpha1:expr_proto,google.golang.org/genproto/googleapis/api/expr/v1alpha1,@go_googleapis//google/api/expr/v1alpha1:expr_go_proto -google/api/expr/v1alpha1/explain.proto,@go_googleapis//google/api/expr/v1alpha1:expr_proto,google.golang.org/genproto/googleapis/api/expr/v1alpha1,@go_googleapis//google/api/expr/v1alpha1:expr_go_proto -google/api/expr/v1alpha1/syntax.proto,@go_googleapis//google/api/expr/v1alpha1:expr_proto,google.golang.org/genproto/googleapis/api/expr/v1alpha1,@go_googleapis//google/api/expr/v1alpha1:expr_go_proto -google/api/expr/v1alpha1/value.proto,@go_googleapis//google/api/expr/v1alpha1:expr_proto,google.golang.org/genproto/googleapis/api/expr/v1alpha1,@go_googleapis//google/api/expr/v1alpha1:expr_go_proto -google/api/expr/v1beta1/decl.proto,@go_googleapis//google/api/expr/v1beta1:expr_proto,google.golang.org/genproto/googleapis/api/expr/v1beta1,@go_googleapis//google/api/expr/v1beta1:expr_go_proto -google/api/expr/v1beta1/eval.proto,@go_googleapis//google/api/expr/v1beta1:expr_proto,google.golang.org/genproto/googleapis/api/expr/v1beta1,@go_googleapis//google/api/expr/v1beta1:expr_go_proto -google/api/expr/v1beta1/expr.proto,@go_googleapis//google/api/expr/v1beta1:expr_proto,google.golang.org/genproto/googleapis/api/expr/v1beta1,@go_googleapis//google/api/expr/v1beta1:expr_go_proto -google/api/expr/v1beta1/source.proto,@go_googleapis//google/api/expr/v1beta1:expr_proto,google.golang.org/genproto/googleapis/api/expr/v1beta1,@go_googleapis//google/api/expr/v1beta1:expr_go_proto -google/api/expr/v1beta1/value.proto,@go_googleapis//google/api/expr/v1beta1:expr_proto,google.golang.org/genproto/googleapis/api/expr/v1beta1,@go_googleapis//google/api/expr/v1beta1:expr_go_proto -google/api/field_behavior.proto,@go_googleapis//google/api:annotations_proto,google.golang.org/genproto/googleapis/api/annotations,@go_googleapis//google/api:annotations_go_proto -google/api/http.proto,@go_googleapis//google/api:annotations_proto,google.golang.org/genproto/googleapis/api/annotations,@go_googleapis//google/api:annotations_go_proto -google/api/httpbody.proto,@go_googleapis//google/api:httpbody_proto,google.golang.org/genproto/googleapis/api/httpbody,@go_googleapis//google/api:httpbody_go_proto -google/api/label.proto,@go_googleapis//google/api:label_proto,google.golang.org/genproto/googleapis/api/label,@go_googleapis//google/api:label_go_proto -google/api/launch_stage.proto,@go_googleapis//google/api:api_proto,google.golang.org/genproto/googleapis/api,@go_googleapis//google/api:api_go_proto -google/api/log.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/logging.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/metric.proto,@go_googleapis//google/api:metric_proto,google.golang.org/genproto/googleapis/api/metric,@go_googleapis//google/api:metric_go_proto -google/api/monitored_resource.proto,@go_googleapis//google/api:monitoredres_proto,google.golang.org/genproto/googleapis/api/monitoredres,@go_googleapis//google/api:monitoredres_go_proto -google/api/monitoring.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/quota.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/resource.proto,@go_googleapis//google/api:annotations_proto,google.golang.org/genproto/googleapis/api/annotations,@go_googleapis//google/api:annotations_go_proto -google/api/service.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/servicecontrol/v1/check_error.proto,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_proto,google.golang.org/genproto/googleapis/api/servicecontrol/v1,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_go_proto -google/api/servicecontrol/v1/distribution.proto,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_proto,google.golang.org/genproto/googleapis/api/servicecontrol/v1,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_go_proto -google/api/servicecontrol/v1/log_entry.proto,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_proto,google.golang.org/genproto/googleapis/api/servicecontrol/v1,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_go_proto -google/api/servicecontrol/v1/metric_value.proto,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_proto,google.golang.org/genproto/googleapis/api/servicecontrol/v1,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_go_proto -google/api/servicecontrol/v1/operation.proto,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_proto,google.golang.org/genproto/googleapis/api/servicecontrol/v1,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_go_proto -google/api/servicecontrol/v1/quota_controller.proto,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_proto,google.golang.org/genproto/googleapis/api/servicecontrol/v1,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_go_proto -google/api/servicecontrol/v1/service_controller.proto,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_proto,google.golang.org/genproto/googleapis/api/servicecontrol/v1,@go_googleapis//google/api/servicecontrol/v1:servicecontrol_go_proto -google/api/servicemanagement/v1/resources.proto,@go_googleapis//google/api/servicemanagement/v1:servicemanagement_proto,google.golang.org/genproto/googleapis/api/servicemanagement/v1,@go_googleapis//google/api/servicemanagement/v1:servicemanagement_go_proto -google/api/servicemanagement/v1/servicemanager.proto,@go_googleapis//google/api/servicemanagement/v1:servicemanagement_proto,google.golang.org/genproto/googleapis/api/servicemanagement/v1,@go_googleapis//google/api/servicemanagement/v1:servicemanagement_go_proto -google/api/source_info.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/system_parameter.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/api/usage.proto,@go_googleapis//google/api:serviceconfig_proto,google.golang.org/genproto/googleapis/api/serviceconfig,@go_googleapis//google/api:serviceconfig_go_proto -google/appengine/legacy/audit_data.proto,@go_googleapis//google/appengine/legacy:legacy_proto,google.golang.org/genproto/googleapis/appengine/legacy,@go_googleapis//google/appengine/legacy:legacy_go_proto -google/appengine/logging/v1/request_log.proto,@go_googleapis//google/appengine/logging/v1:logging_proto,google.golang.org/genproto/googleapis/appengine/logging/v1,@go_googleapis//google/appengine/logging/v1:logging_go_proto -google/appengine/v1/app_yaml.proto,@go_googleapis//google/appengine/v1:appengine_proto,google.golang.org/genproto/googleapis/appengine/v1,@go_googleapis//google/appengine/v1:appengine_go_proto -google/appengine/v1/appengine.proto,@go_googleapis//google/appengine/v1:appengine_proto,google.golang.org/genproto/googleapis/appengine/v1,@go_googleapis//google/appengine/v1:appengine_go_proto -google/appengine/v1/application.proto,@go_googleapis//google/appengine/v1:appengine_proto,google.golang.org/genproto/googleapis/appengine/v1,@go_googleapis//google/appengine/v1:appengine_go_proto -google/appengine/v1/audit_data.proto,@go_googleapis//google/appengine/v1:appengine_proto,google.golang.org/genproto/googleapis/appengine/v1,@go_googleapis//google/appengine/v1:appengine_go_proto -google/appengine/v1/deploy.proto,@go_googleapis//google/appengine/v1:appengine_proto,google.golang.org/genproto/googleapis/appengine/v1,@go_googleapis//google/appengine/v1:appengine_go_proto -google/appengine/v1/instance.proto,@go_googleapis//google/appengine/v1:appengine_proto,google.golang.org/genproto/googleapis/appengine/v1,@go_googleapis//google/appengine/v1:appengine_go_proto -google/appengine/v1/location.proto,@go_googleapis//google/appengine/v1:appengine_proto,google.golang.org/genproto/googleapis/appengine/v1,@go_googleapis//google/appengine/v1:appengine_go_proto -google/appengine/v1/operation.proto,@go_googleapis//google/appengine/v1:appengine_proto,google.golang.org/genproto/googleapis/appengine/v1,@go_googleapis//google/appengine/v1:appengine_go_proto -google/appengine/v1/service.proto,@go_googleapis//google/appengine/v1:appengine_proto,google.golang.org/genproto/googleapis/appengine/v1,@go_googleapis//google/appengine/v1:appengine_go_proto -google/appengine/v1/version.proto,@go_googleapis//google/appengine/v1:appengine_proto,google.golang.org/genproto/googleapis/appengine/v1,@go_googleapis//google/appengine/v1:appengine_go_proto -google/assistant/embedded/v1alpha1/embedded_assistant.proto,@go_googleapis//google/assistant/embedded/v1alpha1:embedded_proto,google.golang.org/genproto/googleapis/assistant/embedded/v1alpha1,@go_googleapis//google/assistant/embedded/v1alpha1:embedded_go_proto -google/assistant/embedded/v1alpha2/embedded_assistant.proto,@go_googleapis//google/assistant/embedded/v1alpha2:embedded_proto,google.golang.org/genproto/googleapis/assistant/embedded/v1alpha2,@go_googleapis//google/assistant/embedded/v1alpha2:embedded_go_proto -google/bigtable/admin/cluster/v1/bigtable_cluster_data.proto,@go_googleapis//google/bigtable/admin/cluster/v1:cluster_proto,google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1,@go_googleapis//google/bigtable/admin/cluster/v1:cluster_go_proto -google/bigtable/admin/cluster/v1/bigtable_cluster_service.proto,@go_googleapis//google/bigtable/admin/cluster/v1:cluster_proto,google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1,@go_googleapis//google/bigtable/admin/cluster/v1:cluster_go_proto -google/bigtable/admin/cluster/v1/bigtable_cluster_service_messages.proto,@go_googleapis//google/bigtable/admin/cluster/v1:cluster_proto,google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1,@go_googleapis//google/bigtable/admin/cluster/v1:cluster_go_proto -google/bigtable/admin/table/v1/bigtable_table_data.proto,@go_googleapis//google/bigtable/admin/table/v1:table_proto,google.golang.org/genproto/googleapis/bigtable/admin/table/v1,@go_googleapis//google/bigtable/admin/table/v1:table_go_proto -google/bigtable/admin/table/v1/bigtable_table_service.proto,@go_googleapis//google/bigtable/admin/table/v1:table_proto,google.golang.org/genproto/googleapis/bigtable/admin/table/v1,@go_googleapis//google/bigtable/admin/table/v1:table_go_proto -google/bigtable/admin/table/v1/bigtable_table_service_messages.proto,@go_googleapis//google/bigtable/admin/table/v1:table_proto,google.golang.org/genproto/googleapis/bigtable/admin/table/v1,@go_googleapis//google/bigtable/admin/table/v1:table_go_proto -google/bigtable/admin/v2/bigtable_instance_admin.proto,@go_googleapis//google/bigtable/admin/v2:admin_proto,google.golang.org/genproto/googleapis/bigtable/admin/v2,@go_googleapis//google/bigtable/admin/v2:admin_go_proto -google/bigtable/admin/v2/bigtable_table_admin.proto,@go_googleapis//google/bigtable/admin/v2:admin_proto,google.golang.org/genproto/googleapis/bigtable/admin/v2,@go_googleapis//google/bigtable/admin/v2:admin_go_proto -google/bigtable/admin/v2/common.proto,@go_googleapis//google/bigtable/admin/v2:admin_proto,google.golang.org/genproto/googleapis/bigtable/admin/v2,@go_googleapis//google/bigtable/admin/v2:admin_go_proto -google/bigtable/admin/v2/instance.proto,@go_googleapis//google/bigtable/admin/v2:admin_proto,google.golang.org/genproto/googleapis/bigtable/admin/v2,@go_googleapis//google/bigtable/admin/v2:admin_go_proto -google/bigtable/admin/v2/table.proto,@go_googleapis//google/bigtable/admin/v2:admin_proto,google.golang.org/genproto/googleapis/bigtable/admin/v2,@go_googleapis//google/bigtable/admin/v2:admin_go_proto -google/bigtable/v1/bigtable_data.proto,@go_googleapis//google/bigtable/v1:bigtable_proto,google.golang.org/genproto/googleapis/bigtable/v1,@go_googleapis//google/bigtable/v1:bigtable_go_proto -google/bigtable/v1/bigtable_service.proto,@go_googleapis//google/bigtable/v1:bigtable_proto,google.golang.org/genproto/googleapis/bigtable/v1,@go_googleapis//google/bigtable/v1:bigtable_go_proto -google/bigtable/v1/bigtable_service_messages.proto,@go_googleapis//google/bigtable/v1:bigtable_proto,google.golang.org/genproto/googleapis/bigtable/v1,@go_googleapis//google/bigtable/v1:bigtable_go_proto -google/bigtable/v2/bigtable.proto,@go_googleapis//google/bigtable/v2:bigtable_proto,google.golang.org/genproto/googleapis/bigtable/v2,@go_googleapis//google/bigtable/v2:bigtable_go_proto -google/bigtable/v2/data.proto,@go_googleapis//google/bigtable/v2:bigtable_proto,google.golang.org/genproto/googleapis/bigtable/v2,@go_googleapis//google/bigtable/v2:bigtable_go_proto -google/bytestream/bytestream.proto,@go_googleapis//google/bytestream:bytestream_proto,google.golang.org/genproto/googleapis/bytestream,@go_googleapis//google/bytestream:bytestream_go_proto -google/cloud/asset/v1/asset_service.proto,@go_googleapis//google/cloud/asset/v1:asset_proto,google.golang.org/genproto/googleapis/cloud/asset/v1,@go_googleapis//google/cloud/asset/v1:asset_go_proto -google/cloud/asset/v1/assets.proto,@go_googleapis//google/cloud/asset/v1:asset_proto,google.golang.org/genproto/googleapis/cloud/asset/v1,@go_googleapis//google/cloud/asset/v1:asset_go_proto -google/cloud/asset/v1beta1/asset_service.proto,@go_googleapis//google/cloud/asset/v1beta1:asset_proto,google.golang.org/genproto/googleapis/cloud/asset/v1beta1,@go_googleapis//google/cloud/asset/v1beta1:asset_go_proto -google/cloud/asset/v1beta1/assets.proto,@go_googleapis//google/cloud/asset/v1beta1:asset_proto,google.golang.org/genproto/googleapis/cloud/asset/v1beta1,@go_googleapis//google/cloud/asset/v1beta1:asset_go_proto -google/cloud/asset/v1p2beta1/asset_service.proto,@go_googleapis//google/cloud/asset/v1p2beta1:asset_proto,google.golang.org/genproto/googleapis/cloud/asset/v1p2beta1,@go_googleapis//google/cloud/asset/v1p2beta1:asset_go_proto -google/cloud/asset/v1p2beta1/assets.proto,@go_googleapis//google/cloud/asset/v1p2beta1:asset_proto,google.golang.org/genproto/googleapis/cloud/asset/v1p2beta1,@go_googleapis//google/cloud/asset/v1p2beta1:asset_go_proto -google/cloud/audit/audit_log.proto,@go_googleapis//google/cloud/audit:audit_proto,google.golang.org/genproto/googleapis/cloud/audit,@go_googleapis//google/cloud/audit:audit_go_proto -google/cloud/automl/v1/annotation_payload.proto,@go_googleapis//google/cloud/automl/v1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1,@go_googleapis//google/cloud/automl/v1:automl_go_proto -google/cloud/automl/v1/data_items.proto,@go_googleapis//google/cloud/automl/v1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1,@go_googleapis//google/cloud/automl/v1:automl_go_proto -google/cloud/automl/v1/dataset.proto,@go_googleapis//google/cloud/automl/v1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1,@go_googleapis//google/cloud/automl/v1:automl_go_proto -google/cloud/automl/v1/io.proto,@go_googleapis//google/cloud/automl/v1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1,@go_googleapis//google/cloud/automl/v1:automl_go_proto -google/cloud/automl/v1/model.proto,@go_googleapis//google/cloud/automl/v1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1,@go_googleapis//google/cloud/automl/v1:automl_go_proto -google/cloud/automl/v1/model_evaluation.proto,@go_googleapis//google/cloud/automl/v1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1,@go_googleapis//google/cloud/automl/v1:automl_go_proto -google/cloud/automl/v1/operations.proto,@go_googleapis//google/cloud/automl/v1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1,@go_googleapis//google/cloud/automl/v1:automl_go_proto -google/cloud/automl/v1/prediction_service.proto,@go_googleapis//google/cloud/automl/v1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1,@go_googleapis//google/cloud/automl/v1:automl_go_proto -google/cloud/automl/v1/service.proto,@go_googleapis//google/cloud/automl/v1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1,@go_googleapis//google/cloud/automl/v1:automl_go_proto -google/cloud/automl/v1/translation.proto,@go_googleapis//google/cloud/automl/v1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1,@go_googleapis//google/cloud/automl/v1:automl_go_proto -google/cloud/automl/v1beta1/annotation_payload.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/annotation_spec.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/classification.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/column_spec.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/data_items.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/data_stats.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/data_types.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/dataset.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/detection.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/geometry.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/image.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/io.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/model.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/model_evaluation.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/operations.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/prediction_service.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/ranges.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/regression.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/service.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/table_spec.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/tables.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/temporal.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/text.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/text_extraction.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/text_segment.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/text_sentiment.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/translation.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/automl/v1beta1/video.proto,@go_googleapis//google/cloud/automl/v1beta1:automl_proto,google.golang.org/genproto/googleapis/cloud/automl/v1beta1,@go_googleapis//google/cloud/automl/v1beta1:automl_go_proto -google/cloud/bigquery/datatransfer/v1/datasource.proto,@go_googleapis//google/cloud/bigquery/datatransfer/v1:datatransfer_proto,google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1,@go_googleapis//google/cloud/bigquery/datatransfer/v1:datatransfer_go_proto -google/cloud/bigquery/datatransfer/v1/datatransfer.proto,@go_googleapis//google/cloud/bigquery/datatransfer/v1:datatransfer_proto,google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1,@go_googleapis//google/cloud/bigquery/datatransfer/v1:datatransfer_go_proto -google/cloud/bigquery/datatransfer/v1/transfer.proto,@go_googleapis//google/cloud/bigquery/datatransfer/v1:datatransfer_proto,google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1,@go_googleapis//google/cloud/bigquery/datatransfer/v1:datatransfer_go_proto -google/cloud/bigquery/logging/v1/audit_data.proto,@go_googleapis//google/cloud/bigquery/logging/v1:logging_proto,google.golang.org/genproto/googleapis/cloud/bigquery/logging/v1,@go_googleapis//google/cloud/bigquery/logging/v1:logging_go_proto -google/cloud/bigquery/storage/v1beta1/arrow.proto,@go_googleapis//google/cloud/bigquery/storage/v1beta1:storage_proto,google.golang.org/genproto/googleapis/cloud/bigquery/storage/v1beta1,@go_googleapis//google/cloud/bigquery/storage/v1beta1:storage_go_proto -google/cloud/bigquery/storage/v1beta1/avro.proto,@go_googleapis//google/cloud/bigquery/storage/v1beta1:storage_proto,google.golang.org/genproto/googleapis/cloud/bigquery/storage/v1beta1,@go_googleapis//google/cloud/bigquery/storage/v1beta1:storage_go_proto -google/cloud/bigquery/storage/v1beta1/read_options.proto,@go_googleapis//google/cloud/bigquery/storage/v1beta1:storage_proto,google.golang.org/genproto/googleapis/cloud/bigquery/storage/v1beta1,@go_googleapis//google/cloud/bigquery/storage/v1beta1:storage_go_proto -google/cloud/bigquery/storage/v1beta1/storage.proto,@go_googleapis//google/cloud/bigquery/storage/v1beta1:storage_proto,google.golang.org/genproto/googleapis/cloud/bigquery/storage/v1beta1,@go_googleapis//google/cloud/bigquery/storage/v1beta1:storage_go_proto -google/cloud/bigquery/storage/v1beta1/table_reference.proto,@go_googleapis//google/cloud/bigquery/storage/v1beta1:storage_proto,google.golang.org/genproto/googleapis/cloud/bigquery/storage/v1beta1,@go_googleapis//google/cloud/bigquery/storage/v1beta1:storage_go_proto -google/cloud/bigquery/v2/encryption_config.proto,@go_googleapis//google/cloud/bigquery/v2:bigquery_proto,google.golang.org/genproto/googleapis/cloud/bigquery/v2,@go_googleapis//google/cloud/bigquery/v2:bigquery_go_proto -google/cloud/bigquery/v2/model.proto,@go_googleapis//google/cloud/bigquery/v2:bigquery_proto,google.golang.org/genproto/googleapis/cloud/bigquery/v2,@go_googleapis//google/cloud/bigquery/v2:bigquery_go_proto -google/cloud/bigquery/v2/model_reference.proto,@go_googleapis//google/cloud/bigquery/v2:bigquery_proto,google.golang.org/genproto/googleapis/cloud/bigquery/v2,@go_googleapis//google/cloud/bigquery/v2:bigquery_go_proto -google/cloud/bigquery/v2/standard_sql.proto,@go_googleapis//google/cloud/bigquery/v2:bigquery_proto,google.golang.org/genproto/googleapis/cloud/bigquery/v2,@go_googleapis//google/cloud/bigquery/v2:bigquery_go_proto -google/cloud/billing/v1/cloud_billing.proto,@go_googleapis//google/cloud/billing/v1:billing_proto,google.golang.org/genproto/googleapis/cloud/billing/v1,@go_googleapis//google/cloud/billing/v1:billing_go_proto -google/cloud/binaryauthorization/v1beta1/resources.proto,@go_googleapis//google/cloud/binaryauthorization/v1beta1:binaryauthorization_proto,google.golang.org/genproto/googleapis/cloud/binaryauthorization/v1beta1,@go_googleapis//google/cloud/binaryauthorization/v1beta1:binaryauthorization_go_proto -google/cloud/binaryauthorization/v1beta1/service.proto,@go_googleapis//google/cloud/binaryauthorization/v1beta1:binaryauthorization_proto,google.golang.org/genproto/googleapis/cloud/binaryauthorization/v1beta1,@go_googleapis//google/cloud/binaryauthorization/v1beta1:binaryauthorization_go_proto -google/cloud/datacatalog/v1beta1/datacatalog.proto,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_proto,google.golang.org/genproto/googleapis/cloud/datacatalog/v1beta1,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_go_proto -google/cloud/datacatalog/v1beta1/gcs_fileset_spec.proto,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_proto,google.golang.org/genproto/googleapis/cloud/datacatalog/v1beta1,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_go_proto -google/cloud/datacatalog/v1beta1/schema.proto,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_proto,google.golang.org/genproto/googleapis/cloud/datacatalog/v1beta1,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_go_proto -google/cloud/datacatalog/v1beta1/search.proto,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_proto,google.golang.org/genproto/googleapis/cloud/datacatalog/v1beta1,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_go_proto -google/cloud/datacatalog/v1beta1/table_spec.proto,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_proto,google.golang.org/genproto/googleapis/cloud/datacatalog/v1beta1,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_go_proto -google/cloud/datacatalog/v1beta1/tags.proto,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_proto,google.golang.org/genproto/googleapis/cloud/datacatalog/v1beta1,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_go_proto -google/cloud/datacatalog/v1beta1/timestamps.proto,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_proto,google.golang.org/genproto/googleapis/cloud/datacatalog/v1beta1,@go_googleapis//google/cloud/datacatalog/v1beta1:datacatalog_go_proto -google/cloud/datalabeling/v1beta1/annotation.proto,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_proto,google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_go_proto -google/cloud/datalabeling/v1beta1/annotation_spec_set.proto,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_proto,google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_go_proto -google/cloud/datalabeling/v1beta1/data_labeling_service.proto,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_proto,google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_go_proto -google/cloud/datalabeling/v1beta1/data_payloads.proto,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_proto,google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_go_proto -google/cloud/datalabeling/v1beta1/dataset.proto,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_proto,google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_go_proto -google/cloud/datalabeling/v1beta1/evaluation.proto,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_proto,google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_go_proto -google/cloud/datalabeling/v1beta1/evaluation_job.proto,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_proto,google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_go_proto -google/cloud/datalabeling/v1beta1/human_annotation_config.proto,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_proto,google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_go_proto -google/cloud/datalabeling/v1beta1/instruction.proto,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_proto,google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_go_proto -google/cloud/datalabeling/v1beta1/operations.proto,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_proto,google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1,@go_googleapis//google/cloud/datalabeling/v1beta1:datalabeling_go_proto -google/cloud/dataproc/v1/autoscaling_policies.proto,@go_googleapis//google/cloud/dataproc/v1:dataproc_proto,google.golang.org/genproto/googleapis/cloud/dataproc/v1,@go_googleapis//google/cloud/dataproc/v1:dataproc_go_proto -google/cloud/dataproc/v1/clusters.proto,@go_googleapis//google/cloud/dataproc/v1:dataproc_proto,google.golang.org/genproto/googleapis/cloud/dataproc/v1,@go_googleapis//google/cloud/dataproc/v1:dataproc_go_proto -google/cloud/dataproc/v1/jobs.proto,@go_googleapis//google/cloud/dataproc/v1:dataproc_proto,google.golang.org/genproto/googleapis/cloud/dataproc/v1,@go_googleapis//google/cloud/dataproc/v1:dataproc_go_proto -google/cloud/dataproc/v1/operations.proto,@go_googleapis//google/cloud/dataproc/v1:dataproc_proto,google.golang.org/genproto/googleapis/cloud/dataproc/v1,@go_googleapis//google/cloud/dataproc/v1:dataproc_go_proto -google/cloud/dataproc/v1/shared.proto,@go_googleapis//google/cloud/dataproc/v1:dataproc_proto,google.golang.org/genproto/googleapis/cloud/dataproc/v1,@go_googleapis//google/cloud/dataproc/v1:dataproc_go_proto -google/cloud/dataproc/v1/workflow_templates.proto,@go_googleapis//google/cloud/dataproc/v1:dataproc_proto,google.golang.org/genproto/googleapis/cloud/dataproc/v1,@go_googleapis//google/cloud/dataproc/v1:dataproc_go_proto -google/cloud/dataproc/v1beta2/autoscaling_policies.proto,@go_googleapis//google/cloud/dataproc/v1beta2:dataproc_proto,google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2,@go_googleapis//google/cloud/dataproc/v1beta2:dataproc_go_proto -google/cloud/dataproc/v1beta2/clusters.proto,@go_googleapis//google/cloud/dataproc/v1beta2:dataproc_proto,google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2,@go_googleapis//google/cloud/dataproc/v1beta2:dataproc_go_proto -google/cloud/dataproc/v1beta2/jobs.proto,@go_googleapis//google/cloud/dataproc/v1beta2:dataproc_proto,google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2,@go_googleapis//google/cloud/dataproc/v1beta2:dataproc_go_proto -google/cloud/dataproc/v1beta2/operations.proto,@go_googleapis//google/cloud/dataproc/v1beta2:dataproc_proto,google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2,@go_googleapis//google/cloud/dataproc/v1beta2:dataproc_go_proto -google/cloud/dataproc/v1beta2/shared.proto,@go_googleapis//google/cloud/dataproc/v1beta2:dataproc_proto,google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2,@go_googleapis//google/cloud/dataproc/v1beta2:dataproc_go_proto -google/cloud/dataproc/v1beta2/workflow_templates.proto,@go_googleapis//google/cloud/dataproc/v1beta2:dataproc_proto,google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2,@go_googleapis//google/cloud/dataproc/v1beta2:dataproc_go_proto -google/cloud/dialogflow/v2/agent.proto,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_go_proto -google/cloud/dialogflow/v2/audio_config.proto,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_go_proto -google/cloud/dialogflow/v2/context.proto,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_go_proto -google/cloud/dialogflow/v2/entity_type.proto,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_go_proto -google/cloud/dialogflow/v2/intent.proto,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_go_proto -google/cloud/dialogflow/v2/session.proto,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_go_proto -google/cloud/dialogflow/v2/session_entity_type.proto,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_go_proto -google/cloud/dialogflow/v2/webhook.proto,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2,@go_googleapis//google/cloud/dialogflow/v2:dialogflow_go_proto -google/cloud/dialogflow/v2beta1/agent.proto,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_go_proto -google/cloud/dialogflow/v2beta1/audio_config.proto,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_go_proto -google/cloud/dialogflow/v2beta1/context.proto,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_go_proto -google/cloud/dialogflow/v2beta1/document.proto,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_go_proto -google/cloud/dialogflow/v2beta1/entity_type.proto,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_go_proto -google/cloud/dialogflow/v2beta1/gcs.proto,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_go_proto -google/cloud/dialogflow/v2beta1/intent.proto,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_go_proto -google/cloud/dialogflow/v2beta1/knowledge_base.proto,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_go_proto -google/cloud/dialogflow/v2beta1/session.proto,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_go_proto -google/cloud/dialogflow/v2beta1/session_entity_type.proto,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_go_proto -google/cloud/dialogflow/v2beta1/validation_result.proto,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_go_proto -google/cloud/dialogflow/v2beta1/webhook.proto,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_proto,google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1,@go_googleapis//google/cloud/dialogflow/v2beta1:dialogflow_go_proto -google/cloud/document/v1beta1/document.proto,@go_googleapis//google/cloud/document/v1beta1:document_proto,google.golang.org/genproto/googleapis/cloud/document/v1beta1,@go_googleapis//google/cloud/document/v1beta1:document_go_proto -google/cloud/document/v1beta1/document_understanding.proto,@go_googleapis//google/cloud/document/v1beta1:document_proto,google.golang.org/genproto/googleapis/cloud/document/v1beta1,@go_googleapis//google/cloud/document/v1beta1:document_go_proto -google/cloud/document/v1beta1/geometry.proto,@go_googleapis//google/cloud/document/v1beta1:document_proto,google.golang.org/genproto/googleapis/cloud/document/v1beta1,@go_googleapis//google/cloud/document/v1beta1:document_go_proto -google/cloud/functions/v1beta2/functions.proto,@go_googleapis//google/cloud/functions/v1beta2:functions_proto,google.golang.org/genproto/googleapis/cloud/functions/v1beta2,@go_googleapis//google/cloud/functions/v1beta2:functions_go_proto -google/cloud/functions/v1beta2/operations.proto,@go_googleapis//google/cloud/functions/v1beta2:functions_proto,google.golang.org/genproto/googleapis/cloud/functions/v1beta2,@go_googleapis//google/cloud/functions/v1beta2:functions_go_proto -google/cloud/iot/v1/device_manager.proto,@go_googleapis//google/cloud/iot/v1:iot_proto,google.golang.org/genproto/googleapis/cloud/iot/v1,@go_googleapis//google/cloud/iot/v1:iot_go_proto -google/cloud/iot/v1/resources.proto,@go_googleapis//google/cloud/iot/v1:iot_proto,google.golang.org/genproto/googleapis/cloud/iot/v1,@go_googleapis//google/cloud/iot/v1:iot_go_proto -google/cloud/irm/v1alpha2/incidents.proto,@go_googleapis//google/cloud/irm/v1alpha2:irm_proto,google.golang.org/genproto/googleapis/cloud/irm/v1alpha2,@go_googleapis//google/cloud/irm/v1alpha2:irm_go_proto -google/cloud/irm/v1alpha2/incidents_service.proto,@go_googleapis//google/cloud/irm/v1alpha2:irm_proto,google.golang.org/genproto/googleapis/cloud/irm/v1alpha2,@go_googleapis//google/cloud/irm/v1alpha2:irm_go_proto -google/cloud/kms/v1/resources.proto,@go_googleapis//google/cloud/kms/v1:kms_proto,google.golang.org/genproto/googleapis/cloud/kms/v1,@go_googleapis//google/cloud/kms/v1:kms_go_proto -google/cloud/kms/v1/service.proto,@go_googleapis//google/cloud/kms/v1:kms_proto,google.golang.org/genproto/googleapis/cloud/kms/v1,@go_googleapis//google/cloud/kms/v1:kms_go_proto -google/cloud/language/v1/language_service.proto,@go_googleapis//google/cloud/language/v1:language_proto,google.golang.org/genproto/googleapis/cloud/language/v1,@go_googleapis//google/cloud/language/v1:language_go_proto -google/cloud/language/v1beta1/language_service.proto,@go_googleapis//google/cloud/language/v1beta1:language_proto,google.golang.org/genproto/googleapis/cloud/language/v1beta1,@go_googleapis//google/cloud/language/v1beta1:language_go_proto -google/cloud/language/v1beta2/language_service.proto,@go_googleapis//google/cloud/language/v1beta2:language_proto,google.golang.org/genproto/googleapis/cloud/language/v1beta2,@go_googleapis//google/cloud/language/v1beta2:language_go_proto -google/cloud/location/locations.proto,@go_googleapis//google/cloud/location:location_proto,google.golang.org/genproto/googleapis/cloud/location,@go_googleapis//google/cloud/location:location_go_proto -google/cloud/ml/v1/job_service.proto,@go_googleapis//google/cloud/ml/v1:ml_proto,google.golang.org/genproto/googleapis/cloud/ml/v1,@go_googleapis//google/cloud/ml/v1:ml_go_proto -google/cloud/ml/v1/model_service.proto,@go_googleapis//google/cloud/ml/v1:ml_proto,google.golang.org/genproto/googleapis/cloud/ml/v1,@go_googleapis//google/cloud/ml/v1:ml_go_proto -google/cloud/ml/v1/operation_metadata.proto,@go_googleapis//google/cloud/ml/v1:ml_proto,google.golang.org/genproto/googleapis/cloud/ml/v1,@go_googleapis//google/cloud/ml/v1:ml_go_proto -google/cloud/ml/v1/prediction_service.proto,@go_googleapis//google/cloud/ml/v1:ml_proto,google.golang.org/genproto/googleapis/cloud/ml/v1,@go_googleapis//google/cloud/ml/v1:ml_go_proto -google/cloud/ml/v1/project_service.proto,@go_googleapis//google/cloud/ml/v1:ml_proto,google.golang.org/genproto/googleapis/cloud/ml/v1,@go_googleapis//google/cloud/ml/v1:ml_go_proto -google/cloud/oslogin/common/common.proto,@go_googleapis//google/cloud/oslogin/common:common_proto,google.golang.org/genproto/googleapis/cloud/oslogin/common,@go_googleapis//google/cloud/oslogin/common:common_go_proto -google/cloud/oslogin/v1/oslogin.proto,@go_googleapis//google/cloud/oslogin/v1:oslogin_proto,google.golang.org/genproto/googleapis/cloud/oslogin/v1,@go_googleapis//google/cloud/oslogin/v1:oslogin_go_proto -google/cloud/oslogin/v1alpha/oslogin.proto,@go_googleapis//google/cloud/oslogin/v1alpha:oslogin_proto,google.golang.org/genproto/googleapis/cloud/oslogin/v1alpha,@go_googleapis//google/cloud/oslogin/v1alpha:oslogin_go_proto -google/cloud/oslogin/v1beta/oslogin.proto,@go_googleapis//google/cloud/oslogin/v1beta:oslogin_proto,google.golang.org/genproto/googleapis/cloud/oslogin/v1beta,@go_googleapis//google/cloud/oslogin/v1beta:oslogin_go_proto -google/cloud/phishingprotection/v1beta1/phishingprotection.proto,@go_googleapis//google/cloud/phishingprotection/v1beta1:phishingprotection_proto,google.golang.org/genproto/googleapis/cloud/phishingprotection/v1beta1,@go_googleapis//google/cloud/phishingprotection/v1beta1:phishingprotection_go_proto -google/cloud/recaptchaenterprise/v1beta1/recaptchaenterprise.proto,@go_googleapis//google/cloud/recaptchaenterprise/v1beta1:recaptchaenterprise_proto,google.golang.org/genproto/googleapis/cloud/recaptchaenterprise/v1beta1,@go_googleapis//google/cloud/recaptchaenterprise/v1beta1:recaptchaenterprise_go_proto -google/cloud/recommender/v1beta1/recommendation.proto,@go_googleapis//google/cloud/recommender/v1beta1:recommender_proto,google.golang.org/genproto/googleapis/cloud/recommender/v1beta1,@go_googleapis//google/cloud/recommender/v1beta1:recommender_go_proto -google/cloud/recommender/v1beta1/recommender_service.proto,@go_googleapis//google/cloud/recommender/v1beta1:recommender_proto,google.golang.org/genproto/googleapis/cloud/recommender/v1beta1,@go_googleapis//google/cloud/recommender/v1beta1:recommender_go_proto -google/cloud/redis/v1/cloud_redis.proto,@go_googleapis//google/cloud/redis/v1:redis_proto,google.golang.org/genproto/googleapis/cloud/redis/v1,@go_googleapis//google/cloud/redis/v1:redis_go_proto -google/cloud/redis/v1beta1/cloud_redis.proto,@go_googleapis//google/cloud/redis/v1beta1:redis_proto,google.golang.org/genproto/googleapis/cloud/redis/v1beta1,@go_googleapis//google/cloud/redis/v1beta1:redis_go_proto -google/cloud/resourcemanager/v2/folders.proto,@go_googleapis//google/cloud/resourcemanager/v2:resourcemanager_proto,google.golang.org/genproto/googleapis/cloud/resourcemanager/v2,@go_googleapis//google/cloud/resourcemanager/v2:resourcemanager_go_proto -google/cloud/runtimeconfig/v1beta1/resources.proto,@go_googleapis//google/cloud/runtimeconfig/v1beta1:runtimeconfig_proto,google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1,@go_googleapis//google/cloud/runtimeconfig/v1beta1:runtimeconfig_go_proto -google/cloud/runtimeconfig/v1beta1/runtimeconfig.proto,@go_googleapis//google/cloud/runtimeconfig/v1beta1:runtimeconfig_proto,google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1,@go_googleapis//google/cloud/runtimeconfig/v1beta1:runtimeconfig_go_proto -google/cloud/scheduler/v1/cloudscheduler.proto,@go_googleapis//google/cloud/scheduler/v1:scheduler_proto,google.golang.org/genproto/googleapis/cloud/scheduler/v1,@go_googleapis//google/cloud/scheduler/v1:scheduler_go_proto -google/cloud/scheduler/v1/job.proto,@go_googleapis//google/cloud/scheduler/v1:scheduler_proto,google.golang.org/genproto/googleapis/cloud/scheduler/v1,@go_googleapis//google/cloud/scheduler/v1:scheduler_go_proto -google/cloud/scheduler/v1/target.proto,@go_googleapis//google/cloud/scheduler/v1:scheduler_proto,google.golang.org/genproto/googleapis/cloud/scheduler/v1,@go_googleapis//google/cloud/scheduler/v1:scheduler_go_proto -google/cloud/scheduler/v1beta1/cloudscheduler.proto,@go_googleapis//google/cloud/scheduler/v1beta1:scheduler_proto,google.golang.org/genproto/googleapis/cloud/scheduler/v1beta1,@go_googleapis//google/cloud/scheduler/v1beta1:scheduler_go_proto -google/cloud/scheduler/v1beta1/job.proto,@go_googleapis//google/cloud/scheduler/v1beta1:scheduler_proto,google.golang.org/genproto/googleapis/cloud/scheduler/v1beta1,@go_googleapis//google/cloud/scheduler/v1beta1:scheduler_go_proto -google/cloud/scheduler/v1beta1/target.proto,@go_googleapis//google/cloud/scheduler/v1beta1:scheduler_proto,google.golang.org/genproto/googleapis/cloud/scheduler/v1beta1,@go_googleapis//google/cloud/scheduler/v1beta1:scheduler_go_proto -google/cloud/securitycenter/v1/asset.proto,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_go_proto -google/cloud/securitycenter/v1/finding.proto,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_go_proto -google/cloud/securitycenter/v1/organization_settings.proto,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_go_proto -google/cloud/securitycenter/v1/run_asset_discovery_response.proto,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_go_proto -google/cloud/securitycenter/v1/security_marks.proto,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_go_proto -google/cloud/securitycenter/v1/securitycenter_service.proto,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_go_proto -google/cloud/securitycenter/v1/source.proto,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1,@go_googleapis//google/cloud/securitycenter/v1:securitycenter_go_proto -google/cloud/securitycenter/v1beta1/asset.proto,@go_googleapis//google/cloud/securitycenter/v1beta1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1beta1,@go_googleapis//google/cloud/securitycenter/v1beta1:securitycenter_go_proto -google/cloud/securitycenter/v1beta1/finding.proto,@go_googleapis//google/cloud/securitycenter/v1beta1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1beta1,@go_googleapis//google/cloud/securitycenter/v1beta1:securitycenter_go_proto -google/cloud/securitycenter/v1beta1/organization_settings.proto,@go_googleapis//google/cloud/securitycenter/v1beta1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1beta1,@go_googleapis//google/cloud/securitycenter/v1beta1:securitycenter_go_proto -google/cloud/securitycenter/v1beta1/security_marks.proto,@go_googleapis//google/cloud/securitycenter/v1beta1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1beta1,@go_googleapis//google/cloud/securitycenter/v1beta1:securitycenter_go_proto -google/cloud/securitycenter/v1beta1/securitycenter_service.proto,@go_googleapis//google/cloud/securitycenter/v1beta1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1beta1,@go_googleapis//google/cloud/securitycenter/v1beta1:securitycenter_go_proto -google/cloud/securitycenter/v1beta1/source.proto,@go_googleapis//google/cloud/securitycenter/v1beta1:securitycenter_proto,google.golang.org/genproto/googleapis/cloud/securitycenter/v1beta1,@go_googleapis//google/cloud/securitycenter/v1beta1:securitycenter_go_proto -google/cloud/speech/v1/cloud_speech.proto,@go_googleapis//google/cloud/speech/v1:speech_proto,google.golang.org/genproto/googleapis/cloud/speech/v1,@go_googleapis//google/cloud/speech/v1:speech_go_proto -google/cloud/speech/v1p1beta1/cloud_speech.proto,@go_googleapis//google/cloud/speech/v1p1beta1:speech_proto,google.golang.org/genproto/googleapis/cloud/speech/v1p1beta1,@go_googleapis//google/cloud/speech/v1p1beta1:speech_go_proto -google/cloud/support/common.proto,@go_googleapis//google/cloud/support:common_proto,google.golang.org/genproto/googleapis/cloud/support/common,@go_googleapis//google/cloud/support:common_go_proto -google/cloud/support/v1alpha1/cloud_support.proto,@go_googleapis//google/cloud/support/v1alpha1:support_proto,google.golang.org/genproto/googleapis/cloud/support/v1alpha1,@go_googleapis//google/cloud/support/v1alpha1:support_go_proto -google/cloud/talent/v4beta1/application.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/application_service.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/batch.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/common.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/company.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/company_service.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/completion_service.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/event.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/event_service.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/filters.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/histogram.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/job.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/job_service.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/profile.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/profile_service.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/tenant.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/talent/v4beta1/tenant_service.proto,@go_googleapis//google/cloud/talent/v4beta1:talent_proto,google.golang.org/genproto/googleapis/cloud/talent/v4beta1,@go_googleapis//google/cloud/talent/v4beta1:talent_go_proto -google/cloud/tasks/v2/cloudtasks.proto,@go_googleapis//google/cloud/tasks/v2:tasks_proto,google.golang.org/genproto/googleapis/cloud/tasks/v2,@go_googleapis//google/cloud/tasks/v2:tasks_go_proto -google/cloud/tasks/v2/queue.proto,@go_googleapis//google/cloud/tasks/v2:tasks_proto,google.golang.org/genproto/googleapis/cloud/tasks/v2,@go_googleapis//google/cloud/tasks/v2:tasks_go_proto -google/cloud/tasks/v2/target.proto,@go_googleapis//google/cloud/tasks/v2:tasks_proto,google.golang.org/genproto/googleapis/cloud/tasks/v2,@go_googleapis//google/cloud/tasks/v2:tasks_go_proto -google/cloud/tasks/v2/task.proto,@go_googleapis//google/cloud/tasks/v2:tasks_proto,google.golang.org/genproto/googleapis/cloud/tasks/v2,@go_googleapis//google/cloud/tasks/v2:tasks_go_proto -google/cloud/tasks/v2beta2/cloudtasks.proto,@go_googleapis//google/cloud/tasks/v2beta2:tasks_proto,google.golang.org/genproto/googleapis/cloud/tasks/v2beta2,@go_googleapis//google/cloud/tasks/v2beta2:tasks_go_proto -google/cloud/tasks/v2beta2/queue.proto,@go_googleapis//google/cloud/tasks/v2beta2:tasks_proto,google.golang.org/genproto/googleapis/cloud/tasks/v2beta2,@go_googleapis//google/cloud/tasks/v2beta2:tasks_go_proto -google/cloud/tasks/v2beta2/target.proto,@go_googleapis//google/cloud/tasks/v2beta2:tasks_proto,google.golang.org/genproto/googleapis/cloud/tasks/v2beta2,@go_googleapis//google/cloud/tasks/v2beta2:tasks_go_proto -google/cloud/tasks/v2beta2/task.proto,@go_googleapis//google/cloud/tasks/v2beta2:tasks_proto,google.golang.org/genproto/googleapis/cloud/tasks/v2beta2,@go_googleapis//google/cloud/tasks/v2beta2:tasks_go_proto -google/cloud/tasks/v2beta3/cloudtasks.proto,@go_googleapis//google/cloud/tasks/v2beta3:tasks_proto,google.golang.org/genproto/googleapis/cloud/tasks/v2beta3,@go_googleapis//google/cloud/tasks/v2beta3:tasks_go_proto -google/cloud/tasks/v2beta3/queue.proto,@go_googleapis//google/cloud/tasks/v2beta3:tasks_proto,google.golang.org/genproto/googleapis/cloud/tasks/v2beta3,@go_googleapis//google/cloud/tasks/v2beta3:tasks_go_proto -google/cloud/tasks/v2beta3/target.proto,@go_googleapis//google/cloud/tasks/v2beta3:tasks_proto,google.golang.org/genproto/googleapis/cloud/tasks/v2beta3,@go_googleapis//google/cloud/tasks/v2beta3:tasks_go_proto -google/cloud/tasks/v2beta3/task.proto,@go_googleapis//google/cloud/tasks/v2beta3:tasks_proto,google.golang.org/genproto/googleapis/cloud/tasks/v2beta3,@go_googleapis//google/cloud/tasks/v2beta3:tasks_go_proto -google/cloud/texttospeech/v1/cloud_tts.proto,@go_googleapis//google/cloud/texttospeech/v1:texttospeech_proto,google.golang.org/genproto/googleapis/cloud/texttospeech/v1,@go_googleapis//google/cloud/texttospeech/v1:texttospeech_go_proto -google/cloud/texttospeech/v1beta1/cloud_tts.proto,@go_googleapis//google/cloud/texttospeech/v1beta1:texttospeech_proto,google.golang.org/genproto/googleapis/cloud/texttospeech/v1beta1,@go_googleapis//google/cloud/texttospeech/v1beta1:texttospeech_go_proto -google/cloud/translate/v3/translation_service.proto,@go_googleapis//google/cloud/translate/v3:translate_proto,google.golang.org/genproto/googleapis/cloud/translate/v3,@go_googleapis//google/cloud/translate/v3:translate_go_proto -google/cloud/translate/v3beta1/translation_service.proto,@go_googleapis//google/cloud/translate/v3beta1:translate_proto,google.golang.org/genproto/googleapis/cloud/translate/v3beta1,@go_googleapis//google/cloud/translate/v3beta1:translate_go_proto -google/cloud/videointelligence/v1/video_intelligence.proto,@go_googleapis//google/cloud/videointelligence/v1:videointelligence_proto,google.golang.org/genproto/googleapis/cloud/videointelligence/v1,@go_googleapis//google/cloud/videointelligence/v1:videointelligence_go_proto -google/cloud/videointelligence/v1beta1/video_intelligence.proto,@go_googleapis//google/cloud/videointelligence/v1beta1:videointelligence_proto,google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta1,@go_googleapis//google/cloud/videointelligence/v1beta1:videointelligence_go_proto -google/cloud/videointelligence/v1beta2/video_intelligence.proto,@go_googleapis//google/cloud/videointelligence/v1beta2:videointelligence_proto,google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta2,@go_googleapis//google/cloud/videointelligence/v1beta2:videointelligence_go_proto -google/cloud/videointelligence/v1p1beta1/video_intelligence.proto,@go_googleapis//google/cloud/videointelligence/v1p1beta1:videointelligence_proto,google.golang.org/genproto/googleapis/cloud/videointelligence/v1p1beta1,@go_googleapis//google/cloud/videointelligence/v1p1beta1:videointelligence_go_proto -google/cloud/videointelligence/v1p2beta1/video_intelligence.proto,@go_googleapis//google/cloud/videointelligence/v1p2beta1:videointelligence_proto,google.golang.org/genproto/googleapis/cloud/videointelligence/v1p2beta1,@go_googleapis//google/cloud/videointelligence/v1p2beta1:videointelligence_go_proto -google/cloud/videointelligence/v1p3beta1/video_intelligence.proto,@go_googleapis//google/cloud/videointelligence/v1p3beta1:videointelligence_proto,google.golang.org/genproto/googleapis/cloud/videointelligence/v1p3beta1,@go_googleapis//google/cloud/videointelligence/v1p3beta1:videointelligence_go_proto -google/cloud/vision/v1/geometry.proto,@go_googleapis//google/cloud/vision/v1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1,@go_googleapis//google/cloud/vision/v1:vision_go_proto -google/cloud/vision/v1/image_annotator.proto,@go_googleapis//google/cloud/vision/v1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1,@go_googleapis//google/cloud/vision/v1:vision_go_proto -google/cloud/vision/v1/product_search.proto,@go_googleapis//google/cloud/vision/v1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1,@go_googleapis//google/cloud/vision/v1:vision_go_proto -google/cloud/vision/v1/product_search_service.proto,@go_googleapis//google/cloud/vision/v1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1,@go_googleapis//google/cloud/vision/v1:vision_go_proto -google/cloud/vision/v1/text_annotation.proto,@go_googleapis//google/cloud/vision/v1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1,@go_googleapis//google/cloud/vision/v1:vision_go_proto -google/cloud/vision/v1/web_detection.proto,@go_googleapis//google/cloud/vision/v1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1,@go_googleapis//google/cloud/vision/v1:vision_go_proto -google/cloud/vision/v1p1beta1/geometry.proto,@go_googleapis//google/cloud/vision/v1p1beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1,@go_googleapis//google/cloud/vision/v1p1beta1:vision_go_proto -google/cloud/vision/v1p1beta1/image_annotator.proto,@go_googleapis//google/cloud/vision/v1p1beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1,@go_googleapis//google/cloud/vision/v1p1beta1:vision_go_proto -google/cloud/vision/v1p1beta1/text_annotation.proto,@go_googleapis//google/cloud/vision/v1p1beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1,@go_googleapis//google/cloud/vision/v1p1beta1:vision_go_proto -google/cloud/vision/v1p1beta1/web_detection.proto,@go_googleapis//google/cloud/vision/v1p1beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1,@go_googleapis//google/cloud/vision/v1p1beta1:vision_go_proto -google/cloud/vision/v1p2beta1/geometry.proto,@go_googleapis//google/cloud/vision/v1p2beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1,@go_googleapis//google/cloud/vision/v1p2beta1:vision_go_proto -google/cloud/vision/v1p2beta1/image_annotator.proto,@go_googleapis//google/cloud/vision/v1p2beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1,@go_googleapis//google/cloud/vision/v1p2beta1:vision_go_proto -google/cloud/vision/v1p2beta1/text_annotation.proto,@go_googleapis//google/cloud/vision/v1p2beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1,@go_googleapis//google/cloud/vision/v1p2beta1:vision_go_proto -google/cloud/vision/v1p2beta1/web_detection.proto,@go_googleapis//google/cloud/vision/v1p2beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1,@go_googleapis//google/cloud/vision/v1p2beta1:vision_go_proto -google/cloud/vision/v1p3beta1/geometry.proto,@go_googleapis//google/cloud/vision/v1p3beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p3beta1,@go_googleapis//google/cloud/vision/v1p3beta1:vision_go_proto -google/cloud/vision/v1p3beta1/image_annotator.proto,@go_googleapis//google/cloud/vision/v1p3beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p3beta1,@go_googleapis//google/cloud/vision/v1p3beta1:vision_go_proto -google/cloud/vision/v1p3beta1/product_search.proto,@go_googleapis//google/cloud/vision/v1p3beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p3beta1,@go_googleapis//google/cloud/vision/v1p3beta1:vision_go_proto -google/cloud/vision/v1p3beta1/product_search_service.proto,@go_googleapis//google/cloud/vision/v1p3beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p3beta1,@go_googleapis//google/cloud/vision/v1p3beta1:vision_go_proto -google/cloud/vision/v1p3beta1/text_annotation.proto,@go_googleapis//google/cloud/vision/v1p3beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p3beta1,@go_googleapis//google/cloud/vision/v1p3beta1:vision_go_proto -google/cloud/vision/v1p3beta1/web_detection.proto,@go_googleapis//google/cloud/vision/v1p3beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p3beta1,@go_googleapis//google/cloud/vision/v1p3beta1:vision_go_proto -google/cloud/vision/v1p4beta1/geometry.proto,@go_googleapis//google/cloud/vision/v1p4beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1,@go_googleapis//google/cloud/vision/v1p4beta1:vision_go_proto -google/cloud/vision/v1p4beta1/image_annotator.proto,@go_googleapis//google/cloud/vision/v1p4beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1,@go_googleapis//google/cloud/vision/v1p4beta1:vision_go_proto -google/cloud/vision/v1p4beta1/product_search.proto,@go_googleapis//google/cloud/vision/v1p4beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1,@go_googleapis//google/cloud/vision/v1p4beta1:vision_go_proto -google/cloud/vision/v1p4beta1/product_search_service.proto,@go_googleapis//google/cloud/vision/v1p4beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1,@go_googleapis//google/cloud/vision/v1p4beta1:vision_go_proto -google/cloud/vision/v1p4beta1/text_annotation.proto,@go_googleapis//google/cloud/vision/v1p4beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1,@go_googleapis//google/cloud/vision/v1p4beta1:vision_go_proto -google/cloud/vision/v1p4beta1/web_detection.proto,@go_googleapis//google/cloud/vision/v1p4beta1:vision_proto,google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1,@go_googleapis//google/cloud/vision/v1p4beta1:vision_go_proto -google/cloud/webrisk/v1beta1/webrisk.proto,@go_googleapis//google/cloud/webrisk/v1beta1:webrisk_proto,google.golang.org/genproto/googleapis/cloud/webrisk/v1beta1,@go_googleapis//google/cloud/webrisk/v1beta1:webrisk_go_proto -google/cloud/websecurityscanner/v1alpha/crawled_url.proto,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1alpha,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1alpha/finding.proto,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1alpha,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1alpha/finding_addon.proto,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1alpha,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1alpha/finding_type_stats.proto,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1alpha,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1alpha/scan_config.proto,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1alpha,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1alpha/scan_run.proto,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1alpha,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1alpha/web_security_scanner.proto,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1alpha,@go_googleapis//google/cloud/websecurityscanner/v1alpha:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1beta/crawled_url.proto,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1beta,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1beta/finding.proto,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1beta,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1beta/finding_addon.proto,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1beta,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1beta/finding_type_stats.proto,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1beta,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1beta/scan_config.proto,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1beta,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1beta/scan_config_error.proto,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1beta,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1beta/scan_run.proto,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1beta,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1beta/scan_run_error_trace.proto,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1beta,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1beta/scan_run_warning_trace.proto,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1beta,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_go_proto -google/cloud/websecurityscanner/v1beta/web_security_scanner.proto,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_proto,google.golang.org/genproto/googleapis/cloud/websecurityscanner/v1beta,@go_googleapis//google/cloud/websecurityscanner/v1beta:websecurityscanner_go_proto -google/container/v1/cluster_service.proto,@go_googleapis//google/container/v1:container_proto,google.golang.org/genproto/googleapis/container/v1,@go_googleapis//google/container/v1:container_go_proto -google/container/v1alpha1/cluster_service.proto,@go_googleapis//google/container/v1alpha1:container_proto,google.golang.org/genproto/googleapis/container/v1alpha1,@go_googleapis//google/container/v1alpha1:container_go_proto -google/container/v1beta1/cluster_service.proto,@go_googleapis//google/container/v1beta1:container_proto,google.golang.org/genproto/googleapis/container/v1beta1,@go_googleapis//google/container/v1beta1:container_go_proto -google/datastore/admin/v1/datastore_admin.proto,@go_googleapis//google/datastore/admin/v1:admin_proto,google.golang.org/genproto/googleapis/datastore/admin/v1,@go_googleapis//google/datastore/admin/v1:admin_go_proto -google/datastore/admin/v1/index.proto,@go_googleapis//google/datastore/admin/v1:admin_proto,google.golang.org/genproto/googleapis/datastore/admin/v1,@go_googleapis//google/datastore/admin/v1:admin_go_proto -google/datastore/admin/v1beta1/datastore_admin.proto,@go_googleapis//google/datastore/admin/v1beta1:admin_proto,google.golang.org/genproto/googleapis/datastore/admin/v1beta1,@go_googleapis//google/datastore/admin/v1beta1:admin_go_proto -google/datastore/v1/datastore.proto,@go_googleapis//google/datastore/v1:datastore_proto,google.golang.org/genproto/googleapis/datastore/v1,@go_googleapis//google/datastore/v1:datastore_go_proto -google/datastore/v1/entity.proto,@go_googleapis//google/datastore/v1:datastore_proto,google.golang.org/genproto/googleapis/datastore/v1,@go_googleapis//google/datastore/v1:datastore_go_proto -google/datastore/v1/query.proto,@go_googleapis//google/datastore/v1:datastore_proto,google.golang.org/genproto/googleapis/datastore/v1,@go_googleapis//google/datastore/v1:datastore_go_proto -google/datastore/v1beta3/datastore.proto,@go_googleapis//google/datastore/v1beta3:datastore_proto,google.golang.org/genproto/googleapis/datastore/v1beta3,@go_googleapis//google/datastore/v1beta3:datastore_go_proto -google/datastore/v1beta3/entity.proto,@go_googleapis//google/datastore/v1beta3:datastore_proto,google.golang.org/genproto/googleapis/datastore/v1beta3,@go_googleapis//google/datastore/v1beta3:datastore_go_proto -google/datastore/v1beta3/query.proto,@go_googleapis//google/datastore/v1beta3:datastore_proto,google.golang.org/genproto/googleapis/datastore/v1beta3,@go_googleapis//google/datastore/v1beta3:datastore_go_proto -google/devtools/build/v1/build_events.proto,@go_googleapis//google/devtools/build/v1:build_proto,google.golang.org/genproto/googleapis/devtools/build/v1,@go_googleapis//google/devtools/build/v1:build_go_proto -google/devtools/build/v1/build_status.proto,@go_googleapis//google/devtools/build/v1:build_proto,google.golang.org/genproto/googleapis/devtools/build/v1,@go_googleapis//google/devtools/build/v1:build_go_proto -google/devtools/build/v1/publish_build_event.proto,@go_googleapis//google/devtools/build/v1:build_proto,google.golang.org/genproto/googleapis/devtools/build/v1,@go_googleapis//google/devtools/build/v1:build_go_proto -google/devtools/cloudbuild/v1/cloudbuild.proto,@go_googleapis//google/devtools/cloudbuild/v1:cloudbuild_proto,google.golang.org/genproto/googleapis/devtools/cloudbuild/v1,@go_googleapis//google/devtools/cloudbuild/v1:cloudbuild_go_proto -google/devtools/clouddebugger/v2/controller.proto,@go_googleapis//google/devtools/clouddebugger/v2:clouddebugger_proto,google.golang.org/genproto/googleapis/devtools/clouddebugger/v2,@go_googleapis//google/devtools/clouddebugger/v2:clouddebugger_go_proto -google/devtools/clouddebugger/v2/data.proto,@go_googleapis//google/devtools/clouddebugger/v2:clouddebugger_proto,google.golang.org/genproto/googleapis/devtools/clouddebugger/v2,@go_googleapis//google/devtools/clouddebugger/v2:clouddebugger_go_proto -google/devtools/clouddebugger/v2/debugger.proto,@go_googleapis//google/devtools/clouddebugger/v2:clouddebugger_proto,google.golang.org/genproto/googleapis/devtools/clouddebugger/v2,@go_googleapis//google/devtools/clouddebugger/v2:clouddebugger_go_proto -google/devtools/clouderrorreporting/v1beta1/common.proto,@go_googleapis//google/devtools/clouderrorreporting/v1beta1:clouderrorreporting_proto,google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1,@go_googleapis//google/devtools/clouderrorreporting/v1beta1:clouderrorreporting_go_proto -google/devtools/clouderrorreporting/v1beta1/error_group_service.proto,@go_googleapis//google/devtools/clouderrorreporting/v1beta1:clouderrorreporting_proto,google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1,@go_googleapis//google/devtools/clouderrorreporting/v1beta1:clouderrorreporting_go_proto -google/devtools/clouderrorreporting/v1beta1/error_stats_service.proto,@go_googleapis//google/devtools/clouderrorreporting/v1beta1:clouderrorreporting_proto,google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1,@go_googleapis//google/devtools/clouderrorreporting/v1beta1:clouderrorreporting_go_proto -google/devtools/clouderrorreporting/v1beta1/report_errors_service.proto,@go_googleapis//google/devtools/clouderrorreporting/v1beta1:clouderrorreporting_proto,google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1,@go_googleapis//google/devtools/clouderrorreporting/v1beta1:clouderrorreporting_go_proto -google/devtools/cloudprofiler/v2/profiler.proto,@go_googleapis//google/devtools/cloudprofiler/v2:cloudprofiler_proto,google.golang.org/genproto/googleapis/devtools/cloudprofiler/v2,@go_googleapis//google/devtools/cloudprofiler/v2:cloudprofiler_go_proto -google/devtools/cloudtrace/v1/trace.proto,@go_googleapis//google/devtools/cloudtrace/v1:cloudtrace_proto,google.golang.org/genproto/googleapis/devtools/cloudtrace/v1,@go_googleapis//google/devtools/cloudtrace/v1:cloudtrace_go_proto -google/devtools/cloudtrace/v2/trace.proto,@go_googleapis//google/devtools/cloudtrace/v2:cloudtrace_proto,google.golang.org/genproto/googleapis/devtools/cloudtrace/v2,@go_googleapis//google/devtools/cloudtrace/v2:cloudtrace_go_proto -google/devtools/cloudtrace/v2/tracing.proto,@go_googleapis//google/devtools/cloudtrace/v2:cloudtrace_proto,google.golang.org/genproto/googleapis/devtools/cloudtrace/v2,@go_googleapis//google/devtools/cloudtrace/v2:cloudtrace_go_proto -google/devtools/containeranalysis/v1/containeranalysis.proto,@go_googleapis//google/devtools/containeranalysis/v1:containeranalysis_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1,@go_googleapis//google/devtools/containeranalysis/v1:containeranalysis_go_proto -google/devtools/containeranalysis/v1alpha1/bill_of_materials.proto,@go_googleapis//google/devtools/containeranalysis/v1alpha1:containeranalysis_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1,@go_googleapis//google/devtools/containeranalysis/v1alpha1:containeranalysis_go_proto -google/devtools/containeranalysis/v1alpha1/containeranalysis.proto,@go_googleapis//google/devtools/containeranalysis/v1alpha1:containeranalysis_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1,@go_googleapis//google/devtools/containeranalysis/v1alpha1:containeranalysis_go_proto -google/devtools/containeranalysis/v1alpha1/image_basis.proto,@go_googleapis//google/devtools/containeranalysis/v1alpha1:containeranalysis_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1,@go_googleapis//google/devtools/containeranalysis/v1alpha1:containeranalysis_go_proto -google/devtools/containeranalysis/v1alpha1/package_vulnerability.proto,@go_googleapis//google/devtools/containeranalysis/v1alpha1:containeranalysis_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1,@go_googleapis//google/devtools/containeranalysis/v1alpha1:containeranalysis_go_proto -google/devtools/containeranalysis/v1alpha1/provenance.proto,@go_googleapis//google/devtools/containeranalysis/v1alpha1:containeranalysis_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1,@go_googleapis//google/devtools/containeranalysis/v1alpha1:containeranalysis_go_proto -google/devtools/containeranalysis/v1alpha1/source_context.proto,@go_googleapis//google/devtools/containeranalysis/v1alpha1:containeranalysis_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1,@go_googleapis//google/devtools/containeranalysis/v1alpha1:containeranalysis_go_proto -google/devtools/containeranalysis/v1beta1/attestation/attestation.proto,@go_googleapis//google/devtools/containeranalysis/v1beta1/attestation:attestation_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/attestation,@go_googleapis//google/devtools/containeranalysis/v1beta1/attestation:attestation_go_proto -google/devtools/containeranalysis/v1beta1/build/build.proto,@go_googleapis//google/devtools/containeranalysis/v1beta1/build:build_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/build,@go_googleapis//google/devtools/containeranalysis/v1beta1/build:build_go_proto -google/devtools/containeranalysis/v1beta1/common/common.proto,@go_googleapis//google/devtools/containeranalysis/v1beta1/common:common_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/common,@go_googleapis//google/devtools/containeranalysis/v1beta1/common:common_go_proto -google/devtools/containeranalysis/v1beta1/containeranalysis.proto,@go_googleapis//google/devtools/containeranalysis/v1beta1:containeranalysis_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1,@go_googleapis//google/devtools/containeranalysis/v1beta1:containeranalysis_go_proto -google/devtools/containeranalysis/v1beta1/deployment/deployment.proto,@go_googleapis//google/devtools/containeranalysis/v1beta1/deployment:deployment_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/deployment,@go_googleapis//google/devtools/containeranalysis/v1beta1/deployment:deployment_go_proto -google/devtools/containeranalysis/v1beta1/discovery/discovery.proto,@go_googleapis//google/devtools/containeranalysis/v1beta1/discovery:discovery_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/discovery,@go_googleapis//google/devtools/containeranalysis/v1beta1/discovery:discovery_go_proto -google/devtools/containeranalysis/v1beta1/grafeas/grafeas.proto,@go_googleapis//google/devtools/containeranalysis/v1beta1/grafeas:grafeas_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/grafeas,@go_googleapis//google/devtools/containeranalysis/v1beta1/grafeas:grafeas_go_proto -google/devtools/containeranalysis/v1beta1/image/image.proto,@go_googleapis//google/devtools/containeranalysis/v1beta1/image:image_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/image,@go_googleapis//google/devtools/containeranalysis/v1beta1/image:image_go_proto -google/devtools/containeranalysis/v1beta1/package/package.proto,@go_googleapis//google/devtools/containeranalysis/v1beta1/package:package_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/package,@go_googleapis//google/devtools/containeranalysis/v1beta1/package:package_go_proto -google/devtools/containeranalysis/v1beta1/provenance/provenance.proto,@go_googleapis//google/devtools/containeranalysis/v1beta1/provenance:provenance_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/provenance,@go_googleapis//google/devtools/containeranalysis/v1beta1/provenance:provenance_go_proto -google/devtools/containeranalysis/v1beta1/source/source.proto,@go_googleapis//google/devtools/containeranalysis/v1beta1/source:source_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/source,@go_googleapis//google/devtools/containeranalysis/v1beta1/source:source_go_proto -google/devtools/containeranalysis/v1beta1/vulnerability/vulnerability.proto,@go_googleapis//google/devtools/containeranalysis/v1beta1/vulnerability:vulnerability_proto,google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1/vulnerability,@go_googleapis//google/devtools/containeranalysis/v1beta1/vulnerability:vulnerability_go_proto -google/devtools/remoteexecution/v1test/remote_execution.proto,@go_googleapis//google/devtools/remoteexecution/v1test:remoteexecution_proto,google.golang.org/genproto/googleapis/devtools/remoteexecution/v1test,@go_googleapis//google/devtools/remoteexecution/v1test:remoteexecution_go_proto -google/devtools/remoteworkers/v1test2/bots.proto,@go_googleapis//google/devtools/remoteworkers/v1test2:remoteworkers_proto,google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2,@go_googleapis//google/devtools/remoteworkers/v1test2:remoteworkers_go_proto -google/devtools/remoteworkers/v1test2/command.proto,@go_googleapis//google/devtools/remoteworkers/v1test2:remoteworkers_proto,google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2,@go_googleapis//google/devtools/remoteworkers/v1test2:remoteworkers_go_proto -google/devtools/remoteworkers/v1test2/tasks.proto,@go_googleapis//google/devtools/remoteworkers/v1test2:remoteworkers_proto,google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2,@go_googleapis//google/devtools/remoteworkers/v1test2:remoteworkers_go_proto -google/devtools/remoteworkers/v1test2/worker.proto,@go_googleapis//google/devtools/remoteworkers/v1test2:remoteworkers_proto,google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2,@go_googleapis//google/devtools/remoteworkers/v1test2:remoteworkers_go_proto -google/devtools/resultstore/v2/action.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/common.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/configuration.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/configured_target.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/coverage.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/coverage_summary.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/download_metadata.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/file.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/file_processing_error.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/file_set.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/invocation.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/resultstore_download.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/resultstore_file_download.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/resultstore_upload.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/target.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/test_suite.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/resultstore/v2/upload_metadata.proto,@go_googleapis//google/devtools/resultstore/v2:resultstore_proto,google.golang.org/genproto/googleapis/devtools/resultstore/v2,@go_googleapis//google/devtools/resultstore/v2:resultstore_go_proto -google/devtools/source/v1/source_context.proto,@go_googleapis//google/devtools/source/v1:source_proto,google.golang.org/genproto/googleapis/devtools/source/v1,@go_googleapis//google/devtools/source/v1:source_go_proto -google/devtools/sourcerepo/v1/sourcerepo.proto,@go_googleapis//google/devtools/sourcerepo/v1:sourcerepo_proto,google.golang.org/genproto/googleapis/devtools/sourcerepo/v1,@go_googleapis//google/devtools/sourcerepo/v1:sourcerepo_go_proto -google/example/library/v1/library.proto,@go_googleapis//google/example/library/v1:library_proto,google.golang.org/genproto/googleapis/example/library/v1,@go_googleapis//google/example/library/v1:library_go_proto -google/firebase/fcm/connection/v1alpha1/connection_api.proto,@go_googleapis//google/firebase/fcm/connection/v1alpha1:connection_proto,google.golang.org/genproto/googleapis/firebase/fcm/connection/v1alpha1,@go_googleapis//google/firebase/fcm/connection/v1alpha1:connection_go_proto -google/firestore/admin/v1/field.proto,@go_googleapis//google/firestore/admin/v1:admin_proto,google.golang.org/genproto/googleapis/firestore/admin/v1,@go_googleapis//google/firestore/admin/v1:admin_go_proto -google/firestore/admin/v1/firestore_admin.proto,@go_googleapis//google/firestore/admin/v1:admin_proto,google.golang.org/genproto/googleapis/firestore/admin/v1,@go_googleapis//google/firestore/admin/v1:admin_go_proto -google/firestore/admin/v1/index.proto,@go_googleapis//google/firestore/admin/v1:admin_proto,google.golang.org/genproto/googleapis/firestore/admin/v1,@go_googleapis//google/firestore/admin/v1:admin_go_proto -google/firestore/admin/v1/location.proto,@go_googleapis//google/firestore/admin/v1:admin_proto,google.golang.org/genproto/googleapis/firestore/admin/v1,@go_googleapis//google/firestore/admin/v1:admin_go_proto -google/firestore/admin/v1/operation.proto,@go_googleapis//google/firestore/admin/v1:admin_proto,google.golang.org/genproto/googleapis/firestore/admin/v1,@go_googleapis//google/firestore/admin/v1:admin_go_proto -google/firestore/admin/v1beta1/firestore_admin.proto,@go_googleapis//google/firestore/admin/v1beta1:admin_proto,google.golang.org/genproto/googleapis/firestore/admin/v1beta1,@go_googleapis//google/firestore/admin/v1beta1:admin_go_proto -google/firestore/admin/v1beta1/index.proto,@go_googleapis//google/firestore/admin/v1beta1:admin_proto,google.golang.org/genproto/googleapis/firestore/admin/v1beta1,@go_googleapis//google/firestore/admin/v1beta1:admin_go_proto -google/firestore/admin/v1beta1/location.proto,@go_googleapis//google/firestore/admin/v1beta1:admin_proto,google.golang.org/genproto/googleapis/firestore/admin/v1beta1,@go_googleapis//google/firestore/admin/v1beta1:admin_go_proto -google/firestore/admin/v1beta2/field.proto,@go_googleapis//google/firestore/admin/v1beta2:admin_proto,google.golang.org/genproto/googleapis/firestore/admin/v1beta2,@go_googleapis//google/firestore/admin/v1beta2:admin_go_proto -google/firestore/admin/v1beta2/firestore_admin.proto,@go_googleapis//google/firestore/admin/v1beta2:admin_proto,google.golang.org/genproto/googleapis/firestore/admin/v1beta2,@go_googleapis//google/firestore/admin/v1beta2:admin_go_proto -google/firestore/admin/v1beta2/index.proto,@go_googleapis//google/firestore/admin/v1beta2:admin_proto,google.golang.org/genproto/googleapis/firestore/admin/v1beta2,@go_googleapis//google/firestore/admin/v1beta2:admin_go_proto -google/firestore/admin/v1beta2/operation.proto,@go_googleapis//google/firestore/admin/v1beta2:admin_proto,google.golang.org/genproto/googleapis/firestore/admin/v1beta2,@go_googleapis//google/firestore/admin/v1beta2:admin_go_proto -google/firestore/v1/common.proto,@go_googleapis//google/firestore/v1:firestore_proto,google.golang.org/genproto/googleapis/firestore/v1,@go_googleapis//google/firestore/v1:firestore_go_proto -google/firestore/v1/document.proto,@go_googleapis//google/firestore/v1:firestore_proto,google.golang.org/genproto/googleapis/firestore/v1,@go_googleapis//google/firestore/v1:firestore_go_proto -google/firestore/v1/firestore.proto,@go_googleapis//google/firestore/v1:firestore_proto,google.golang.org/genproto/googleapis/firestore/v1,@go_googleapis//google/firestore/v1:firestore_go_proto -google/firestore/v1/query.proto,@go_googleapis//google/firestore/v1:firestore_proto,google.golang.org/genproto/googleapis/firestore/v1,@go_googleapis//google/firestore/v1:firestore_go_proto -google/firestore/v1/write.proto,@go_googleapis//google/firestore/v1:firestore_proto,google.golang.org/genproto/googleapis/firestore/v1,@go_googleapis//google/firestore/v1:firestore_go_proto -google/firestore/v1beta1/common.proto,@go_googleapis//google/firestore/v1beta1:firestore_proto,google.golang.org/genproto/googleapis/firestore/v1beta1,@go_googleapis//google/firestore/v1beta1:firestore_go_proto -google/firestore/v1beta1/document.proto,@go_googleapis//google/firestore/v1beta1:firestore_proto,google.golang.org/genproto/googleapis/firestore/v1beta1,@go_googleapis//google/firestore/v1beta1:firestore_go_proto -google/firestore/v1beta1/firestore.proto,@go_googleapis//google/firestore/v1beta1:firestore_proto,google.golang.org/genproto/googleapis/firestore/v1beta1,@go_googleapis//google/firestore/v1beta1:firestore_go_proto -google/firestore/v1beta1/query.proto,@go_googleapis//google/firestore/v1beta1:firestore_proto,google.golang.org/genproto/googleapis/firestore/v1beta1,@go_googleapis//google/firestore/v1beta1:firestore_go_proto -google/firestore/v1beta1/write.proto,@go_googleapis//google/firestore/v1beta1:firestore_proto,google.golang.org/genproto/googleapis/firestore/v1beta1,@go_googleapis//google/firestore/v1beta1:firestore_go_proto -google/genomics/v1/annotations.proto,@go_googleapis//google/genomics/v1:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1,@go_googleapis//google/genomics/v1:genomics_go_proto -google/genomics/v1/cigar.proto,@go_googleapis//google/genomics/v1:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1,@go_googleapis//google/genomics/v1:genomics_go_proto -google/genomics/v1/datasets.proto,@go_googleapis//google/genomics/v1:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1,@go_googleapis//google/genomics/v1:genomics_go_proto -google/genomics/v1/operations.proto,@go_googleapis//google/genomics/v1:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1,@go_googleapis//google/genomics/v1:genomics_go_proto -google/genomics/v1/position.proto,@go_googleapis//google/genomics/v1:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1,@go_googleapis//google/genomics/v1:genomics_go_proto -google/genomics/v1/range.proto,@go_googleapis//google/genomics/v1:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1,@go_googleapis//google/genomics/v1:genomics_go_proto -google/genomics/v1/readalignment.proto,@go_googleapis//google/genomics/v1:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1,@go_googleapis//google/genomics/v1:genomics_go_proto -google/genomics/v1/readgroup.proto,@go_googleapis//google/genomics/v1:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1,@go_googleapis//google/genomics/v1:genomics_go_proto -google/genomics/v1/readgroupset.proto,@go_googleapis//google/genomics/v1:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1,@go_googleapis//google/genomics/v1:genomics_go_proto -google/genomics/v1/reads.proto,@go_googleapis//google/genomics/v1:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1,@go_googleapis//google/genomics/v1:genomics_go_proto -google/genomics/v1/references.proto,@go_googleapis//google/genomics/v1:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1,@go_googleapis//google/genomics/v1:genomics_go_proto -google/genomics/v1/variants.proto,@go_googleapis//google/genomics/v1:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1,@go_googleapis//google/genomics/v1:genomics_go_proto -google/genomics/v1alpha2/pipelines.proto,@go_googleapis//google/genomics/v1alpha2:genomics_proto,google.golang.org/genproto/googleapis/genomics/v1alpha2,@go_googleapis//google/genomics/v1alpha2:genomics_go_proto -google/geo/type/viewport.proto,@go_googleapis//google/geo/type:viewport_proto,google.golang.org/genproto/googleapis/geo/type/viewport,@go_googleapis//google/geo/type:viewport_go_proto -google/home/graph/v1/device.proto,@go_googleapis//google/home/graph/v1:graph_proto,google.golang.org/genproto/googleapis/home/graph/v1,@go_googleapis//google/home/graph/v1:graph_go_proto -google/home/graph/v1/homegraph.proto,@go_googleapis//google/home/graph/v1:graph_proto,google.golang.org/genproto/googleapis/home/graph/v1,@go_googleapis//google/home/graph/v1:graph_go_proto -google/iam/admin/v1/iam.proto,@go_googleapis//google/iam/admin/v1:admin_proto,google.golang.org/genproto/googleapis/iam/admin/v1,@go_googleapis//google/iam/admin/v1:admin_go_proto -google/iam/credentials/v1/common.proto,@go_googleapis//google/iam/credentials/v1:credentials_proto,google.golang.org/genproto/googleapis/iam/credentials/v1,@go_googleapis//google/iam/credentials/v1:credentials_go_proto -google/iam/credentials/v1/iamcredentials.proto,@go_googleapis//google/iam/credentials/v1:credentials_proto,google.golang.org/genproto/googleapis/iam/credentials/v1,@go_googleapis//google/iam/credentials/v1:credentials_go_proto -google/iam/v1/iam_policy.proto,@go_googleapis//google/iam/v1:iam_proto,google.golang.org/genproto/googleapis/iam/v1,@go_googleapis//google/iam/v1:iam_go_proto -google/iam/v1/logging/audit_data.proto,@go_googleapis//google/iam/v1/logging:logging_proto,google.golang.org/genproto/googleapis/iam/v1/logging,@go_googleapis//google/iam/v1/logging:logging_go_proto -google/iam/v1/options.proto,@go_googleapis//google/iam/v1:iam_proto,google.golang.org/genproto/googleapis/iam/v1,@go_googleapis//google/iam/v1:iam_go_proto -google/iam/v1/policy.proto,@go_googleapis//google/iam/v1:iam_proto,google.golang.org/genproto/googleapis/iam/v1,@go_googleapis//google/iam/v1:iam_go_proto -google/logging/type/http_request.proto,@go_googleapis//google/logging/type:ltype_proto,google.golang.org/genproto/googleapis/logging/type,@go_googleapis//google/logging/type:ltype_go_proto -google/logging/type/log_severity.proto,@go_googleapis//google/logging/type:ltype_proto,google.golang.org/genproto/googleapis/logging/type,@go_googleapis//google/logging/type:ltype_go_proto -google/logging/v2/log_entry.proto,@go_googleapis//google/logging/v2:logging_proto,google.golang.org/genproto/googleapis/logging/v2,@go_googleapis//google/logging/v2:logging_go_proto -google/logging/v2/logging.proto,@go_googleapis//google/logging/v2:logging_proto,google.golang.org/genproto/googleapis/logging/v2,@go_googleapis//google/logging/v2:logging_go_proto -google/logging/v2/logging_config.proto,@go_googleapis//google/logging/v2:logging_proto,google.golang.org/genproto/googleapis/logging/v2,@go_googleapis//google/logging/v2:logging_go_proto -google/logging/v2/logging_metrics.proto,@go_googleapis//google/logging/v2:logging_proto,google.golang.org/genproto/googleapis/logging/v2,@go_googleapis//google/logging/v2:logging_go_proto -google/longrunning/operations.proto,@go_googleapis//google/longrunning:longrunning_proto,google.golang.org/genproto/googleapis/longrunning,@go_googleapis//google/longrunning:longrunning_go_proto -google/monitoring/v3/alert.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/alert_service.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/common.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/dropped_labels.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/group.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/group_service.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/metric.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/metric_service.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/mutation_record.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/notification.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/notification_service.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/span_context.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/uptime.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/monitoring/v3/uptime_service.proto,@go_googleapis//google/monitoring/v3:monitoring_proto,google.golang.org/genproto/googleapis/monitoring/v3,@go_googleapis//google/monitoring/v3:monitoring_go_proto -google/privacy/dlp/v2/dlp.proto,@go_googleapis//google/privacy/dlp/v2:dlp_proto,google.golang.org/genproto/googleapis/privacy/dlp/v2,@go_googleapis//google/privacy/dlp/v2:dlp_go_proto -google/privacy/dlp/v2/storage.proto,@go_googleapis//google/privacy/dlp/v2:dlp_proto,google.golang.org/genproto/googleapis/privacy/dlp/v2,@go_googleapis//google/privacy/dlp/v2:dlp_go_proto -google/pubsub/v1/pubsub.proto,@go_googleapis//google/pubsub/v1:pubsub_proto,google.golang.org/genproto/googleapis/pubsub/v1,@go_googleapis//google/pubsub/v1:pubsub_go_proto -google/pubsub/v1beta2/pubsub.proto,@go_googleapis//google/pubsub/v1beta2:pubsub_proto,google.golang.org/genproto/googleapis/pubsub/v1beta2,@go_googleapis//google/pubsub/v1beta2:pubsub_go_proto -google/rpc/code.proto,@go_googleapis//google/rpc:code_proto,google.golang.org/genproto/googleapis/rpc/code,@go_googleapis//google/rpc:code_go_proto -google/rpc/error_details.proto,@go_googleapis//google/rpc:errdetails_proto,google.golang.org/genproto/googleapis/rpc/errdetails,@go_googleapis//google/rpc:errdetails_go_proto -google/rpc/status.proto,@go_googleapis//google/rpc:status_proto,google.golang.org/genproto/googleapis/rpc/status,@go_googleapis//google/rpc:status_go_proto -google/spanner/admin/database/v1/spanner_database_admin.proto,@go_googleapis//google/spanner/admin/database/v1:database_proto,google.golang.org/genproto/googleapis/spanner/admin/database/v1,@go_googleapis//google/spanner/admin/database/v1:database_go_proto -google/spanner/admin/instance/v1/spanner_instance_admin.proto,@go_googleapis//google/spanner/admin/instance/v1:instance_proto,google.golang.org/genproto/googleapis/spanner/admin/instance/v1,@go_googleapis//google/spanner/admin/instance/v1:instance_go_proto -google/spanner/v1/keys.proto,@go_googleapis//google/spanner/v1:spanner_proto,google.golang.org/genproto/googleapis/spanner/v1,@go_googleapis//google/spanner/v1:spanner_go_proto -google/spanner/v1/mutation.proto,@go_googleapis//google/spanner/v1:spanner_proto,google.golang.org/genproto/googleapis/spanner/v1,@go_googleapis//google/spanner/v1:spanner_go_proto -google/spanner/v1/query_plan.proto,@go_googleapis//google/spanner/v1:spanner_proto,google.golang.org/genproto/googleapis/spanner/v1,@go_googleapis//google/spanner/v1:spanner_go_proto -google/spanner/v1/result_set.proto,@go_googleapis//google/spanner/v1:spanner_proto,google.golang.org/genproto/googleapis/spanner/v1,@go_googleapis//google/spanner/v1:spanner_go_proto -google/spanner/v1/spanner.proto,@go_googleapis//google/spanner/v1:spanner_proto,google.golang.org/genproto/googleapis/spanner/v1,@go_googleapis//google/spanner/v1:spanner_go_proto -google/spanner/v1/transaction.proto,@go_googleapis//google/spanner/v1:spanner_proto,google.golang.org/genproto/googleapis/spanner/v1,@go_googleapis//google/spanner/v1:spanner_go_proto -google/spanner/v1/type.proto,@go_googleapis//google/spanner/v1:spanner_proto,google.golang.org/genproto/googleapis/spanner/v1,@go_googleapis//google/spanner/v1:spanner_go_proto -google/storagetransfer/v1/transfer.proto,@go_googleapis//google/storagetransfer/v1:storagetransfer_proto,google.golang.org/genproto/googleapis/storagetransfer/v1,@go_googleapis//google/storagetransfer/v1:storagetransfer_go_proto -google/storagetransfer/v1/transfer_types.proto,@go_googleapis//google/storagetransfer/v1:storagetransfer_proto,google.golang.org/genproto/googleapis/storagetransfer/v1,@go_googleapis//google/storagetransfer/v1:storagetransfer_go_proto -google/streetview/publish/v1/resources.proto,@go_googleapis//google/streetview/publish/v1:publish_proto,google.golang.org/genproto/googleapis/streetview/publish/v1,@go_googleapis//google/streetview/publish/v1:publish_go_proto -google/streetview/publish/v1/rpcmessages.proto,@go_googleapis//google/streetview/publish/v1:publish_proto,google.golang.org/genproto/googleapis/streetview/publish/v1,@go_googleapis//google/streetview/publish/v1:publish_go_proto -google/streetview/publish/v1/streetview_publish.proto,@go_googleapis//google/streetview/publish/v1:publish_proto,google.golang.org/genproto/googleapis/streetview/publish/v1,@go_googleapis//google/streetview/publish/v1:publish_go_proto -google/type/calendar_period.proto,@go_googleapis//google/type:calendarperiod_proto,google.golang.org/genproto/googleapis/type/calendarperiod,@go_googleapis//google/type:calendarperiod_go_proto -google/type/color.proto,@go_googleapis//google/type:color_proto,google.golang.org/genproto/googleapis/type/color,@go_googleapis//google/type:color_go_proto -google/type/date.proto,@go_googleapis//google/type:date_proto,google.golang.org/genproto/googleapis/type/date,@go_googleapis//google/type:date_go_proto -google/type/dayofweek.proto,@go_googleapis//google/type:dayofweek_proto,google.golang.org/genproto/googleapis/type/dayofweek,@go_googleapis//google/type:dayofweek_go_proto -google/type/expr.proto,@go_googleapis//google/type:expr_proto,google.golang.org/genproto/googleapis/type/expr,@go_googleapis//google/type:expr_go_proto -google/type/fraction.proto,@go_googleapis//google/type:fraction_proto,google.golang.org/genproto/googleapis/type/fraction,@go_googleapis//google/type:fraction_go_proto -google/type/latlng.proto,@go_googleapis//google/type:latlng_proto,google.golang.org/genproto/googleapis/type/latlng,@go_googleapis//google/type:latlng_go_proto -google/type/money.proto,@go_googleapis//google/type:money_proto,google.golang.org/genproto/googleapis/type/money,@go_googleapis//google/type:money_go_proto -google/type/postal_address.proto,@go_googleapis//google/type:postaladdress_proto,google.golang.org/genproto/googleapis/type/postaladdress,@go_googleapis//google/type:postaladdress_go_proto -google/type/quaternion.proto,@go_googleapis//google/type:quaternion_proto,google.golang.org/genproto/googleapis/type/quaternion,@go_googleapis//google/type:quaternion_go_proto -google/type/timeofday.proto,@go_googleapis//google/type:timeofday_proto,google.golang.org/genproto/googleapis/type/timeofday,@go_googleapis//google/type:timeofday_go_proto -google/watcher/v1/watch.proto,@go_googleapis//google/watcher/v1:watcher_proto,google.golang.org/genproto/googleapis/watcher/v1,@go_googleapis//google/watcher/v1:watcher_go_proto -grafeas/v1/attestation.proto,@go_googleapis//grafeas/v1:grafeas_proto,google.golang.org/genproto/googleapis/grafeas/v1,@go_googleapis//grafeas/v1:grafeas_go_proto -grafeas/v1/build.proto,@go_googleapis//grafeas/v1:grafeas_proto,google.golang.org/genproto/googleapis/grafeas/v1,@go_googleapis//grafeas/v1:grafeas_go_proto -grafeas/v1/common.proto,@go_googleapis//grafeas/v1:grafeas_proto,google.golang.org/genproto/googleapis/grafeas/v1,@go_googleapis//grafeas/v1:grafeas_go_proto -grafeas/v1/cvss.proto,@go_googleapis//grafeas/v1:grafeas_proto,google.golang.org/genproto/googleapis/grafeas/v1,@go_googleapis//grafeas/v1:grafeas_go_proto -grafeas/v1/deployment.proto,@go_googleapis//grafeas/v1:grafeas_proto,google.golang.org/genproto/googleapis/grafeas/v1,@go_googleapis//grafeas/v1:grafeas_go_proto -grafeas/v1/discovery.proto,@go_googleapis//grafeas/v1:grafeas_proto,google.golang.org/genproto/googleapis/grafeas/v1,@go_googleapis//grafeas/v1:grafeas_go_proto -grafeas/v1/grafeas.proto,@go_googleapis//grafeas/v1:grafeas_proto,google.golang.org/genproto/googleapis/grafeas/v1,@go_googleapis//grafeas/v1:grafeas_go_proto -grafeas/v1/image.proto,@go_googleapis//grafeas/v1:grafeas_proto,google.golang.org/genproto/googleapis/grafeas/v1,@go_googleapis//grafeas/v1:grafeas_go_proto -grafeas/v1/package.proto,@go_googleapis//grafeas/v1:grafeas_proto,google.golang.org/genproto/googleapis/grafeas/v1,@go_googleapis//grafeas/v1:grafeas_go_proto -grafeas/v1/provenance.proto,@go_googleapis//grafeas/v1:grafeas_proto,google.golang.org/genproto/googleapis/grafeas/v1,@go_googleapis//grafeas/v1:grafeas_go_proto -grafeas/v1/vulnerability.proto,@go_googleapis//grafeas/v1:grafeas_proto,google.golang.org/genproto/googleapis/grafeas/v1,@go_googleapis//grafeas/v1:grafeas_go_proto diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/resolve.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/resolve.go deleted file mode 100644 index 9170d2c322..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/proto/resolve.go +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package proto - -import ( - "errors" - "fmt" - "log" - "path" - "sort" - "strings" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/label" - "github.com/bazelbuild/bazel-gazelle/repo" - "github.com/bazelbuild/bazel-gazelle/resolve" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -func (_ *protoLang) Imports(c *config.Config, r *rule.Rule, f *rule.File) []resolve.ImportSpec { - rel := f.Pkg - srcs := r.AttrStrings("srcs") - imports := make([]resolve.ImportSpec, len(srcs)) - pc := GetProtoConfig(c) - prefix := rel - if pc.stripImportPrefix != "" { - prefix = strings.TrimPrefix(rel, pc.stripImportPrefix[1:]) - if rel == prefix { - return nil - } - } - if pc.importPrefix != "" { - prefix = path.Join(pc.importPrefix, prefix) - } - for i, src := range srcs { - imports[i] = resolve.ImportSpec{Lang: "proto", Imp: path.Join(prefix, src)} - } - return imports -} - -func (_ *protoLang) Embeds(r *rule.Rule, from label.Label) []label.Label { - return nil -} - -func (_ *protoLang) Resolve(c *config.Config, ix *resolve.RuleIndex, rc *repo.RemoteCache, r *rule.Rule, importsRaw interface{}, from label.Label) { - if importsRaw == nil { - // may not be set in tests. - return - } - imports := importsRaw.([]string) - r.DelAttr("deps") - depSet := make(map[string]bool) - for _, imp := range imports { - l, err := resolveProto(c, ix, r, imp, from) - if err == skipImportError { - continue - } else if err != nil { - log.Print(err) - } else { - l = l.Rel(from.Repo, from.Pkg) - depSet[l.String()] = true - } - } - if len(depSet) > 0 { - deps := make([]string, 0, len(depSet)) - for dep := range depSet { - deps = append(deps, dep) - } - sort.Strings(deps) - r.SetAttr("deps", deps) - } -} - -var ( - skipImportError = errors.New("std import") - notFoundError = errors.New("not found") -) - -func resolveProto(c *config.Config, ix *resolve.RuleIndex, r *rule.Rule, imp string, from label.Label) (label.Label, error) { - pc := GetProtoConfig(c) - if !strings.HasSuffix(imp, ".proto") { - return label.NoLabel, fmt.Errorf("can't import non-proto: %q", imp) - } - - if l, ok := resolve.FindRuleWithOverride(c, resolve.ImportSpec{Imp: imp, Lang: "proto"}, "proto"); ok { - return l, nil - } - - if l, ok := knownImports[imp]; ok && pc.Mode.ShouldUseKnownImports() { - if l.Equal(from) { - return label.NoLabel, skipImportError - } else { - return l, nil - } - } - - if l, err := resolveWithIndex(ix, imp, from); err == nil || err == skipImportError { - return l, err - } else if err != notFoundError { - return label.NoLabel, err - } - - rel := path.Dir(imp) - if rel == "." { - rel = "" - } - name := RuleName(rel) - return label.New("", rel, name), nil -} - -func resolveWithIndex(ix *resolve.RuleIndex, imp string, from label.Label) (label.Label, error) { - matches := ix.FindRulesByImport(resolve.ImportSpec{Lang: "proto", Imp: imp}, "proto") - if len(matches) == 0 { - return label.NoLabel, notFoundError - } - if len(matches) > 1 { - return label.NoLabel, fmt.Errorf("multiple rules (%s and %s) may be imported with %q from %s", matches[0].Label, matches[1].Label, imp, from) - } - if matches[0].IsSelfImport(from) { - return label.NoLabel, skipImportError - } - return matches[0].Label, nil -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/language/update.go b/vendor/github.com/bazelbuild/bazel-gazelle/language/update.go deleted file mode 100644 index cebf73a27f..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/language/update.go +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright 2019 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package language - -import ( - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/repo" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// RepoUpdater may be implemented by languages that support updating -// repository rules that provide named libraries. -// -// EXPERIMENTAL: this may change or be removed. -type RepoUpdater interface { - UpdateRepos(args UpdateReposArgs) UpdateReposResult -} - -// UpdateReposArgs contains arguments for RepoUpdater.UpdateRepos. -// Arguments are passed in a struct value so that new fields may be added -// in the future without breaking existing implementations. -// -// EXPERIMENTAL: this may change or be removed. -type UpdateReposArgs struct { - // Config is the configuration for the main workspace. - Config *config.Config - - // Imports is a list of libraries to update. UpdateRepos should return - // repository rules that provide these libraries. It may also return - // repository rules providing transitive dependencies. - Imports []string - - // Cache stores information fetched from the network and ensures that - // the same request isn't made multiple times. - Cache *repo.RemoteCache -} - -// UpdateReposResult contains return values for RepoUpdater.UpdateRepos. -// Results are returned through a struct so that new (optional) fields may be -// added without breaking existing implementations. -// -// EXPERIMENTAL: this may change or be removed. -type UpdateReposResult struct { - // Gen is a list of repository rules that provide libraries named by - // UpdateImportArgs.Imports. These will be merged with existing rules or - // added to WORKSPACE. This list may be shorter or longer than the list - // of imports, since a single repository may provide multiple imports, - // and additional repositories may be needed for transitive dependencies. - Gen []*rule.Rule - - // Error is any fatal error that occurred. Non-fatal errors should be logged. - Error error -} - -// RepoImporter may be implemented by languages that support importing -// repository rules from another build system. -// -// EXPERIMENTAL: this may change or be removed. -type RepoImporter interface { - // CanImport returns whether a given configuration file may be imported - // with this extension. Only one extension may import any given file. - // ImportRepos will not be called unless this returns true. - CanImport(path string) bool - - // ImportRepos generates a list of repository rules by reading a - // configuration file from another build system. - ImportRepos(args ImportReposArgs) ImportReposResult -} - -// ImportReposArgs contains arguments for RepoImporter.ImportRepos. -// Arguments are passed in a struct value so that new fields may be added -// in the future without breaking existing implementations. -// -// EXPERIMENTAL: this may change or be removed. -type ImportReposArgs struct { - // Config is the configuration for the main workspace. - Config *config.Config - - // Path is the name of the configuration file to import. - Path string - - // Prune indicates whether repository rules that are no longer needed - // should be deleted. This means the Empty list in the result should be - // filled in. - Prune bool - - // Cache stores information fetched from the network and ensures that - // the same request isn't made multiple times. - Cache *repo.RemoteCache -} - -// ImportReposResult contains return values for RepoImporter.ImportRepos. -// Results are returned through a struct so that new (optional) fields may -// be added without breaking existing implementations. -// -// EXPERIMENTAL: this may change or be removed. -type ImportReposResult struct { - // Gen is a list of imported repository rules. - Gen []*rule.Rule - - // Empty is a list of repository rules that may be deleted. This should only - // be set if ImportReposArgs.Prune is true. - Empty []*rule.Rule - - // Error is any fatal error that occurred. Non-fatal errors should be logged. - Error error -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/merger/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/merger/BUILD.bazel deleted file mode 100644 index ba2108015e..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/merger/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fix.go", - "merger.go", - ], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/merger", - importpath = "github.com/bazelbuild/bazel-gazelle/merger", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/bazelbuild/bazel-gazelle/rule:go_default_library"], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/merger/fix.go b/vendor/github.com/bazelbuild/bazel-gazelle/merger/fix.go deleted file mode 100644 index 852b8d6768..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/merger/fix.go +++ /dev/null @@ -1,179 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package merger - -import ( - "fmt" - "strings" - - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// FixLoads removes loads of unused go rules and adds loads of newly used rules. -// This should be called after FixFile and MergeFile, since symbols -// may be introduced that aren't loaded. -// -// This function calls File.Sync before processing loads. -func FixLoads(f *rule.File, knownLoads []rule.LoadInfo) { - knownFiles := make(map[string]bool) - knownKinds := make(map[string]string) - for _, l := range knownLoads { - knownFiles[l.Name] = true - for _, k := range l.Symbols { - knownKinds[k] = l.Name - } - } - - // Sync the file. We need File.Loads and File.Rules to contain inserted - // statements and not deleted statements. - f.Sync() - - // Scan load statements in the file. Keep track of loads of known files, - // since these may be changed. Keep track of symbols loaded from unknown - // files; we will not add loads for these. - var loads []*rule.Load - otherLoadedKinds := make(map[string]bool) - for _, l := range f.Loads { - if knownFiles[l.Name()] { - loads = append(loads, l) - continue - } - for _, sym := range l.Symbols() { - otherLoadedKinds[sym] = true - } - } - - // Make a map of all the symbols from known files used in this file. - usedKinds := make(map[string]map[string]bool) - for _, r := range f.Rules { - kind := r.Kind() - if file, ok := knownKinds[kind]; ok && !otherLoadedKinds[kind] { - if usedKinds[file] == nil { - usedKinds[file] = make(map[string]bool) - } - usedKinds[file][kind] = true - } - } - - // Fix the load statements. The order is important, so we iterate over - // knownLoads instead of knownFiles. - for _, known := range knownLoads { - file := known.Name - first := true - for _, l := range loads { - if l.Name() != file { - continue - } - if first { - fixLoad(l, file, usedKinds[file], knownKinds) - first = false - } else { - fixLoad(l, file, nil, knownKinds) - } - if l.IsEmpty() { - l.Delete() - } - } - if first { - load := fixLoad(nil, file, usedKinds[file], knownKinds) - if load != nil { - index := newLoadIndex(f, known.After) - load.Insert(f, index) - } - } - } -} - -// fixLoad updates a load statement with the given symbols. If load is nil, -// a new load may be created and returned. Symbols in kinds will be added -// to the load if they're not already present. Known symbols not in kinds -// will be removed if present. Other symbols will be preserved. If load is -// empty, nil is returned. -func fixLoad(load *rule.Load, file string, kinds map[string]bool, knownKinds map[string]string) *rule.Load { - if load == nil { - if len(kinds) == 0 { - return nil - } - load = rule.NewLoad(file) - } - - for k := range kinds { - load.Add(k) - } - for _, k := range load.Symbols() { - if knownKinds[k] != "" && !kinds[k] { - load.Remove(k) - } - } - return load -} - -// newLoadIndex returns the index in stmts where a new load statement should -// be inserted. after is a list of function names that the load should not -// be inserted before. -func newLoadIndex(f *rule.File, after []string) int { - if len(after) == 0 { - return 0 - } - index := 0 - for _, r := range f.Rules { - for _, a := range after { - if r.Kind() == a && r.Index() >= index { - index = r.Index() + 1 - } - } - } - return index -} - -// CheckGazelleLoaded searches the given WORKSPACE file for a repository named -// "bazel_gazelle". If no such repository is found *and* the repo is not -// declared with a directive *and* at least one load statement mentions -// the repository, a descriptive error will be returned. -// -// This should be called after modifications have been made to WORKSPACE -// (i.e., after FixLoads) before writing it to disk. -func CheckGazelleLoaded(f *rule.File) error { - needGazelle := false - for _, l := range f.Loads { - if strings.HasPrefix(l.Name(), "@bazel_gazelle//") { - needGazelle = true - } - } - if !needGazelle { - return nil - } - for _, r := range f.Rules { - if r.Name() == "bazel_gazelle" { - return nil - } - } - for _, d := range f.Directives { - if d.Key != "repo" { - continue - } - if fs := strings.Fields(d.Value); len(fs) > 0 && fs[0] == "bazel_gazelle" { - return nil - } - } - return fmt.Errorf(`%s: error: bazel_gazelle is not declared in WORKSPACE. -Without this repository, Gazelle cannot safely modify the WORKSPACE file. -See the instructions at https://github.com/bazelbuild/bazel-gazelle. -If the bazel_gazelle is declared inside a macro, you can suppress this error -by adding a comment like this to WORKSPACE: - # gazelle:repo bazel_gazelle -`, f.Path) -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/merger/merger.go b/vendor/github.com/bazelbuild/bazel-gazelle/merger/merger.go deleted file mode 100644 index 7993eba071..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/merger/merger.go +++ /dev/null @@ -1,250 +0,0 @@ -/* Copyright 2016 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package merger provides functions for merging generated rules into -// existing build files. -// -// Gazelle's normal workflow is roughly as follows: -// -// 1. Read metadata from sources. -// -// 2. Generate new rules. -// -// 3. Merge newly generated rules with rules in the existing build file -// if there is one. -// -// 4. Build an index of merged library rules for dependency resolution. -// -// 5. Resolve dependencies (i.e., convert import strings to deps labels). -// -// 6. Merge the newly resolved dependencies. -// -// 7. Write the merged file back to disk. -// -// This package is used for sets 3 and 6 above. -package merger - -import ( - "fmt" - "strings" - - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// Phase indicates which attributes should be merged in matching rules. -type Phase int - -const ( - // The pre-resolve merge is performed before rules are indexed for dependency - // resolution. All attributes not related to dependencies are merged - // (i.e., rule.KindInfo.MergeableAttrs). This merge must be performed - // before indexing because attributes related to indexing (e.g., - // srcs, importpath) will be affected. - PreResolve Phase = iota - - // The post-resolve merge is performed after rules are indexed. All attributes - // related to dependencies are merged (i.e., rule.KindInfo.ResolveAttrs). - PostResolve -) - -// MergeFile combines information from newly generated rules with matching -// rules in an existing build file. MergeFile can also delete rules which -// are empty after merging. -// -// oldFile is the file to merge. It must not be nil. -// -// emptyRules is a list of stub rules (with no attributes other than name) -// which were not generated. These are merged with matching rules. The merged -// rules are deleted if they contain no attributes that make them buildable -// (e.g., srcs, deps, anything in rule.KindInfo.NonEmptyAttrs). -// -// genRules is a list of newly generated rules. These are merged with -// matching rules. A rule matches if it has the same kind and name or if -// some other attribute in rule.KindInfo.MatchAttrs matches (e.g., -// "importpath" in go_library). Elements of genRules that don't match -// any existing rule are appended to the end of oldFile. -// -// phase indicates whether this is a pre- or post-resolve merge. Different -// attributes (rule.KindInfo.MergeableAttrs or ResolveAttrs) will be merged. -// -// kinds maps rule kinds (e.g., "go_library") to metadata that helps merge -// rules of that kind. -// -// When a generated and existing rule are merged, each attribute is merged -// separately. If an attribute is mergeable (according to KindInfo), values -// from the existing attribute are replaced by values from the generated -// attribute. Comments are preserved on values that are present in both -// versions of the attribute. If at attribute is not mergeable, the generated -// version of the attribute will be added if no existing attribute is present; -// otherwise, the existing attribute will be preserved. -// -// Note that "# keep" comments affect merging. If a value within an existing -// attribute is marked with a "# keep" comment, it will not be removed. -// If an attribute is marked with a "# keep" comment, it will not be merged. -// If a rule is marked with a "# keep" comment, the whole rule will not -// be modified. -func MergeFile(oldFile *rule.File, emptyRules, genRules []*rule.Rule, phase Phase, kinds map[string]rule.KindInfo) { - getMergeAttrs := func(r *rule.Rule) map[string]bool { - if phase == PreResolve { - return kinds[r.Kind()].MergeableAttrs - } else { - return kinds[r.Kind()].ResolveAttrs - } - } - - // Merge empty rules into the file and delete any rules which become empty. - for _, emptyRule := range emptyRules { - if oldRule, _ := Match(oldFile.Rules, emptyRule, kinds[emptyRule.Kind()]); oldRule != nil { - if oldRule.ShouldKeep() { - continue - } - rule.MergeRules(emptyRule, oldRule, getMergeAttrs(emptyRule), oldFile.Path) - if oldRule.IsEmpty(kinds[oldRule.Kind()]) { - oldRule.Delete() - } - } - } - oldFile.Sync() - - // Match generated rules with existing rules in the file. Keep track of - // rules with non-standard names. - matchRules := make([]*rule.Rule, len(genRules)) - matchErrors := make([]error, len(genRules)) - substitutions := make(map[string]string) - for i, genRule := range genRules { - oldRule, err := Match(oldFile.Rules, genRule, kinds[genRule.Kind()]) - if err != nil { - // TODO(jayconrod): add a verbose mode and log errors. They are too chatty - // to print by default. - matchErrors[i] = err - continue - } - matchRules[i] = oldRule - if oldRule != nil { - if oldRule.Name() != genRule.Name() { - substitutions[genRule.Name()] = oldRule.Name() - } - } - } - - // Rename labels in generated rules that refer to other generated rules. - if len(substitutions) > 0 { - for _, genRule := range genRules { - substituteRule(genRule, substitutions, kinds[genRule.Kind()]) - } - } - - // Merge generated rules with existing rules or append to the end of the file. - for i, genRule := range genRules { - if matchErrors[i] != nil { - continue - } - if matchRules[i] == nil { - genRule.Insert(oldFile) - } else { - rule.MergeRules(genRule, matchRules[i], getMergeAttrs(genRule), oldFile.Path) - } - } -} - -// substituteRule replaces local labels (those beginning with ":", referring to -// targets in the same package) according to a substitution map. This is used -// to update generated rules before merging when the corresponding existing -// rules have different names. If substituteRule replaces a string, it returns -// a new expression; it will not modify the original expression. -func substituteRule(r *rule.Rule, substitutions map[string]string, info rule.KindInfo) { - for attr := range info.SubstituteAttrs { - if expr := r.Attr(attr); expr != nil { - expr = rule.MapExprStrings(expr, func(s string) string { - if rename, ok := substitutions[strings.TrimPrefix(s, ":")]; ok { - return ":" + rename - } else { - return s - } - }) - r.SetAttr(attr, expr) - } - } -} - -// Match searches for a rule that can be merged with x in rules. -// -// A rule is considered a match if its kind is equal to x's kind AND either its -// name is equal OR at least one of the attributes in matchAttrs is equal. -// -// If there are no matches, nil and nil are returned. -// -// If a rule has the same name but a different kind, nill and an error -// are returned. -// -// If there is exactly one match, the rule and nil are returned. -// -// If there are multiple matches, match will attempt to disambiguate, based on -// the quality of the match (name match is best, then attribute match in the -// order that attributes are listed). If disambiguation is successful, -// the rule and nil are returned. Otherwise, nil and an error are returned. -func Match(rules []*rule.Rule, x *rule.Rule, info rule.KindInfo) (*rule.Rule, error) { - xname := x.Name() - xkind := x.Kind() - var nameMatches []*rule.Rule - var kindMatches []*rule.Rule - for _, y := range rules { - if xname == y.Name() { - nameMatches = append(nameMatches, y) - } - if xkind == y.Kind() { - kindMatches = append(kindMatches, y) - } - } - - if len(nameMatches) == 1 { - y := nameMatches[0] - if xkind != y.Kind() { - return nil, fmt.Errorf("could not merge %s(%s): a rule of the same name has kind %s", xkind, xname, y.Kind()) - } - return y, nil - } - if len(nameMatches) > 1 { - return nil, fmt.Errorf("could not merge %s(%s): multiple rules have the same name", xkind, xname) - } - - for _, key := range info.MatchAttrs { - var attrMatches []*rule.Rule - xvalue := x.AttrString(key) - if xvalue == "" { - continue - } - for _, y := range kindMatches { - if xvalue == y.AttrString(key) { - attrMatches = append(attrMatches, y) - } - } - if len(attrMatches) == 1 { - return attrMatches[0], nil - } else if len(attrMatches) > 1 { - return nil, fmt.Errorf("could not merge %s(%s): multiple rules have the same attribute %s = %q", xkind, xname, key, xvalue) - } - } - - if info.MatchAny { - if len(kindMatches) == 1 { - return kindMatches[0], nil - } else if len(kindMatches) > 1 { - return nil, fmt.Errorf("could not merge %s(%s): multiple rules have the same kind but different names", xkind, xname) - } - } - - return nil, nil -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/pathtools/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/pathtools/BUILD.bazel deleted file mode 100644 index bd33bae8f8..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/pathtools/BUILD.bazel +++ /dev/null @@ -1,9 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["path.go"], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/pathtools", - importpath = "github.com/bazelbuild/bazel-gazelle/pathtools", - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/pathtools/path.go b/vendor/github.com/bazelbuild/bazel-gazelle/pathtools/path.go deleted file mode 100644 index bdfcbc0db4..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/pathtools/path.go +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package pathtools provides utilities for manipulating paths. Most paths -// within Gazelle are slash-separated paths, relative to the repository root -// directory. The repository root directory is represented by the empty -// string. Paths in this format may be used directly as package names in labels. -package pathtools - -import ( - "path" - "path/filepath" - "strings" -) - -// HasPrefix returns whether the slash-separated path p has the given -// prefix. Unlike strings.HasPrefix, this function respects component -// boundaries, so "/home/foo" is not a prefix is "/home/foobar/baz". If the -// prefix is empty, this function always returns true. -func HasPrefix(p, prefix string) bool { - return prefix == "" || p == prefix || strings.HasPrefix(p, prefix+"/") -} - -// TrimPrefix returns p without the provided prefix. If p doesn't start -// with prefix, it returns p unchanged. Unlike strings.HasPrefix, this function -// respects component boundaries (assuming slash-separated paths), so -// TrimPrefix("foo/bar", "foo") returns "baz". -func TrimPrefix(p, prefix string) string { - if prefix == "" { - return p - } - if prefix == p { - return "" - } - return strings.TrimPrefix(p, prefix+"/") -} - -// RelBaseName returns the base name for rel, a slash-separated path relative -// to the repository root. If rel is empty, RelBaseName returns the base name -// of prefix. If prefix is empty, RelBaseName returns the base name of root, -// the absolute file path of the repository root directory. If that's empty -// to, then RelBaseName returns "root". -func RelBaseName(rel, prefix, root string) string { - base := path.Base(rel) - if base == "." || base == "/" { - base = path.Base(prefix) - } - if base == "." || base == "/" { - base = filepath.Base(root) - } - if base == "." || base == "/" { - base = "root" - } - return base -} - -// Index returns the starting index of the string sub within the non-absolute -// slash-separated path p. sub must start and end at component boundaries -// within p. -func Index(p, sub string) int { - if sub == "" { - return 0 - } - p = path.Clean(p) - sub = path.Clean(sub) - if path.IsAbs(sub) { - if HasPrefix(p, sub) { - return 0 - } else { - return -1 - } - } - if p == "" || p == "/" { - return -1 - } - - i := 0 // i is the index of the first byte of a path element - if len(p) > 0 && p[0] == '/' { - i++ - } - for { - suffix := p[i:] - if len(suffix) < len(sub) { - return -1 - } - if suffix[:len(sub)] == sub && (len(suffix) == len(sub) || suffix[len(sub)] == '/') { - return i - } - j := strings.IndexByte(suffix, '/') - if j < 0 { - return -1 - } - i += j + 1 - if i >= len(p) { - return -1 - } - } - return -1 -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/repo/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/repo/BUILD.bazel deleted file mode 100644 index c2eeda6727..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/repo/BUILD.bazel +++ /dev/null @@ -1,18 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "remote.go", - "repo.go", - ], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/repo", - importpath = "github.com/bazelbuild/bazel-gazelle/repo", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/bazelbuild/bazel-gazelle/label:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/pathtools:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/rule:go_default_library", - "//vendor/golang.org/x/tools/go/vcs:go_default_library", - ], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/repo/remote.go b/vendor/github.com/bazelbuild/bazel-gazelle/repo/remote.go deleted file mode 100644 index e378d6aa52..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/repo/remote.go +++ /dev/null @@ -1,583 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package repo - -import ( - "bytes" - "encoding/json" - "fmt" - "io/ioutil" - "os" - "os/exec" - "path" - "path/filepath" - "regexp" - "runtime" - "strings" - "sync" - - "github.com/bazelbuild/bazel-gazelle/label" - "github.com/bazelbuild/bazel-gazelle/pathtools" - "golang.org/x/tools/go/vcs" -) - -// RemoteCache stores information about external repositories. The cache may -// be initialized with information about known repositories, i.e., those listed -// in the WORKSPACE file and mentioned on the command line. Other information -// is retrieved over the network. -// -// Public methods of RemoteCache may be slow in cases where a network fetch -// is needed. Public methods may be called concurrently. -// -// TODO(jayconrod): this is very Go-centric. It should be moved to language/go. -// Unfortunately, doing so would break the resolve.Resolver interface. -type RemoteCache struct { - // RepoRootForImportPath is vcs.RepoRootForImportPath by default. It may - // be overridden so that tests may avoid accessing the network. - RepoRootForImportPath func(string, bool) (*vcs.RepoRoot, error) - - // HeadCmd returns the latest commit on the default branch in the given - // repository. This is used by Head. It may be stubbed out for tests. - HeadCmd func(remote, vcs string) (string, error) - - // ModInfo returns the module path and version that provides the package - // with the given import path. This is used by Mod. It may be stubbed - // out for tests. - ModInfo func(importPath string) (modPath string, err error) - - // ModVersionInfo returns the module path, true version, and sum for - // the module that provides the package with the given import path. - // This is used by ModVersion. It may be stubbed out for tests. - ModVersionInfo func(modPath, query string) (version, sum string, err error) - - root, remote, head, mod, modVersion remoteCacheMap - - tmpOnce sync.Once - tmpDir string - tmpErr error -} - -// remoteCacheMap is a thread-safe, idempotent cache. It is used to store -// information which should be fetched over the network no more than once. -// This follows the Memo pattern described in The Go Programming Language, -// section 9.7. -type remoteCacheMap struct { - mu sync.Mutex - cache map[string]*remoteCacheEntry -} - -type remoteCacheEntry struct { - value interface{} - err error - - // ready is nil for entries that were added when the cache was initialized. - // It is non-nil for other entries. It is closed when an entry is ready, - // i.e., the operation loading the entry completed. - ready chan struct{} -} - -type rootValue struct { - root, name string -} - -type remoteValue struct { - remote, vcs string -} - -type headValue struct { - commit, tag string -} - -type modValue struct { - path, name string - known bool -} - -type modVersionValue struct { - path, name, version, sum string -} - -// Repo describes details of a Go repository known in advance. It is used to -// initialize RemoteCache so that some repositories don't need to be looked up. -// -// DEPRECATED: Go-specific details should be removed from RemoteCache, and -// lookup logic should be moved to language/go. This means RemoteCache will -// need to be initialized in a different way. -type Repo struct { - Name, GoPrefix, Remote, VCS string -} - -// NewRemoteCache creates a new RemoteCache with a set of known repositories. -// The Root and Remote methods will return information about repositories listed -// here without accessing the network. However, the Head method will still -// access the network for these repositories to retrieve information about new -// versions. -// -// A cleanup function is also returned. The caller must call this when -// RemoteCache is no longer needed. RemoteCache may write files to a temporary -// directory. This will delete them. -func NewRemoteCache(knownRepos []Repo) (r *RemoteCache, cleanup func() error) { - r = &RemoteCache{ - RepoRootForImportPath: vcs.RepoRootForImportPath, - HeadCmd: defaultHeadCmd, - root: remoteCacheMap{cache: make(map[string]*remoteCacheEntry)}, - remote: remoteCacheMap{cache: make(map[string]*remoteCacheEntry)}, - head: remoteCacheMap{cache: make(map[string]*remoteCacheEntry)}, - mod: remoteCacheMap{cache: make(map[string]*remoteCacheEntry)}, - modVersion: remoteCacheMap{cache: make(map[string]*remoteCacheEntry)}, - } - r.ModInfo = func(importPath string) (string, error) { - return defaultModInfo(r, importPath) - } - r.ModVersionInfo = func(modPath, query string) (string, string, error) { - return defaultModVersionInfo(r, modPath, query) - } - for _, repo := range knownRepos { - r.root.cache[repo.GoPrefix] = &remoteCacheEntry{ - value: rootValue{ - root: repo.GoPrefix, - name: repo.Name, - }, - } - if repo.Remote != "" { - r.remote.cache[repo.GoPrefix] = &remoteCacheEntry{ - value: remoteValue{ - remote: repo.Remote, - vcs: repo.VCS, - }, - } - } - r.mod.cache[repo.GoPrefix] = &remoteCacheEntry{ - value: modValue{ - path: repo.GoPrefix, - name: repo.Name, - known: true, - }, - } - } - - // Augment knownRepos with additional prefixes for - // minimal module compatibility. For example, if repo "com_example_foo_v2" - // has prefix "example.com/foo/v2", map "example.com/foo" to the same - // entry. - // TODO(jayconrod): there should probably be some control over whether - // callers can use these mappings: packages within modules should not be - // allowed to use them. However, we'll return the same result nearly all - // the time, and simpler is better. - for _, repo := range knownRepos { - path := pathWithoutSemver(repo.GoPrefix) - if path == "" || r.root.cache[path] != nil { - continue - } - r.root.cache[path] = r.root.cache[repo.GoPrefix] - if e := r.remote.cache[repo.GoPrefix]; e != nil { - r.remote.cache[path] = e - } - r.mod.cache[path] = r.mod.cache[repo.GoPrefix] - } - - return r, r.cleanup -} - -func (r *RemoteCache) cleanup() error { - if r.tmpDir == "" { - return nil - } - return os.RemoveAll(r.tmpDir) -} - -var gopkginPattern = regexp.MustCompile("^(gopkg.in/(?:[^/]+/)?[^/]+\\.v\\d+)(?:/|$)") - -var knownPrefixes = []struct { - prefix string - missing int -}{ - {prefix: "golang.org/x", missing: 1}, - {prefix: "google.golang.org", missing: 1}, - {prefix: "cloud.google.com", missing: 1}, - {prefix: "github.com", missing: 2}, -} - -// Root returns the portion of an import path that corresponds to the root -// directory of the repository containing the given import path. For example, -// given "golang.org/x/tools/go/loader", this will return "golang.org/x/tools". -// The workspace name of the repository is also returned. This may be a custom -// name set in WORKSPACE, or it may be a generated name based on the root path. -func (r *RemoteCache) Root(importPath string) (root, name string, err error) { - // Try prefixes of the import path in the cache, but don't actually go out - // to vcs yet. We do this before handling known special cases because - // the cache is pre-populated with repository rules, and we want to use their - // names if we can. - prefix := importPath - for { - v, ok, err := r.root.get(prefix) - if ok { - if err != nil { - return "", "", err - } - value := v.(rootValue) - return value.root, value.name, nil - } - - prefix = path.Dir(prefix) - if prefix == "." || prefix == "/" { - break - } - } - - // Try known prefixes. - for _, p := range knownPrefixes { - if pathtools.HasPrefix(importPath, p.prefix) { - rest := pathtools.TrimPrefix(importPath, p.prefix) - var components []string - if rest != "" { - components = strings.Split(rest, "/") - } - if len(components) < p.missing { - return "", "", fmt.Errorf("import path %q is shorter than the known prefix %q", importPath, p.prefix) - } - root = p.prefix - for _, c := range components[:p.missing] { - root = path.Join(root, c) - } - name = label.ImportPathToBazelRepoName(root) - return root, name, nil - } - } - - // gopkg.in is special, and might have either one or two levels of - // missing paths. See http://labix.org/gopkg.in for URL patterns. - if match := gopkginPattern.FindStringSubmatch(importPath); len(match) > 0 { - root = match[1] - name = label.ImportPathToBazelRepoName(root) - return root, name, nil - } - - // Find the prefix using vcs and cache the result. - v, err := r.root.ensure(importPath, func() (interface{}, error) { - res, err := r.RepoRootForImportPath(importPath, false) - if err != nil { - return nil, err - } - return rootValue{res.Root, label.ImportPathToBazelRepoName(res.Root)}, nil - }) - if err != nil { - return "", "", err - } - value := v.(rootValue) - return value.root, value.name, nil -} - -// Remote returns the VCS name and the remote URL for a repository with the -// given root import path. This is suitable for creating new repository rules. -func (r *RemoteCache) Remote(root string) (remote, vcs string, err error) { - v, err := r.remote.ensure(root, func() (interface{}, error) { - repo, err := r.RepoRootForImportPath(root, false) - if err != nil { - return nil, err - } - return remoteValue{remote: repo.Repo, vcs: repo.VCS.Cmd}, nil - }) - if err != nil { - return "", "", err - } - value := v.(remoteValue) - return value.remote, value.vcs, nil -} - -// Head returns the most recent commit id on the default branch and latest -// version tag for the given remote repository. The tag "" is returned if -// no latest version was found. -// -// TODO(jayconrod): support VCS other than git. -// TODO(jayconrod): support version tags. "" is always returned. -func (r *RemoteCache) Head(remote, vcs string) (commit, tag string, err error) { - if vcs != "git" { - return "", "", fmt.Errorf("could not locate recent commit in repo %q with unknown version control scheme %q", remote, vcs) - } - - v, err := r.head.ensure(remote, func() (interface{}, error) { - commit, err := r.HeadCmd(remote, vcs) - if err != nil { - return nil, err - } - return headValue{commit: commit}, nil - }) - if err != nil { - return "", "", err - } - value := v.(headValue) - return value.commit, value.tag, nil -} - -func defaultHeadCmd(remote, vcs string) (string, error) { - switch vcs { - case "local": - return "", nil - - case "git": - // Old versions of git ls-remote exit with code 129 when "--" is passed. - // We'll try to validate the argument here instead. - if strings.HasPrefix(remote, "-") { - return "", fmt.Errorf("remote must not start with '-': %q", remote) - } - cmd := exec.Command("git", "ls-remote", remote, "HEAD") - out, err := cmd.Output() - if err != nil { - var stdErr []byte - if e, ok := err.(*exec.ExitError); ok { - stdErr = e.Stderr - } - return "", fmt.Errorf("git ls-remote for %s : %v : %s", remote, err, stdErr) - } - ix := bytes.IndexByte(out, '\t') - if ix < 0 { - return "", fmt.Errorf("could not parse output for git ls-remote for %q", remote) - } - return string(out[:ix]), nil - - default: - return "", fmt.Errorf("unknown version control system: %s", vcs) - } -} - -// Mod returns the module path for the module that contains the package -// named by importPath. The name of the go_repository rule for the module -// is also returned. For example, calling Mod on "github.com/foo/bar/v2/baz" -// would give the module path "github.com/foo/bar/v2" and the name -// "com_github_foo_bar_v2". -// -// If a known repository *could* provide importPath (because its "importpath" -// is a prefix of importPath), Mod will assume that it does. This may give -// inaccurate results if importPath is in an undeclared nested module. Run -// "gazelle update-repos -from_file=go.mod" first for best results. -// -// If no known repository could provide importPath, Mod will run "go list" to -// find the module. The special patterns that Root uses are ignored. Results are -// cached. Use GOPROXY for faster results. -func (r *RemoteCache) Mod(importPath string) (modPath, name string, err error) { - // Check if any of the known repositories is a prefix. - prefix := importPath - for { - v, ok, err := r.mod.get(prefix) - if ok { - if err != nil { - return "", "", err - } - value := v.(modValue) - if value.known { - return value.path, value.name, nil - } else { - break - } - } - - prefix = path.Dir(prefix) - if prefix == "." || prefix == "/" { - break - } - } - - // Ask "go list". - v, err := r.mod.ensure(importPath, func() (interface{}, error) { - modPath, err := r.ModInfo(importPath) - if err != nil { - return nil, err - } - return modValue{ - path: modPath, - name: label.ImportPathToBazelRepoName(modPath), - }, nil - }) - if err != nil { - return "", "", err - } - value := v.(modValue) - return value.path, value.name, nil -} - -func defaultModInfo(rc *RemoteCache, importPath string) (modPath string, err error) { - rc.initTmp() - if rc.tmpErr != nil { - return "", rc.tmpErr - } - - goTool := findGoTool() - cmd := exec.Command(goTool, "list", "-find", "-f", "{{.Module.Path}}", "--", importPath) - cmd.Dir = rc.tmpDir - cmd.Env = append(os.Environ(), "GO111MODULE=on") - out, err := cmd.Output() - if err != nil { - var stdErr []byte - if e, ok := err.(*exec.ExitError); ok { - stdErr = e.Stderr - } - return "", fmt.Errorf("finding module path for import %s: %v: %s", importPath, err, stdErr) - } - return strings.TrimSpace(string(out)), nil -} - -// ModVersion looks up information about a module at a given version. -// The path must be the module path, not a package within the module. -// The version may be a canonical semantic version, a query like "latest", -// or a branch, tag, or revision name. ModVersion returns the name of -// the repository rule providing the module (if any), the true version, -// and the sum. -func (r *RemoteCache) ModVersion(modPath, query string) (name, version, sum string, err error) { - // Ask "go list". - arg := modPath + "@" + query - v, err := r.modVersion.ensure(arg, func() (interface{}, error) { - version, sum, err := r.ModVersionInfo(modPath, query) - if err != nil { - return nil, err - } - return modVersionValue{ - path: modPath, - version: version, - sum: sum, - }, nil - }) - if err != nil { - return "", "", "", err - } - value := v.(modVersionValue) - - // Try to find the repository name for the module, if there's already - // a repository rule that provides it. - v, ok, err := r.mod.get(modPath) - if ok && err == nil { - name = v.(modValue).name - } else { - name = label.ImportPathToBazelRepoName(modPath) - } - - return name, value.version, value.sum, nil -} - -func defaultModVersionInfo(rc *RemoteCache, modPath, query string) (version, sum string, err error) { - rc.initTmp() - if rc.tmpErr != nil { - return "", "", rc.tmpErr - } - - goTool := findGoTool() - cmd := exec.Command(goTool, "mod", "download", "-json", "--", modPath+"@"+query) - cmd.Dir = rc.tmpDir - cmd.Env = append(os.Environ(), "GO111MODULE=on") - out, err := cmd.Output() - if err != nil { - var stdErr []byte - if e, ok := err.(*exec.ExitError); ok { - stdErr = e.Stderr - } - return "", "", fmt.Errorf("finding module version and sum for %s@%s: %v: %s", modPath, query, err, stdErr) - } - - var result struct{ Version, Sum string } - if err := json.Unmarshal(out, &result); err != nil { - fmt.Println(out) - return "", "", fmt.Errorf("finding module version and sum for %s@%s: invalid output from 'go mod download': %v", modPath, query, err) - } - return result.Version, result.Sum, nil -} - -// get retrieves a value associated with the given key from the cache. ok will -// be true if the key exists in the cache, even if it's in the process of -// being fetched. -func (m *remoteCacheMap) get(key string) (value interface{}, ok bool, err error) { - m.mu.Lock() - e, ok := m.cache[key] - m.mu.Unlock() - if !ok { - return nil, ok, nil - } - if e.ready != nil { - <-e.ready - } - return e.value, ok, e.err -} - -// ensure retreives a value associated with the given key from the cache. If -// the key does not exist in the cache, the load function will be called, -// and its result will be associated with the key. The load function will not -// be called more than once for any key. -func (m *remoteCacheMap) ensure(key string, load func() (interface{}, error)) (interface{}, error) { - m.mu.Lock() - e, ok := m.cache[key] - if !ok { - e = &remoteCacheEntry{ready: make(chan struct{})} - m.cache[key] = e - m.mu.Unlock() - e.value, e.err = load() - close(e.ready) - } else { - m.mu.Unlock() - if e.ready != nil { - <-e.ready - } - } - return e.value, e.err -} - -func (rc *RemoteCache) initTmp() { - rc.tmpOnce.Do(func() { - rc.tmpDir, rc.tmpErr = ioutil.TempDir("", "gazelle-remotecache-") - if rc.tmpErr != nil { - return - } - rc.tmpErr = ioutil.WriteFile(filepath.Join(rc.tmpDir, "go.mod"), []byte(`module gazelle_remote_cache__\n`), 0666) - }) -} - -var semverRex = regexp.MustCompile(`^.*?(/v\d+)(?:/.*)?$`) - -// pathWithoutSemver removes a semantic version suffix from path. -// For example, if path is "example.com/foo/v2/bar", pathWithoutSemver -// will return "example.com/foo/bar". If there is no semantic version suffix, -// "" will be returned. -// TODO(jayconrod): copied from language/go. This whole type should be -// migrated there. -func pathWithoutSemver(path string) string { - m := semverRex.FindStringSubmatchIndex(path) - if m == nil { - return "" - } - v := path[m[2]+2 : m[3]] - if v == "0" || v == "1" { - return "" - } - return path[:m[2]] + path[m[3]:] -} - -// findGoTool attempts to locate the go executable. If GOROOT is set, we'll -// prefer the one in there; otherwise, we'll rely on PATH. If the wrapper -// script generated by the gazelle rule is invoked by Bazel, it will set -// GOROOT to the configured SDK. We don't want to rely on the host SDK in -// that situation. -// -// TODO(jayconrod): copied from language/go (though it was originally in this -// package). Go-specific details should be removed from RemoteCache, and -// this copy should be deleted. -func findGoTool() string { - path := "go" // rely on PATH by default - if goroot, ok := os.LookupEnv("GOROOT"); ok { - path = filepath.Join(goroot, "bin", "go") - } - if runtime.GOOS == "windows" { - path += ".exe" - } - return path -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/repo/repo.go b/vendor/github.com/bazelbuild/bazel-gazelle/repo/repo.go deleted file mode 100644 index e5ce5dff60..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/repo/repo.go +++ /dev/null @@ -1,166 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package repo provides functionality for managing Go repository rules. -// -// UNSTABLE: The exported APIs in this package may change. In the future, -// language extensions should implement an interface for repository -// rule management. The update-repos command will call interface methods, -// and most if this package's functionality will move to language/go. -// Moving this package to an internal directory would break existing -// extensions, since RemoteCache is referenced through the resolve.Resolver -// interface, which extensions are required to implement. -package repo - -import ( - "fmt" - "os" - "path/filepath" - "strings" - - "github.com/bazelbuild/bazel-gazelle/rule" -) - -type byRuleName []*rule.Rule - -func (s byRuleName) Len() int { return len(s) } -func (s byRuleName) Less(i, j int) bool { return s[i].Name() < s[j].Name() } -func (s byRuleName) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -// FindExternalRepo attempts to locate the directory where Bazel has fetched -// the external repository with the given name. An error is returned if the -// repository directory cannot be located. -func FindExternalRepo(repoRoot, name string) (string, error) { - // See https://docs.bazel.build/versions/master/output_directories.html - // for documentation on Bazel directory layout. - // We expect the bazel-out symlink in the workspace root directory to point to - // /execroot//bazel-out - // We expect the external repository to be checked out at - // /external/ - // Note that users can change the prefix for most of the Bazel symlinks with - // --symlink_prefix, but this does not include bazel-out. - externalPath := strings.Join([]string{repoRoot, "bazel-out", "..", "..", "..", "external", name}, string(os.PathSeparator)) - cleanPath, err := filepath.EvalSymlinks(externalPath) - if err != nil { - return "", err - } - st, err := os.Stat(cleanPath) - if err != nil { - return "", err - } - if !st.IsDir() { - return "", fmt.Errorf("%s: not a directory", externalPath) - } - return cleanPath, nil -} - -// ListRepositories extracts metadata about repositories declared in a -// file. -func ListRepositories(workspace *rule.File) (repos []*rule.Rule, repoFileMap map[string]*rule.File, err error) { - repoIndexMap := make(map[string]int) - repoFileMap = make(map[string]*rule.File) - for _, repo := range workspace.Rules { - if name := repo.Name(); name != "" { - repos = append(repos, repo) - repoFileMap[name] = workspace - repoIndexMap[name] = len(repos) - 1 - } - } - extraRepos, err := parseRepositoryDirectives(workspace.Directives) - if err != nil { - return nil, nil, err - } - for _, repo := range extraRepos { - if i, ok := repoIndexMap[repo.Name()]; ok { - repos[i] = repo - } else { - repos = append(repos, repo) - } - repoFileMap[repo.Name()] = workspace - } - - for _, d := range workspace.Directives { - switch d.Key { - case "repository_macro": - f, defName, err := parseRepositoryMacroDirective(d.Value) - if err != nil { - return nil, nil, err - } - f = filepath.Join(filepath.Dir(workspace.Path), filepath.Clean(f)) - macroFile, err := rule.LoadMacroFile(f, "", defName) - if err != nil { - return nil, nil, err - } - for _, repo := range macroFile.Rules { - if name := repo.Name(); name != "" { - repos = append(repos, repo) - repoFileMap[name] = macroFile - repoIndexMap[name] = len(repos) - 1 - } - } - extraRepos, err = parseRepositoryDirectives(macroFile.Directives) - if err != nil { - return nil, nil, err - } - for _, repo := range extraRepos { - if i, ok := repoIndexMap[repo.Name()]; ok { - repos[i] = repo - } else { - repos = append(repos, repo) - } - repoFileMap[repo.Name()] = macroFile - } - } - } - return repos, repoFileMap, nil -} - -func parseRepositoryDirectives(directives []rule.Directive) (repos []*rule.Rule, err error) { - for _, d := range directives { - switch d.Key { - case "repository": - vals := strings.Fields(d.Value) - if len(vals) < 2 { - return nil, fmt.Errorf("failure parsing repository: %s, expected repository kind and attributes", d.Value) - } - kind := vals[0] - r := rule.NewRule(kind, "") - for _, val := range vals[1:] { - kv := strings.SplitN(val, "=", 2) - if len(kv) != 2 { - return nil, fmt.Errorf("failure parsing repository: %s, expected format for attributes is attr1_name=attr1_value", d.Value) - } - r.SetAttr(kv[0], kv[1]) - } - if r.Name() == "" { - return nil, fmt.Errorf("failure parsing repository: %s, expected a name attribute for the given repository", d.Value) - } - repos = append(repos, r) - } - } - return repos, nil -} - -func parseRepositoryMacroDirective(directive string) (string, string, error) { - vals := strings.Split(directive, "%") - if len(vals) != 2 { - return "", "", fmt.Errorf("Failure parsing repository_macro: %s, expected format is macroFile%%defName", directive) - } - f := vals[0] - if strings.HasPrefix(f, "..") { - return "", "", fmt.Errorf("Failure parsing repository_macro: %s, macro file path %s should not start with \"..\"", directive, f) - } - return f, vals[1], nil -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/resolve/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/resolve/BUILD.bazel deleted file mode 100644 index fa81e50199..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/resolve/BUILD.bazel +++ /dev/null @@ -1,18 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "index.go", - ], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/resolve", - importpath = "github.com/bazelbuild/bazel-gazelle/resolve", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/bazelbuild/bazel-gazelle/config:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/label:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/repo:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/rule:go_default_library", - ], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/resolve/config.go b/vendor/github.com/bazelbuild/bazel-gazelle/resolve/config.go deleted file mode 100644 index 27d38955c5..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/resolve/config.go +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package resolve - -import ( - "flag" - "log" - "strings" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/label" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// FindRuleWithOverride searches the current configuration for user-specified -// dependency resolution overrides. Overrides specified later (in configuration -// files in deeper directories, or closer to the end of the file) are -// returned first. If no override is found, label.NoLabel is returned. -func FindRuleWithOverride(c *config.Config, imp ImportSpec, lang string) (label.Label, bool) { - rc := getResolveConfig(c) - for i := len(rc.overrides) - 1; i >= 0; i-- { - o := rc.overrides[i] - if o.matches(imp, lang) { - return o.dep, true - } - } - return label.NoLabel, false -} - -type overrideSpec struct { - imp ImportSpec - lang string - dep label.Label -} - -func (o overrideSpec) matches(imp ImportSpec, lang string) bool { - return imp.Lang == o.imp.Lang && - imp.Imp == o.imp.Imp && - (o.lang == "" || o.lang == lang) -} - -type resolveConfig struct { - overrides []overrideSpec -} - -const resolveName = "_resolve" - -func getResolveConfig(c *config.Config) *resolveConfig { - return c.Exts[resolveName].(*resolveConfig) -} - -type Configurer struct{} - -func (_ *Configurer) RegisterFlags(fs *flag.FlagSet, cmd string, c *config.Config) { - c.Exts[resolveName] = &resolveConfig{} -} - -func (_ *Configurer) CheckFlags(fs *flag.FlagSet, c *config.Config) error { return nil } - -func (_ *Configurer) KnownDirectives() []string { - return []string{"resolve"} -} - -func (_ *Configurer) Configure(c *config.Config, rel string, f *rule.File) { - rc := getResolveConfig(c) - rcCopy := &resolveConfig{ - overrides: rc.overrides[:], - } - - if f != nil { - for _, d := range f.Directives { - if d.Key == "resolve" { - parts := strings.Fields(d.Value) - o := overrideSpec{} - var lbl string - if len(parts) == 3 { - o.imp.Lang = parts[0] - o.imp.Imp = parts[1] - lbl = parts[2] - } else if len(parts) == 4 { - o.imp.Lang = parts[0] - o.lang = parts[1] - o.imp.Imp = parts[2] - lbl = parts[3] - } else { - log.Printf("could not parse directive: %s\n\texpected gazelle:resolve source-language [import-language] import-string label", d.Value) - continue - } - var err error - o.dep, err = label.Parse(lbl) - if err != nil { - log.Printf("gazelle:resolve %s: %v", d.Value, err) - continue - } - o.dep = o.dep.Abs("", rel) - rcCopy.overrides = append(rcCopy.overrides, o) - } - } - } - - c.Exts[resolveName] = rcCopy -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/resolve/index.go b/vendor/github.com/bazelbuild/bazel-gazelle/resolve/index.go deleted file mode 100644 index a02d15c6ac..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/resolve/index.go +++ /dev/null @@ -1,246 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package resolve - -import ( - "log" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/label" - "github.com/bazelbuild/bazel-gazelle/repo" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// ImportSpec describes a library to be imported. Imp is an import string for -// the library. Lang is the language in which the import string appears (this -// should match Resolver.Name). -type ImportSpec struct { - Lang, Imp string -} - -// Resolver is an interface that language extensions can implement to resolve -// dependencies in rules they generate. -type Resolver interface { - // Name returns the name of the language. This should be a prefix of the - // kinds of rules generated by the language, e.g., "go" for the Go extension - // since it generates "go_library" rules. - Name() string - - // Imports returns a list of ImportSpecs that can be used to import the rule - // r. This is used to populate RuleIndex. - // - // If nil is returned, the rule will not be indexed. If any non-nil slice is - // returned, including an empty slice, the rule will be indexed. - Imports(c *config.Config, r *rule.Rule, f *rule.File) []ImportSpec - - // Embeds returns a list of labels of rules that the given rule embeds. If - // a rule is embedded by another importable rule of the same language, only - // the embedding rule will be indexed. The embedding rule will inherit - // the imports of the embedded rule. - Embeds(r *rule.Rule, from label.Label) []label.Label - - // Resolve translates imported libraries for a given rule into Bazel - // dependencies. Information about imported libraries is returned for each - // rule generated by language.GenerateRules in - // language.GenerateResult.Imports. Resolve generates a "deps" attribute (or - // the appropriate language-specific equivalent) for each import according to - // language-specific rules and heuristics. - Resolve(c *config.Config, ix *RuleIndex, rc *repo.RemoteCache, r *rule.Rule, imports interface{}, from label.Label) -} - -// RuleIndex is a table of rules in a workspace, indexed by label and by -// import path. Used by Resolver to map import paths to labels. -type RuleIndex struct { - rules []*ruleRecord - labelMap map[label.Label]*ruleRecord - importMap map[ImportSpec][]*ruleRecord - mrslv func(r *rule.Rule, pkgRel string) Resolver -} - -// ruleRecord contains information about a rule relevant to import indexing. -type ruleRecord struct { - rule *rule.Rule - label label.Label - file *rule.File - - // importedAs is a list of ImportSpecs by which this rule may be imported. - // Used to build a map from ImportSpecs to ruleRecords. - importedAs []ImportSpec - - // embeds is the transitive closure of labels for rules that this rule embeds - // (as determined by the Embeds method). This only includes rules in the same - // language (i.e., it includes a go_library embedding a go_proto_library, but - // not a go_proto_library embedding a proto_library). - embeds []label.Label - - // embedded indicates whether another rule of the same language embeds this - // rule. Embedded rules should not be indexed. - embedded bool - - didCollectEmbeds bool -} - -// NewRuleIndex creates a new index. -// -// kindToResolver is a map from rule kinds (for example, "go_library") to -// Resolvers that support those kinds. -func NewRuleIndex(mrslv func(r *rule.Rule, pkgRel string) Resolver) *RuleIndex { - return &RuleIndex{ - labelMap: make(map[label.Label]*ruleRecord), - mrslv: mrslv, - } -} - -// AddRule adds a rule r to the index. The rule will only be indexed if there -// is a known resolver for the rule's kind and Resolver.Imports returns a -// non-nil slice. -// -// AddRule may only be called before Finish. -func (ix *RuleIndex) AddRule(c *config.Config, r *rule.Rule, f *rule.File) { - var imps []ImportSpec - if rslv := ix.mrslv(r, f.Pkg); rslv != nil { - imps = rslv.Imports(c, r, f) - } - // If imps == nil, the rule is not importable. If imps is the empty slice, - // it may still be importable if it embeds importable libraries. - if imps == nil { - return - } - - record := &ruleRecord{ - rule: r, - label: label.New(c.RepoName, f.Pkg, r.Name()), - file: f, - importedAs: imps, - } - if _, ok := ix.labelMap[record.label]; ok { - log.Printf("multiple rules found with label %s", record.label) - return - } - ix.rules = append(ix.rules, record) - ix.labelMap[record.label] = record -} - -// Finish constructs the import index and performs any other necessary indexing -// actions after all rules have been added. This step is necessary because -// a rule may be indexed differently based on what rules are added later. -// -// Finish must be called after all AddRule calls and before any -// FindRulesByImport calls. -func (ix *RuleIndex) Finish() { - for _, r := range ix.rules { - ix.collectEmbeds(r) - } - ix.buildImportIndex() -} - -func (ix *RuleIndex) collectEmbeds(r *ruleRecord) { - if r.didCollectEmbeds { - return - } - resolver := ix.mrslv(r.rule, r.file.Pkg) - r.didCollectEmbeds = true - embedLabels := resolver.Embeds(r.rule, r.label) - r.embeds = embedLabels - for _, e := range embedLabels { - er, ok := ix.findRuleByLabel(e, r.label) - if !ok { - continue - } - ix.collectEmbeds(er) - if resolver == ix.mrslv(er.rule, er.file.Pkg) { - er.embedded = true - r.embeds = append(r.embeds, er.embeds...) - } - r.importedAs = append(r.importedAs, er.importedAs...) - } -} - -// buildImportIndex constructs the map used by FindRulesByImport. -func (ix *RuleIndex) buildImportIndex() { - ix.importMap = make(map[ImportSpec][]*ruleRecord) - for _, r := range ix.rules { - if r.embedded { - continue - } - indexed := make(map[ImportSpec]bool) - for _, imp := range r.importedAs { - if indexed[imp] { - continue - } - indexed[imp] = true - ix.importMap[imp] = append(ix.importMap[imp], r) - } - } -} - -func (ix *RuleIndex) findRuleByLabel(label label.Label, from label.Label) (*ruleRecord, bool) { - label = label.Abs(from.Repo, from.Pkg) - r, ok := ix.labelMap[label] - return r, ok -} - -type FindResult struct { - // Label is the absolute label (including repository and package name) for - // a matched rule. - Label label.Label - - // Embeds is the transitive closure of labels for rules that the matched - // rule embeds. It may contains duplicates and does not include the label - // for the rule itself. - Embeds []label.Label -} - -// FindRulesByImport attempts to resolve an import string to a rule record. -// imp is the import to resolve (which includes the target language). lang is -// the language of the rule with the dependency (for example, in -// go_proto_library, imp will have ProtoLang and lang will be GoLang). -// from is the rule which is doing the dependency. This is used to check -// vendoring visibility and to check for self-imports. -// -// FindRulesByImport returns a list of rules, since any number of rules may -// provide the same import. Callers may need to resolve ambiguities using -// language-specific heuristics. -func (ix *RuleIndex) FindRulesByImport(imp ImportSpec, lang string) []FindResult { - matches := ix.importMap[imp] - results := make([]FindResult, 0, len(matches)) - for _, m := range matches { - if ix.mrslv(m.rule, "").Name() != lang { - continue - } - results = append(results, FindResult{ - Label: m.label, - Embeds: m.embeds, - }) - } - return results -} - -// IsSelfImport returns true if the result's label matches the given label -// or the result's rule transitively embeds the rule with the given label. -// Self imports cause cyclic dependencies, so the caller may want to omit -// the dependency or report an error. -func (r FindResult) IsSelfImport(from label.Label) bool { - if from.Equal(r.Label) { - return true - } - for _, e := range r.Embeds { - if from.Equal(e) { - return true - } - } - return false -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/rule/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/rule/BUILD.bazel deleted file mode 100644 index 2cca145331..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/rule/BUILD.bazel +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "directives.go", - "expr.go", - "merge.go", - "platform.go", - "platform_strings.go", - "rule.go", - "sort_labels.go", - "types.go", - "value.go", - ], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/rule", - importpath = "github.com/bazelbuild/bazel-gazelle/rule", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/bazelbuild/bazel-gazelle/label:go_default_library", - "//vendor/github.com/bazelbuild/buildtools/build:go_default_library", - "//vendor/github.com/bazelbuild/buildtools/tables:go_default_library", - ], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/rule/directives.go b/vendor/github.com/bazelbuild/bazel-gazelle/rule/directives.go deleted file mode 100644 index f5ba580be0..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/rule/directives.go +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package rule - -import ( - "regexp" - - bzl "github.com/bazelbuild/buildtools/build" -) - -// Directive is a key-value pair extracted from a top-level comment in -// a build file. Directives have the following format: -// -// # gazelle:key value -// -// Keys may not contain spaces. Values may be empty and may contain spaces, -// but surrounding space is trimmed. -type Directive struct { - Key, Value string -} - -// TODO(jayconrod): annotation directives will apply to an individual rule. -// They must appear in the block of comments above that rule. - -// ParseDirectives scans f for Gazelle directives. The full list of directives -// is returned. Errors are reported for unrecognized directives and directives -// out of place (after the first statement). -func ParseDirectives(f *bzl.File) []Directive { - return parseDirectives(f.Stmt) -} - -// ParseDirectivesFromMacro scans a macro body for Gazelle directives. The -// full list of directives is returned. Errors are reported for unrecognized -// directives and directives out of place (after the first statement). -func ParseDirectivesFromMacro(f *bzl.DefStmt) []Directive { - return parseDirectives(f.Body) -} - -func parseDirectives(stmt []bzl.Expr) []Directive { - var directives []Directive - parseComment := func(com bzl.Comment) { - match := directiveRe.FindStringSubmatch(com.Token) - if match == nil { - return - } - key, value := match[1], match[2] - directives = append(directives, Directive{key, value}) - } - - for _, s := range stmt { - coms := s.Comment() - for _, com := range coms.Before { - parseComment(com) - } - for _, com := range coms.After { - parseComment(com) - } - } - return directives -} - -var directiveRe = regexp.MustCompile(`^#\s*gazelle:(\w+)\s*(.*?)\s*$`) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/rule/expr.go b/vendor/github.com/bazelbuild/bazel-gazelle/rule/expr.go deleted file mode 100644 index cd2fff0e27..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/rule/expr.go +++ /dev/null @@ -1,354 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package rule - -import ( - "fmt" - "log" - "strings" - - "github.com/bazelbuild/bazel-gazelle/label" - bzl "github.com/bazelbuild/buildtools/build" -) - -// MapExprStrings applies a function to string sub-expressions within e. -// An expression containing the results with the same structure as e is -// returned. -func MapExprStrings(e bzl.Expr, f func(string) string) bzl.Expr { - if e == nil { - return nil - } - switch expr := e.(type) { - case *bzl.StringExpr: - s := f(expr.Value) - if s == "" { - return nil - } - ret := *expr - ret.Value = s - return &ret - - case *bzl.ListExpr: - var list []bzl.Expr - for _, elem := range expr.List { - elem = MapExprStrings(elem, f) - if elem != nil { - list = append(list, elem) - } - } - if len(list) == 0 && len(expr.List) > 0 { - return nil - } - ret := *expr - ret.List = list - return &ret - - case *bzl.DictExpr: - var cases []bzl.Expr - isEmpty := true - for _, kv := range expr.List { - keyval, ok := kv.(*bzl.KeyValueExpr) - if !ok { - log.Panicf("unexpected expression in generated imports dict: %#v", kv) - } - value := MapExprStrings(keyval.Value, f) - if value != nil { - cases = append(cases, &bzl.KeyValueExpr{Key: keyval.Key, Value: value}) - if key, ok := keyval.Key.(*bzl.StringExpr); !ok || key.Value != "//conditions:default" { - isEmpty = false - } - } - } - if isEmpty { - return nil - } - ret := *expr - ret.List = cases - return &ret - - case *bzl.CallExpr: - if x, ok := expr.X.(*bzl.Ident); !ok || x.Name != "select" || len(expr.List) != 1 { - log.Panicf("unexpected call expression in generated imports: %#v", e) - } - arg := MapExprStrings(expr.List[0], f) - if arg == nil { - return nil - } - call := *expr - call.List[0] = arg - return &call - - case *bzl.BinaryExpr: - x := MapExprStrings(expr.X, f) - y := MapExprStrings(expr.Y, f) - if x == nil { - return y - } - if y == nil { - return x - } - binop := *expr - binop.X = x - binop.Y = y - return &binop - - default: - return nil - } -} - -// FlattenExpr takes an expression that may have been generated from -// PlatformStrings and returns its values in a flat, sorted, de-duplicated -// list. Comments are accumulated and de-duplicated across duplicate -// expressions. If the expression could not have been generted by -// PlatformStrings, the expression will be returned unmodified. -func FlattenExpr(e bzl.Expr) bzl.Expr { - ps, err := extractPlatformStringsExprs(e) - if err != nil { - return e - } - - ls := makeListSquasher() - addElem := func(e bzl.Expr) bool { - s, ok := e.(*bzl.StringExpr) - if !ok { - return false - } - ls.add(s) - return true - } - addList := func(e bzl.Expr) bool { - l, ok := e.(*bzl.ListExpr) - if !ok { - return false - } - for _, elem := range l.List { - if !addElem(elem) { - return false - } - } - return true - } - addDict := func(d *bzl.DictExpr) bool { - for _, kv := range d.List { - if !addList(kv.(*bzl.KeyValueExpr).Value) { - return false - } - } - return true - } - - if ps.generic != nil { - if !addList(ps.generic) { - return e - } - } - for _, d := range []*bzl.DictExpr{ps.os, ps.arch, ps.platform} { - if d == nil { - continue - } - if !addDict(d) { - return e - } - } - - return ls.list() -} - -func isScalar(e bzl.Expr) bool { - switch e.(type) { - case *bzl.StringExpr, *bzl.LiteralExpr, *bzl.Ident: - return true - default: - return false - } -} - -func dictEntryKeyValue(e bzl.Expr) (string, *bzl.ListExpr, error) { - kv, ok := e.(*bzl.KeyValueExpr) - if !ok { - return "", nil, fmt.Errorf("dict entry was not a key-value pair: %#v", e) - } - k, ok := kv.Key.(*bzl.StringExpr) - if !ok { - return "", nil, fmt.Errorf("dict key was not string: %#v", kv.Key) - } - v, ok := kv.Value.(*bzl.ListExpr) - if !ok { - return "", nil, fmt.Errorf("dict value was not list: %#v", kv.Value) - } - return k.Value, v, nil -} - -func stringValue(e bzl.Expr) string { - s, ok := e.(*bzl.StringExpr) - if !ok { - return "" - } - return s.Value -} - -// platformStringsExprs is a set of sub-expressions that match the structure -// of package.PlatformStrings. ExprFromValue produces expressions that -// follow this structure for srcs, deps, and other attributes, so this matches -// all non-scalar expressions generated by Gazelle. -// -// The matched expression has the form: -// -// [] + select({}) + select({}) + select({}) -// -// The four collections may appear in any order, and some or all of them may -// be omitted (all fields are nil for a nil expression). -type platformStringsExprs struct { - generic *bzl.ListExpr - os, arch, platform *bzl.DictExpr -} - -// extractPlatformStringsExprs matches an expression and attempts to extract -// sub-expressions in platformStringsExprs. The sub-expressions can then be -// merged with corresponding sub-expressions. Any field in the returned -// structure may be nil. An error is returned if the given expression does -// not follow the pattern described by platformStringsExprs. -func extractPlatformStringsExprs(expr bzl.Expr) (platformStringsExprs, error) { - var ps platformStringsExprs - if expr == nil { - return ps, nil - } - - // Break the expression into a sequence of expressions combined with +. - var parts []bzl.Expr - for { - binop, ok := expr.(*bzl.BinaryExpr) - if !ok { - parts = append(parts, expr) - break - } - parts = append(parts, binop.Y) - expr = binop.X - } - - // Process each part. They may be in any order. - for _, part := range parts { - switch part := part.(type) { - case *bzl.ListExpr: - if ps.generic != nil { - return platformStringsExprs{}, fmt.Errorf("expression could not be matched: multiple list expressions") - } - ps.generic = part - - case *bzl.CallExpr: - x, ok := part.X.(*bzl.Ident) - if !ok || x.Name != "select" || len(part.List) != 1 { - return platformStringsExprs{}, fmt.Errorf("expression could not be matched: callee other than select or wrong number of args") - } - arg, ok := part.List[0].(*bzl.DictExpr) - if !ok { - return platformStringsExprs{}, fmt.Errorf("expression could not be matched: select argument not dict") - } - var dict **bzl.DictExpr - for _, item := range arg.List { - kv := item.(*bzl.KeyValueExpr) // parser guarantees this - k, ok := kv.Key.(*bzl.StringExpr) - if !ok { - return platformStringsExprs{}, fmt.Errorf("expression could not be matched: dict keys are not all strings") - } - if k.Value == "//conditions:default" { - continue - } - key, err := label.Parse(k.Value) - if err != nil { - return platformStringsExprs{}, fmt.Errorf("expression could not be matched: dict key is not label: %q", k.Value) - } - if KnownOSSet[key.Name] { - dict = &ps.os - break - } - if KnownArchSet[key.Name] { - dict = &ps.arch - break - } - osArch := strings.Split(key.Name, "_") - if len(osArch) != 2 || !KnownOSSet[osArch[0]] || !KnownArchSet[osArch[1]] { - return platformStringsExprs{}, fmt.Errorf("expression could not be matched: dict key contains unknown platform: %q", k.Value) - } - dict = &ps.platform - break - } - if dict == nil { - // We could not identify the dict because it's empty or only contains - // //conditions:default. We'll call it the platform dict to avoid - // dropping it. - dict = &ps.platform - } - if *dict != nil { - return platformStringsExprs{}, fmt.Errorf("expression could not be matched: multiple selects that are either os-specific, arch-specific, or platform-specific") - } - *dict = arg - } - } - return ps, nil -} - -// makePlatformStringsExpr constructs a single expression from the -// sub-expressions in ps. -func makePlatformStringsExpr(ps platformStringsExprs) bzl.Expr { - makeSelect := func(dict *bzl.DictExpr) bzl.Expr { - return &bzl.CallExpr{ - X: &bzl.Ident{Name: "select"}, - List: []bzl.Expr{dict}, - } - } - forceMultiline := func(e bzl.Expr) { - switch e := e.(type) { - case *bzl.ListExpr: - e.ForceMultiLine = true - case *bzl.CallExpr: - e.List[0].(*bzl.DictExpr).ForceMultiLine = true - } - } - - var parts []bzl.Expr - if ps.generic != nil { - parts = append(parts, ps.generic) - } - if ps.os != nil { - parts = append(parts, makeSelect(ps.os)) - } - if ps.arch != nil { - parts = append(parts, makeSelect(ps.arch)) - } - if ps.platform != nil { - parts = append(parts, makeSelect(ps.platform)) - } - - if len(parts) == 0 { - return nil - } - if len(parts) == 1 { - return parts[0] - } - expr := parts[0] - forceMultiline(expr) - for _, part := range parts[1:] { - forceMultiline(part) - expr = &bzl.BinaryExpr{ - Op: "+", - X: expr, - Y: part, - } - } - return expr -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/rule/merge.go b/vendor/github.com/bazelbuild/bazel-gazelle/rule/merge.go deleted file mode 100644 index 9a76e979a7..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/rule/merge.go +++ /dev/null @@ -1,489 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package rule - -import ( - "errors" - "fmt" - "log" - "sort" - - bzl "github.com/bazelbuild/buildtools/build" -) - -// MergeRules copies information from src into dst, usually discarding -// information in dst when they have the same attributes. -// -// If dst is marked with a "# keep" comment, either above the rule or as -// a suffix, nothing will be changed. -// -// If src has an attribute that is not in dst, it will be copied into dst. -// -// If src and dst have the same attribute and the attribute is mergeable and the -// attribute in dst is not marked with a "# keep" comment, values in the dst -// attribute not marked with a "# keep" comment will be dropped, and values from -// src will be copied in. -// -// If dst has an attribute not in src, and the attribute is mergeable and not -// marked with a "# keep" comment, values in the attribute not marked with -// a "# keep" comment will be dropped. If the attribute is empty afterward, -// it will be deleted. -func MergeRules(src, dst *Rule, mergeable map[string]bool, filename string) { - if dst.ShouldKeep() { - return - } - - // Process attributes that are in dst but not in src. - for key, dstAttr := range dst.attrs { - if _, ok := src.attrs[key]; ok || !mergeable[key] || ShouldKeep(dstAttr) { - continue - } - dstValue := dstAttr.RHS - if mergedValue, err := mergeExprs(nil, dstValue); err != nil { - start, end := dstValue.Span() - log.Printf("%s:%d.%d-%d.%d: could not merge expression", filename, start.Line, start.LineRune, end.Line, end.LineRune) - } else if mergedValue == nil { - dst.DelAttr(key) - } else { - dst.SetAttr(key, mergedValue) - } - } - - // Merge attributes from src into dst. - for key, srcAttr := range src.attrs { - srcValue := srcAttr.RHS - if dstAttr, ok := dst.attrs[key]; !ok { - dst.SetAttr(key, srcValue) - } else if mergeable[key] && !ShouldKeep(dstAttr) { - dstValue := dstAttr.RHS - if mergedValue, err := mergeExprs(srcValue, dstValue); err != nil { - start, end := dstValue.Span() - log.Printf("%s:%d.%d-%d.%d: could not merge expression", filename, start.Line, start.LineRune, end.Line, end.LineRune) - } else { - dst.SetAttr(key, mergedValue) - } - } - } -} - -// mergeExprs combines information from src and dst and returns a merged -// expression. dst may be modified during this process. The returned expression -// may be different from dst when a structural change is needed. -// -// The following kinds of expressions are recognized. -// -// * nil -// * strings (can only be merged with strings) -// * lists of strings -// * a call to select with a dict argument. The dict keys must be strings, -// and the values must be lists of strings. -// * a list of strings combined with a select call using +. The list must -// be the left operand. -// -// An error is returned if the expressions can't be merged, for example -// because they are not in one of the above formats. -func mergeExprs(src, dst bzl.Expr) (bzl.Expr, error) { - if ShouldKeep(dst) { - return nil, nil - } - if src == nil && (dst == nil || isScalar(dst)) { - return nil, nil - } - if isScalar(src) { - return src, nil - } - - srcExprs, err := extractPlatformStringsExprs(src) - if err != nil { - return nil, err - } - dstExprs, err := extractPlatformStringsExprs(dst) - if err != nil { - return nil, err - } - mergedExprs, err := mergePlatformStringsExprs(srcExprs, dstExprs) - if err != nil { - return nil, err - } - return makePlatformStringsExpr(mergedExprs), nil -} - -func mergePlatformStringsExprs(src, dst platformStringsExprs) (platformStringsExprs, error) { - var ps platformStringsExprs - var err error - ps.generic = mergeList(src.generic, dst.generic) - if ps.os, err = mergeDict(src.os, dst.os); err != nil { - return platformStringsExprs{}, err - } - if ps.arch, err = mergeDict(src.arch, dst.arch); err != nil { - return platformStringsExprs{}, err - } - if ps.platform, err = mergeDict(src.platform, dst.platform); err != nil { - return platformStringsExprs{}, err - } - return ps, nil -} - -func mergeList(src, dst *bzl.ListExpr) *bzl.ListExpr { - if dst == nil { - return src - } - if src == nil { - src = &bzl.ListExpr{List: []bzl.Expr{}} - } - - // Build a list of strings from the src list and keep matching strings - // in the dst list. This preserves comments. Also keep anything with - // a "# keep" comment, whether or not it's in the src list. - srcSet := make(map[string]bool) - for _, v := range src.List { - if s := stringValue(v); s != "" { - srcSet[s] = true - } - } - - var merged []bzl.Expr - kept := make(map[string]bool) - keepComment := false - for _, v := range dst.List { - s := stringValue(v) - if keep := ShouldKeep(v); keep || srcSet[s] { - keepComment = keepComment || keep - merged = append(merged, v) - if s != "" { - kept[s] = true - } - } - } - - // Add anything in the src list that wasn't kept. - for _, v := range src.List { - if s := stringValue(v); kept[s] { - continue - } - merged = append(merged, v) - } - - if len(merged) == 0 { - return nil - } - return &bzl.ListExpr{ - List: merged, - ForceMultiLine: src.ForceMultiLine || dst.ForceMultiLine || keepComment, - } -} - -func mergeDict(src, dst *bzl.DictExpr) (*bzl.DictExpr, error) { - if dst == nil { - return src, nil - } - if src == nil { - src = &bzl.DictExpr{List: []bzl.Expr{}} - } - - var entries []*dictEntry - entryMap := make(map[string]*dictEntry) - - for _, kv := range dst.List { - k, v, err := dictEntryKeyValue(kv) - if err != nil { - return nil, err - } - if _, ok := entryMap[k]; ok { - return nil, fmt.Errorf("dst dict contains more than one case named %q", k) - } - e := &dictEntry{key: k, dstValue: v} - entries = append(entries, e) - entryMap[k] = e - } - - for _, kv := range src.List { - k, v, err := dictEntryKeyValue(kv) - if err != nil { - return nil, err - } - e, ok := entryMap[k] - if !ok { - e = &dictEntry{key: k} - entries = append(entries, e) - entryMap[k] = e - } - e.srcValue = v - } - - keys := make([]string, 0, len(entries)) - haveDefault := false - for _, e := range entries { - e.mergedValue = mergeList(e.srcValue, e.dstValue) - if e.key == "//conditions:default" { - // Keep the default case, even if it's empty. - haveDefault = true - if e.mergedValue == nil { - e.mergedValue = &bzl.ListExpr{} - } - } else if e.mergedValue != nil { - keys = append(keys, e.key) - } - } - if len(keys) == 0 && (!haveDefault || len(entryMap["//conditions:default"].mergedValue.List) == 0) { - return nil, nil - } - sort.Strings(keys) - // Always put the default case last. - if haveDefault { - keys = append(keys, "//conditions:default") - } - - mergedEntries := make([]bzl.Expr, len(keys)) - for i, k := range keys { - e := entryMap[k] - mergedEntries[i] = &bzl.KeyValueExpr{ - Key: &bzl.StringExpr{Value: e.key}, - Value: e.mergedValue, - } - } - - return &bzl.DictExpr{List: mergedEntries, ForceMultiLine: true}, nil -} - -type dictEntry struct { - key string - dstValue, srcValue, mergedValue *bzl.ListExpr -} - -// SquashRules copies information from src into dst without discarding -// information in dst. SquashRules detects duplicate elements in lists and -// dictionaries, but it doesn't sort elements after squashing. If squashing -// fails because the expression is not understood, an error is returned, -// and neither rule is modified. -func SquashRules(src, dst *Rule, filename string) error { - if dst.ShouldKeep() { - return nil - } - - for key, srcAttr := range src.attrs { - srcValue := srcAttr.RHS - if dstAttr, ok := dst.attrs[key]; !ok { - dst.SetAttr(key, srcValue) - } else if !ShouldKeep(dstAttr) { - dstValue := dstAttr.RHS - if squashedValue, err := squashExprs(srcValue, dstValue); err != nil { - start, end := dstValue.Span() - return fmt.Errorf("%s:%d.%d-%d.%d: could not squash expression", filename, start.Line, start.LineRune, end.Line, end.LineRune) - } else { - dst.SetAttr(key, squashedValue) - } - } - } - dst.expr.Comment().Before = append(dst.expr.Comment().Before, src.expr.Comment().Before...) - dst.expr.Comment().Suffix = append(dst.expr.Comment().Suffix, src.expr.Comment().Suffix...) - dst.expr.Comment().After = append(dst.expr.Comment().After, src.expr.Comment().After...) - return nil -} - -func squashExprs(src, dst bzl.Expr) (bzl.Expr, error) { - if ShouldKeep(dst) { - return dst, nil - } - if isScalar(dst) { - // may lose src, but they should always be the same. - return dst, nil - } - srcExprs, err := extractPlatformStringsExprs(src) - if err != nil { - return nil, err - } - dstExprs, err := extractPlatformStringsExprs(dst) - if err != nil { - return nil, err - } - squashedExprs, err := squashPlatformStringsExprs(srcExprs, dstExprs) - if err != nil { - return nil, err - } - return makePlatformStringsExpr(squashedExprs), nil -} - -func squashPlatformStringsExprs(x, y platformStringsExprs) (platformStringsExprs, error) { - var ps platformStringsExprs - var err error - if ps.generic, err = squashList(x.generic, y.generic); err != nil { - return platformStringsExprs{}, err - } - if ps.os, err = squashDict(x.os, y.os); err != nil { - return platformStringsExprs{}, err - } - if ps.arch, err = squashDict(x.arch, y.arch); err != nil { - return platformStringsExprs{}, err - } - if ps.platform, err = squashDict(x.platform, y.platform); err != nil { - return platformStringsExprs{}, err - } - return ps, nil -} - -func squashList(x, y *bzl.ListExpr) (*bzl.ListExpr, error) { - if x == nil { - return y, nil - } - if y == nil { - return x, nil - } - - ls := makeListSquasher() - for _, e := range x.List { - s, ok := e.(*bzl.StringExpr) - if !ok { - return nil, errors.New("could not squash non-string") - } - ls.add(s) - } - for _, e := range y.List { - s, ok := e.(*bzl.StringExpr) - if !ok { - return nil, errors.New("could not squash non-string") - } - ls.add(s) - } - squashed := ls.list() - squashed.Comments.Before = append(x.Comments.Before, y.Comments.Before...) - squashed.Comments.Suffix = append(x.Comments.Suffix, y.Comments.Suffix...) - squashed.Comments.After = append(x.Comments.After, y.Comments.After...) - return squashed, nil -} - -func squashDict(x, y *bzl.DictExpr) (*bzl.DictExpr, error) { - if x == nil { - return y, nil - } - if y == nil { - return x, nil - } - - cases := make(map[string]*bzl.KeyValueExpr) - addCase := func(e bzl.Expr) error { - kv := e.(*bzl.KeyValueExpr) - key, ok := kv.Key.(*bzl.StringExpr) - if !ok { - return errors.New("could not squash non-string dict key") - } - if _, ok := kv.Value.(*bzl.ListExpr); !ok { - return errors.New("could not squash non-list dict value") - } - if c, ok := cases[key.Value]; ok { - if sq, err := squashList(kv.Value.(*bzl.ListExpr), c.Value.(*bzl.ListExpr)); err != nil { - return err - } else { - c.Value = sq - } - } else { - kvCopy := *kv - cases[key.Value] = &kvCopy - } - return nil - } - - for _, e := range x.List { - if err := addCase(e); err != nil { - return nil, err - } - } - for _, e := range y.List { - if err := addCase(e); err != nil { - return nil, err - } - } - - keys := make([]string, 0, len(cases)) - haveDefault := false - for k := range cases { - if k == "//conditions:default" { - haveDefault = true - continue - } - keys = append(keys, k) - } - sort.Strings(keys) - if haveDefault { - keys = append(keys, "//conditions:default") // must be last - } - - squashed := *x - squashed.Comments.Before = append(x.Comments.Before, y.Comments.Before...) - squashed.Comments.Suffix = append(x.Comments.Suffix, y.Comments.Suffix...) - squashed.Comments.After = append(x.Comments.After, y.Comments.After...) - squashed.List = make([]bzl.Expr, 0, len(cases)) - for _, k := range keys { - squashed.List = append(squashed.List, cases[k]) - } - return &squashed, nil -} - -// listSquasher builds a sorted, deduplicated list of string expressions. If -// a string expression is added multiple times, comments are consolidated. -// The original expressions are not modified. -type listSquasher struct { - unique map[string]*bzl.StringExpr - seenComments map[elemComment]bool -} - -type elemComment struct { - elem, com string -} - -func makeListSquasher() listSquasher { - return listSquasher{ - unique: make(map[string]*bzl.StringExpr), - seenComments: make(map[elemComment]bool), - } -} - -func (ls *listSquasher) add(s *bzl.StringExpr) { - sCopy, ok := ls.unique[s.Value] - if !ok { - // Make a copy of s. We may modify it when we consolidate comments from - // duplicate strings. We don't want to modify the original in case this - // function fails (due to a later failed pattern match). - sCopy = new(bzl.StringExpr) - *sCopy = *s - sCopy.Comments.Before = make([]bzl.Comment, 0, len(s.Comments.Before)) - sCopy.Comments.Suffix = make([]bzl.Comment, 0, len(s.Comments.Suffix)) - ls.unique[s.Value] = sCopy - } - for _, c := range s.Comment().Before { - if key := (elemComment{s.Value, c.Token}); !ls.seenComments[key] { - sCopy.Comments.Before = append(sCopy.Comments.Before, c) - ls.seenComments[key] = true - } - } - for _, c := range s.Comment().Suffix { - if key := (elemComment{s.Value, c.Token}); !ls.seenComments[key] { - sCopy.Comments.Suffix = append(sCopy.Comments.Suffix, c) - ls.seenComments[key] = true - } - } -} - -func (ls *listSquasher) list() *bzl.ListExpr { - sortedExprs := make([]bzl.Expr, 0, len(ls.unique)) - for _, e := range ls.unique { - sortedExprs = append(sortedExprs, e) - } - sort.Slice(sortedExprs, func(i, j int) bool { - return sortedExprs[i].(*bzl.StringExpr).Value < sortedExprs[j].(*bzl.StringExpr).Value - }) - return &bzl.ListExpr{List: sortedExprs} -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/rule/platform.go b/vendor/github.com/bazelbuild/bazel-gazelle/rule/platform.go deleted file mode 100644 index a3227442c7..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/rule/platform.go +++ /dev/null @@ -1,142 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package rule - -import ( - "sort" -) - -// Platform represents a GOOS/GOARCH pair. When Platform is used to describe -// sources, dependencies, or flags, either OS or Arch may be empty. -// -// DEPRECATED: do not use outside language/go. This type is Go-specific -// and should be moved to the Go extension. -type Platform struct { - OS, Arch string -} - -// String returns OS, Arch, or "OS_Arch" if both are set. This must match -// the names of config_setting rules in @io_bazel_rules_go//go/platform. -func (p Platform) String() string { - switch { - case p.OS != "" && p.Arch != "": - return p.OS + "_" + p.Arch - case p.OS != "": - return p.OS - case p.Arch != "": - return p.Arch - default: - return "" - } -} - -// KnownPlatforms is the set of target platforms that Go supports. Gazelle -// will generate multi-platform build files using these tags. rules_go and -// Bazel may not actually support all of these. -// -// DEPRECATED: do not use outside language/go. -var KnownPlatforms = []Platform{ - {"android", "386"}, - {"android", "amd64"}, - {"android", "arm"}, - {"android", "arm64"}, - {"darwin", "386"}, - {"darwin", "amd64"}, - {"darwin", "arm"}, - {"darwin", "arm64"}, - {"dragonfly", "amd64"}, - {"freebsd", "386"}, - {"freebsd", "amd64"}, - {"freebsd", "arm"}, - {"ios", "386"}, - {"ios", "amd64"}, - {"ios", "arm"}, - {"ios", "arm64"}, - {"linux", "386"}, - {"linux", "amd64"}, - {"linux", "arm"}, - {"linux", "arm64"}, - {"linux", "mips"}, - {"linux", "mips64"}, - {"linux", "mips64le"}, - {"linux", "mipsle"}, - {"linux", "ppc64"}, - {"linux", "ppc64le"}, - {"linux", "s390x"}, - {"nacl", "386"}, - {"nacl", "amd64p32"}, - {"nacl", "arm"}, - {"netbsd", "386"}, - {"netbsd", "amd64"}, - {"netbsd", "arm"}, - {"openbsd", "386"}, - {"openbsd", "amd64"}, - {"openbsd", "arm"}, - {"plan9", "386"}, - {"plan9", "amd64"}, - {"plan9", "arm"}, - {"solaris", "amd64"}, - {"windows", "386"}, - {"windows", "amd64"}, -} - -var OSAliases = map[string][]string{ - "android": []string{"linux"}, - "ios": []string{"darwin"}, -} - -var ( - // KnownOSs is the sorted list of operating systems that Go supports. - KnownOSs []string - - // KnownOSSet is the set of operating systems that Go supports. - KnownOSSet map[string]bool - - // KnownArchs is the sorted list of architectures that Go supports. - KnownArchs []string - - // KnownArchSet is the set of architectures that Go supports. - KnownArchSet map[string]bool - - // KnownOSArchs is a map from OS to the archictures they run on. - KnownOSArchs map[string][]string - - // KnownArchOSs is a map from architectures to that OSs that run on them. - KnownArchOSs map[string][]string -) - -func init() { - KnownOSSet = make(map[string]bool) - KnownArchSet = make(map[string]bool) - KnownOSArchs = make(map[string][]string) - KnownArchOSs = make(map[string][]string) - for _, p := range KnownPlatforms { - KnownOSSet[p.OS] = true - KnownArchSet[p.Arch] = true - KnownOSArchs[p.OS] = append(KnownOSArchs[p.OS], p.Arch) - KnownArchOSs[p.Arch] = append(KnownArchOSs[p.Arch], p.OS) - } - KnownOSs = make([]string, 0, len(KnownOSSet)) - KnownArchs = make([]string, 0, len(KnownArchSet)) - for os := range KnownOSSet { - KnownOSs = append(KnownOSs, os) - } - for arch := range KnownArchSet { - KnownArchs = append(KnownArchs, arch) - } - sort.Strings(KnownOSs) - sort.Strings(KnownArchs) -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/rule/platform_strings.go b/vendor/github.com/bazelbuild/bazel-gazelle/rule/platform_strings.go deleted file mode 100644 index ad452cf49f..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/rule/platform_strings.go +++ /dev/null @@ -1,245 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package rule - -import ( - "sort" - "strings" - - bzl "github.com/bazelbuild/buildtools/build" -) - -// PlatformStrings contains a set of strings associated with a buildable -// target in a package. This is used to store source file names, -// import paths, and flags. -// -// Strings are stored in four sets: generic strings, OS-specific strings, -// arch-specific strings, and OS-and-arch-specific strings. A string may not -// be duplicated within a list or across sets; however, a string may appear -// in more than one list within a set (e.g., in "linux" and "windows" within -// the OS set). Strings within each list should be sorted, though this may -// not be relied upon. -// -// DEPRECATED: do not use outside language/go. This type is Go-specific and -// should be moved to the Go extension. -type PlatformStrings struct { - // Generic is a list of strings not specific to any platform. - Generic []string - - // OS is a map from OS name (anything in KnownOSs) to - // OS-specific strings. - OS map[string][]string - - // Arch is a map from architecture name (anything in KnownArchs) to - // architecture-specific strings. - Arch map[string][]string - - // Platform is a map from platforms to OS and architecture-specific strings. - Platform map[Platform][]string -} - -// HasExt returns whether this set contains a file with the given extension. -func (ps *PlatformStrings) HasExt(ext string) bool { - return ps.firstExtFile(ext) != "" -} - -func (ps *PlatformStrings) IsEmpty() bool { - return len(ps.Generic) == 0 && len(ps.OS) == 0 && len(ps.Arch) == 0 && len(ps.Platform) == 0 -} - -// Flat returns all the strings in the set, sorted and de-duplicated. -func (ps *PlatformStrings) Flat() []string { - unique := make(map[string]struct{}) - for _, s := range ps.Generic { - unique[s] = struct{}{} - } - for _, ss := range ps.OS { - for _, s := range ss { - unique[s] = struct{}{} - } - } - for _, ss := range ps.Arch { - for _, s := range ss { - unique[s] = struct{}{} - } - } - for _, ss := range ps.Platform { - for _, s := range ss { - unique[s] = struct{}{} - } - } - flat := make([]string, 0, len(unique)) - for s := range unique { - flat = append(flat, s) - } - sort.Strings(flat) - return flat -} - -func (ps *PlatformStrings) firstExtFile(ext string) string { - for _, f := range ps.Generic { - if strings.HasSuffix(f, ext) { - return f - } - } - for _, fs := range ps.OS { - for _, f := range fs { - if strings.HasSuffix(f, ext) { - return f - } - } - } - for _, fs := range ps.Arch { - for _, f := range fs { - if strings.HasSuffix(f, ext) { - return f - } - } - } - for _, fs := range ps.Platform { - for _, f := range fs { - if strings.HasSuffix(f, ext) { - return f - } - } - } - return "" -} - -// Map applies a function that processes individual strings to the strings -// in "ps" and returns a new PlatformStrings with the result. Empty strings -// returned by the function are dropped. -func (ps *PlatformStrings) Map(f func(s string) (string, error)) (PlatformStrings, []error) { - var errors []error - mapSlice := func(ss []string) ([]string, error) { - rs := make([]string, 0, len(ss)) - for _, s := range ss { - if r, err := f(s); err != nil { - errors = append(errors, err) - } else if r != "" { - rs = append(rs, r) - } - } - return rs, nil - } - result, _ := ps.MapSlice(mapSlice) - return result, errors -} - -// MapSlice applies a function that processes slices of strings to the strings -// in "ps" and returns a new PlatformStrings with the results. -func (ps *PlatformStrings) MapSlice(f func([]string) ([]string, error)) (PlatformStrings, []error) { - var errors []error - - mapSlice := func(ss []string) []string { - rs, err := f(ss) - if err != nil { - errors = append(errors, err) - return nil - } - return rs - } - - mapStringMap := func(m map[string][]string) map[string][]string { - if m == nil { - return nil - } - rm := make(map[string][]string) - for k, ss := range m { - ss = mapSlice(ss) - if len(ss) > 0 { - rm[k] = ss - } - } - if len(rm) == 0 { - return nil - } - return rm - } - - mapPlatformMap := func(m map[Platform][]string) map[Platform][]string { - if m == nil { - return nil - } - rm := make(map[Platform][]string) - for k, ss := range m { - ss = mapSlice(ss) - if len(ss) > 0 { - rm[k] = ss - } - } - if len(rm) == 0 { - return nil - } - return rm - } - - result := PlatformStrings{ - Generic: mapSlice(ps.Generic), - OS: mapStringMap(ps.OS), - Arch: mapStringMap(ps.Arch), - Platform: mapPlatformMap(ps.Platform), - } - return result, errors -} - -func (ps PlatformStrings) BzlExpr() bzl.Expr { - var pieces []bzl.Expr - if len(ps.Generic) > 0 { - pieces = append(pieces, ExprFromValue(ps.Generic)) - } - if len(ps.OS) > 0 { - pieces = append(pieces, platformStringsOSArchDictExpr(ps.OS)) - } - if len(ps.Arch) > 0 { - pieces = append(pieces, platformStringsOSArchDictExpr(ps.Arch)) - } - if len(ps.Platform) > 0 { - pieces = append(pieces, platformStringsPlatformDictExpr(ps.Platform)) - } - if len(pieces) == 0 { - return &bzl.ListExpr{} - } else if len(pieces) == 1 { - return pieces[0] - } else { - e := pieces[0] - if list, ok := e.(*bzl.ListExpr); ok { - list.ForceMultiLine = true - } - for _, piece := range pieces[1:] { - e = &bzl.BinaryExpr{X: e, Y: piece, Op: "+"} - } - return e - } -} - -func platformStringsOSArchDictExpr(m map[string][]string) bzl.Expr { - s := make(SelectStringListValue) - for key, value := range m { - s["@io_bazel_rules_go//go/platform:"+key] = value - } - s["//conditions:default"] = nil - return s.BzlExpr() -} - -func platformStringsPlatformDictExpr(m map[Platform][]string) bzl.Expr { - s := make(SelectStringListValue) - for key, value := range m { - s["@io_bazel_rules_go//go/platform:"+key.String()] = value - } - s["//conditions:default"] = nil - return s.BzlExpr() -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/rule/rule.go b/vendor/github.com/bazelbuild/bazel-gazelle/rule/rule.go deleted file mode 100644 index 8617b44ba4..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/rule/rule.go +++ /dev/null @@ -1,859 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package rule provides tools for editing Bazel build files. It is intended to -// be a more powerful replacement for -// github.com/bazelbuild/buildtools/build.Rule, adapted for Gazelle's usage. It -// is language agnostic, but it may be used for language-specific rules by -// providing configuration. -// -// File is the primary interface to this package. A File represents an -// individual build file. It comprises a list of Rules and a list of Loads. -// Rules and Loads may be inserted, modified, or deleted. When all changes -// are done, File.Save() may be called to write changes back to a file. -package rule - -import ( - "fmt" - "io/ioutil" - "os" - "path/filepath" - "sort" - "strings" - - bzl "github.com/bazelbuild/buildtools/build" - bt "github.com/bazelbuild/buildtools/tables" -) - -// File provides editing functionality for a build file. You can create a -// new file with EmptyFile or load an existing file with LoadFile. After -// changes have been made, call Save to write changes back to a file. -type File struct { - // File is the underlying build file syntax tree. Some editing operations - // may modify this, but editing is not complete until Sync() is called. - File *bzl.File - - // function is the underlying syntax tree of a bzl file function. - // This is used for editing the bzl file function specified by the - // update-repos -to_macro option. - function *function - - // Pkg is the Bazel package this build file defines. - Pkg string - - // Path is the file system path to the build file (same as File.Path). - Path string - - // DefName is the name of the function definition this File refers to - // if loaded with LoadMacroFile or a similar function. Normally empty. - DefName string - - // Directives is a list of configuration directives found in top-level - // comments in the file. This should not be modified after the file is read. - Directives []Directive - - // Loads is a list of load statements within the file. This should not - // be modified directly; use Load methods instead. - Loads []*Load - - // Rules is a list of rules within the file (or function calls that look like - // rules). This should not be modified directly; use Rule methods instead. - Rules []*Rule -} - -// EmptyFile creates a File wrapped around an empty syntax tree. -func EmptyFile(path, pkg string) *File { - return &File{ - File: &bzl.File{Path: path, Type: bzl.TypeBuild}, - Path: path, - Pkg: pkg, - } -} - -// LoadFile loads a build file from disk, parses it, and scans for rules and -// load statements. The syntax tree within the returned File will be modified -// by editing methods. -// -// This function returns I/O and parse errors without modification. It's safe -// to use os.IsNotExist and similar predicates. -func LoadFile(path, pkg string) (*File, error) { - data, err := ioutil.ReadFile(path) - if err != nil { - return nil, err - } - return LoadData(path, pkg, data) -} - -// LoadWorkspaceFile is similar to LoadFile but parses the file as a WORKSPACE -// file. -func LoadWorkspaceFile(path, pkg string) (*File, error) { - data, err := ioutil.ReadFile(path) - if err != nil { - return nil, err - } - return LoadWorkspaceData(path, pkg, data) -} - -// LoadMacroFile loads a bzl file from disk, parses it, then scans for the load -// statements and the rules called from the given Starlark function. If there is -// no matching function name, then a new function with that name will be created. -// The function's syntax tree will be returned within File and can be modified by -// Sync and Save calls. -func LoadMacroFile(path, pkg, defName string) (*File, error) { - data, err := ioutil.ReadFile(path) - if err != nil { - return nil, err - } - return LoadMacroData(path, pkg, defName, data) -} - -// EmptyMacroFile creates a bzl file at the given path and within the file creates -// a Starlark function with the provided name. The function can then be modified -// by Sync and Save calls. -func EmptyMacroFile(path, pkg, defName string) (*File, error) { - _, err := os.Create(path) - if err != nil { - return nil, err - } - return LoadMacroData(path, pkg, defName, nil) -} - -// LoadData parses a build file from a byte slice and scans it for rules and -// load statements. The syntax tree within the returned File will be modified -// by editing methods. -func LoadData(path, pkg string, data []byte) (*File, error) { - ast, err := bzl.ParseBuild(path, data) - if err != nil { - return nil, err - } - return ScanAST(pkg, ast), nil -} - -// LoadWorkspaceData is similar to LoadData but parses the data as a -// WORKSPACE file. -func LoadWorkspaceData(path, pkg string, data []byte) (*File, error) { - ast, err := bzl.ParseWorkspace(path, data) - if err != nil { - return nil, err - } - return ScanAST(pkg, ast), nil -} - -// LoadMacroData parses a bzl file from a byte slice and scans for the load -// statements and the rules called from the given Starlark function. If there is -// no matching function name, then a new function will be created, and added to the -// File the next time Sync is called. The function's syntax tree will be returned -// within File and can be modified by Sync and Save calls. -func LoadMacroData(path, pkg, defName string, data []byte) (*File, error) { - ast, err := bzl.ParseBzl(path, data) - if err != nil { - return nil, err - } - return ScanASTBody(pkg, defName, ast), nil -} - -// ScanAST creates a File wrapped around the given syntax tree. This tree -// will be modified by editing methods. -func ScanAST(pkg string, bzlFile *bzl.File) *File { - return ScanASTBody(pkg, "", bzlFile) -} - -type function struct { - stmt *bzl.DefStmt - inserted, hasPass bool -} - -// ScanASTBody creates a File wrapped around the given syntax tree. It will also -// scan the AST for a function matching the given defName, and if the function -// does not exist it will create a new one and mark it to be added to the File -// the next time Sync is called. -func ScanASTBody(pkg, defName string, bzlFile *bzl.File) *File { - f := &File{ - File: bzlFile, - Pkg: pkg, - Path: bzlFile.Path, - DefName: defName, - } - var defStmt *bzl.DefStmt - f.Rules, f.Loads, defStmt = scanExprs(defName, bzlFile.Stmt) - if defStmt != nil { - f.Rules, _, _ = scanExprs("", defStmt.Body) - f.function = &function{ - stmt: defStmt, - inserted: true, - } - if len(defStmt.Body) == 1 { - if v, ok := defStmt.Body[0].(*bzl.BranchStmt); ok && v.Token == "pass" { - f.function.hasPass = true - } - } - } else if defName != "" { - f.function = &function{ - stmt: &bzl.DefStmt{Name: defName}, - inserted: false, - } - } - if f.function != nil { - f.Directives = ParseDirectivesFromMacro(f.function.stmt) - } else { - f.Directives = ParseDirectives(bzlFile) - } - return f -} - -func scanExprs(defName string, stmt []bzl.Expr) (rules []*Rule, loads []*Load, fn *bzl.DefStmt) { - for i, expr := range stmt { - switch expr := expr.(type) { - case *bzl.LoadStmt: - l := loadFromExpr(i, expr) - loads = append(loads, l) - case *bzl.CallExpr: - if r := ruleFromExpr(i, expr); r != nil { - rules = append(rules, r) - } - case *bzl.DefStmt: - if expr.Name == defName { - fn = expr - } - } - } - return rules, loads, fn -} - -// MatchBuildFileName looks for a file in files that has a name from names. -// If there is at least one matching file, a path will be returned by joining -// dir and the first matching name. If there are no matching files, the -// empty string is returned. -func MatchBuildFileName(dir string, names []string, files []os.FileInfo) string { - for _, name := range names { - for _, fi := range files { - if fi.Name() == name && !fi.IsDir() { - return filepath.Join(dir, name) - } - } - } - return "" -} - -// SyncMacroFile syncs the file's syntax tree with another file's. This is -// useful for keeping multiple macro definitions from the same .bzl file in sync. -func (f *File) SyncMacroFile(from *File) { - fromFunc := *from.function.stmt - _, _, toFunc := scanExprs(from.function.stmt.Name, f.File.Stmt) - if toFunc != nil { - *toFunc = fromFunc - } else { - f.File.Stmt = append(f.File.Stmt, &fromFunc) - } -} - -// MacroName returns the name of the macro function that this file is editing, -// or an empty string if a macro function is not being edited. -func (f *File) MacroName() string { - if f.function != nil && f.function.stmt != nil { - return f.function.stmt.Name - } - return "" -} - -// Sync writes all changes back to the wrapped syntax tree. This should be -// called after editing operations, before reading the syntax tree again. -func (f *File) Sync() { - var loadInserts, loadDeletes, loadStmts []*stmt - var r, w int - for r, w = 0, 0; r < len(f.Loads); r++ { - s := f.Loads[r] - s.sync() - if s.deleted { - loadDeletes = append(loadDeletes, &s.stmt) - continue - } - if s.inserted { - loadInserts = append(loadInserts, &s.stmt) - s.inserted = false - } else { - loadStmts = append(loadStmts, &s.stmt) - } - f.Loads[w] = s - w++ - } - f.Loads = f.Loads[:w] - var ruleInserts, ruleDeletes, ruleStmts []*stmt - for r, w = 0, 0; r < len(f.Rules); r++ { - s := f.Rules[r] - s.sync() - if s.deleted { - ruleDeletes = append(ruleDeletes, &s.stmt) - continue - } - if s.inserted { - ruleInserts = append(ruleInserts, &s.stmt) - s.inserted = false - } else { - ruleStmts = append(ruleStmts, &s.stmt) - } - f.Rules[w] = s - w++ - } - f.Rules = f.Rules[:w] - - if f.function == nil { - deletes := append(ruleDeletes, loadDeletes...) - inserts := append(ruleInserts, loadInserts...) - stmts := append(ruleStmts, loadStmts...) - updateStmt(&f.File.Stmt, inserts, deletes, stmts) - } else { - updateStmt(&f.File.Stmt, loadInserts, loadDeletes, loadStmts) - if f.function.hasPass && len(ruleInserts) > 0 { - f.function.stmt.Body = []bzl.Expr{} - f.function.hasPass = false - } - updateStmt(&f.function.stmt.Body, ruleInserts, ruleDeletes, ruleStmts) - if len(f.function.stmt.Body) == 0 { - f.function.stmt.Body = append(f.function.stmt.Body, &bzl.BranchStmt{Token: "pass"}) - f.function.hasPass = true - } - if !f.function.inserted { - f.File.Stmt = append(f.File.Stmt, f.function.stmt) - f.function.inserted = true - } - } -} - -func updateStmt(oldStmt *[]bzl.Expr, inserts, deletes, stmts []*stmt) { - sort.Stable(byIndex(deletes)) - sort.Stable(byIndex(inserts)) - sort.Stable(byIndex(stmts)) - newStmt := make([]bzl.Expr, 0, len(*oldStmt)-len(deletes)+len(inserts)) - var ii, di, si int - for i, stmt := range *oldStmt { - for ii < len(inserts) && inserts[ii].index == i { - inserts[ii].index = len(newStmt) - newStmt = append(newStmt, inserts[ii].expr) - ii++ - } - if di < len(deletes) && deletes[di].index == i { - di++ - continue - } - if si < len(stmts) && stmts[si].expr == stmt { - stmts[si].index = len(newStmt) - si++ - } - newStmt = append(newStmt, stmt) - } - for ii < len(inserts) { - inserts[ii].index = len(newStmt) - newStmt = append(newStmt, inserts[ii].expr) - ii++ - } - *oldStmt = newStmt -} - -// Format formats the build file in a form that can be written to disk. -// This method calls Sync internally. -func (f *File) Format() []byte { - f.Sync() - return bzl.Format(f.File) -} - -// Save writes the build file to disk. This method calls Sync internally. -func (f *File) Save(path string) error { - f.Sync() - data := bzl.Format(f.File) - return ioutil.WriteFile(path, data, 0666) -} - -// HasDefaultVisibility returns whether the File contains a "package" rule with -// a "default_visibility" attribute. Rules generated by Gazelle should not -// have their own visibility attributes if this is the case. -func (f *File) HasDefaultVisibility() bool { - for _, r := range f.Rules { - if r.Kind() == "package" && r.Attr("default_visibility") != nil { - return true - } - } - return false -} - -type stmt struct { - index int - deleted, inserted, updated bool - expr bzl.Expr -} - -// Index returns the index for this statement within the build file. For -// inserted rules, this is where the rule will be inserted (rules with the -// same index will be inserted in the order Insert was called). For existing -// rules, this is the index of the original statement. -func (s *stmt) Index() int { return s.index } - -// Delete marks this statement for deletion. It will be removed from the -// syntax tree when File.Sync is called. -func (s *stmt) Delete() { s.deleted = true } - -type byIndex []*stmt - -func (s byIndex) Len() int { - return len(s) -} - -func (s byIndex) Less(i, j int) bool { - return s[i].index < s[j].index -} - -func (s byIndex) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -// identPair represents one symbol, with or without remapping, in a load -// statement within a build file. -type identPair struct { - to, from *bzl.Ident -} - -// Load represents a load statement within a build file. -type Load struct { - stmt - name string - symbols map[string]identPair -} - -// NewLoad creates a new, empty load statement for the given file name. -func NewLoad(name string) *Load { - return &Load{ - stmt: stmt{ - expr: &bzl.LoadStmt{ - Module: &bzl.StringExpr{Value: name}, - ForceCompact: true, - }, - }, - name: name, - symbols: make(map[string]identPair), - } -} - -func loadFromExpr(index int, loadStmt *bzl.LoadStmt) *Load { - l := &Load{ - stmt: stmt{index: index, expr: loadStmt}, - name: loadStmt.Module.Value, - symbols: make(map[string]identPair), - } - for i := range loadStmt.From { - to, from := loadStmt.To[i], loadStmt.From[i] - l.symbols[to.Name] = identPair{to: to, from: from} - } - return l -} - -// Name returns the name of the file this statement loads. -func (l *Load) Name() string { - return l.name -} - -// Symbols returns a list of symbols this statement loads. -func (l *Load) Symbols() []string { - syms := make([]string, 0, len(l.symbols)) - for sym := range l.symbols { - syms = append(syms, sym) - } - sort.Strings(syms) - return syms -} - -// Has returns true if sym is loaded by this statement. -func (l *Load) Has(sym string) bool { - _, ok := l.symbols[sym] - return ok -} - -// Add inserts a new symbol into the load statement. This has no effect if -// the symbol is already loaded. Symbols will be sorted, so the order -// doesn't matter. -func (l *Load) Add(sym string) { - if _, ok := l.symbols[sym]; !ok { - i := &bzl.Ident{Name: sym} - l.symbols[sym] = identPair{to: i, from: i} - l.updated = true - } -} - -// Remove deletes a symbol from the load statement. This has no effect if -// the symbol is not loaded. -func (l *Load) Remove(sym string) { - if _, ok := l.symbols[sym]; ok { - delete(l.symbols, sym) - l.updated = true - } -} - -// IsEmpty returns whether this statement loads any symbols. -func (l *Load) IsEmpty() bool { - return len(l.symbols) == 0 -} - -// Insert marks this statement for insertion at the given index. If multiple -// statements are inserted at the same index, they will be inserted in the -// order Insert is called. -func (l *Load) Insert(f *File, index int) { - l.index = index - l.inserted = true - f.Loads = append(f.Loads, l) -} - -func (l *Load) sync() { - if !l.updated { - return - } - l.updated = false - - // args1 and args2 are two different sort groups based on whether a remap of the identifier is present. - var args1, args2, args []string - for sym, pair := range l.symbols { - if pair.from.Name == pair.to.Name { - args1 = append(args1, sym) - } else { - args2 = append(args2, sym) - } - } - sort.Strings(args1) - sort.Strings(args2) - args = append(args, args1...) - args = append(args, args2...) - - loadStmt := l.expr.(*bzl.LoadStmt) - loadStmt.Module.Value = l.name - loadStmt.From = make([]*bzl.Ident, 0, len(args)) - loadStmt.To = make([]*bzl.Ident, 0, len(args)) - for _, sym := range args { - pair := l.symbols[sym] - loadStmt.From = append(loadStmt.From, pair.from) - loadStmt.To = append(loadStmt.To, pair.to) - if pair.from.Name != pair.to.Name { - loadStmt.ForceCompact = false - } - } -} - -// Rule represents a rule statement within a build file. -type Rule struct { - stmt - kind string - args []bzl.Expr - attrs map[string]*bzl.AssignExpr - private map[string]interface{} -} - -// NewRule creates a new, empty rule with the given kind and name. -func NewRule(kind, name string) *Rule { - nameAttr := &bzl.AssignExpr{ - LHS: &bzl.Ident{Name: "name"}, - RHS: &bzl.StringExpr{Value: name}, - Op: "=", - } - r := &Rule{ - stmt: stmt{ - expr: &bzl.CallExpr{ - X: &bzl.Ident{Name: kind}, - List: []bzl.Expr{nameAttr}, - }, - }, - kind: kind, - attrs: map[string]*bzl.AssignExpr{"name": nameAttr}, - private: map[string]interface{}{}, - } - return r -} - -func ruleFromExpr(index int, expr bzl.Expr) *Rule { - call, ok := expr.(*bzl.CallExpr) - if !ok { - return nil - } - x, ok := call.X.(*bzl.Ident) - if !ok { - return nil - } - kind := x.Name - var args []bzl.Expr - attrs := make(map[string]*bzl.AssignExpr) - for _, arg := range call.List { - if attr, ok := arg.(*bzl.AssignExpr); ok { - key := attr.LHS.(*bzl.Ident) // required by parser - attrs[key.Name] = attr - } else { - args = append(args, arg) - } - } - return &Rule{ - stmt: stmt{ - index: index, - expr: call, - }, - kind: kind, - args: args, - attrs: attrs, - private: map[string]interface{}{}, - } -} - -// ShouldKeep returns whether the rule is marked with a "# keep" comment. Rules -// that are kept should not be modified. This does not check whether -// subexpressions within the rule should be kept. -func (r *Rule) ShouldKeep() bool { - return ShouldKeep(r.expr) -} - -// Kind returns the kind of rule this is (for example, "go_library"). -func (r *Rule) Kind() string { - return r.kind -} - -// SetKind changes the kind of rule this is. -func (r *Rule) SetKind(kind string) { - r.kind = kind - r.updated = true -} - -// Name returns the value of the rule's "name" attribute if it is a string -// or "" if the attribute does not exist or is not a string. -func (r *Rule) Name() string { - return r.AttrString("name") -} - -// SetName sets the value of the rule's "name" attribute. -func (r *Rule) SetName(name string) { - r.SetAttr("name", name) -} - -// AttrKeys returns a sorted list of attribute keys used in this rule. -func (r *Rule) AttrKeys() []string { - keys := make([]string, 0, len(r.attrs)) - for k := range r.attrs { - keys = append(keys, k) - } - sort.SliceStable(keys, func(i, j int) bool { - if cmp := bt.NamePriority[keys[i]] - bt.NamePriority[keys[j]]; cmp != 0 { - return cmp < 0 - } - return keys[i] < keys[j] - }) - return keys -} - -// Attr returns the value of the named attribute. nil is returned when the -// attribute is not set. -func (r *Rule) Attr(key string) bzl.Expr { - attr, ok := r.attrs[key] - if !ok { - return nil - } - return attr.RHS -} - -// AttrString returns the value of the named attribute if it is a scalar string. -// "" is returned if the attribute is not set or is not a string. -func (r *Rule) AttrString(key string) string { - attr, ok := r.attrs[key] - if !ok { - return "" - } - str, ok := attr.RHS.(*bzl.StringExpr) - if !ok { - return "" - } - return str.Value -} - -// AttrStrings returns the string values of an attribute if it is a list. -// nil is returned if the attribute is not set or is not a list. Non-string -// values within the list won't be returned. -func (r *Rule) AttrStrings(key string) []string { - attr, ok := r.attrs[key] - if !ok { - return nil - } - list, ok := attr.RHS.(*bzl.ListExpr) - if !ok { - return nil - } - strs := make([]string, 0, len(list.List)) - for _, e := range list.List { - if str, ok := e.(*bzl.StringExpr); ok { - strs = append(strs, str.Value) - } - } - return strs -} - -// DelAttr removes the named attribute from the rule. -func (r *Rule) DelAttr(key string) { - delete(r.attrs, key) - r.updated = true -} - -// SetAttr adds or replaces the named attribute with an expression produced -// by ExprFromValue. -func (r *Rule) SetAttr(key string, value interface{}) { - rhs := ExprFromValue(value) - if attr, ok := r.attrs[key]; ok { - attr.RHS = rhs - } else { - r.attrs[key] = &bzl.AssignExpr{ - LHS: &bzl.Ident{Name: key}, - RHS: rhs, - Op: "=", - } - } - r.updated = true -} - -// PrivateAttrKeys returns a sorted list of private attribute names. -func (r *Rule) PrivateAttrKeys() []string { - keys := make([]string, 0, len(r.private)) - for k := range r.private { - keys = append(keys, k) - } - sort.Strings(keys) - return keys -} - -// PrivateAttr return the private value associated with a key. -func (r *Rule) PrivateAttr(key string) interface{} { - return r.private[key] -} - -// SetPrivateAttr associates a value with a key. Unlike SetAttr, this value -// is not converted to a build syntax tree and will not be written to a build -// file. -func (r *Rule) SetPrivateAttr(key string, value interface{}) { - r.private[key] = value -} - -// Args returns positional arguments passed to a rule. -func (r *Rule) Args() []bzl.Expr { - return r.args -} - -// Insert marks this statement for insertion at the end of the file. Multiple -// statements will be inserted in the order Insert is called. -func (r *Rule) Insert(f *File) { - // TODO(jayconrod): should rules always be inserted at the end? Should there - // be some sort order? - var stmt []bzl.Expr - if f.function == nil { - stmt = f.File.Stmt - } else { - stmt = f.function.stmt.Body - } - r.index = len(stmt) - r.inserted = true - f.Rules = append(f.Rules, r) -} - -// IsEmpty returns true when the rule contains none of the attributes in attrs -// for its kind. attrs should contain attributes that make the rule buildable -// like srcs or deps and not descriptive attributes like name or visibility. -func (r *Rule) IsEmpty(info KindInfo) bool { - if info.NonEmptyAttrs == nil { - return false - } - for k := range info.NonEmptyAttrs { - if _, ok := r.attrs[k]; ok { - return false - } - } - return true -} - -func (r *Rule) sync() { - if !r.updated { - return - } - r.updated = false - - for _, k := range []string{"srcs", "deps"} { - if attr, ok := r.attrs[k]; ok { - bzl.Walk(attr.RHS, sortExprLabels) - } - } - - call := r.expr.(*bzl.CallExpr) - call.X.(*bzl.Ident).Name = r.kind - if len(r.attrs) > 1 { - call.ForceMultiLine = true - } - - list := make([]bzl.Expr, 0, len(r.args)+len(r.attrs)) - list = append(list, r.args...) - for _, attr := range r.attrs { - list = append(list, attr) - } - sortedAttrs := list[len(r.args):] - key := func(e bzl.Expr) string { return e.(*bzl.AssignExpr).LHS.(*bzl.Ident).Name } - sort.SliceStable(sortedAttrs, func(i, j int) bool { - ki := key(sortedAttrs[i]) - kj := key(sortedAttrs[j]) - if cmp := bt.NamePriority[ki] - bt.NamePriority[kj]; cmp != 0 { - return cmp < 0 - } - return ki < kj - }) - - call.List = list - r.updated = false -} - -// ShouldKeep returns whether e is marked with a "# keep" comment. Kept -// expressions should not be removed or modified. -func ShouldKeep(e bzl.Expr) bool { - for _, c := range append(e.Comment().Before, e.Comment().Suffix...) { - text := strings.TrimSpace(strings.TrimPrefix(c.Token, "#")) - if text == "keep" { - return true - } - } - return false -} - -// CheckInternalVisibility overrides the given visibility if the package is -// internal. -func CheckInternalVisibility(rel, visibility string) string { - if i := strings.LastIndex(rel, "/internal/"); i >= 0 { - visibility = fmt.Sprintf("//%s:__subpackages__", rel[:i]) - } else if strings.HasPrefix(rel, "internal/") { - visibility = "//:__subpackages__" - } - return visibility -} - -type byAttrName []KeyValue - -var _ sort.Interface = byAttrName{} - -func (s byAttrName) Len() int { - return len(s) -} - -func (s byAttrName) Less(i, j int) bool { - if cmp := bt.NamePriority[s[i].Key] - bt.NamePriority[s[j].Key]; cmp != 0 { - return cmp < 0 - } - return s[i].Key < s[j].Key -} - -func (s byAttrName) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/rule/sort_labels.go b/vendor/github.com/bazelbuild/bazel-gazelle/rule/sort_labels.go deleted file mode 100644 index bd27eb5582..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/rule/sort_labels.go +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright 2017 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package rule - -import ( - "sort" - "strings" - - bzl "github.com/bazelbuild/buildtools/build" -) - -// sortExprLabels sorts lists of strings using the same order as buildifier. -// Buildifier also sorts string lists, but not those involved with "select" -// expressions. This function is intended to be used with bzl.Walk. -func sortExprLabels(e bzl.Expr, _ []bzl.Expr) { - list, ok := e.(*bzl.ListExpr) - if !ok || len(list.List) == 0 { - return - } - - keys := make([]stringSortKey, len(list.List)) - for i, elem := range list.List { - s, ok := elem.(*bzl.StringExpr) - if !ok { - return // don't sort lists unless all elements are strings - } - keys[i] = makeSortKey(i, s) - } - - before := keys[0].x.Comment().Before - keys[0].x.Comment().Before = nil - sort.Sort(byStringExpr(keys)) - keys[0].x.Comment().Before = append(before, keys[0].x.Comment().Before...) - for i, k := range keys { - list.List[i] = k.x - } -} - -// Code below this point is adapted from -// github.com/bazelbuild/buildtools/build/rewrite.go - -// A stringSortKey records information about a single string literal to be -// sorted. The strings are first grouped into four phases: most strings, -// strings beginning with ":", strings beginning with "//", and strings -// beginning with "@". The next significant part of the comparison is the list -// of elements in the value, where elements are split at `.' and `:'. Finally -// we compare by value and break ties by original index. -type stringSortKey struct { - phase int - split []string - value string - original int - x bzl.Expr -} - -func makeSortKey(index int, x *bzl.StringExpr) stringSortKey { - key := stringSortKey{ - value: x.Value, - original: index, - x: x, - } - - switch { - case strings.HasPrefix(x.Value, ":"): - key.phase = 1 - case strings.HasPrefix(x.Value, "//"): - key.phase = 2 - case strings.HasPrefix(x.Value, "@"): - key.phase = 3 - } - - key.split = strings.Split(strings.Replace(x.Value, ":", ".", -1), ".") - return key -} - -// byStringExpr implements sort.Interface for a list of stringSortKey. -type byStringExpr []stringSortKey - -func (x byStringExpr) Len() int { return len(x) } -func (x byStringExpr) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -func (x byStringExpr) Less(i, j int) bool { - xi := x[i] - xj := x[j] - - if xi.phase != xj.phase { - return xi.phase < xj.phase - } - for k := 0; k < len(xi.split) && k < len(xj.split); k++ { - if xi.split[k] != xj.split[k] { - return xi.split[k] < xj.split[k] - } - } - if len(xi.split) != len(xj.split) { - return len(xi.split) < len(xj.split) - } - if xi.value != xj.value { - return xi.value < xj.value - } - return xi.original < xj.original -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/rule/types.go b/vendor/github.com/bazelbuild/bazel-gazelle/rule/types.go deleted file mode 100644 index 5d1f5a3f92..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/rule/types.go +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package rule - -// LoadInfo describes a file that Gazelle knows about and the symbols -// it defines. -type LoadInfo struct { - Name string - Symbols []string - After []string -} - -// KindInfo stores metadata for a kind of rule, for example, "go_library". -type KindInfo struct { - // MatchAny is true if a rule of this kind may be matched with any rule - // of the same kind, regardless of attributes, if exactly one rule is - // present a build file. - MatchAny bool - - // MatchAttrs is a list of attributes used in matching. For example, - // for go_library, this list contains "importpath". Attributes are matched - // in order. - MatchAttrs []string - - // NonEmptyAttrs is a set of attributes that, if present, disqualify a rule - // from being deleted after merge. - NonEmptyAttrs map[string]bool - - // SubstituteAttrs is a set of attributes that should be substituted - // after matching and before merging. For example, suppose generated rule A - // references B via an "embed" attribute, and B matches against rule C. - // The label for B in A's "embed" must be substituted with a label for C. - // "embed" would need to be in this set. - SubstituteAttrs map[string]bool - - // MergeableAttrs is a set of attributes that should be merged before - // dependency resolution. See rule.Merge. - MergeableAttrs map[string]bool - - // ResolveAttrs is a set of attributes that should be merged after - // dependency resolution. See rule.Merge. - ResolveAttrs map[string]bool -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/rule/value.go b/vendor/github.com/bazelbuild/bazel-gazelle/rule/value.go deleted file mode 100644 index 1edc6ff63a..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/rule/value.go +++ /dev/null @@ -1,191 +0,0 @@ -/* Copyright 2016 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package rule - -import ( - "fmt" - "log" - "reflect" - "sort" - - bzl "github.com/bazelbuild/buildtools/build" -) - -// KeyValue represents a key-value pair. This gets converted into a -// rule attribute, i.e., a Skylark keyword argument. -type KeyValue struct { - Key string - Value interface{} -} - -// GlobValue represents a Bazel glob expression. -type GlobValue struct { - Patterns []string - Excludes []string -} - -// BzlExprValue is implemented by types that have custom translations -// to Starlark values. -type BzlExprValue interface { - BzlExpr() bzl.Expr -} - -// SelectStringListValue is a value that can be translated to a Bazel -// select expression that picks a string list based on a string condition. -type SelectStringListValue map[string][]string - -func (s SelectStringListValue) BzlExpr() bzl.Expr { - defaultKey := "//conditions:default" - keys := make([]string, 0, len(s)) - haveDefaultKey := false - for key := range s { - if key == defaultKey { - haveDefaultKey = true - } else { - keys = append(keys, key) - } - } - sort.Strings(keys) - if haveDefaultKey { - keys = append(keys, defaultKey) - } - - args := make([]bzl.Expr, 0, len(s)) - for _, key := range keys { - value := ExprFromValue(s[key]) - if key != defaultKey { - value.(*bzl.ListExpr).ForceMultiLine = true - } - args = append(args, &bzl.KeyValueExpr{ - Key: &bzl.StringExpr{Value: key}, - Value: value, - }) - } - sel := &bzl.CallExpr{ - X: &bzl.Ident{Name: "select"}, - List: []bzl.Expr{&bzl.DictExpr{List: args, ForceMultiLine: true}}, - } - return sel -} - -// ExprFromValue converts a value into an expression that can be written into -// a Bazel build file. The following types of values can be converted: -// -// * bools, integers, floats, strings. -// * slices, arrays (converted to lists). -// * maps (converted to select expressions; keys must be rules in -// @io_bazel_rules_go//go/platform). -// * GlobValue (converted to glob expressions). -// * PlatformStrings (converted to a concatenation of a list and selects). -// -// Converting unsupported types will cause a panic. -func ExprFromValue(val interface{}) bzl.Expr { - if e, ok := val.(bzl.Expr); ok { - return e - } - if be, ok := val.(BzlExprValue); ok { - return be.BzlExpr() - } - - rv := reflect.ValueOf(val) - switch rv.Kind() { - case reflect.Bool: - tok := "False" - if rv.Bool() { - tok = "True" - } - return &bzl.LiteralExpr{Token: tok} - - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, - reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return &bzl.LiteralExpr{Token: fmt.Sprintf("%d", val)} - - case reflect.Float32, reflect.Float64: - return &bzl.LiteralExpr{Token: fmt.Sprintf("%f", val)} - - case reflect.String: - return &bzl.StringExpr{Value: val.(string)} - - case reflect.Slice, reflect.Array: - var list []bzl.Expr - for i := 0; i < rv.Len(); i++ { - elem := ExprFromValue(rv.Index(i).Interface()) - list = append(list, elem) - } - return &bzl.ListExpr{List: list} - - case reflect.Map: - rkeys := rv.MapKeys() - sort.Sort(byString(rkeys)) - args := make([]bzl.Expr, len(rkeys)) - for i, rk := range rkeys { - k := &bzl.StringExpr{Value: mapKeyString(rk)} - v := ExprFromValue(rv.MapIndex(rk).Interface()) - if l, ok := v.(*bzl.ListExpr); ok { - l.ForceMultiLine = true - } - args[i] = &bzl.KeyValueExpr{Key: k, Value: v} - } - return &bzl.DictExpr{List: args, ForceMultiLine: true} - - case reflect.Struct: - switch val := val.(type) { - case GlobValue: - patternsValue := ExprFromValue(val.Patterns) - globArgs := []bzl.Expr{patternsValue} - if len(val.Excludes) > 0 { - excludesValue := ExprFromValue(val.Excludes) - globArgs = append(globArgs, &bzl.KeyValueExpr{ - Key: &bzl.StringExpr{Value: "excludes"}, - Value: excludesValue, - }) - } - return &bzl.CallExpr{ - X: &bzl.LiteralExpr{Token: "glob"}, - List: globArgs, - } - } - } - - log.Panicf("type not supported: %T", val) - return nil -} - -func mapKeyString(k reflect.Value) string { - switch s := k.Interface().(type) { - case string: - return s - default: - log.Panicf("unexpected map key: %v", k) - return "" - } -} - -type byString []reflect.Value - -var _ sort.Interface = byString{} - -func (s byString) Len() int { - return len(s) -} - -func (s byString) Less(i, j int) bool { - return mapKeyString(s[i]) < mapKeyString(s[j]) -} - -func (s byString) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/walk/BUILD.bazel b/vendor/github.com/bazelbuild/bazel-gazelle/walk/BUILD.bazel deleted file mode 100644 index 983dbd811b..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/walk/BUILD.bazel +++ /dev/null @@ -1,18 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "walk.go", - ], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/bazel-gazelle/walk", - importpath = "github.com/bazelbuild/bazel-gazelle/walk", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/bazelbuild/bazel-gazelle/config:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/flag:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/pathtools:go_default_library", - "//vendor/github.com/bazelbuild/bazel-gazelle/rule:go_default_library", - ], -) diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/walk/config.go b/vendor/github.com/bazelbuild/bazel-gazelle/walk/config.go deleted file mode 100644 index 22b355836f..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/walk/config.go +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package walk - -import ( - "flag" - "path" - - "github.com/bazelbuild/bazel-gazelle/config" - gzflag "github.com/bazelbuild/bazel-gazelle/flag" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// TODO(#472): store location information to validate each exclude. They -// may be set in one directory and used in another. Excludes work on -// declared generated files, so we can't just stat. - -type walkConfig struct { - excludes []string - ignore bool - follow []string -} - -const walkName = "_walk" - -func getWalkConfig(c *config.Config) *walkConfig { - return c.Exts[walkName].(*walkConfig) -} - -func (wc *walkConfig) isExcluded(rel, base string) bool { - if base == ".git" { - return true - } - f := path.Join(rel, base) - for _, x := range wc.excludes { - if f == x { - return true - } - } - return false -} - -type Configurer struct{} - -func (_ *Configurer) RegisterFlags(fs *flag.FlagSet, cmd string, c *config.Config) { - wc := &walkConfig{} - c.Exts[walkName] = wc - fs.Var(&gzflag.MultiFlag{Values: &wc.excludes}, "exclude", "Path to file or directory that should be ignored (may be repeated)") -} - -func (_ *Configurer) CheckFlags(fs *flag.FlagSet, c *config.Config) error { return nil } - -func (_ *Configurer) KnownDirectives() []string { - return []string{"exclude", "follow", "ignore"} -} - -func (_ *Configurer) Configure(c *config.Config, rel string, f *rule.File) { - wc := getWalkConfig(c) - wcCopy := &walkConfig{} - *wcCopy = *wc - wcCopy.ignore = false - - if f != nil { - for _, d := range f.Directives { - switch d.Key { - case "exclude": - wcCopy.excludes = append(wcCopy.excludes, path.Join(rel, d.Value)) - case "follow": - wcCopy.follow = append(wcCopy.follow, path.Join(rel, d.Value)) - case "ignore": - wcCopy.ignore = true - } - } - } - - c.Exts[walkName] = wcCopy -} diff --git a/vendor/github.com/bazelbuild/bazel-gazelle/walk/walk.go b/vendor/github.com/bazelbuild/bazel-gazelle/walk/walk.go deleted file mode 100644 index 672c82b224..0000000000 --- a/vendor/github.com/bazelbuild/bazel-gazelle/walk/walk.go +++ /dev/null @@ -1,332 +0,0 @@ -/* Copyright 2018 The Bazel Authors. All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package walk provides customizable functionality for visiting each -// subdirectory in a directory tree. -package walk - -import ( - "io/ioutil" - "log" - "os" - "path" - "path/filepath" - "strings" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/pathtools" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// Mode determines which directories Walk visits and which directories -// should be updated. -type Mode int - -const ( - // In VisitAllUpdateSubdirsMode, Walk visits every directory in the - // repository. The directories given to Walk and their subdirectories are - // updated. - VisitAllUpdateSubdirsMode Mode = iota - - // In VisitAllUpdateDirsMode, Walk visits every directory in the repository. - // Only the directories given to Walk are updated (not their subdirectories). - VisitAllUpdateDirsMode - - // In UpdateDirsMode, Walk only visits and updates directories given to Walk. - // Build files in parent directories are read in order to produce a complete - // configuration, but the callback is not called for parent directories. - UpdateDirsMode -) - -// WalkFunc is a callback called by Walk in each visited directory. -// -// dir is the absolute file system path to the directory being visited. -// -// rel is the relative slash-separated path to the directory from the -// repository root. Will be "" for the repository root directory itself. -// -// c is the configuration for the current directory. This may have been -// modified by directives in the directory's build file. -// -// update is true when the build file may be updated. -// -// f is the existing build file in the directory. Will be nil if there -// was no file. -// -// subdirs is a list of base names of subdirectories within dir, not -// including excluded files. -// -// regularFiles is a list of base names of regular files within dir, not -// including excluded files. -// -// genFiles is a list of names of generated files, found by reading -// "out" and "outs" attributes of rules in f. -type WalkFunc func(dir, rel string, c *config.Config, update bool, f *rule.File, subdirs, regularFiles, genFiles []string) - -// Walk traverses the directory tree rooted at c.RepoRoot. Walk visits -// subdirectories in depth-first post-order. -// -// When Walk visits a directory, it lists the files and subdirectories within -// that directory. If a build file is present, Walk reads the build file and -// applies any directives to the configuration (a copy of the parent directory's -// configuration is made, and the copy is modified). After visiting -// subdirectories, the callback wf may be called, depending on the mode. -// -// c is the root configuration to start with. This includes changes made by -// command line flags, but not by the root build file. This configuration -// should not be modified. -// -// cexts is a list of configuration extensions. When visiting a directory, -// before visiting subdirectories, Walk makes a copy of the parent configuration -// and Configure for each extension on the copy. If Walk sees a directive -// that is not listed in KnownDirectives of any extension, an error will -// be logged. -// -// dirs is a list of absolute, canonical file system paths of directories -// to visit. -// -// mode determines whether subdirectories of dirs should be visited recursively, -// when the wf callback should be called, and when the "update" argument -// to the wf callback should be set. -// -// wf is a function that may be called in each directory. -func Walk(c *config.Config, cexts []config.Configurer, dirs []string, mode Mode, wf WalkFunc) { - knownDirectives := make(map[string]bool) - for _, cext := range cexts { - for _, d := range cext.KnownDirectives() { - knownDirectives[d] = true - } - } - - symlinks := symlinkResolver{visited: []string{c.RepoRoot}} - - updateRels := buildUpdateRelMap(c.RepoRoot, dirs) - - var visit func(*config.Config, string, string, bool) - visit = func(c *config.Config, dir, rel string, updateParent bool) { - haveError := false - - // TODO: OPT: ReadDir stats all the files, which is slow. We just care about - // names and modes, so we should use something like - // golang.org/x/tools/internal/fastwalk to speed this up. - files, err := ioutil.ReadDir(dir) - if err != nil { - log.Print(err) - return - } - - f, err := loadBuildFile(c, rel, dir, files) - if err != nil { - log.Print(err) - haveError = true - } - - c = configure(cexts, knownDirectives, c, rel, f) - wc := getWalkConfig(c) - - if wc.isExcluded(rel, ".") { - return - } - - var subdirs, regularFiles []string - for _, fi := range files { - base := fi.Name() - switch { - case base == "" || wc.isExcluded(rel, base): - continue - - case fi.IsDir() || fi.Mode()&os.ModeSymlink != 0 && symlinks.follow(c, dir, rel, base): - subdirs = append(subdirs, base) - - default: - regularFiles = append(regularFiles, base) - } - } - - shouldUpdate := shouldUpdate(rel, mode, updateParent, updateRels) - for _, sub := range subdirs { - if subRel := path.Join(rel, sub); shouldVisit(subRel, mode, updateRels) { - visit(c, filepath.Join(dir, sub), subRel, shouldUpdate) - } - } - - update := !haveError && !wc.ignore && shouldUpdate - if shouldCall(rel, mode, updateRels) { - genFiles := findGenFiles(wc, f) - wf(dir, rel, c, update, f, subdirs, regularFiles, genFiles) - } - } - visit(c, c.RepoRoot, "", false) -} - -// buildUpdateRelMap builds a table of prefixes, used to determine which -// directories to update and visit. -// -// root and dirs must be absolute, canonical file paths. Each entry in dirs -// must be a subdirectory of root. The caller is responsible for checking this. -// -// buildUpdateRelMap returns a map from slash-separated paths relative to the -// root directory ("" for the root itself) to a boolean indicating whether -// the directory should be updated. -func buildUpdateRelMap(root string, dirs []string) map[string]bool { - relMap := make(map[string]bool) - for _, dir := range dirs { - rel, _ := filepath.Rel(root, dir) - rel = filepath.ToSlash(rel) - if rel == "." { - rel = "" - } - - i := 0 - for { - next := strings.IndexByte(rel[i:], '/') + i - if next-i < 0 { - relMap[rel] = true - break - } - prefix := rel[:next] - relMap[prefix] = relMap[prefix] // set to false if not present - i = next + 1 - } - } - return relMap -} - -// shouldCall returns true if Walk should call the callback in the -// directory rel. -func shouldCall(rel string, mode Mode, updateRels map[string]bool) bool { - return mode != UpdateDirsMode || updateRels[rel] -} - -// shouldUpdate returns true if Walk should pass true to the callback's update -// parameter in the directory rel. This indicates the build file should be -// updated. -func shouldUpdate(rel string, mode Mode, updateParent bool, updateRels map[string]bool) bool { - return mode == VisitAllUpdateSubdirsMode && updateParent || updateRels[rel] -} - -// shouldVisit returns true if Walk should visit the subdirectory rel. -func shouldVisit(rel string, mode Mode, updateRels map[string]bool) bool { - if mode != UpdateDirsMode { - return true - } - _, ok := updateRels[rel] - return ok -} - -func loadBuildFile(c *config.Config, pkg, dir string, files []os.FileInfo) (*rule.File, error) { - var err error - readDir := dir - readFiles := files - if c.ReadBuildFilesDir != "" { - readDir = filepath.Join(c.ReadBuildFilesDir, filepath.FromSlash(pkg)) - readFiles, err = ioutil.ReadDir(readDir) - if err != nil { - return nil, err - } - } - path := rule.MatchBuildFileName(readDir, c.ValidBuildFileNames, readFiles) - if path == "" { - return nil, nil - } - return rule.LoadFile(path, pkg) -} - -func configure(cexts []config.Configurer, knownDirectives map[string]bool, c *config.Config, rel string, f *rule.File) *config.Config { - if rel != "" { - c = c.Clone() - } - if f != nil { - for _, d := range f.Directives { - if !knownDirectives[d.Key] { - log.Printf("%s: unknown directive: gazelle:%s", f.Path, d.Key) - } - } - } - for _, cext := range cexts { - cext.Configure(c, rel, f) - } - return c -} - -func findGenFiles(wc *walkConfig, f *rule.File) []string { - if f == nil { - return nil - } - var strs []string - for _, r := range f.Rules { - for _, key := range []string{"out", "outs"} { - if s := r.AttrString(key); s != "" { - strs = append(strs, s) - } else if ss := r.AttrStrings(key); len(ss) > 0 { - strs = append(strs, ss...) - } - } - } - - var genFiles []string - for _, s := range strs { - if !wc.isExcluded(f.Pkg, s) { - genFiles = append(genFiles, s) - } - } - return genFiles -} - -type symlinkResolver struct { - visited []string -} - -// Decide if symlink dir/base should be followed. -func (r *symlinkResolver) follow(c *config.Config, dir, rel, base string) bool { - if dir == c.RepoRoot && strings.HasPrefix(base, "bazel-") { - // Links such as bazel-, bazel-out, bazel-genfiles are created by - // Bazel to point to internal build directories. - return false - } - - // See if the user has explicitly directed us to follow the link. - wc := getWalkConfig(c) - linkRel := path.Join(rel, base) - for _, follow := range wc.follow { - if linkRel == follow { - return true - } - } - - // See if the symlink points to a tree that has been already visited. - fullpath := filepath.Join(dir, base) - dest, err := filepath.EvalSymlinks(fullpath) - if err != nil { - return false - } - if !filepath.IsAbs(dest) { - dest, err = filepath.Abs(filepath.Join(dir, dest)) - if err != nil { - return false - } - } - for _, p := range r.visited { - if pathtools.HasPrefix(dest, p) || pathtools.HasPrefix(p, dest) { - return false - } - } - r.visited = append(r.visited, dest) - stat, err := os.Stat(fullpath) - if err != nil { - return false - } - return stat.IsDir() -} diff --git a/vendor/github.com/bazelbuild/buildtools/CONTRIBUTORS b/vendor/github.com/bazelbuild/buildtools/CONTRIBUTORS deleted file mode 100644 index 2d919a47f9..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/CONTRIBUTORS +++ /dev/null @@ -1,15 +0,0 @@ -# People who have agreed to one of the CLAs and can contribute patches. -# The AUTHORS file lists the copyright holders; this file -# lists people. For example, Google employees are listed here -# but not in AUTHORS, because Google holds the copyright. -# -# https://developers.google.com/open-source/cla/individual -# https://developers.google.com/open-source/cla/corporate -# -# Names should be added to this file as: -# Name -Paul Bethe -Russ Cox -Laurent Le Brun -Justine Alexandra Roberts Tunney -Nilton Volpato \ No newline at end of file diff --git a/vendor/github.com/bazelbuild/buildtools/LICENSE b/vendor/github.com/bazelbuild/buildtools/LICENSE deleted file mode 100644 index 0adcb5d6f5..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2016 Google Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/vendor/github.com/bazelbuild/buildtools/build/BUILD.bazel b/vendor/github.com/bazelbuild/buildtools/build/BUILD.bazel deleted file mode 100644 index 4b5b5f195b..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/build/BUILD.bazel +++ /dev/null @@ -1,19 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "lex.go", - "parse.y.go", - "print.go", - "quote.go", - "rewrite.go", - "rule.go", - "syntax.go", - "walk.go", - ], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/buildtools/build", - importpath = "github.com/bazelbuild/buildtools/build", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/bazelbuild/buildtools/tables:go_default_library"], -) diff --git a/vendor/github.com/bazelbuild/buildtools/build/build_defs.bzl b/vendor/github.com/bazelbuild/buildtools/build/build_defs.bzl deleted file mode 100644 index 91ac9e9825..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/build/build_defs.bzl +++ /dev/null @@ -1,133 +0,0 @@ -"""Provides go_yacc and genfile_check_test - -Copyright 2016 Google Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -""" - -load( - "@io_bazel_rules_go//go/private:providers.bzl", - "GoSource", -) - -_GO_YACC_TOOL = "@org_golang_x_tools//cmd/goyacc" - -def go_yacc(src, out, visibility = None): - """Runs go tool yacc -o $out $src.""" - native.genrule( - name = src + ".go_yacc", - srcs = [src], - outs = [out], - tools = [_GO_YACC_TOOL], - cmd = ("export GOROOT=$$(dirname $(location " + _GO_YACC_TOOL + "))/..;" + - " $(location " + _GO_YACC_TOOL + ") " + - " -o $(location " + out + ") $(SRCS) > /dev/null"), - visibility = visibility, - ) - -def _extract_go_src(ctx): - """Thin rule that exposes the GoSource from a go_library.""" - return [DefaultInfo(files = depset(ctx.attr.library[GoSource].srcs))] - -extract_go_src = rule( - implementation = _extract_go_src, - attrs = { - "library": attr.label( - providers = [GoSource], - ), - }, -) - -def genfile_check_test(src, gen): - """Asserts that any checked-in generated code matches bazel gen.""" - if not src: - fail("src is required", "src") - if not gen: - fail("gen is required", "gen") - native.genrule( - name = src + "_checksh", - outs = [src + "_check.sh"], - cmd = r"""cat >$@ <<'eof' -#!/bin/bash -# Script generated by @com_github_bazelbuild_buildtools//build:build_defs.bzl - -# --- begin runfiles.bash initialization --- -# Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash). -set -euo pipefail -if [[ ! -d "$${RUNFILES_DIR:-/dev/null}" && ! -f "$${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then - if [[ -f "$$0.runfiles_manifest" ]]; then - export RUNFILES_MANIFEST_FILE="$$0.runfiles_manifest" - elif [[ -f "$$0.runfiles/MANIFEST" ]]; then - export RUNFILES_MANIFEST_FILE="$$0.runfiles/MANIFEST" - elif [[ -f "$$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then - export RUNFILES_DIR="$$0.runfiles" - fi -fi -if [[ -f "$${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then - source "$${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash" -elif [[ -f "$${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then - source "$$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \ - "$$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)" -else - echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash" - exit 1 -fi -# --- end runfiles.bash initialization --- - -[[ "$$1" = external/* ]] && F1="$${1#external/}" || F1="$$TEST_WORKSPACE/$$1" -[[ "$$2" = external/* ]] && F2="$${2#external/}" || F2="$$TEST_WORKSPACE/$$2" -F1="$$(rlocation "$$F1")" -F2="$$(rlocation "$$F2")" -diff -q "$$F1" "$$F2" -eof -""", - ) - native.sh_test( - name = src + "_checkshtest", - size = "small", - srcs = [src + "_check.sh"], - deps = ["@bazel_tools//tools/bash/runfiles"], - data = [src, gen], - args = ["$(location " + src + ")", "$(location " + gen + ")"], - ) - - # magic copy rule used to update the checked-in version - native.genrule( - name = src + "_copysh", - srcs = [gen], - outs = [src + "copy.sh"], - cmd = "echo 'cp $${BUILD_WORKSPACE_DIRECTORY}/$(location " + gen + - ") $${BUILD_WORKSPACE_DIRECTORY}/" + native.package_name() + "/" + src + "' > $@", - ) - native.sh_binary( - name = src + "_copy", - srcs = [src + "_copysh"], - data = [gen], - ) - -def go_proto_checkedin_test(src, proto = "go_default_library"): - """Asserts that any checked-in .pb.go code matches bazel gen.""" - genfile = src + "_genfile" - extract_go_src( - name = genfile + "go", - library = proto, - ) - - # TODO(pmbethe09): why is the extra copy needed? - native.genrule( - name = genfile, - srcs = [genfile + "go"], - outs = [genfile + ".go"], - cmd = "cp $< $@", - ) - genfile_check_test(src, genfile) diff --git a/vendor/github.com/bazelbuild/buildtools/build/lex.go b/vendor/github.com/bazelbuild/buildtools/build/lex.go deleted file mode 100644 index e23e3d7b16..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/build/lex.go +++ /dev/null @@ -1,862 +0,0 @@ -/* -Copyright 2016 Google Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -// Lexical scanning for BUILD file parser. - -package build - -import ( - "bytes" - "fmt" - "path/filepath" - "sort" - "strings" - "unicode/utf8" -) - -// FileType represents a type of a file (default (for .bzl files), BUILD, or WORKSPACE). -// Certain formatting or refactoring rules can be applied to several file types, so they support -// bitwise operations: `type1 | type2` can represent a scope (e.g. BUILD and WORKSPACE files) and -// `scope & fileType` can be used to check whether a file type belongs to a scope. -type FileType int - -const ( - // TypeDefault represents general Starlark files - TypeDefault FileType = 1 << iota - // TypeBuild represents BUILD files - TypeBuild - // TypeWorkspace represents WORKSPACE files - TypeWorkspace - // TypeBzl represents .bzl files - TypeBzl -) - -func (t FileType) String() string { - switch t { - case TypeDefault: - return "default" - case TypeBuild: - return "BUILD" - case TypeWorkspace: - return "WORKSPACE" - case TypeBzl: - return ".bzl" - } - return "unknown" -} - -// ParseBuild parses a file, marks it as a BUILD file and returns the corresponding parse tree. -// -// The filename is used only for generating error messages. -func ParseBuild(filename string, data []byte) (*File, error) { - in := newInput(filename, data) - f, err := in.parse() - if f != nil { - f.Type = TypeBuild - } - return f, err -} - -// ParseWorkspace parses a file, marks it as a WORKSPACE file and returns the corresponding parse tree. -// -// The filename is used only for generating error messages. -func ParseWorkspace(filename string, data []byte) (*File, error) { - in := newInput(filename, data) - f, err := in.parse() - if f != nil { - f.Type = TypeWorkspace - } - return f, err -} - -// ParseBzl parses a file, marks it as a .bzl file and returns the corresponding parse tree. -// -// The filename is used only for generating error messages. -func ParseBzl(filename string, data []byte) (*File, error) { - in := newInput(filename, data) - f, err := in.parse() - if f != nil { - f.Type = TypeBzl - } - return f, err -} - -// ParseDefault parses a file, marks it as a generic Starlark file and returns the corresponding parse tree. -// -// The filename is used only for generating error messages. -func ParseDefault(filename string, data []byte) (*File, error) { - in := newInput(filename, data) - f, err := in.parse() - if f != nil { - f.Type = TypeDefault - } - return f, err -} - -func getFileType(filename string) FileType { - if filename == "" { // stdin - return TypeDefault - } - basename := strings.ToLower(filepath.Base(filename)) - if strings.HasSuffix(basename, ".oss") { - basename = basename[:len(basename)-4] - } - ext := filepath.Ext(basename) - switch ext { - case ".bzl": - return TypeBzl - case ".sky": - return TypeDefault - } - base := basename[:len(basename)-len(ext)] - switch { - case ext == ".build" || base == "build": - return TypeBuild - case ext == ".workspace" || base == "workspace": - return TypeWorkspace - } - return TypeDefault -} - -// Parse parses the input data and returns the corresponding parse tree. -// -// Uses the filename to detect the formatting type (build, workspace, or default) and calls -// ParseBuild, ParseWorkspace, or ParseDefault correspondingly. -func Parse(filename string, data []byte) (*File, error) { - switch getFileType(filename) { - case TypeBuild: - return ParseBuild(filename, data) - case TypeWorkspace: - return ParseWorkspace(filename, data) - case TypeBzl: - return ParseBzl(filename, data) - } - return ParseDefault(filename, data) -} - -// ParseError contains information about the error encountered during parsing. -type ParseError struct { - Message string - Filename string - Pos Position -} - -// Error returns a string representation of the parse error. -func (e ParseError) Error() string { - filename := e.Filename - if filename == "" { - filename = "" - } - return fmt.Sprintf("%s:%d:%d: %v", filename, e.Pos.Line, e.Pos.LineRune, e.Message) -} - -// An input represents a single input file being parsed. -type input struct { - // Lexing state. - filename string // name of input file, for errors - complete []byte // entire input - remaining []byte // remaining input - token []byte // token being scanned - lastToken string // most recently returned token, for error messages - pos Position // current input position - lineComments []Comment // accumulated line comments - suffixComments []Comment // accumulated suffix comments - depth int // nesting of [ ] { } ( ) - cleanLine bool // true if the current line only contains whitespace before the current position - indent int // current line indentation in spaces - indents []int // stack of indentation levels in spaces - - // Parser state. - file *File // returned top-level syntax tree - parseError error // error encountered during parsing - - // Comment assignment state. - pre []Expr // all expressions, in preorder traversal - post []Expr // all expressions, in postorder traversal -} - -func newInput(filename string, data []byte) *input { - // The syntax requires that each simple statement ends with '\n', however it's optional at EOF. - // If `data` doesn't end with '\n' we add it here to keep parser simple. - // It shouldn't affect neither the parsed tree nor its formatting. - data = append(data, '\n') - - return &input{ - filename: filename, - complete: data, - remaining: data, - pos: Position{Line: 1, LineRune: 1, Byte: 0}, - cleanLine: true, - indents: []int{0}, - } -} - -func (in *input) currentIndent() int { - return in.indents[len(in.indents)-1] -} - -// parse parses the input file. -func (in *input) parse() (f *File, err error) { - // The parser panics for both routine errors like syntax errors - // and for programmer bugs like array index errors. - // Turn both into error returns. Catching bug panics is - // especially important when processing many files. - defer func() { - if e := recover(); e != nil { - if e == in.parseError { - err = in.parseError - } else { - err = ParseError{Message: fmt.Sprintf("internal error: %v", e), Filename: in.filename, Pos: in.pos} - } - } - }() - - // Invoke the parser generated from parse.y. - yyParse(in) - if in.parseError != nil { - return nil, in.parseError - } - in.file.Path = in.filename - - // Assign comments to nearby syntax. - in.assignComments() - - return in.file, nil -} - -// Error is called to report an error. -// When called by the generated code s is always "syntax error". -// Error does not return: it panics. -func (in *input) Error(s string) { - if s == "syntax error" && in.lastToken != "" { - s += " near " + in.lastToken - } - in.parseError = ParseError{Message: s, Filename: in.filename, Pos: in.pos} - panic(in.parseError) -} - -// eof reports whether the input has reached end of file. -func (in *input) eof() bool { - return len(in.remaining) == 0 -} - -// peekRune returns the next rune in the input without consuming it. -func (in *input) peekRune() int { - if len(in.remaining) == 0 { - return 0 - } - r, _ := utf8.DecodeRune(in.remaining) - return int(r) -} - -// readRune consumes and returns the next rune in the input. -func (in *input) readRune() int { - if len(in.remaining) == 0 { - in.Error("internal lexer error: readRune at EOF") - } - r, size := utf8.DecodeRune(in.remaining) - in.remaining = in.remaining[size:] - if r == '\n' { - in.pos.Line++ - in.pos.LineRune = 1 - } else { - in.pos.LineRune++ - } - in.pos.Byte += size - return int(r) -} - -// startToken marks the beginning of the next input token. -// It must be followed by a call to endToken, once the token has -// been consumed using readRune. -func (in *input) startToken(val *yySymType) { - in.token = in.remaining - val.tok = "" - val.pos = in.pos -} - -// yySymType (used in the next few functions) is defined by the -// generated parser. It is a struct containing all the fields listed -// in parse.y's %union [sic] section. - -// endToken marks the end of an input token. -// It records the actual token string in val.tok if the caller -// has not done that already. -func (in *input) endToken(val *yySymType) { - if val.tok == "" { - tok := string(in.token[:len(in.token)-len(in.remaining)]) - val.tok = tok - in.lastToken = val.tok - } -} - -// Lex is called from the generated parser to obtain the next input token. -// It returns the token value (either a rune like '+' or a symbolic token _FOR) -// and sets val to the data associated with the token. -// -// For all our input tokens, the associated data is -// val.Pos (the position where the token begins) -// and val.Token (the input string corresponding to the token). -func (in *input) Lex(val *yySymType) int { - // Skip past spaces, stopping at non-space or EOF. - countNL := 0 // number of newlines we've skipped past - for !in.eof() { - // Skip over spaces. Count newlines so we can give the parser - // information about where top-level blank lines are, - // for top-level comment assignment. - c := in.peekRune() - if c == ' ' || c == '\t' || c == '\r' || c == '\n' { - if c == '\n' { - in.indent = 0 - in.cleanLine = true - if in.depth == 0 { - // Not in a statememt. Tell parser about top-level blank line. - in.startToken(val) - in.readRune() - in.endToken(val) - return '\n' - } - countNL++ - } else if c == ' ' && in.cleanLine { - in.indent++ - } - in.readRune() - continue - } - - // Comment runs to end of line. - if c == '#' { - // If a line contains just a comment its indentation level doesn't matter. - // Reset it to zero. - in.indent = 0 - isLineComment := in.cleanLine - in.cleanLine = true - - // Is this comment the only thing on its line? - // Find the last \n before this # and see if it's all - // spaces from there to here. - // If it's a suffix comment but the last non-space symbol before - // it is one of (, [, or {, or it's a suffix comment to "):" - // (e.g. trailing closing bracket or a function definition), - // treat it as a line comment that should be - // put inside the corresponding block. - i := bytes.LastIndex(in.complete[:in.pos.Byte], []byte("\n")) - prefix := bytes.TrimSpace(in.complete[i+1 : in.pos.Byte]) - prefix = bytes.Replace(prefix, []byte{' '}, []byte{}, -1) - isSuffix := true - if len(prefix) == 0 || - (len(prefix) == 2 && prefix[0] == ')' && prefix[1] == ':') || - prefix[len(prefix)-1] == '[' || - prefix[len(prefix)-1] == '(' || - prefix[len(prefix)-1] == '{' { - isSuffix = false - } - - // Consume comment without the \n it ends with. - in.startToken(val) - for len(in.remaining) > 0 && in.peekRune() != '\n' { - in.readRune() - } - - in.endToken(val) - - val.tok = strings.TrimRight(val.tok, "\n") - in.lastToken = "comment" - - // If we are at top level (not in a rule), hand the comment to - // the parser as a _COMMENT token. The grammar is written - // to handle top-level comments itself. - if in.depth == 0 && isLineComment { - // Not in a statement. Tell parser about top-level comment. - return _COMMENT - } - - // Otherwise, save comment for later attachment to syntax tree. - if countNL > 1 { - in.lineComments = append(in.lineComments, Comment{val.pos, ""}) - } - if isSuffix { - in.suffixComments = append(in.suffixComments, Comment{val.pos, val.tok}) - } else { - in.lineComments = append(in.lineComments, Comment{val.pos, val.tok}) - } - countNL = 0 - continue - } - - if c == '\\' && len(in.remaining) >= 2 && in.remaining[1] == '\n' { - // We can ignore a trailing \ at end of line together with the \n. - in.readRune() - in.readRune() - continue - } - - // Found non-space non-comment. - break - } - - // Check for changes in indentation - // Skip if we're inside a statement, or if there were non-space - // characters before in the current line. - if in.depth == 0 && in.cleanLine { - if in.indent > in.currentIndent() { - // A new indentation block starts - in.indents = append(in.indents, in.indent) - in.lastToken = "indent" - in.cleanLine = false - return _INDENT - } else if in.indent < in.currentIndent() { - // An indentation block ends - in.indents = in.indents[:len(in.indents)-1] - - // It's a syntax error if the current line indentation level in now greater than - // currentIndent(), should be either equal (a parent block continues) or still less - // (need to unindent more). - if in.indent > in.currentIndent() { - in.pos = val.pos - in.Error("unexpected indentation") - } - in.lastToken = "unindent" - return _UNINDENT - } - } - - in.cleanLine = false - - // If the file ends with an indented block, return the corresponding amounts of unindents. - if in.eof() && in.currentIndent() > 0 { - in.indents = in.indents[:len(in.indents)-1] - in.lastToken = "unindent" - return _UNINDENT - } - - // Found the beginning of the next token. - in.startToken(val) - defer in.endToken(val) - - // End of file. - if in.eof() { - in.lastToken = "EOF" - return _EOF - } - - // Punctuation tokens. - switch c := in.peekRune(); c { - case '[', '(', '{': - in.depth++ - in.readRune() - return c - - case ']', ')', '}': - in.depth-- - in.readRune() - return c - - case '.', ':', ';', ',': // single-char tokens - in.readRune() - return c - - case '<', '>', '=', '!', '+', '-', '*', '/', '%', '|', '&', '~', '^': // possibly followed by = - in.readRune() - - if c == '~' { - // unary bitwise not, shouldn't be followed by anything - return c - } - - if c == '*' && in.peekRune() == '*' { - // double asterisk - in.readRune() - return _STAR_STAR - } - - if c == in.peekRune() { - switch c { - case '/': - // integer division - in.readRune() - c = _INT_DIV - case '<': - // left shift - in.readRune() - c = _BIT_LSH - case '>': - // right shift - in.readRune() - c = _BIT_RSH - } - } - - if in.peekRune() == '=' { - in.readRune() - switch c { - case '<': - return _LE - case '>': - return _GE - case '=': - return _EQ - case '!': - return _NE - default: - return _AUGM - } - } - return c - - case 'r': // possible beginning of raw quoted string - if len(in.remaining) < 2 || in.remaining[1] != '"' && in.remaining[1] != '\'' { - break - } - in.readRune() - c = in.peekRune() - fallthrough - - case '"', '\'': // quoted string - quote := c - if len(in.remaining) >= 3 && in.remaining[0] == byte(quote) && in.remaining[1] == byte(quote) && in.remaining[2] == byte(quote) { - // Triple-quoted string. - in.readRune() - in.readRune() - in.readRune() - var c1, c2, c3 int - for { - if in.eof() { - in.pos = val.pos - in.Error("unexpected EOF in string") - } - c1, c2, c3 = c2, c3, in.readRune() - if c1 == quote && c2 == quote && c3 == quote { - break - } - if c3 == '\\' { - if in.eof() { - in.pos = val.pos - in.Error("unexpected EOF in string") - } - in.readRune() - } - } - } else { - in.readRune() - for { - if in.eof() { - in.pos = val.pos - in.Error("unexpected EOF in string") - } - if in.peekRune() == '\n' { - in.Error("unexpected newline in string") - } - c := in.readRune() - if c == quote { - break - } - if c == '\\' { - if in.eof() { - in.pos = val.pos - in.Error("unexpected EOF in string") - } - in.readRune() - } - } - } - in.endToken(val) - s, triple, err := Unquote(val.tok) - if err != nil { - in.Error(fmt.Sprint(err)) - } - val.str = s - val.triple = triple - return _STRING - } - - // Checked all punctuation. Must be identifier token. - if c := in.peekRune(); !isIdent(c) { - in.Error(fmt.Sprintf("unexpected input character %#q", c)) - } - - // Scan over alphanumeric identifier. - for { - c := in.peekRune() - if !isIdent(c) { - break - } - in.readRune() - } - - // Call endToken to set val.tok to identifier we just scanned, - // so we can look to see if val.tok is a keyword. - in.endToken(val) - if k := keywordToken[val.tok]; k != 0 { - return k - } - switch val.tok { - case "pass": - return _PASS - case "break": - return _BREAK - case "continue": - return _CONTINUE - } - if len(val.tok) > 0 && val.tok[0] >= '0' && val.tok[0] <= '9' { - return _NUMBER - } - return _IDENT -} - -// isIdent reports whether c is an identifier rune. -// We treat all non-ASCII runes as identifier runes. -func isIdent(c int) bool { - return '0' <= c && c <= '9' || - 'A' <= c && c <= 'Z' || - 'a' <= c && c <= 'z' || - c == '_' || - c >= 0x80 -} - -// keywordToken records the special tokens for -// strings that should not be treated as ordinary identifiers. -var keywordToken = map[string]int{ - "and": _AND, - "for": _FOR, - "if": _IF, - "else": _ELSE, - "elif": _ELIF, - "in": _IN, - "is": _IS, - "lambda": _LAMBDA, - "load": _LOAD, - "not": _NOT, - "or": _OR, - "def": _DEF, - "return": _RETURN, -} - -// Comment assignment. -// We build two lists of all subexpressions, preorder and postorder. -// The preorder list is ordered by start location, with outer expressions first. -// The postorder list is ordered by end location, with outer expressions last. -// We use the preorder list to assign each whole-line comment to the syntax -// immediately following it, and we use the postorder list to assign each -// end-of-line comment to the syntax immediately preceding it. - -// order walks the expression adding it and its subexpressions to the -// preorder and postorder lists. -func (in *input) order(v Expr) { - if v != nil { - in.pre = append(in.pre, v) - } - switch v := v.(type) { - default: - panic(fmt.Errorf("order: unexpected type %T", v)) - case nil: - // nothing - case *End: - // nothing - case *File: - for _, stmt := range v.Stmt { - in.order(stmt) - } - case *CommentBlock: - // nothing - case *CallExpr: - in.order(v.X) - for _, x := range v.List { - in.order(x) - } - in.order(&v.End) - case *LoadStmt: - in.order(v.Module) - for i := range v.From { - in.order(v.To[i]) - in.order(v.From[i]) - } - in.order(&v.Rparen) - case *LiteralExpr: - // nothing - case *StringExpr: - // nothing - case *Ident: - // nothing - case *BranchStmt: - // nothing - case *DotExpr: - in.order(v.X) - case *ListExpr: - for _, x := range v.List { - in.order(x) - } - in.order(&v.End) - case *Comprehension: - in.order(v.Body) - for _, c := range v.Clauses { - in.order(c) - } - in.order(&v.End) - case *SetExpr: - for _, x := range v.List { - in.order(x) - } - in.order(&v.End) - case *ForClause: - in.order(v.Vars) - in.order(v.X) - case *IfClause: - in.order(v.Cond) - case *KeyValueExpr: - in.order(v.Key) - in.order(v.Value) - case *DictExpr: - for _, x := range v.List { - in.order(x) - } - in.order(&v.End) - case *TupleExpr: - for _, x := range v.List { - in.order(x) - } - if !v.NoBrackets { - in.order(&v.End) - } - case *UnaryExpr: - in.order(v.X) - case *BinaryExpr: - in.order(v.X) - in.order(v.Y) - case *AssignExpr: - in.order(v.LHS) - in.order(v.RHS) - case *ConditionalExpr: - in.order(v.Then) - in.order(v.Test) - in.order(v.Else) - case *ParenExpr: - in.order(v.X) - in.order(&v.End) - case *SliceExpr: - in.order(v.X) - in.order(v.From) - in.order(v.To) - in.order(v.Step) - case *IndexExpr: - in.order(v.X) - in.order(v.Y) - case *LambdaExpr: - for _, param := range v.Params { - in.order(param) - } - for _, expr := range v.Body { - in.order(expr) - } - case *ReturnStmt: - if v.Result != nil { - in.order(v.Result) - } - case *DefStmt: - for _, x := range v.Params { - in.order(x) - } - for _, x := range v.Body { - in.order(x) - } - case *ForStmt: - in.order(v.Vars) - in.order(v.X) - for _, x := range v.Body { - in.order(x) - } - case *IfStmt: - in.order(v.Cond) - for _, s := range v.True { - in.order(s) - } - if len(v.False) > 0 { - in.order(&v.ElsePos) - } - for _, s := range v.False { - in.order(s) - } - } - if v != nil { - in.post = append(in.post, v) - } -} - -// assignComments attaches comments to nearby syntax. -func (in *input) assignComments() { - // Generate preorder and postorder lists. - in.order(in.file) - in.assignSuffixComments() - in.assignLineComments() -} - -func (in *input) assignSuffixComments() { - // Assign suffix comments to syntax immediately before. - suffix := in.suffixComments - for i := len(in.post) - 1; i >= 0; i-- { - x := in.post[i] - - // Do not assign suffix comments to file or to block statements - switch x.(type) { - case *File, *DefStmt, *IfStmt, *ForStmt, *CommentBlock: - continue - } - - _, end := x.Span() - xcom := x.Comment() - for len(suffix) > 0 && end.Byte <= suffix[len(suffix)-1].Start.Byte { - xcom.Suffix = append(xcom.Suffix, suffix[len(suffix)-1]) - suffix = suffix[:len(suffix)-1] - } - } - - // We assigned suffix comments in reverse. - // If multiple suffix comments were appended to the same - // expression node, they are now in reverse. Fix that. - for _, x := range in.post { - reverseComments(x.Comment().Suffix) - } - - // Remaining suffix comments go at beginning of file. - in.file.Before = append(in.file.Before, suffix...) -} - -func (in *input) assignLineComments() { - // Assign line comments to syntax immediately following. - line := in.lineComments - for _, x := range in.pre { - start, _ := x.Span() - xcom := x.Comment() - for len(line) > 0 && start.Byte >= line[0].Start.Byte { - xcom.Before = append(xcom.Before, line[0]) - line = line[1:] - } - // Line comments can be sorted in a wrong order because they get assigned from different - // parts of the lexer and the parser. Restore the original order. - sort.SliceStable(xcom.Before, func(i, j int) bool { - return xcom.Before[i].Start.Byte < xcom.Before[j].Start.Byte - }) - } - - // Remaining line comments go at end of file. - in.file.After = append(in.file.After, line...) -} - -// reverseComments reverses the []Comment list. -func reverseComments(list []Comment) { - for i, j := 0, len(list)-1; i < j; i, j = i+1, j-1 { - list[i], list[j] = list[j], list[i] - } -} diff --git a/vendor/github.com/bazelbuild/buildtools/build/parse.y b/vendor/github.com/bazelbuild/buildtools/build/parse.y deleted file mode 100644 index aa7590ebe5..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/build/parse.y +++ /dev/null @@ -1,1217 +0,0 @@ -// BUILD file parser. - -// This is a yacc grammar. Its lexer is in lex.go. -// -// For a good introduction to writing yacc grammars, see -// Kernighan and Pike's book The Unix Programming Environment. -// -// The definitive yacc manual is -// Stephen C. Johnson and Ravi Sethi, "Yacc: A Parser Generator", -// online at http://plan9.bell-labs.com/sys/doc/yacc.pdf. - -%{ -package build -%} - -// The generated parser puts these fields in a struct named yySymType. -// (The name %union is historical, but it is inaccurate for Go.) -%union { - // input tokens - tok string // raw input syntax - str string // decoding of quoted string - pos Position // position of token - triple bool // was string triple quoted? - - // partial syntax trees - expr Expr - exprs []Expr - string *StringExpr - strings []*StringExpr - ifstmt *IfStmt - loadarg *struct{from Ident; to Ident} - loadargs []*struct{from Ident; to Ident} - - // supporting information - comma Position // position of trailing comma in list, if present - lastStmt Expr // most recent rule, to attach line comments to -} - -// These declarations set the type for a $ reference ($$, $1, $2, ...) -// based on the kind of symbol it refers to. Other fields can be referred -// to explicitly, as in $1. -// -// %token is for input tokens generated by the lexer. -// %type is for higher-level grammar rules defined here. -// -// It is possible to put multiple tokens per line, but it is easier to -// keep ordered using a sparser one-per-line list. - -%token '%' -%token '(' -%token ')' -%token '*' -%token '+' -%token ',' -%token '-' -%token '.' -%token '/' -%token ':' -%token '<' -%token '=' -%token '>' -%token '[' -%token ']' -%token '{' -%token '}' -%token '|' -%token '&' -%token '^' -%token '~' - -// By convention, yacc token names are all caps. -// However, we do not want to export them from the Go package -// we are creating, so prefix them all with underscores. - -%token _AUGM // augmented assignment -%token _AND // keyword and -%token _COMMENT // top-level # comment -%token _EOF // end of file -%token _EQ // operator == -%token _FOR // keyword for -%token _GE // operator >= -%token _IDENT // non-keyword identifier -%token _NUMBER // number -%token _IF // keyword if -%token _ELSE // keyword else -%token _ELIF // keyword elif -%token _IN // keyword in -%token _IS // keyword is -%token _LAMBDA // keyword lambda -%token _LOAD // keyword load -%token _LE // operator <= -%token _NE // operator != -%token _STAR_STAR // operator ** -%token _INT_DIV // operator // -%token _BIT_LSH // bitwise operator << -%token _BIT_RSH // bitwise operator >> -%token _NOT // keyword not -%token _OR // keyword or -%token _STRING // quoted string -%token _DEF // keyword def -%token _RETURN // keyword return -%token _PASS // keyword pass -%token _BREAK // keyword break -%token _CONTINUE // keyword continue -%token _INDENT // indentation -%token _UNINDENT // unindentation - -%type comma_opt -%type argument -%type arguments -%type arguments_opt -%type parameter -%type parameters -%type parameters_opt -%type test -%type test_opt -%type tests_opt -%type primary_expr -%type expr -%type expr_opt -%type tests -%type exprs -%type exprs_opt -%type loop_vars -%type for_clause -%type for_clause_with_if_clauses_opt -%type for_clauses_with_if_clauses_opt -%type ident -%type number -%type stmts -%type stmt // a simple_stmt or a for/if/def block -%type block_stmt // a single for/if/def statement -%type if_else_block // a complete if-elif-else block -%type if_chain // an elif-elif-else chain -%type elif // `elif` or `else if` token(s) -%type simple_stmt // One or many small_stmts on one line, e.g. 'a = f(x); return str(a)' -%type small_stmt // A single statement, e.g. 'a = f(x)' -%type small_stmts_continuation // A sequence of `';' small_stmt` -%type keyvalue -%type keyvalues -%type keyvalues_no_comma -%type string -%type strings -%type suite -%type comments -%type load_argument -%type load_arguments - -// Operator precedence. -// Operators listed lower in the table bind tighter. - -// We tag rules with this fake, low precedence to indicate -// that when the rule is involved in a shift/reduce -// conflict, we prefer that the parser shift (try for a longer parse). -// Shifting is the default resolution anyway, but stating it explicitly -// silences yacc's warning for that specific case. -%left ShiftInstead - -%left '\n' -%left _ASSERT -// '=' and augmented assignments have the lowest precedence -// e.g. "x = a if c > 0 else 'bar'" -// followed by -// 'if' and 'else' which have lower precedence than all other operators. -// e.g. "a, b if c > 0 else 'foo'" is either a tuple of (a,b) or 'foo' -// and not a tuple of "(a, (b if ... ))" -%left '=' _AUGM -%left _IF _ELSE _ELIF -%left ',' -%left ':' -%left _IS -%left _OR -%left _AND -%left '<' '>' _EQ _NE _LE _GE _NOT _IN -%left '|' -%left '^' -%left '&' -%left _BIT_LSH _BIT_RSH -%left '+' '-' -%left '*' '/' '%' _INT_DIV -%left '.' '[' '(' -%right _UNARY -%left _STRING - -%% - -// Grammar rules. -// -// A note on names: if foo is a rule, then foos is a sequence of foos -// (with interleaved commas or other syntax as appropriate) -// and foo_opt is an optional foo. - -file: - stmts _EOF - { - yylex.(*input).file = &File{Stmt: $1} - return 0 - } - -suite: - '\n' comments _INDENT stmts _UNINDENT - { - statements := $4 - if $2 != nil { - // $2 can only contain *CommentBlock objects, each of them contains a non-empty After slice - cb := $2[len($2)-1].(*CommentBlock) - // $4 can't be empty and can't start with a comment - stmt := $4[0] - start, _ := stmt.Span() - if start.Line - cb.After[len(cb.After)-1].Start.Line == 1 { - // The first statement of $4 starts on the next line after the last comment of $2. - // Attach the last comment to the first statement - stmt.Comment().Before = cb.After - $2 = $2[:len($2)-1] - } - statements = append($2, $4...) - } - $$ = statements - $$ = $4 - } -| simple_stmt linebreaks_opt - { - $$ = $1 - } - -linebreaks_opt: -| linebreaks_opt '\n' - -comments: - { - $$ = nil - $$ = nil - } -| comments _COMMENT '\n' - { - $$ = $1 - $$ = $1 - if $$ == nil { - cb := &CommentBlock{Start: $2} - $$ = append($$, cb) - $$ = cb - } - com := $$.Comment() - com.After = append(com.After, Comment{Start: $2, Token: $2}) - } -| comments '\n' - { - $$ = $1 - $$ = nil - } - -stmts: - { - $$ = nil - $$ = nil - } -| stmts stmt - { - // If this statement follows a comment block, - // attach the comments to the statement. - if cb, ok := $1.(*CommentBlock); ok { - $$ = append($1[:len($1)-1], $2...) - $2[0].Comment().Before = cb.After - $$ = $2 - break - } - - // Otherwise add to list. - $$ = append($1, $2...) - $$ = $2 - - // Consider this input: - // - // foo() - // # bar - // baz() - // - // If we've just parsed baz(), the # bar is attached to - // foo() as an After comment. Make it a Before comment - // for baz() instead. - if x := $1; x != nil { - com := x.Comment() - // stmt is never empty - $2[0].Comment().Before = com.After - com.After = nil - } - } -| stmts '\n' - { - // Blank line; sever last rule from future comments. - $$ = $1 - $$ = nil - } -| stmts _COMMENT '\n' - { - $$ = $1 - $$ = $1 - if $$ == nil { - cb := &CommentBlock{Start: $2} - $$ = append($$, cb) - $$ = cb - } - com := $$.Comment() - com.After = append(com.After, Comment{Start: $2, Token: $2}) - } - -stmt: - simple_stmt - { - $$ = $1 - $$ = $1[len($1)-1] - } -| block_stmt - { - $$ = []Expr{$1} - $$ = $1 - if cbs := extractTrailingComments($1); len(cbs) > 0 { - $$ = append($$, cbs...) - $$ = cbs[len(cbs)-1] - if $1 == nil { - $$ = nil - } - } - } - -block_stmt: - _DEF _IDENT '(' parameters_opt ')' ':' suite - { - $$ = &DefStmt{ - Function: Function{ - StartPos: $1, - Params: $4, - Body: $7, - }, - Name: $2, - ColonPos: $6, - ForceCompact: forceCompact($3, $4, $5), - ForceMultiLine: forceMultiLine($3, $4, $5), - } - $$ = $7 - } -| _FOR loop_vars _IN expr ':' suite - { - $$ = &ForStmt{ - For: $1, - Vars: $2, - X: $4, - Body: $6, - } - $$ = $6 - } -| if_else_block - { - $$ = $1 - $$ = $1 - } - -// One or several if-elif-elif statements -if_chain: - _IF expr ':' suite - { - $$ = &IfStmt{ - If: $1, - Cond: $2, - True: $4, - } - $$ = $4 - } -| if_chain elif expr ':' suite - { - $$ = $1 - inner := $1 - for len(inner.False) == 1 { - inner = inner.False[0].(*IfStmt) - } - inner.ElsePos = End{Pos: $2} - inner.False = []Expr{ - &IfStmt{ - If: $2, - Cond: $3, - True: $5, - }, - } - $$ = $5 - } - -// A complete if-elif-elif-else chain -if_else_block: - if_chain -| if_chain _ELSE ':' suite - { - $$ = $1 - inner := $1 - for len(inner.False) == 1 { - inner = inner.False[0].(*IfStmt) - } - inner.ElsePos = End{Pos: $2} - inner.False = $4 - $$ = $4 - } - -elif: - _ELSE _IF -| _ELIF - -simple_stmt: - small_stmt small_stmts_continuation semi_opt '\n' - { - $$ = append([]Expr{$1}, $2...) - $$ = $$[len($$)-1] - } - -small_stmts_continuation: - { - $$ = []Expr{} - } -| small_stmts_continuation ';' small_stmt - { - $$ = append($1, $3) - } - -small_stmt: - expr %prec ShiftInstead -| _RETURN expr - { - $$ = &ReturnStmt{ - Return: $1, - Result: $2, - } - } -| _RETURN - { - $$ = &ReturnStmt{ - Return: $1, - } - } -| expr '=' expr { $$ = binary($1, $2, $2, $3) } -| expr _AUGM expr { $$ = binary($1, $2, $2, $3) } -| _PASS - { - $$ = &BranchStmt{ - Token: $1, - TokenPos: $1, - } - } -| _BREAK - { - $$ = &BranchStmt{ - Token: $1, - TokenPos: $1, - } - } -| _CONTINUE - { - $$ = &BranchStmt{ - Token: $1, - TokenPos: $1, - } - } - -semi_opt: -| ';' - -primary_expr: - ident -| number -| primary_expr '.' _IDENT - { - $$ = &DotExpr{ - X: $1, - Dot: $2, - NamePos: $3, - Name: $3, - } - } -| _LOAD '(' string ',' load_arguments comma_opt ')' - { - load := &LoadStmt{ - Load: $1, - Module: $3, - Rparen: End{Pos: $7}, - ForceCompact: $1.Line == $7.Line, - } - for _, arg := range $5 { - load.From = append(load.From, &arg.from) - load.To = append(load.To, &arg.to) - } - $$ = load - } -| primary_expr '(' arguments_opt ')' - { - $$ = &CallExpr{ - X: $1, - ListStart: $2, - List: $3, - End: End{Pos: $4}, - ForceCompact: forceCompact($2, $3, $4), - ForceMultiLine: forceMultiLine($2, $3, $4), - } - } -| primary_expr '[' expr ']' - { - $$ = &IndexExpr{ - X: $1, - IndexStart: $2, - Y: $3, - End: $4, - } - } -| primary_expr '[' expr_opt ':' test_opt ']' - { - $$ = &SliceExpr{ - X: $1, - SliceStart: $2, - From: $3, - FirstColon: $4, - To: $5, - End: $6, - } - } -| primary_expr '[' expr_opt ':' test_opt ':' test_opt ']' - { - $$ = &SliceExpr{ - X: $1, - SliceStart: $2, - From: $3, - FirstColon: $4, - To: $5, - SecondColon: $6, - Step: $7, - End: $8, - } - } -| strings %prec ShiftInstead - { - if len($1) == 1 { - $$ = $1[0] - break - } - $$ = $1[0] - for _, x := range $1[1:] { - _, end := $$.Span() - $$ = binary($$, end, "+", x) - } - } -| '[' tests_opt ']' - { - $$ = &ListExpr{ - Start: $1, - List: $2, - End: End{Pos: $3}, - ForceMultiLine: forceMultiLine($1, $2, $3), - } - } -| '[' test for_clauses_with_if_clauses_opt ']' - { - $$ = &Comprehension{ - Curly: false, - Lbrack: $1, - Body: $2, - Clauses: $3, - End: End{Pos: $4}, - ForceMultiLine: forceMultiLineComprehension($1, $2, $3, $4), - } - } -| '{' keyvalue for_clauses_with_if_clauses_opt '}' - { - $$ = &Comprehension{ - Curly: true, - Lbrack: $1, - Body: $2, - Clauses: $3, - End: End{Pos: $4}, - ForceMultiLine: forceMultiLineComprehension($1, $2, $3, $4), - } - } -| '{' keyvalues '}' - { - $$ = &DictExpr{ - Start: $1, - List: $2, - End: End{Pos: $3}, - ForceMultiLine: forceMultiLine($1, $2, $3), - } - } -| '{' tests comma_opt '}' // TODO: remove, not supported - { - $$ = &SetExpr{ - Start: $1, - List: $2, - End: End{Pos: $4}, - ForceMultiLine: forceMultiLine($1, $2, $4), - } - } -| '(' tests_opt ')' - { - if len($2) == 1 && $2.Line == 0 { - // Just a parenthesized expression, not a tuple. - $$ = &ParenExpr{ - Start: $1, - X: $2[0], - End: End{Pos: $3}, - ForceMultiLine: forceMultiLine($1, $2, $3), - } - } else { - $$ = &TupleExpr{ - Start: $1, - List: $2, - End: End{Pos: $3}, - ForceCompact: forceCompact($1, $2, $3), - ForceMultiLine: forceMultiLine($1, $2, $3), - } - } - } - -arguments_opt: - { - $$ = nil - } -| arguments comma_opt - { - $$ = $1 - } - -arguments: - argument - { - $$ = []Expr{$1} - } -| arguments ',' argument - { - $$ = append($1, $3) - } - -argument: - test -| ident '=' test - { - $$ = binary($1, $2, $2, $3) - } -| '*' test - { - $$ = unary($1, $1, $2) - } -| _STAR_STAR test - { - $$ = unary($1, $1, $2) - } - -load_arguments: - load_argument { - $$ = []*struct{from Ident; to Ident}{$1} - } -| load_arguments ',' load_argument - { - $1 = append($1, $3) - $$ = $1 - } - -load_argument: - string { - start := $1.Start.add("'") - if $1.TripleQuote { - start = start.add("''") - } - $$ = &struct{from Ident; to Ident}{ - from: Ident{ - Name: $1.Value, - NamePos: start, - }, - to: Ident{ - Name: $1.Value, - NamePos: start, - }, - } - } -| ident '=' string - { - start := $3.Start.add("'") - if $3.TripleQuote { - start = start.add("''") - } - $$ = &struct{from Ident; to Ident}{ - from: Ident{ - Name: $3.Value, - NamePos: start, - }, - to: *$1.(*Ident), - } - } - -parameters_opt: - { - $$ = nil - } -| parameters comma_opt - { - $$ = $1 - } - -parameters: - parameter - { - $$ = []Expr{$1} - } -| parameters ',' parameter - { - $$ = append($1, $3) - } - -parameter: - ident -| ident '=' test - { - $$ = binary($1, $2, $2, $3) - } -| '*' ident - { - $$ = unary($1, $1, $2) - } -| '*' - { - $$ = unary($1, $1, nil) - } -| _STAR_STAR ident - { - $$ = unary($1, $1, $2) - } - -expr: - test -| expr ',' test - { - tuple, ok := $1.(*TupleExpr) - if !ok || !tuple.NoBrackets { - tuple = &TupleExpr{ - List: []Expr{$1}, - NoBrackets: true, - ForceCompact: true, - ForceMultiLine: false, - } - } - tuple.List = append(tuple.List, $3) - $$ = tuple - } - -expr_opt: - { - $$ = nil - } -| expr - -exprs: - expr - { - $$ = []Expr{$1} - } -| exprs ',' expr - { - $$ = append($1, $3) - } - -exprs_opt: - { - $$ = nil - } -| exprs comma_opt - { - $$ = $1 - } - -test: - primary_expr -| _LAMBDA exprs_opt ':' expr // TODO: remove, not supported - { - $$ = &LambdaExpr{ - Function: Function{ - StartPos: $1, - Params: $2, - Body: []Expr{$4}, - }, - } - } -| _NOT test %prec _UNARY { $$ = unary($1, $1, $2) } -| '-' test %prec _UNARY { $$ = unary($1, $1, $2) } -| '+' test %prec _UNARY { $$ = unary($1, $1, $2) } -| '~' test %prec _UNARY { $$ = unary($1, $1, $2) } -| test '*' test { $$ = binary($1, $2, $2, $3) } -| test '%' test { $$ = binary($1, $2, $2, $3) } -| test '/' test { $$ = binary($1, $2, $2, $3) } -| test _INT_DIV test { $$ = binary($1, $2, $2, $3) } -| test '+' test { $$ = binary($1, $2, $2, $3) } -| test '-' test { $$ = binary($1, $2, $2, $3) } -| test '<' test { $$ = binary($1, $2, $2, $3) } -| test '>' test { $$ = binary($1, $2, $2, $3) } -| test _EQ test { $$ = binary($1, $2, $2, $3) } -| test _LE test { $$ = binary($1, $2, $2, $3) } -| test _NE test { $$ = binary($1, $2, $2, $3) } -| test _GE test { $$ = binary($1, $2, $2, $3) } -| test _IN test { $$ = binary($1, $2, $2, $3) } -| test _NOT _IN test { $$ = binary($1, $2, "not in", $4) } -| test _OR test { $$ = binary($1, $2, $2, $3) } -| test _AND test { $$ = binary($1, $2, $2, $3) } -| test '|' test { $$ = binary($1, $2, $2, $3) } -| test '&' test { $$ = binary($1, $2, $2, $3) } -| test '^' test { $$ = binary($1, $2, $2, $3) } -| test _BIT_LSH test { $$ = binary($1, $2, $2, $3) } -| test _BIT_RSH test { $$ = binary($1, $2, $2, $3) } -| test _IS test - { - if b, ok := $3.(*UnaryExpr); ok && b.Op == "not" { - $$ = binary($1, $2, "is not", b.X) - } else { - $$ = binary($1, $2, $2, $3) - } - } -| test _IF test _ELSE test - { - $$ = &ConditionalExpr{ - Then: $1, - IfStart: $2, - Test: $3, - ElseStart: $4, - Else: $5, - } - } - -tests: - test - { - $$ = []Expr{$1} - } -| tests ',' test - { - $$ = append($1, $3) - } - -test_opt: - { - $$ = nil - } -| test - -tests_opt: - { - $$, $$ = nil, Position{} - } -| tests comma_opt - { - $$, $$ = $1, $2 - } - -// comma_opt is an optional comma. If the comma is present, -// the rule's value is the position of the comma. Otherwise -// the rule's value is the zero position. Tracking this -// lets us distinguish (x) and (x,). -comma_opt: - { - $$ = Position{} - } -| ',' - -keyvalue: - test ':' test { - $$ = &KeyValueExpr{ - Key: $1, - Colon: $2, - Value: $3, - } - } - -keyvalues_no_comma: - keyvalue - { - $$ = []Expr{$1} - } -| keyvalues_no_comma ',' keyvalue - { - $$ = append($1, $3) - } - -keyvalues: - { - $$ = nil - } -| keyvalues_no_comma - { - $$ = $1 - } -| keyvalues_no_comma ',' - { - $$ = $1 - } - -loop_vars: - primary_expr -| loop_vars ',' primary_expr - { - tuple, ok := $1.(*TupleExpr) - if !ok || !tuple.NoBrackets { - tuple = &TupleExpr{ - List: []Expr{$1}, - NoBrackets: true, - ForceCompact: true, - ForceMultiLine: false, - } - } - tuple.List = append(tuple.List, $3) - $$ = tuple - } - -string: - _STRING - { - $$ = &StringExpr{ - Start: $1, - Value: $1, - TripleQuote: $1, - End: $1.add($1), - Token: $1, - } - } - -strings: - string - { - $$ = []*StringExpr{$1} - } -| strings string - { - $$ = append($1, $2) - } - -ident: - _IDENT - { - $$ = &Ident{NamePos: $1, Name: $1} - } - -number: - _NUMBER - { - $$ = &LiteralExpr{Start: $1, Token: $1} - } - -for_clause: - _FOR loop_vars _IN test - { - $$ = &ForClause{ - For: $1, - Vars: $2, - In: $3, - X: $4, - } - } - -for_clause_with_if_clauses_opt: - for_clause { - $$ = []Expr{$1} - } -| for_clause_with_if_clauses_opt _IF test { - $$ = append($1, &IfClause{ - If: $2, - Cond: $3, - }) - } - -for_clauses_with_if_clauses_opt: - for_clause_with_if_clauses_opt - { - $$ = $1 - } -| for_clauses_with_if_clauses_opt for_clause_with_if_clauses_opt { - $$ = append($1, $2...) - } - -%% - -// Go helper code. - -// unary returns a unary expression with the given -// position, operator, and subexpression. -func unary(pos Position, op string, x Expr) Expr { - return &UnaryExpr{ - OpStart: pos, - Op: op, - X: x, - } -} - -// binary returns a binary expression with the given -// operands, position, and operator. -func binary(x Expr, pos Position, op string, y Expr) Expr { - _, xend := x.Span() - ystart, _ := y.Span() - - switch op { - case "=", "+=", "-=", "*=", "/=", "//=", "%=", "|=": - return &AssignExpr{ - LHS: x, - OpPos: pos, - Op: op, - LineBreak: xend.Line < ystart.Line, - RHS: y, - } - } - - return &BinaryExpr{ - X: x, - OpStart: pos, - Op: op, - LineBreak: xend.Line < ystart.Line, - Y: y, - } -} - -// isSimpleExpression returns whether an expression is simple and allowed to exist in -// compact forms of sequences. -// The formal criteria are the following: an expression is considered simple if it's -// a literal (variable, string or a number), a literal with a unary operator or an empty sequence. -func isSimpleExpression(expr *Expr) bool { - switch x := (*expr).(type) { - case *LiteralExpr, *StringExpr, *Ident: - return true - case *UnaryExpr: - _, literal := x.X.(*LiteralExpr) - _, ident := x.X.(*Ident) - return literal || ident - case *ListExpr: - return len(x.List) == 0 - case *TupleExpr: - return len(x.List) == 0 - case *DictExpr: - return len(x.List) == 0 - case *SetExpr: - return len(x.List) == 0 - default: - return false - } -} - -// forceCompact returns the setting for the ForceCompact field for a call or tuple. -// -// NOTE 1: The field is called ForceCompact, not ForceSingleLine, -// because it only affects the formatting associated with the call or tuple syntax, -// not the formatting of the arguments. For example: -// -// call([ -// 1, -// 2, -// 3, -// ]) -// -// is still a compact call even though it runs on multiple lines. -// -// In contrast the multiline form puts a linebreak after the (. -// -// call( -// [ -// 1, -// 2, -// 3, -// ], -// ) -// -// NOTE 2: Because of NOTE 1, we cannot use start and end on the -// same line as a signal for compact mode: the formatting of an -// embedded list might move the end to a different line, which would -// then look different on rereading and cause buildifier not to be -// idempotent. Instead, we have to look at properties guaranteed -// to be preserved by the reformatting, namely that the opening -// paren and the first expression are on the same line and that -// each subsequent expression begins on the same line as the last -// one ended (no line breaks after comma). -func forceCompact(start Position, list []Expr, end Position) bool { - if len(list) <= 1 { - // The call or tuple will probably be compact anyway; don't force it. - return false - } - - // If there are any named arguments or non-string, non-literal - // arguments, cannot force compact mode. - line := start.Line - for _, x := range list { - start, end := x.Span() - if start.Line != line { - return false - } - line = end.Line - if !isSimpleExpression(&x) { - return false - } - } - return end.Line == line -} - -// forceMultiLine returns the setting for the ForceMultiLine field. -func forceMultiLine(start Position, list []Expr, end Position) bool { - if len(list) > 1 { - // The call will be multiline anyway, because it has multiple elements. Don't force it. - return false - } - - if len(list) == 0 { - // Empty list: use position of brackets. - return start.Line != end.Line - } - - // Single-element list. - // Check whether opening bracket is on different line than beginning of - // element, or closing bracket is on different line than end of element. - elemStart, elemEnd := list[0].Span() - return start.Line != elemStart.Line || end.Line != elemEnd.Line -} - -// forceMultiLineComprehension returns the setting for the ForceMultiLine field for a comprehension. -func forceMultiLineComprehension(start Position, expr Expr, clauses []Expr, end Position) bool { - // Return true if there's at least one line break between start, expr, each clause, and end - exprStart, exprEnd := expr.Span() - if start.Line != exprStart.Line { - return true - } - previousEnd := exprEnd - for _, clause := range clauses { - clauseStart, clauseEnd := clause.Span() - if previousEnd.Line != clauseStart.Line { - return true - } - previousEnd = clauseEnd - } - return previousEnd.Line != end.Line -} - -// extractTrailingComments extracts trailing comments of an indented block starting with the first -// comment line with indentation less than the block indentation. -// The comments can either belong to CommentBlock statements or to the last non-comment statement -// as After-comments. -func extractTrailingComments(stmt Expr) []Expr { - body := getLastBody(stmt) - var comments []Expr - if body != nil && len(*body) > 0 { - // Get the current indentation level - start, _ := (*body)[0].Span() - indentation := start.LineRune - - // Find the last non-comment statement - lastNonCommentIndex := -1 - for i, stmt := range *body { - if _, ok := stmt.(*CommentBlock); !ok { - lastNonCommentIndex = i - } - } - if lastNonCommentIndex == -1 { - return comments - } - - // Iterate over the trailing comments, find the first comment line that's not indented enough, - // dedent it and all the following comments. - for i := lastNonCommentIndex; i < len(*body); i++ { - stmt := (*body)[i] - if comment := extractDedentedComment(stmt, indentation); comment != nil { - // This comment and all the following CommentBlock statements are to be extracted. - comments = append(comments, comment) - comments = append(comments, (*body)[i+1:]...) - *body = (*body)[:i+1] - // If the current statement is a CommentBlock statement without any comment lines - // it should be removed too. - if i > lastNonCommentIndex && len(stmt.Comment().After) == 0 { - *body = (*body)[:i] - } - } - } - } - return comments -} - -// extractDedentedComment extract the first comment line from `stmt` which indentation is smaller -// than `indentation`, and all following comment lines, and returns them in a newly created -// CommentBlock statement. -func extractDedentedComment(stmt Expr, indentation int) Expr { - for i, line := range stmt.Comment().After { - // line.Start.LineRune == 0 can't exist in parsed files, it indicates that the comment line - // has been added by an AST modification. Don't take such lines into account. - if line.Start.LineRune > 0 && line.Start.LineRune < indentation { - // This and all the following lines should be dedented - cb := &CommentBlock{ - Start: line.Start, - Comments: Comments{After: stmt.Comment().After[i:]}, - } - stmt.Comment().After = stmt.Comment().After[:i] - return cb - } - } - return nil -} - -// getLastBody returns the last body of a block statement (the only body for For- and DefStmt -// objects, the last in a if-elif-else chain -func getLastBody(stmt Expr) *[]Expr { - switch block := stmt.(type) { - case *DefStmt: - return &block.Body - case *ForStmt: - return &block.Body - case *IfStmt: - if len(block.False) == 0 { - return &block.True - } else if len(block.False) == 1 { - if next, ok := block.False[0].(*IfStmt); ok { - // Recursively find the last block of the chain - return getLastBody(next) - } - } - return &block.False - } - return nil -} diff --git a/vendor/github.com/bazelbuild/buildtools/build/parse.y.go b/vendor/github.com/bazelbuild/buildtools/build/parse.y.go deleted file mode 100644 index ae72e87ac2..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/build/parse.y.go +++ /dev/null @@ -1,1986 +0,0 @@ -//line build/parse.y:13 -package build - -import __yyfmt__ "fmt" - -//line build/parse.y:13 - -//line build/parse.y:18 -type yySymType struct { - yys int - // input tokens - tok string // raw input syntax - str string // decoding of quoted string - pos Position // position of token - triple bool // was string triple quoted? - - // partial syntax trees - expr Expr - exprs []Expr - string *StringExpr - strings []*StringExpr - ifstmt *IfStmt - loadarg *struct { - from Ident - to Ident - } - loadargs []*struct { - from Ident - to Ident - } - - // supporting information - comma Position // position of trailing comma in list, if present - lastStmt Expr // most recent rule, to attach line comments to -} - -const _AUGM = 57346 -const _AND = 57347 -const _COMMENT = 57348 -const _EOF = 57349 -const _EQ = 57350 -const _FOR = 57351 -const _GE = 57352 -const _IDENT = 57353 -const _NUMBER = 57354 -const _IF = 57355 -const _ELSE = 57356 -const _ELIF = 57357 -const _IN = 57358 -const _IS = 57359 -const _LAMBDA = 57360 -const _LOAD = 57361 -const _LE = 57362 -const _NE = 57363 -const _STAR_STAR = 57364 -const _INT_DIV = 57365 -const _BIT_LSH = 57366 -const _BIT_RSH = 57367 -const _NOT = 57368 -const _OR = 57369 -const _STRING = 57370 -const _DEF = 57371 -const _RETURN = 57372 -const _PASS = 57373 -const _BREAK = 57374 -const _CONTINUE = 57375 -const _INDENT = 57376 -const _UNINDENT = 57377 -const ShiftInstead = 57378 -const _ASSERT = 57379 -const _UNARY = 57380 - -var yyToknames = [...]string{ - "$end", - "error", - "$unk", - "'%'", - "'('", - "')'", - "'*'", - "'+'", - "','", - "'-'", - "'.'", - "'/'", - "':'", - "'<'", - "'='", - "'>'", - "'['", - "']'", - "'{'", - "'}'", - "'|'", - "'&'", - "'^'", - "'~'", - "_AUGM", - "_AND", - "_COMMENT", - "_EOF", - "_EQ", - "_FOR", - "_GE", - "_IDENT", - "_NUMBER", - "_IF", - "_ELSE", - "_ELIF", - "_IN", - "_IS", - "_LAMBDA", - "_LOAD", - "_LE", - "_NE", - "_STAR_STAR", - "_INT_DIV", - "_BIT_LSH", - "_BIT_RSH", - "_NOT", - "_OR", - "_STRING", - "_DEF", - "_RETURN", - "_PASS", - "_BREAK", - "_CONTINUE", - "_INDENT", - "_UNINDENT", - "ShiftInstead", - "'\\n'", - "_ASSERT", - "_UNARY", - "';'", -} -var yyStatenames = [...]string{} - -const yyEofCode = 1 -const yyErrCode = 2 -const yyInitialStackSize = 16 - -//line build/parse.y:977 - -// Go helper code. - -// unary returns a unary expression with the given -// position, operator, and subexpression. -func unary(pos Position, op string, x Expr) Expr { - return &UnaryExpr{ - OpStart: pos, - Op: op, - X: x, - } -} - -// binary returns a binary expression with the given -// operands, position, and operator. -func binary(x Expr, pos Position, op string, y Expr) Expr { - _, xend := x.Span() - ystart, _ := y.Span() - - switch op { - case "=", "+=", "-=", "*=", "/=", "//=", "%=", "|=": - return &AssignExpr{ - LHS: x, - OpPos: pos, - Op: op, - LineBreak: xend.Line < ystart.Line, - RHS: y, - } - } - - return &BinaryExpr{ - X: x, - OpStart: pos, - Op: op, - LineBreak: xend.Line < ystart.Line, - Y: y, - } -} - -// isSimpleExpression returns whether an expression is simple and allowed to exist in -// compact forms of sequences. -// The formal criteria are the following: an expression is considered simple if it's -// a literal (variable, string or a number), a literal with a unary operator or an empty sequence. -func isSimpleExpression(expr *Expr) bool { - switch x := (*expr).(type) { - case *LiteralExpr, *StringExpr, *Ident: - return true - case *UnaryExpr: - _, literal := x.X.(*LiteralExpr) - _, ident := x.X.(*Ident) - return literal || ident - case *ListExpr: - return len(x.List) == 0 - case *TupleExpr: - return len(x.List) == 0 - case *DictExpr: - return len(x.List) == 0 - case *SetExpr: - return len(x.List) == 0 - default: - return false - } -} - -// forceCompact returns the setting for the ForceCompact field for a call or tuple. -// -// NOTE 1: The field is called ForceCompact, not ForceSingleLine, -// because it only affects the formatting associated with the call or tuple syntax, -// not the formatting of the arguments. For example: -// -// call([ -// 1, -// 2, -// 3, -// ]) -// -// is still a compact call even though it runs on multiple lines. -// -// In contrast the multiline form puts a linebreak after the (. -// -// call( -// [ -// 1, -// 2, -// 3, -// ], -// ) -// -// NOTE 2: Because of NOTE 1, we cannot use start and end on the -// same line as a signal for compact mode: the formatting of an -// embedded list might move the end to a different line, which would -// then look different on rereading and cause buildifier not to be -// idempotent. Instead, we have to look at properties guaranteed -// to be preserved by the reformatting, namely that the opening -// paren and the first expression are on the same line and that -// each subsequent expression begins on the same line as the last -// one ended (no line breaks after comma). -func forceCompact(start Position, list []Expr, end Position) bool { - if len(list) <= 1 { - // The call or tuple will probably be compact anyway; don't force it. - return false - } - - // If there are any named arguments or non-string, non-literal - // arguments, cannot force compact mode. - line := start.Line - for _, x := range list { - start, end := x.Span() - if start.Line != line { - return false - } - line = end.Line - if !isSimpleExpression(&x) { - return false - } - } - return end.Line == line -} - -// forceMultiLine returns the setting for the ForceMultiLine field. -func forceMultiLine(start Position, list []Expr, end Position) bool { - if len(list) > 1 { - // The call will be multiline anyway, because it has multiple elements. Don't force it. - return false - } - - if len(list) == 0 { - // Empty list: use position of brackets. - return start.Line != end.Line - } - - // Single-element list. - // Check whether opening bracket is on different line than beginning of - // element, or closing bracket is on different line than end of element. - elemStart, elemEnd := list[0].Span() - return start.Line != elemStart.Line || end.Line != elemEnd.Line -} - -// forceMultiLineComprehension returns the setting for the ForceMultiLine field for a comprehension. -func forceMultiLineComprehension(start Position, expr Expr, clauses []Expr, end Position) bool { - // Return true if there's at least one line break between start, expr, each clause, and end - exprStart, exprEnd := expr.Span() - if start.Line != exprStart.Line { - return true - } - previousEnd := exprEnd - for _, clause := range clauses { - clauseStart, clauseEnd := clause.Span() - if previousEnd.Line != clauseStart.Line { - return true - } - previousEnd = clauseEnd - } - return previousEnd.Line != end.Line -} - -// extractTrailingComments extracts trailing comments of an indented block starting with the first -// comment line with indentation less than the block indentation. -// The comments can either belong to CommentBlock statements or to the last non-comment statement -// as After-comments. -func extractTrailingComments(stmt Expr) []Expr { - body := getLastBody(stmt) - var comments []Expr - if body != nil && len(*body) > 0 { - // Get the current indentation level - start, _ := (*body)[0].Span() - indentation := start.LineRune - - // Find the last non-comment statement - lastNonCommentIndex := -1 - for i, stmt := range *body { - if _, ok := stmt.(*CommentBlock); !ok { - lastNonCommentIndex = i - } - } - if lastNonCommentIndex == -1 { - return comments - } - - // Iterate over the trailing comments, find the first comment line that's not indented enough, - // dedent it and all the following comments. - for i := lastNonCommentIndex; i < len(*body); i++ { - stmt := (*body)[i] - if comment := extractDedentedComment(stmt, indentation); comment != nil { - // This comment and all the following CommentBlock statements are to be extracted. - comments = append(comments, comment) - comments = append(comments, (*body)[i+1:]...) - *body = (*body)[:i+1] - // If the current statement is a CommentBlock statement without any comment lines - // it should be removed too. - if i > lastNonCommentIndex && len(stmt.Comment().After) == 0 { - *body = (*body)[:i] - } - } - } - } - return comments -} - -// extractDedentedComment extract the first comment line from `stmt` which indentation is smaller -// than `indentation`, and all following comment lines, and returns them in a newly created -// CommentBlock statement. -func extractDedentedComment(stmt Expr, indentation int) Expr { - for i, line := range stmt.Comment().After { - // line.Start.LineRune == 0 can't exist in parsed files, it indicates that the comment line - // has been added by an AST modification. Don't take such lines into account. - if line.Start.LineRune > 0 && line.Start.LineRune < indentation { - // This and all the following lines should be dedented - cb := &CommentBlock{ - Start: line.Start, - Comments: Comments{After: stmt.Comment().After[i:]}, - } - stmt.Comment().After = stmt.Comment().After[:i] - return cb - } - } - return nil -} - -// getLastBody returns the last body of a block statement (the only body for For- and DefStmt -// objects, the last in a if-elif-else chain -func getLastBody(stmt Expr) *[]Expr { - switch block := stmt.(type) { - case *DefStmt: - return &block.Body - case *ForStmt: - return &block.Body - case *IfStmt: - if len(block.False) == 0 { - return &block.True - } else if len(block.False) == 1 { - if next, ok := block.False[0].(*IfStmt); ok { - // Recursively find the last block of the chain - return getLastBody(next) - } - } - return &block.False - } - return nil -} - -//line yacctab:1 -var yyExca = [...]int{ - -1, 1, - 1, -1, - -2, 0, -} - -const yyPrivate = 57344 - -const yyLast = 818 - -var yyAct = [...]int{ - - 19, 212, 27, 171, 36, 209, 7, 2, 162, 134, - 143, 147, 89, 41, 9, 97, 21, 169, 146, 222, - 233, 224, 158, 38, 80, 81, 82, 83, 42, 37, - 120, 34, 87, 92, 95, 85, 188, 51, 34, 164, - 50, 54, 131, 55, 40, 52, 103, 221, 37, 149, - 223, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 34, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 192, 165, 135, 53, 136, 33, - 51, 153, 13, 50, 48, 49, 88, 100, 52, 144, - 100, 31, 51, 32, 86, 50, 54, 46, 55, 151, - 52, 163, 154, 73, 105, 79, 34, 35, 152, 66, - 67, 68, 159, 45, 29, 216, 239, 167, 99, 91, - 53, 172, 181, 37, 186, 106, 101, 102, 94, 45, - 104, 191, 53, 69, 70, 43, 149, 226, 179, 180, - 75, 149, 225, 145, 176, 44, 74, 229, 174, 199, - 45, 190, 76, 178, 202, 217, 193, 195, 187, 139, - 182, 45, 141, 189, 187, 168, 42, 200, 201, 194, - 228, 45, 197, 198, 206, 130, 185, 177, 135, 208, - 136, 45, 166, 210, 156, 150, 203, 207, 214, 215, - 213, 142, 235, 196, 175, 157, 98, 84, 96, 205, - 219, 163, 1, 211, 204, 51, 30, 218, 50, 54, - 93, 55, 90, 52, 39, 47, 18, 230, 12, 8, - 220, 4, 227, 67, 183, 184, 28, 210, 148, 232, - 236, 214, 234, 213, 237, 231, 7, 33, 77, 78, - 25, 140, 24, 160, 161, 53, 69, 70, 132, 31, - 133, 32, 0, 0, 0, 0, 26, 0, 0, 6, - 0, 0, 11, 0, 34, 35, 20, 0, 0, 0, - 0, 22, 29, 0, 0, 33, 0, 0, 25, 23, - 24, 37, 10, 14, 15, 16, 17, 31, 238, 32, - 5, 0, 0, 0, 26, 0, 0, 6, 3, 0, - 11, 0, 34, 35, 20, 0, 0, 0, 0, 22, - 29, 0, 0, 33, 0, 0, 25, 23, 24, 37, - 10, 14, 15, 16, 17, 31, 0, 32, 5, 0, - 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, - 34, 35, 0, 0, 0, 0, 0, 22, 29, 0, - 0, 0, 0, 0, 0, 23, 0, 37, 0, 14, - 15, 16, 17, 0, 51, 0, 170, 50, 54, 0, - 55, 0, 52, 155, 56, 0, 57, 0, 0, 0, - 0, 66, 67, 68, 0, 0, 65, 0, 0, 58, - 0, 61, 0, 0, 72, 0, 0, 62, 71, 0, - 0, 59, 60, 0, 53, 69, 70, 63, 64, 51, - 0, 0, 50, 54, 0, 55, 0, 52, 0, 56, - 0, 57, 0, 0, 0, 0, 66, 67, 68, 0, - 0, 65, 0, 0, 58, 0, 61, 0, 0, 72, - 173, 0, 62, 71, 0, 0, 59, 60, 0, 53, - 69, 70, 63, 64, 51, 0, 0, 50, 54, 0, - 55, 0, 52, 0, 56, 0, 57, 0, 0, 0, - 0, 66, 67, 68, 0, 0, 65, 0, 0, 58, - 149, 61, 0, 0, 72, 0, 0, 62, 71, 0, - 0, 59, 60, 0, 53, 69, 70, 63, 64, 51, - 0, 0, 50, 54, 0, 55, 0, 52, 0, 56, - 0, 57, 0, 0, 0, 0, 66, 67, 68, 0, - 0, 65, 0, 0, 58, 0, 61, 0, 0, 72, - 0, 0, 62, 71, 0, 0, 59, 60, 0, 53, - 69, 70, 63, 64, 51, 0, 0, 50, 54, 0, - 55, 0, 52, 0, 56, 0, 57, 0, 0, 0, - 0, 66, 67, 68, 51, 0, 65, 50, 54, 58, - 55, 61, 52, 0, 0, 0, 0, 62, 71, 0, - 0, 59, 60, 0, 53, 69, 70, 63, 64, 33, - 0, 0, 25, 0, 24, 0, 0, 0, 0, 0, - 0, 31, 0, 32, 53, 69, 70, 0, 26, 0, - 0, 0, 0, 0, 0, 0, 34, 35, 0, 0, - 0, 0, 51, 22, 29, 50, 54, 0, 55, 0, - 52, 23, 56, 37, 57, 14, 15, 16, 17, 66, - 67, 68, 0, 0, 65, 0, 0, 58, 0, 61, - 0, 0, 0, 0, 0, 62, 0, 0, 0, 59, - 60, 0, 53, 69, 70, 63, 64, 51, 0, 0, - 50, 54, 0, 55, 0, 52, 0, 56, 0, 57, - 0, 0, 0, 0, 66, 67, 68, 0, 0, 65, - 0, 0, 58, 0, 61, 0, 0, 0, 0, 0, - 62, 0, 0, 0, 59, 60, 0, 53, 69, 70, - 63, 51, 0, 0, 50, 54, 0, 55, 0, 52, - 0, 56, 0, 57, 0, 0, 0, 0, 66, 67, - 68, 0, 0, 0, 0, 0, 58, 0, 61, 0, - 0, 0, 0, 0, 62, 0, 0, 0, 59, 60, - 0, 53, 69, 70, 63, 33, 0, 137, 25, 0, - 24, 0, 51, 0, 0, 50, 54, 31, 55, 32, - 52, 0, 0, 33, 26, 0, 25, 0, 24, 0, - 67, 68, 34, 35, 0, 31, 0, 32, 0, 22, - 29, 0, 26, 138, 0, 0, 0, 23, 0, 37, - 34, 35, 53, 69, 70, 0, 0, 22, 29, 0, - 0, 0, 0, 0, 0, 23, 0, 37, -} -var yyPact = [...]int{ - - -1000, -1000, 270, -1000, -1000, -1000, -35, -1000, -1000, -1000, - 12, 74, -1000, 120, 768, -1000, -1000, -1000, 49, 495, - 768, 135, 768, 768, 768, 768, 768, -1000, -1000, 192, - -20, 768, 768, 768, -1000, -1000, -1000, -1000, -1000, -46, - 191, 81, 135, 768, 768, 768, 172, 768, 91, -1000, - 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, - 768, 768, 768, -7, 768, 768, 768, 768, 768, 768, - 768, 768, 768, 162, 10, 750, 768, 149, 182, 172, - -1000, -1000, -1000, -1000, -20, -1000, 125, 450, 176, 19, - 61, 176, 360, 175, 189, 495, -36, 584, 32, 768, - 74, 172, 172, 540, 152, 308, -1000, -1000, -1000, -1000, - -1000, 76, 76, 88, 88, 88, 88, 88, 88, 88, - 768, 663, 707, 758, 560, 201, 33, 33, 618, 405, - 308, -1000, 188, 168, -1000, 495, 138, 768, 768, 104, - 147, 768, 768, -1000, 167, -1000, 106, 2, -1000, 74, - 768, -1000, 111, -1000, 54, 768, 768, -1000, -1000, -1000, - 187, 164, -1000, 134, 6, 6, 141, 135, 308, -1000, - -1000, -1000, 88, 768, -1000, -1000, -1000, 750, 768, 495, - 495, -1000, 768, -1000, -1000, -1, -1000, 2, 768, 78, - 495, -1000, -1000, 495, -1000, 360, 142, -1000, 32, 768, - -1000, -1000, 308, -1000, -8, -37, 540, -1000, 495, 124, - 495, 161, -1000, -1000, 132, 540, 768, 308, -1000, 495, - -1000, -1000, -38, -1000, -1000, -1000, 768, 186, -1, -20, - 540, -1000, 232, -1000, 98, -1000, -1000, -1000, -1000, -1000, -} -var yyPgo = [...]int{ - - 0, 10, 9, 250, 248, 8, 244, 243, 0, 5, - 94, 16, 82, 241, 86, 239, 238, 13, 228, 11, - 18, 2, 226, 7, 221, 219, 218, 216, 215, 3, - 14, 214, 12, 212, 210, 4, 206, 17, 204, 1, - 203, 202, 199, 198, -} -var yyR1 = [...]int{ - - 0, 41, 37, 37, 42, 42, 38, 38, 38, 23, - 23, 23, 23, 24, 24, 25, 25, 25, 27, 27, - 26, 26, 28, 28, 29, 31, 31, 30, 30, 30, - 30, 30, 30, 30, 30, 43, 43, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 4, 4, 3, 3, 2, 2, 2, 2, - 40, 40, 39, 39, 7, 7, 6, 6, 5, 5, - 5, 5, 5, 12, 12, 13, 13, 15, 15, 16, - 16, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 14, 14, 9, 9, 10, 10, 1, 1, 32, 34, - 34, 33, 33, 33, 17, 17, 35, 36, 36, 21, - 22, 18, 19, 19, 20, 20, -} -var yyR2 = [...]int{ - - 0, 2, 5, 2, 0, 2, 0, 3, 2, 0, - 2, 2, 3, 1, 1, 7, 6, 1, 4, 5, - 1, 4, 2, 1, 4, 0, 3, 1, 2, 1, - 3, 3, 1, 1, 1, 0, 1, 1, 1, 3, - 7, 4, 4, 6, 8, 1, 3, 4, 4, 3, - 4, 3, 0, 2, 1, 3, 1, 3, 2, 2, - 1, 3, 1, 3, 0, 2, 1, 3, 1, 3, - 2, 1, 2, 1, 3, 0, 1, 1, 3, 0, - 2, 1, 4, 2, 2, 2, 2, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 3, 3, 3, 3, 3, 3, 3, 3, 5, - 1, 3, 0, 1, 0, 2, 0, 1, 3, 1, - 3, 0, 1, 2, 1, 3, 1, 1, 2, 1, - 1, 4, 1, 3, 1, 2, -} -var yyChk = [...]int{ - - -1000, -41, -23, 28, -24, 58, 27, -29, -25, -30, - 50, 30, -26, -12, 51, 52, 53, 54, -27, -8, - 34, -11, 39, 47, 10, 8, 24, -21, -22, 40, - -36, 17, 19, 5, 32, 33, -35, 49, 58, -31, - 32, -17, -11, 15, 25, 9, -12, -28, 35, 36, - 7, 4, 12, 44, 8, 10, 14, 16, 29, 41, - 42, 31, 37, 47, 48, 26, 21, 22, 23, 45, - 46, 38, 34, -12, 11, 5, 17, -16, -15, -12, - -8, -8, -8, -8, 5, -35, -10, -8, -14, -32, - -33, -14, -8, -34, -10, -8, -43, 61, 5, 37, - 9, -12, -12, -8, -12, 13, 34, -8, -8, -8, - -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, - 37, -8, -8, -8, -8, -8, -8, -8, -8, -8, - 13, 32, -4, -3, -2, -8, -21, 7, 43, -12, - -13, 13, 9, -1, -35, 18, -20, -19, -18, 30, - 9, -1, -20, 20, -1, 13, 9, 6, 58, -30, - -7, -6, -5, -21, 7, 43, -12, -11, 13, -37, - 58, -29, -8, 35, -37, 6, -1, 9, 15, -8, - -8, 18, 13, -12, -12, 9, 18, -19, 34, -17, - -8, 20, 20, -8, -32, -8, 6, -1, 9, 15, - -21, -21, 13, -37, -38, -42, -8, -2, -8, -9, - -8, -40, -39, -35, -21, -8, 37, 13, -5, -8, - -37, 55, 27, 58, 58, 18, 13, -1, 9, 15, - -8, -37, -23, 58, -9, 6, -39, -35, 56, 18, -} -var yyDef = [...]int{ - - 9, -2, 0, 1, 10, 11, 0, 13, 14, 25, - 0, 0, 17, 27, 29, 32, 33, 34, 20, 73, - 0, 81, 79, 0, 0, 0, 0, 37, 38, 0, - 45, 114, 121, 114, 129, 130, 127, 126, 12, 35, - 0, 0, 124, 0, 0, 0, 28, 0, 0, 23, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 52, 75, 0, 116, 77, - 83, 84, 85, 86, 0, 128, 0, 110, 116, 119, - 0, 116, 110, 122, 0, 110, 0, 36, 64, 0, - 0, 30, 31, 74, 0, 0, 22, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 0, 101, 102, 103, 104, 105, 106, 107, 108, 0, - 0, 39, 0, 116, 54, 56, 37, 0, 0, 76, - 0, 0, 117, 80, 0, 46, 0, 134, 132, 0, - 117, 115, 0, 49, 0, 0, 123, 51, 24, 26, - 0, 116, 66, 68, 71, 0, 0, 125, 0, 21, - 6, 4, 100, 0, 18, 41, 53, 117, 0, 58, - 59, 42, 112, 82, 78, 0, 47, 135, 0, 0, - 111, 48, 50, 118, 120, 0, 0, 65, 117, 0, - 70, 72, 0, 19, 0, 3, 109, 55, 57, 0, - 113, 116, 60, 62, 0, 133, 0, 0, 67, 69, - 16, 9, 0, 8, 5, 43, 112, 0, 117, 0, - 131, 15, 0, 7, 0, 40, 61, 63, 2, 44, -} -var yyTok1 = [...]int{ - - 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 58, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 4, 22, 3, - 5, 6, 7, 8, 9, 10, 11, 12, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 13, 61, - 14, 15, 16, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 17, 3, 18, 23, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 19, 21, 20, 24, -} -var yyTok2 = [...]int{ - - 2, 3, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 59, 60, -} -var yyTok3 = [...]int{ - 0, -} - -var yyErrorMessages = [...]struct { - state int - token int - msg string -}{} - -//line yaccpar:1 - -/* parser for yacc output */ - -var ( - yyDebug = 0 - yyErrorVerbose = false -) - -type yyLexer interface { - Lex(lval *yySymType) int - Error(s string) -} - -type yyParser interface { - Parse(yyLexer) int - Lookahead() int -} - -type yyParserImpl struct { - lval yySymType - stack [yyInitialStackSize]yySymType - char int -} - -func (p *yyParserImpl) Lookahead() int { - return p.char -} - -func yyNewParser() yyParser { - return &yyParserImpl{} -} - -const yyFlag = -1000 - -func yyTokname(c int) string { - if c >= 1 && c-1 < len(yyToknames) { - if yyToknames[c-1] != "" { - return yyToknames[c-1] - } - } - return __yyfmt__.Sprintf("tok-%v", c) -} - -func yyStatname(s int) string { - if s >= 0 && s < len(yyStatenames) { - if yyStatenames[s] != "" { - return yyStatenames[s] - } - } - return __yyfmt__.Sprintf("state-%v", s) -} - -func yyErrorMessage(state, lookAhead int) string { - const TOKSTART = 4 - - if !yyErrorVerbose { - return "syntax error" - } - - for _, e := range yyErrorMessages { - if e.state == state && e.token == lookAhead { - return "syntax error: " + e.msg - } - } - - res := "syntax error: unexpected " + yyTokname(lookAhead) - - // To match Bison, suggest at most four expected tokens. - expected := make([]int, 0, 4) - - // Look for shiftable tokens. - base := yyPact[state] - for tok := TOKSTART; tok-1 < len(yyToknames); tok++ { - if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok { - if len(expected) == cap(expected) { - return res - } - expected = append(expected, tok) - } - } - - if yyDef[state] == -2 { - i := 0 - for yyExca[i] != -1 || yyExca[i+1] != state { - i += 2 - } - - // Look for tokens that we accept or reduce. - for i += 2; yyExca[i] >= 0; i += 2 { - tok := yyExca[i] - if tok < TOKSTART || yyExca[i+1] == 0 { - continue - } - if len(expected) == cap(expected) { - return res - } - expected = append(expected, tok) - } - - // If the default action is to accept or reduce, give up. - if yyExca[i+1] != 0 { - return res - } - } - - for i, tok := range expected { - if i == 0 { - res += ", expecting " - } else { - res += " or " - } - res += yyTokname(tok) - } - return res -} - -func yylex1(lex yyLexer, lval *yySymType) (char, token int) { - token = 0 - char = lex.Lex(lval) - if char <= 0 { - token = yyTok1[0] - goto out - } - if char < len(yyTok1) { - token = yyTok1[char] - goto out - } - if char >= yyPrivate { - if char < yyPrivate+len(yyTok2) { - token = yyTok2[char-yyPrivate] - goto out - } - } - for i := 0; i < len(yyTok3); i += 2 { - token = yyTok3[i+0] - if token == char { - token = yyTok3[i+1] - goto out - } - } - -out: - if token == 0 { - token = yyTok2[1] /* unknown char */ - } - if yyDebug >= 3 { - __yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char)) - } - return char, token -} - -func yyParse(yylex yyLexer) int { - return yyNewParser().Parse(yylex) -} - -func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int { - var yyn int - var yyVAL yySymType - var yyDollar []yySymType - _ = yyDollar // silence set and not used - yyS := yyrcvr.stack[:] - - Nerrs := 0 /* number of errors */ - Errflag := 0 /* error recovery flag */ - yystate := 0 - yyrcvr.char = -1 - yytoken := -1 // yyrcvr.char translated into internal numbering - defer func() { - // Make sure we report no lookahead when not parsing. - yystate = -1 - yyrcvr.char = -1 - yytoken = -1 - }() - yyp := -1 - goto yystack - -ret0: - return 0 - -ret1: - return 1 - -yystack: - /* put a state and value onto the stack */ - if yyDebug >= 4 { - __yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate)) - } - - yyp++ - if yyp >= len(yyS) { - nyys := make([]yySymType, len(yyS)*2) - copy(nyys, yyS) - yyS = nyys - } - yyS[yyp] = yyVAL - yyS[yyp].yys = yystate - -yynewstate: - yyn = yyPact[yystate] - if yyn <= yyFlag { - goto yydefault /* simple state */ - } - if yyrcvr.char < 0 { - yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval) - } - yyn += yytoken - if yyn < 0 || yyn >= yyLast { - goto yydefault - } - yyn = yyAct[yyn] - if yyChk[yyn] == yytoken { /* valid shift */ - yyrcvr.char = -1 - yytoken = -1 - yyVAL = yyrcvr.lval - yystate = yyn - if Errflag > 0 { - Errflag-- - } - goto yystack - } - -yydefault: - /* default state action */ - yyn = yyDef[yystate] - if yyn == -2 { - if yyrcvr.char < 0 { - yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval) - } - - /* look through exception table */ - xi := 0 - for { - if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate { - break - } - xi += 2 - } - for xi += 2; ; xi += 2 { - yyn = yyExca[xi+0] - if yyn < 0 || yyn == yytoken { - break - } - } - yyn = yyExca[xi+1] - if yyn < 0 { - goto ret0 - } - } - if yyn == 0 { - /* error ... attempt to resume parsing */ - switch Errflag { - case 0: /* brand new error */ - yylex.Error(yyErrorMessage(yystate, yytoken)) - Nerrs++ - if yyDebug >= 1 { - __yyfmt__.Printf("%s", yyStatname(yystate)) - __yyfmt__.Printf(" saw %s\n", yyTokname(yytoken)) - } - fallthrough - - case 1, 2: /* incompletely recovered error ... try again */ - Errflag = 3 - - /* find a state where "error" is a legal shift action */ - for yyp >= 0 { - yyn = yyPact[yyS[yyp].yys] + yyErrCode - if yyn >= 0 && yyn < yyLast { - yystate = yyAct[yyn] /* simulate a shift of "error" */ - if yyChk[yystate] == yyErrCode { - goto yystack - } - } - - /* the current p has no shift on "error", pop stack */ - if yyDebug >= 2 { - __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys) - } - yyp-- - } - /* there is no state on the stack with an error shift ... abort */ - goto ret1 - - case 3: /* no shift yet; clobber input char */ - if yyDebug >= 2 { - __yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken)) - } - if yytoken == yyEofCode { - goto ret1 - } - yyrcvr.char = -1 - yytoken = -1 - goto yynewstate /* try again in the same state */ - } - } - - /* reduction by production yyn */ - if yyDebug >= 2 { - __yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate)) - } - - yynt := yyn - yypt := yyp - _ = yypt // guard against "declared and not used" - - yyp -= yyR2[yyn] - // yyp is now the index of $0. Perform the default action. Iff the - // reduced production is ε, $1 is possibly out of range. - if yyp+1 >= len(yyS) { - nyys := make([]yySymType, len(yyS)*2) - copy(nyys, yyS) - yyS = nyys - } - yyVAL = yyS[yyp+1] - - /* consult goto table to find next state */ - yyn = yyR1[yyn] - yyg := yyPgo[yyn] - yyj := yyg + yyS[yyp].yys + 1 - - if yyj >= yyLast { - yystate = yyAct[yyg] - } else { - yystate = yyAct[yyj] - if yyChk[yystate] != -yyn { - yystate = yyAct[yyg] - } - } - // dummy call; replaced with literal code - switch yynt { - - case 1: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:195 - { - yylex.(*input).file = &File{Stmt: yyDollar[1].exprs} - return 0 - } - case 2: - yyDollar = yyS[yypt-5 : yypt+1] -//line build/parse.y:202 - { - statements := yyDollar[4].exprs - if yyDollar[2].exprs != nil { - // $2 can only contain *CommentBlock objects, each of them contains a non-empty After slice - cb := yyDollar[2].exprs[len(yyDollar[2].exprs)-1].(*CommentBlock) - // $4 can't be empty and can't start with a comment - stmt := yyDollar[4].exprs[0] - start, _ := stmt.Span() - if start.Line-cb.After[len(cb.After)-1].Start.Line == 1 { - // The first statement of $4 starts on the next line after the last comment of $2. - // Attach the last comment to the first statement - stmt.Comment().Before = cb.After - yyDollar[2].exprs = yyDollar[2].exprs[:len(yyDollar[2].exprs)-1] - } - statements = append(yyDollar[2].exprs, yyDollar[4].exprs...) - } - yyVAL.exprs = statements - yyVAL.lastStmt = yyDollar[4].lastStmt - } - case 3: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:222 - { - yyVAL.exprs = yyDollar[1].exprs - } - case 6: - yyDollar = yyS[yypt-0 : yypt+1] -//line build/parse.y:230 - { - yyVAL.exprs = nil - yyVAL.lastStmt = nil - } - case 7: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:235 - { - yyVAL.exprs = yyDollar[1].exprs - yyVAL.lastStmt = yyDollar[1].lastStmt - if yyVAL.lastStmt == nil { - cb := &CommentBlock{Start: yyDollar[2].pos} - yyVAL.exprs = append(yyVAL.exprs, cb) - yyVAL.lastStmt = cb - } - com := yyVAL.lastStmt.Comment() - com.After = append(com.After, Comment{Start: yyDollar[2].pos, Token: yyDollar[2].tok}) - } - case 8: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:247 - { - yyVAL.exprs = yyDollar[1].exprs - yyVAL.lastStmt = nil - } - case 9: - yyDollar = yyS[yypt-0 : yypt+1] -//line build/parse.y:253 - { - yyVAL.exprs = nil - yyVAL.lastStmt = nil - } - case 10: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:258 - { - // If this statement follows a comment block, - // attach the comments to the statement. - if cb, ok := yyDollar[1].lastStmt.(*CommentBlock); ok { - yyVAL.exprs = append(yyDollar[1].exprs[:len(yyDollar[1].exprs)-1], yyDollar[2].exprs...) - yyDollar[2].exprs[0].Comment().Before = cb.After - yyVAL.lastStmt = yyDollar[2].lastStmt - break - } - - // Otherwise add to list. - yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[2].exprs...) - yyVAL.lastStmt = yyDollar[2].lastStmt - - // Consider this input: - // - // foo() - // # bar - // baz() - // - // If we've just parsed baz(), the # bar is attached to - // foo() as an After comment. Make it a Before comment - // for baz() instead. - if x := yyDollar[1].lastStmt; x != nil { - com := x.Comment() - // stmt is never empty - yyDollar[2].exprs[0].Comment().Before = com.After - com.After = nil - } - } - case 11: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:289 - { - // Blank line; sever last rule from future comments. - yyVAL.exprs = yyDollar[1].exprs - yyVAL.lastStmt = nil - } - case 12: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:295 - { - yyVAL.exprs = yyDollar[1].exprs - yyVAL.lastStmt = yyDollar[1].lastStmt - if yyVAL.lastStmt == nil { - cb := &CommentBlock{Start: yyDollar[2].pos} - yyVAL.exprs = append(yyVAL.exprs, cb) - yyVAL.lastStmt = cb - } - com := yyVAL.lastStmt.Comment() - com.After = append(com.After, Comment{Start: yyDollar[2].pos, Token: yyDollar[2].tok}) - } - case 13: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:309 - { - yyVAL.exprs = yyDollar[1].exprs - yyVAL.lastStmt = yyDollar[1].exprs[len(yyDollar[1].exprs)-1] - } - case 14: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:314 - { - yyVAL.exprs = []Expr{yyDollar[1].expr} - yyVAL.lastStmt = yyDollar[1].expr - if cbs := extractTrailingComments(yyDollar[1].expr); len(cbs) > 0 { - yyVAL.exprs = append(yyVAL.exprs, cbs...) - yyVAL.lastStmt = cbs[len(cbs)-1] - if yyDollar[1].lastStmt == nil { - yyVAL.lastStmt = nil - } - } - } - case 15: - yyDollar = yyS[yypt-7 : yypt+1] -//line build/parse.y:328 - { - yyVAL.expr = &DefStmt{ - Function: Function{ - StartPos: yyDollar[1].pos, - Params: yyDollar[4].exprs, - Body: yyDollar[7].exprs, - }, - Name: yyDollar[2].tok, - ColonPos: yyDollar[6].pos, - ForceCompact: forceCompact(yyDollar[3].pos, yyDollar[4].exprs, yyDollar[5].pos), - ForceMultiLine: forceMultiLine(yyDollar[3].pos, yyDollar[4].exprs, yyDollar[5].pos), - } - yyVAL.lastStmt = yyDollar[7].lastStmt - } - case 16: - yyDollar = yyS[yypt-6 : yypt+1] -//line build/parse.y:343 - { - yyVAL.expr = &ForStmt{ - For: yyDollar[1].pos, - Vars: yyDollar[2].expr, - X: yyDollar[4].expr, - Body: yyDollar[6].exprs, - } - yyVAL.lastStmt = yyDollar[6].lastStmt - } - case 17: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:353 - { - yyVAL.expr = yyDollar[1].ifstmt - yyVAL.lastStmt = yyDollar[1].lastStmt - } - case 18: - yyDollar = yyS[yypt-4 : yypt+1] -//line build/parse.y:361 - { - yyVAL.ifstmt = &IfStmt{ - If: yyDollar[1].pos, - Cond: yyDollar[2].expr, - True: yyDollar[4].exprs, - } - yyVAL.lastStmt = yyDollar[4].lastStmt - } - case 19: - yyDollar = yyS[yypt-5 : yypt+1] -//line build/parse.y:370 - { - yyVAL.ifstmt = yyDollar[1].ifstmt - inner := yyDollar[1].ifstmt - for len(inner.False) == 1 { - inner = inner.False[0].(*IfStmt) - } - inner.ElsePos = End{Pos: yyDollar[2].pos} - inner.False = []Expr{ - &IfStmt{ - If: yyDollar[2].pos, - Cond: yyDollar[3].expr, - True: yyDollar[5].exprs, - }, - } - yyVAL.lastStmt = yyDollar[5].lastStmt - } - case 21: - yyDollar = yyS[yypt-4 : yypt+1] -//line build/parse.y:391 - { - yyVAL.ifstmt = yyDollar[1].ifstmt - inner := yyDollar[1].ifstmt - for len(inner.False) == 1 { - inner = inner.False[0].(*IfStmt) - } - inner.ElsePos = End{Pos: yyDollar[2].pos} - inner.False = yyDollar[4].exprs - yyVAL.lastStmt = yyDollar[4].lastStmt - } - case 24: - yyDollar = yyS[yypt-4 : yypt+1] -//line build/parse.y:408 - { - yyVAL.exprs = append([]Expr{yyDollar[1].expr}, yyDollar[2].exprs...) - yyVAL.lastStmt = yyVAL.exprs[len(yyVAL.exprs)-1] - } - case 25: - yyDollar = yyS[yypt-0 : yypt+1] -//line build/parse.y:414 - { - yyVAL.exprs = []Expr{} - } - case 26: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:418 - { - yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) - } - case 28: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:425 - { - yyVAL.expr = &ReturnStmt{ - Return: yyDollar[1].pos, - Result: yyDollar[2].expr, - } - } - case 29: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:432 - { - yyVAL.expr = &ReturnStmt{ - Return: yyDollar[1].pos, - } - } - case 30: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:437 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 31: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:438 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 32: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:440 - { - yyVAL.expr = &BranchStmt{ - Token: yyDollar[1].tok, - TokenPos: yyDollar[1].pos, - } - } - case 33: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:447 - { - yyVAL.expr = &BranchStmt{ - Token: yyDollar[1].tok, - TokenPos: yyDollar[1].pos, - } - } - case 34: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:454 - { - yyVAL.expr = &BranchStmt{ - Token: yyDollar[1].tok, - TokenPos: yyDollar[1].pos, - } - } - case 39: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:468 - { - yyVAL.expr = &DotExpr{ - X: yyDollar[1].expr, - Dot: yyDollar[2].pos, - NamePos: yyDollar[3].pos, - Name: yyDollar[3].tok, - } - } - case 40: - yyDollar = yyS[yypt-7 : yypt+1] -//line build/parse.y:477 - { - load := &LoadStmt{ - Load: yyDollar[1].pos, - Module: yyDollar[3].string, - Rparen: End{Pos: yyDollar[7].pos}, - ForceCompact: yyDollar[1].pos.Line == yyDollar[7].pos.Line, - } - for _, arg := range yyDollar[5].loadargs { - load.From = append(load.From, &arg.from) - load.To = append(load.To, &arg.to) - } - yyVAL.expr = load - } - case 41: - yyDollar = yyS[yypt-4 : yypt+1] -//line build/parse.y:491 - { - yyVAL.expr = &CallExpr{ - X: yyDollar[1].expr, - ListStart: yyDollar[2].pos, - List: yyDollar[3].exprs, - End: End{Pos: yyDollar[4].pos}, - ForceCompact: forceCompact(yyDollar[2].pos, yyDollar[3].exprs, yyDollar[4].pos), - ForceMultiLine: forceMultiLine(yyDollar[2].pos, yyDollar[3].exprs, yyDollar[4].pos), - } - } - case 42: - yyDollar = yyS[yypt-4 : yypt+1] -//line build/parse.y:502 - { - yyVAL.expr = &IndexExpr{ - X: yyDollar[1].expr, - IndexStart: yyDollar[2].pos, - Y: yyDollar[3].expr, - End: yyDollar[4].pos, - } - } - case 43: - yyDollar = yyS[yypt-6 : yypt+1] -//line build/parse.y:511 - { - yyVAL.expr = &SliceExpr{ - X: yyDollar[1].expr, - SliceStart: yyDollar[2].pos, - From: yyDollar[3].expr, - FirstColon: yyDollar[4].pos, - To: yyDollar[5].expr, - End: yyDollar[6].pos, - } - } - case 44: - yyDollar = yyS[yypt-8 : yypt+1] -//line build/parse.y:522 - { - yyVAL.expr = &SliceExpr{ - X: yyDollar[1].expr, - SliceStart: yyDollar[2].pos, - From: yyDollar[3].expr, - FirstColon: yyDollar[4].pos, - To: yyDollar[5].expr, - SecondColon: yyDollar[6].pos, - Step: yyDollar[7].expr, - End: yyDollar[8].pos, - } - } - case 45: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:535 - { - if len(yyDollar[1].strings) == 1 { - yyVAL.expr = yyDollar[1].strings[0] - break - } - yyVAL.expr = yyDollar[1].strings[0] - for _, x := range yyDollar[1].strings[1:] { - _, end := yyVAL.expr.Span() - yyVAL.expr = binary(yyVAL.expr, end, "+", x) - } - } - case 46: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:547 - { - yyVAL.expr = &ListExpr{ - Start: yyDollar[1].pos, - List: yyDollar[2].exprs, - End: End{Pos: yyDollar[3].pos}, - ForceMultiLine: forceMultiLine(yyDollar[1].pos, yyDollar[2].exprs, yyDollar[3].pos), - } - } - case 47: - yyDollar = yyS[yypt-4 : yypt+1] -//line build/parse.y:556 - { - yyVAL.expr = &Comprehension{ - Curly: false, - Lbrack: yyDollar[1].pos, - Body: yyDollar[2].expr, - Clauses: yyDollar[3].exprs, - End: End{Pos: yyDollar[4].pos}, - ForceMultiLine: forceMultiLineComprehension(yyDollar[1].pos, yyDollar[2].expr, yyDollar[3].exprs, yyDollar[4].pos), - } - } - case 48: - yyDollar = yyS[yypt-4 : yypt+1] -//line build/parse.y:567 - { - yyVAL.expr = &Comprehension{ - Curly: true, - Lbrack: yyDollar[1].pos, - Body: yyDollar[2].expr, - Clauses: yyDollar[3].exprs, - End: End{Pos: yyDollar[4].pos}, - ForceMultiLine: forceMultiLineComprehension(yyDollar[1].pos, yyDollar[2].expr, yyDollar[3].exprs, yyDollar[4].pos), - } - } - case 49: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:578 - { - yyVAL.expr = &DictExpr{ - Start: yyDollar[1].pos, - List: yyDollar[2].exprs, - End: End{Pos: yyDollar[3].pos}, - ForceMultiLine: forceMultiLine(yyDollar[1].pos, yyDollar[2].exprs, yyDollar[3].pos), - } - } - case 50: - yyDollar = yyS[yypt-4 : yypt+1] -//line build/parse.y:587 - { - yyVAL.expr = &SetExpr{ - Start: yyDollar[1].pos, - List: yyDollar[2].exprs, - End: End{Pos: yyDollar[4].pos}, - ForceMultiLine: forceMultiLine(yyDollar[1].pos, yyDollar[2].exprs, yyDollar[4].pos), - } - } - case 51: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:596 - { - if len(yyDollar[2].exprs) == 1 && yyDollar[2].comma.Line == 0 { - // Just a parenthesized expression, not a tuple. - yyVAL.expr = &ParenExpr{ - Start: yyDollar[1].pos, - X: yyDollar[2].exprs[0], - End: End{Pos: yyDollar[3].pos}, - ForceMultiLine: forceMultiLine(yyDollar[1].pos, yyDollar[2].exprs, yyDollar[3].pos), - } - } else { - yyVAL.expr = &TupleExpr{ - Start: yyDollar[1].pos, - List: yyDollar[2].exprs, - End: End{Pos: yyDollar[3].pos}, - ForceCompact: forceCompact(yyDollar[1].pos, yyDollar[2].exprs, yyDollar[3].pos), - ForceMultiLine: forceMultiLine(yyDollar[1].pos, yyDollar[2].exprs, yyDollar[3].pos), - } - } - } - case 52: - yyDollar = yyS[yypt-0 : yypt+1] -//line build/parse.y:617 - { - yyVAL.exprs = nil - } - case 53: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:621 - { - yyVAL.exprs = yyDollar[1].exprs - } - case 54: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:627 - { - yyVAL.exprs = []Expr{yyDollar[1].expr} - } - case 55: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:631 - { - yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) - } - case 57: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:638 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 58: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:642 - { - yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr) - } - case 59: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:646 - { - yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr) - } - case 60: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:651 - { - yyVAL.loadargs = []*struct { - from Ident - to Ident - }{yyDollar[1].loadarg} - } - case 61: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:655 - { - yyDollar[1].loadargs = append(yyDollar[1].loadargs, yyDollar[3].loadarg) - yyVAL.loadargs = yyDollar[1].loadargs - } - case 62: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:661 - { - start := yyDollar[1].string.Start.add("'") - if yyDollar[1].string.TripleQuote { - start = start.add("''") - } - yyVAL.loadarg = &struct { - from Ident - to Ident - }{ - from: Ident{ - Name: yyDollar[1].string.Value, - NamePos: start, - }, - to: Ident{ - Name: yyDollar[1].string.Value, - NamePos: start, - }, - } - } - case 63: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:678 - { - start := yyDollar[3].string.Start.add("'") - if yyDollar[3].string.TripleQuote { - start = start.add("''") - } - yyVAL.loadarg = &struct { - from Ident - to Ident - }{ - from: Ident{ - Name: yyDollar[3].string.Value, - NamePos: start, - }, - to: *yyDollar[1].expr.(*Ident), - } - } - case 64: - yyDollar = yyS[yypt-0 : yypt+1] -//line build/parse.y:693 - { - yyVAL.exprs = nil - } - case 65: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:697 - { - yyVAL.exprs = yyDollar[1].exprs - } - case 66: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:703 - { - yyVAL.exprs = []Expr{yyDollar[1].expr} - } - case 67: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:707 - { - yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) - } - case 69: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:714 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 70: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:718 - { - yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr) - } - case 71: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:722 - { - yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, nil) - } - case 72: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:726 - { - yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr) - } - case 74: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:733 - { - tuple, ok := yyDollar[1].expr.(*TupleExpr) - if !ok || !tuple.NoBrackets { - tuple = &TupleExpr{ - List: []Expr{yyDollar[1].expr}, - NoBrackets: true, - ForceCompact: true, - ForceMultiLine: false, - } - } - tuple.List = append(tuple.List, yyDollar[3].expr) - yyVAL.expr = tuple - } - case 75: - yyDollar = yyS[yypt-0 : yypt+1] -//line build/parse.y:748 - { - yyVAL.expr = nil - } - case 77: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:755 - { - yyVAL.exprs = []Expr{yyDollar[1].expr} - } - case 78: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:759 - { - yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) - } - case 79: - yyDollar = yyS[yypt-0 : yypt+1] -//line build/parse.y:764 - { - yyVAL.exprs = nil - } - case 80: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:768 - { - yyVAL.exprs = yyDollar[1].exprs - } - case 82: - yyDollar = yyS[yypt-4 : yypt+1] -//line build/parse.y:775 - { - yyVAL.expr = &LambdaExpr{ - Function: Function{ - StartPos: yyDollar[1].pos, - Params: yyDollar[2].exprs, - Body: []Expr{yyDollar[4].expr}, - }, - } - } - case 83: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:784 - { - yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr) - } - case 84: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:785 - { - yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr) - } - case 85: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:786 - { - yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr) - } - case 86: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:787 - { - yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr) - } - case 87: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:788 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 88: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:789 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 89: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:790 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 90: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:791 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 91: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:792 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 92: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:793 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 93: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:794 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 94: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:795 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 95: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:796 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 96: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:797 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 97: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:798 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 98: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:799 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 99: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:800 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 100: - yyDollar = yyS[yypt-4 : yypt+1] -//line build/parse.y:801 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, "not in", yyDollar[4].expr) - } - case 101: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:802 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 102: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:803 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 103: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:804 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 104: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:805 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 105: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:806 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 106: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:807 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 107: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:808 - { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - case 108: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:810 - { - if b, ok := yyDollar[3].expr.(*UnaryExpr); ok && b.Op == "not" { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, "is not", b.X) - } else { - yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr) - } - } - case 109: - yyDollar = yyS[yypt-5 : yypt+1] -//line build/parse.y:818 - { - yyVAL.expr = &ConditionalExpr{ - Then: yyDollar[1].expr, - IfStart: yyDollar[2].pos, - Test: yyDollar[3].expr, - ElseStart: yyDollar[4].pos, - Else: yyDollar[5].expr, - } - } - case 110: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:830 - { - yyVAL.exprs = []Expr{yyDollar[1].expr} - } - case 111: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:834 - { - yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) - } - case 112: - yyDollar = yyS[yypt-0 : yypt+1] -//line build/parse.y:839 - { - yyVAL.expr = nil - } - case 114: - yyDollar = yyS[yypt-0 : yypt+1] -//line build/parse.y:845 - { - yyVAL.exprs, yyVAL.comma = nil, Position{} - } - case 115: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:849 - { - yyVAL.exprs, yyVAL.comma = yyDollar[1].exprs, yyDollar[2].pos - } - case 116: - yyDollar = yyS[yypt-0 : yypt+1] -//line build/parse.y:858 - { - yyVAL.pos = Position{} - } - case 118: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:864 - { - yyVAL.expr = &KeyValueExpr{ - Key: yyDollar[1].expr, - Colon: yyDollar[2].pos, - Value: yyDollar[3].expr, - } - } - case 119: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:874 - { - yyVAL.exprs = []Expr{yyDollar[1].expr} - } - case 120: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:878 - { - yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) - } - case 121: - yyDollar = yyS[yypt-0 : yypt+1] -//line build/parse.y:883 - { - yyVAL.exprs = nil - } - case 122: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:887 - { - yyVAL.exprs = yyDollar[1].exprs - } - case 123: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:891 - { - yyVAL.exprs = yyDollar[1].exprs - } - case 125: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:898 - { - tuple, ok := yyDollar[1].expr.(*TupleExpr) - if !ok || !tuple.NoBrackets { - tuple = &TupleExpr{ - List: []Expr{yyDollar[1].expr}, - NoBrackets: true, - ForceCompact: true, - ForceMultiLine: false, - } - } - tuple.List = append(tuple.List, yyDollar[3].expr) - yyVAL.expr = tuple - } - case 126: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:914 - { - yyVAL.string = &StringExpr{ - Start: yyDollar[1].pos, - Value: yyDollar[1].str, - TripleQuote: yyDollar[1].triple, - End: yyDollar[1].pos.add(yyDollar[1].tok), - Token: yyDollar[1].tok, - } - } - case 127: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:926 - { - yyVAL.strings = []*StringExpr{yyDollar[1].string} - } - case 128: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:930 - { - yyVAL.strings = append(yyDollar[1].strings, yyDollar[2].string) - } - case 129: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:936 - { - yyVAL.expr = &Ident{NamePos: yyDollar[1].pos, Name: yyDollar[1].tok} - } - case 130: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:942 - { - yyVAL.expr = &LiteralExpr{Start: yyDollar[1].pos, Token: yyDollar[1].tok} - } - case 131: - yyDollar = yyS[yypt-4 : yypt+1] -//line build/parse.y:948 - { - yyVAL.expr = &ForClause{ - For: yyDollar[1].pos, - Vars: yyDollar[2].expr, - In: yyDollar[3].pos, - X: yyDollar[4].expr, - } - } - case 132: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:958 - { - yyVAL.exprs = []Expr{yyDollar[1].expr} - } - case 133: - yyDollar = yyS[yypt-3 : yypt+1] -//line build/parse.y:961 - { - yyVAL.exprs = append(yyDollar[1].exprs, &IfClause{ - If: yyDollar[2].pos, - Cond: yyDollar[3].expr, - }) - } - case 134: - yyDollar = yyS[yypt-1 : yypt+1] -//line build/parse.y:970 - { - yyVAL.exprs = yyDollar[1].exprs - } - case 135: - yyDollar = yyS[yypt-2 : yypt+1] -//line build/parse.y:973 - { - yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[2].exprs...) - } - } - goto yystack /* stack new state and value */ -} diff --git a/vendor/github.com/bazelbuild/buildtools/build/print.go b/vendor/github.com/bazelbuild/buildtools/build/print.go deleted file mode 100644 index 900e39f067..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/build/print.go +++ /dev/null @@ -1,926 +0,0 @@ -/* -Copyright 2016 Google Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -// Printing of syntax trees. - -package build - -import ( - "bytes" - "fmt" - "strings" -) - -const ( - nestedIndentation = 4 // Indentation of nested blocks - listIndentation = 4 // Indentation of multiline expressions - defIndentation = 8 // Indentation of multiline function definitions -) - -// Format returns the formatted form of the given BUILD or bzl file. -func Format(f *File) []byte { - pr := &printer{fileType: f.Type} - pr.file(f) - return pr.Bytes() -} - -// FormatString returns the string form of the given expression. -func FormatString(x Expr) string { - fileType := TypeBuild // for compatibility - if file, ok := x.(*File); ok { - fileType = file.Type - } - - pr := &printer{fileType: fileType} - switch x := x.(type) { - case *File: - pr.file(x) - default: - pr.expr(x, precLow) - } - return pr.String() -} - -// A printer collects the state during printing of a file or expression. -type printer struct { - fileType FileType // different rules can be applied to different file types. - bytes.Buffer // output buffer - comment []Comment // pending end-of-line comments - margin int // left margin (indent), a number of spaces - depth int // nesting depth inside ( ) [ ] { } - level int // nesting level of def-, if-else- and for-blocks - needsNewLine bool // true if the next statement needs a new line before it -} - -// printf prints to the buffer. -func (p *printer) printf(format string, args ...interface{}) { - fmt.Fprintf(p, format, args...) -} - -// indent returns the position on the current line, in bytes, 0-indexed. -func (p *printer) indent() int { - b := p.Bytes() - n := 0 - for n < len(b) && b[len(b)-1-n] != '\n' { - n++ - } - return n -} - -// newline ends the current line, flushing end-of-line comments. -// It must only be called when printing a newline is known to be safe: -// when not inside an expression or when p.depth > 0. -// To break a line inside an expression that might not be enclosed -// in brackets of some kind, use breakline instead. -func (p *printer) newline() { - p.needsNewLine = false - if len(p.comment) > 0 { - p.printf(" ") - for i, com := range p.comment { - if i > 0 { - p.trim() - p.printf("\n%*s", p.margin, "") - } - p.printf("%s", strings.TrimSpace(com.Token)) - } - p.comment = p.comment[:0] - } - - p.trim() - p.printf("\n%*s", p.margin, "") -} - -// softNewline postpones a call to newline to the next call of p.newlineIfNeeded() -// If softNewline is called several times, just one newline is printed. -// Usecase: if there are several nested blocks ending at the same time, for instance -// -// if True: -// for a in b: -// pass -// foo() -// -// the last statement (`pass`) doesn't end with a newline, each block ends with a lazy newline -// which actually gets printed only once when right before the next statement (`foo()`) is printed. -func (p *printer) softNewline() { - p.needsNewLine = true -} - -// newlineIfNeeded calls newline if softNewline() has previously been called -func (p *printer) newlineIfNeeded() { - if p.needsNewLine == true { - p.newline() - } -} - -// breakline breaks the current line, inserting a continuation \ if needed. -// If no continuation \ is needed, breakline flushes end-of-line comments. -func (p *printer) breakline() { - if p.depth == 0 { - // Cannot have both final \ and comments. - p.printf(" \\\n%*s", p.margin, "") - return - } - - // Safe to use newline. - p.newline() -} - -// trim removes trailing spaces from the current line. -func (p *printer) trim() { - // Remove trailing space from line we're about to end. - b := p.Bytes() - n := len(b) - for n > 0 && b[n-1] == ' ' { - n-- - } - p.Truncate(n) -} - -// file formats the given file into the print buffer. -func (p *printer) file(f *File) { - for _, com := range f.Before { - p.printf("%s", strings.TrimSpace(com.Token)) - p.newline() - } - - p.statements(f.Stmt) - - for _, com := range f.After { - p.printf("%s", strings.TrimSpace(com.Token)) - p.newline() - } - - p.newlineIfNeeded() -} - -func (p *printer) nestedStatements(stmts []Expr) { - p.margin += nestedIndentation - p.level++ - p.newline() - - p.statements(stmts) - - p.margin -= nestedIndentation - p.level-- -} - -func (p *printer) statements(rawStmts []Expr) { - // rawStmts may contain nils if a refactoring tool replaces an actual statement with nil. - // It means the statements don't exist anymore, just ignore them. - - stmts := []Expr{} - for _, stmt := range rawStmts { - if stmt != nil { - stmts = append(stmts, stmt) - } - } - - for i, stmt := range stmts { - switch stmt := stmt.(type) { - case *CommentBlock: - // comments already handled - - default: - p.expr(stmt, precLow) - } - - // A CommentBlock is an empty statement without a body, - // it doesn't need an line break after the body - if _, ok := stmt.(*CommentBlock); !ok { - p.softNewline() - } - - for _, com := range stmt.Comment().After { - p.newlineIfNeeded() - p.printf("%s", strings.TrimSpace(com.Token)) - p.softNewline() - } - - // Print an empty line break after the statement unless it's the last statement in the sequence. - // In that case a line break should be printed when the block or the file ends. - if i < len(stmts)-1 { - p.newline() - } - - if i+1 < len(stmts) && !p.compactStmt(stmt, stmts[i+1]) { - p.newline() - } - } -} - -// compactStmt reports whether the pair of statements s1, s2 -// should be printed without an intervening blank line. -// We omit the blank line when both are subinclude statements -// and the second one has no leading comments. -func (p *printer) compactStmt(s1, s2 Expr) bool { - if len(s2.Comment().Before) > 0 { - return false - } else if isLoad(s1) && isLoad(s2) { - // Load statements should be compact - return true - } else if isLoad(s1) || isLoad(s2) { - // Load statements should be separated from anything else - return false - } else if isCommentBlock(s1) || isCommentBlock(s2) { - // Standalone comment blocks shouldn't be attached to other statements - return false - } else if (p.fileType == TypeBuild || p.fileType == TypeWorkspace) && p.level == 0 { - // Top-level statements in a BUILD or WORKSPACE file - return false - } else if isFunctionDefinition(s1) || isFunctionDefinition(s2) { - // On of the statements is a function definition - return false - } else { - // Depend on how the statements have been printed in the original file - _, end := s1.Span() - start, _ := s2.Span() - return start.Line-end.Line <= 1 - } -} - -// isLoad reports whether x is a load statement. -func isLoad(x Expr) bool { - _, ok := x.(*LoadStmt) - return ok -} - -// isCommentBlock reports whether x is a comment block node. -func isCommentBlock(x Expr) bool { - _, ok := x.(*CommentBlock) - return ok -} - -// isFunctionDefinition checks if the statement is a def code block -func isFunctionDefinition(x Expr) bool { - _, ok := x.(*DefStmt) - return ok -} - -// isDifferentLines reports whether two positions belong to different lines. -// If one of the positions is null (Line == 0), it's not a real position but probably an indicator -// of manually inserted node. Return false in this case -func isDifferentLines(p1, p2 *Position) bool { - if p1.Line == 0 || p2.Line == 0 { - return false - } - return p1.Line != p2.Line -} - -// Expression formatting. - -// The expression formatter must introduce parentheses to force the -// meaning described by the parse tree. We preserve parentheses in the -// input, so extra parentheses are only needed if we have edited the tree. -// -// For example consider these expressions: -// (1) "x" "y" % foo -// (2) "x" + "y" % foo -// (3) "x" + ("y" % foo) -// (4) ("x" + "y") % foo -// When we parse (1), we represent the concatenation as an addition. -// However, if we print the addition back out without additional parens, -// as in (2), it has the same meaning as (3), which is not the original -// meaning. To preserve the original meaning we must add parens as in (4). -// -// To allow arbitrary rewrites to be formatted properly, we track full -// operator precedence while printing instead of just handling this one -// case of string concatenation. -// -// The precedences are assigned values low to high. A larger number -// binds tighter than a smaller number. All binary operators bind -// left-to-right. -const ( - precLow = iota - precAssign - precColon - precIfElse - precOr - precAnd - precCmp - precBitwiseOr - precBitwiseXor - precBitwiseAnd - precBitwiseShift - precAdd - precMultiply - precUnary - precSuffix -) - -// opPrec gives the precedence for operators found in a BinaryExpr. -var opPrec = map[string]int{ - "or": precOr, - "and": precAnd, - "in": precCmp, - "not in": precCmp, - "<": precCmp, - ">": precCmp, - "==": precCmp, - "!=": precCmp, - "<=": precCmp, - ">=": precCmp, - "+": precAdd, - "-": precAdd, - "*": precMultiply, - "/": precMultiply, - "//": precMultiply, - "%": precMultiply, - "|": precBitwiseOr, - "&": precBitwiseAnd, - "^": precBitwiseXor, - "<<": precBitwiseShift, - ">>": precBitwiseShift, -} - -// expr prints the expression v to the print buffer. -// The value outerPrec gives the precedence of the operator -// outside expr. If that operator binds tighter than v's operator, -// expr must introduce parentheses to preserve the meaning -// of the parse tree (see above). -func (p *printer) expr(v Expr, outerPrec int) { - // Emit line-comments preceding this expression. - // If we are in the middle of an expression but not inside ( ) [ ] { } - // then we cannot just break the line: we'd have to end it with a \. - // However, even then we can't emit line comments since that would - // end the expression. This is only a concern if we have rewritten - // the parse tree. If comments were okay before this expression in - // the original input they're still okay now, in the absense of rewrites. - // - // TODO(bazel-team): Check whether it is valid to emit comments right now, - // and if not, insert them earlier in the output instead, at the most - // recent \n not following a \ line. - p.newlineIfNeeded() - - if before := v.Comment().Before; len(before) > 0 { - // Want to print a line comment. - // Line comments must be at the current margin. - p.trim() - if p.indent() > 0 { - // There's other text on the line. Start a new line. - p.printf("\n") - } - // Re-indent to margin. - p.printf("%*s", p.margin, "") - for _, com := range before { - p.printf("%s", strings.TrimSpace(com.Token)) - p.newline() - } - } - - // Do we introduce parentheses? - // The result depends on the kind of expression. - // Each expression type that might need parentheses - // calls addParen with its own precedence. - // If parentheses are necessary, addParen prints the - // opening parenthesis and sets parenthesized so that - // the code after the switch can print the closing one. - parenthesized := false - addParen := func(prec int) { - if prec < outerPrec { - p.printf("(") - p.depth++ - parenthesized = true - } - } - - switch v := v.(type) { - default: - panic(fmt.Errorf("printer: unexpected type %T", v)) - - case *LiteralExpr: - p.printf("%s", v.Token) - - case *Ident: - p.printf("%s", v.Name) - - case *BranchStmt: - p.printf("%s", v.Token) - - case *StringExpr: - // If the Token is a correct quoting of Value and has double quotes, use it, - // also use it if it has single quotes and the value itself contains a double quote symbol. - // This preserves the specific escaping choices that BUILD authors have made. - s, triple, err := Unquote(v.Token) - if s == v.Value && triple == v.TripleQuote && err == nil { - if strings.HasPrefix(v.Token, `"`) || strings.ContainsRune(v.Value, '"') { - p.printf("%s", v.Token) - break - } - } - - p.printf("%s", quote(v.Value, v.TripleQuote)) - - case *DotExpr: - addParen(precSuffix) - p.expr(v.X, precSuffix) - _, xEnd := v.X.Span() - isMultiline := isDifferentLines(&v.NamePos, &xEnd) - if isMultiline { - p.margin += listIndentation - p.breakline() - } - p.printf(".%s", v.Name) - if isMultiline { - p.margin -= listIndentation - } - - case *IndexExpr: - addParen(precSuffix) - p.expr(v.X, precSuffix) - p.printf("[") - p.expr(v.Y, precLow) - p.printf("]") - - case *KeyValueExpr: - p.expr(v.Key, precLow) - p.printf(": ") - p.expr(v.Value, precLow) - - case *SliceExpr: - addParen(precSuffix) - p.expr(v.X, precSuffix) - p.printf("[") - if v.From != nil { - p.expr(v.From, precLow) - } - p.printf(":") - if v.To != nil { - p.expr(v.To, precLow) - } - if v.SecondColon.Byte != 0 { - p.printf(":") - if v.Step != nil { - p.expr(v.Step, precLow) - } - } - p.printf("]") - - case *UnaryExpr: - addParen(precUnary) - if v.Op == "not" { - p.printf("not ") // Requires a space after it. - } else { - p.printf("%s", v.Op) - } - // Use the next precedence level (precSuffix), so that nested unary expressions are parenthesized, - // for example: `not (-(+(~foo)))` instead of `not -+~foo` - if v.X != nil { - p.expr(v.X, precSuffix) - } - - case *LambdaExpr: - addParen(precColon) - p.printf("lambda ") - for i, param := range v.Params { - if i > 0 { - p.printf(", ") - } - p.expr(param, precLow) - } - p.printf(": ") - p.expr(v.Body[0], precLow) // lambdas should have exactly one statement - - case *BinaryExpr: - // Precedence: use the precedence of the operator. - // Since all binary expressions format left-to-right, - // it is okay for the left side to reuse the same operator - // without parentheses, so we use prec for v.X. - // For the same reason, the right side cannot reuse the same - // operator, or else a parse tree for a + (b + c), where the ( ) are - // not present in the source, will format as a + b + c, which - // means (a + b) + c. Treat the right expression as appearing - // in a context one precedence level higher: use prec+1 for v.Y. - // - // Line breaks: if we are to break the line immediately after - // the operator, introduce a margin at the current column, - // so that the second operand lines up with the first one and - // also so that neither operand can use space to the left. - // If the operator is an =, indent the right side another 4 spaces. - prec := opPrec[v.Op] - addParen(prec) - m := p.margin - if v.LineBreak { - p.margin = p.indent() - } - - p.expr(v.X, prec) - p.printf(" %s", v.Op) - if v.LineBreak { - p.breakline() - } else { - p.printf(" ") - } - p.expr(v.Y, prec+1) - p.margin = m - - case *AssignExpr: - addParen(precAssign) - m := p.margin - if v.LineBreak { - p.margin = p.indent() + listIndentation - } - - p.expr(v.LHS, precAssign) - p.printf(" %s", v.Op) - if v.LineBreak { - p.breakline() - } else { - p.printf(" ") - } - p.expr(v.RHS, precAssign+1) - p.margin = m - - case *ParenExpr: - p.seq("()", &v.Start, &[]Expr{v.X}, &v.End, modeParen, false, v.ForceMultiLine) - - case *CallExpr: - addParen(precSuffix) - p.expr(v.X, precSuffix) - p.seq("()", &v.ListStart, &v.List, &v.End, modeCall, v.ForceCompact, v.ForceMultiLine) - - case *LoadStmt: - addParen(precSuffix) - p.printf("load") - args := []Expr{v.Module} - for i := range v.From { - from := v.From[i] - to := v.To[i] - var arg Expr - if from.Name == to.Name { - // Suffix comments are attached to the `to` token, - // Before comments are attached to the `from` token, - // they need to be combined. - arg = from.asString() - arg.Comment().Before = to.Comment().Before - } else { - arg = &AssignExpr{ - LHS: to, - Op: "=", - RHS: from.asString(), - } - } - args = append(args, arg) - } - p.seq("()", &v.Load, &args, &v.Rparen, modeLoad, v.ForceCompact, false) - - case *ListExpr: - p.seq("[]", &v.Start, &v.List, &v.End, modeList, false, v.ForceMultiLine) - - case *SetExpr: - p.seq("{}", &v.Start, &v.List, &v.End, modeList, false, v.ForceMultiLine) - - case *TupleExpr: - mode := modeTuple - if v.NoBrackets { - mode = modeSeq - } - p.seq("()", &v.Start, &v.List, &v.End, mode, v.ForceCompact, v.ForceMultiLine) - - case *DictExpr: - var list []Expr - for _, x := range v.List { - list = append(list, x) - } - p.seq("{}", &v.Start, &list, &v.End, modeDict, false, v.ForceMultiLine) - - case *Comprehension: - p.listFor(v) - - case *ConditionalExpr: - addParen(precSuffix) - p.expr(v.Then, precIfElse) - p.printf(" if ") - p.expr(v.Test, precIfElse) - p.printf(" else ") - p.expr(v.Else, precIfElse) - - case *ReturnStmt: - p.printf("return") - if v.Result != nil { - p.printf(" ") - p.expr(v.Result, precLow) - } - - case *DefStmt: - p.printf("def ") - p.printf(v.Name) - p.seq("()", &v.StartPos, &v.Params, nil, modeDef, v.ForceCompact, v.ForceMultiLine) - p.printf(":") - p.nestedStatements(v.Body) - - case *ForStmt: - p.printf("for ") - p.expr(v.Vars, precLow) - p.printf(" in ") - p.expr(v.X, precLow) - p.printf(":") - p.nestedStatements(v.Body) - - case *IfStmt: - block := v - isFirst := true - needsEmptyLine := false - for { - p.newlineIfNeeded() - if !isFirst { - if needsEmptyLine { - p.newline() - } - p.printf("el") - } - p.printf("if ") - p.expr(block.Cond, precLow) - p.printf(":") - p.nestedStatements(block.True) - - isFirst = false - _, end := block.True[len(block.True)-1].Span() - needsEmptyLine = block.ElsePos.Pos.Line-end.Line > 1 - - // If the else-block contains just one statement which is an IfStmt, flatten it as a part - // of if-elif chain. - // Don't do it if the "else" statement has a suffix comment or if the next "if" statement - // has a before-comment. - if len(block.False) != 1 { - break - } - next, ok := block.False[0].(*IfStmt) - if !ok { - break - } - if len(block.ElsePos.Comment().Suffix) == 0 && len(next.Comment().Before) == 0 { - block = next - continue - } - break - } - - if len(block.False) > 0 { - p.newlineIfNeeded() - if needsEmptyLine { - p.newline() - } - p.printf("else:") - p.comment = append(p.comment, block.ElsePos.Comment().Suffix...) - p.nestedStatements(block.False) - } - case *ForClause: - p.printf("for ") - p.expr(v.Vars, precLow) - p.printf(" in ") - p.expr(v.X, precLow) - case *IfClause: - p.printf("if ") - p.expr(v.Cond, precLow) - } - - // Add closing parenthesis if needed. - if parenthesized { - p.depth-- - p.printf(")") - } - - // Queue end-of-line comments for printing when we - // reach the end of the line. - p.comment = append(p.comment, v.Comment().Suffix...) -} - -// A seqMode describes a formatting mode for a sequence of values, -// like a list or call arguments. -type seqMode int - -const ( - _ seqMode = iota - - modeCall // f(x) - modeList // [x] - modeTuple // (x,) - modeParen // (x) - modeDict // {x:y} - modeSeq // x, y - modeDef // def f(x, y) - modeLoad // load(a, b, c) -) - -// useCompactMode reports whether a sequence should be formatted in a compact mode -func (p *printer) useCompactMode(start *Position, list *[]Expr, end *End, mode seqMode, forceCompact, forceMultiLine bool) bool { - // If there are line comments, use multiline - // so we can print the comments before the closing bracket. - for _, x := range *list { - if len(x.Comment().Before) > 0 || (len(x.Comment().Suffix) > 0 && mode != modeDef) { - return false - } - } - if end != nil && len(end.Before) > 0 { - return false - } - - // Implicit tuples are always compact - if mode == modeSeq { - return true - } - - // In the Default and .bzl printing modes try to keep the original printing style. - // Non-top-level statements and lists of arguments of a function definition - // should also keep the original style regardless of the mode. - if (p.level != 0 || p.fileType == TypeDefault || p.fileType == TypeBzl || mode == modeDef) && mode != modeLoad { - // If every element (including the brackets) ends on the same line where the next element starts, - // use the compact mode, otherwise use multiline mode. - // If an node's line number is 0, it means it doesn't appear in the original file, - // its position shouldn't be taken into account. Unless a sequence is new, - // then use multiline mode if ForceMultiLine mode was set. - previousEnd := start - isNewSeq := start.Line == 0 - for _, x := range *list { - start, end := x.Span() - isNewSeq = isNewSeq && start.Line == 0 - if isDifferentLines(&start, previousEnd) { - return false - } - if end.Line != 0 { - previousEnd = &end - } - } - if end != nil { - isNewSeq = isNewSeq && end.Pos.Line == 0 - if isDifferentLines(previousEnd, &end.Pos) { - return false - } - } - if !isNewSeq { - return true - } - // Use the forceMultiline value for new sequences. - return !forceMultiLine - } - // In Build mode, use the forceMultiline and forceCompact values - if forceMultiLine { - return false - } - if forceCompact { - return true - } - // If neither of the flags are set, use compact mode only for empty or 1-element sequences - return len(*list) <= 1 -} - -// seq formats a list of values inside a given bracket pair (brack = "()", "[]", "{}"). -// The end node holds any trailing comments to be printed just before the -// closing bracket. -// The mode parameter specifies the sequence mode (see above). -// If multiLine is true, seq avoids the compact form even -// for 0- and 1-element sequences. -func (p *printer) seq(brack string, start *Position, list *[]Expr, end *End, mode seqMode, forceCompact, forceMultiLine bool) { - if mode != modeSeq { - p.printf("%s", brack[:1]) - } - p.depth++ - defer func() { - p.depth-- - if mode != modeSeq { - p.printf("%s", brack[1:]) - } - }() - - if p.useCompactMode(start, list, end, mode, forceCompact, forceMultiLine) { - for i, x := range *list { - if i > 0 { - p.printf(", ") - } - p.expr(x, precLow) - } - // Single-element tuple must end with comma, to mark it as a tuple. - if len(*list) == 1 && mode == modeTuple { - p.printf(",") - } - return - } - // Multi-line form. - indentation := listIndentation - if mode == modeDef { - indentation = defIndentation - } - p.margin += indentation - - for i, x := range *list { - // If we are about to break the line before the first - // element and there are trailing end-of-line comments - // waiting to be printed, delay them and print them as - // whole-line comments preceding that element. - // Do this by printing a newline ourselves and positioning - // so that the end-of-line comment, with the two spaces added, - // will line up with the current margin. - if i == 0 && len(p.comment) > 0 { - p.printf("\n%*s", p.margin-2, "") - } - - p.newline() - p.expr(x, precLow) - - if i+1 < len(*list) || needsTrailingComma(mode, x) { - p.printf(",") - } - } - // Final comments. - if end != nil { - for _, com := range end.Before { - p.newline() - p.printf("%s", strings.TrimSpace(com.Token)) - } - } - p.margin -= indentation - // in modeDef print the closing bracket on the same line - if mode != modeDef { - p.newline() - } -} - -func needsTrailingComma(mode seqMode, v Expr) bool { - switch mode { - case modeDef: - return false - case modeParen: - return false - case modeCall: - // *args and **kwargs in fn calls - switch v := v.(type) { - case *UnaryExpr: - if v.Op == "*" || v.Op == "**" { - return false - } - } - } - return true -} - -// listFor formats a ListForExpr (list comprehension). -// The single-line form is: -// [x for y in z if c] -// -// and the multi-line form is: -// [ -// x -// for y in z -// if c -// ] -// -func (p *printer) listFor(v *Comprehension) { - multiLine := v.ForceMultiLine || len(v.End.Before) > 0 - - // space breaks the line in multiline mode - // or else prints a space. - space := func() { - if multiLine { - p.breakline() - } else { - p.printf(" ") - } - } - - open, close := "[", "]" - if v.Curly { - open, close = "{", "}" - } - p.depth++ - p.printf("%s", open) - - if multiLine { - p.margin += listIndentation - p.newline() - } - - p.expr(v.Body, precLow) - - for _, c := range v.Clauses { - space() - p.expr(c, precLow) - } - - if multiLine { - for _, com := range v.End.Before { - p.newline() - p.printf("%s", strings.TrimSpace(com.Token)) - } - p.margin -= listIndentation - p.newline() - } - - p.printf("%s", close) - p.depth-- -} - -func (p *printer) isTopLevel() bool { - return p.margin == 0 -} diff --git a/vendor/github.com/bazelbuild/buildtools/build/quote.go b/vendor/github.com/bazelbuild/buildtools/build/quote.go deleted file mode 100644 index 901f16bc68..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/build/quote.go +++ /dev/null @@ -1,262 +0,0 @@ -/* -Copyright 2016 Google Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -// Python quoted strings. - -package build - -import ( - "bytes" - "fmt" - "strconv" - "strings" -) - -// unesc maps single-letter chars following \ to their actual values. -var unesc = [256]byte{ - 'a': '\a', - 'b': '\b', - 'f': '\f', - 'n': '\n', - 'r': '\r', - 't': '\t', - 'v': '\v', - '\\': '\\', - '\'': '\'', - '"': '"', -} - -// esc maps escape-worthy bytes to the char that should follow \. -var esc = [256]byte{ - '\a': 'a', - '\b': 'b', - '\f': 'f', - '\n': 'n', - '\r': 'r', - '\t': 't', - '\v': 'v', - '\\': '\\', - '\'': '\'', - '"': '"', -} - -// notEsc is a list of characters that can follow a \ in a string value -// without having to escape the \. That is, since ( is in this list, we -// quote the Go string "foo\\(bar" as the Python literal "foo\(bar". -// This really does happen in BUILD files, especially in strings -// being used as shell arguments containing regular expressions. -const notEsc = " !#$%&()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~" - -// Unquote unquotes the quoted string, returning the actual -// string value, whether the original was triple-quoted, and -// an error describing invalid input. -func Unquote(quoted string) (s string, triple bool, err error) { - // Check for raw prefix: means don't interpret the inner \. - raw := false - if strings.HasPrefix(quoted, "r") { - raw = true - quoted = quoted[1:] - } - - if len(quoted) < 2 { - err = fmt.Errorf("string literal too short") - return - } - - if quoted[0] != '"' && quoted[0] != '\'' || quoted[0] != quoted[len(quoted)-1] { - err = fmt.Errorf("string literal has invalid quotes") - } - - // Check for triple quoted string. - quote := quoted[0] - if len(quoted) >= 6 && quoted[1] == quote && quoted[2] == quote && quoted[:3] == quoted[len(quoted)-3:] { - triple = true - quoted = quoted[3 : len(quoted)-3] - } else { - quoted = quoted[1 : len(quoted)-1] - } - - // Now quoted is the quoted data, but no quotes. - // If we're in raw mode or there are no escapes, we're done. - if raw || !strings.Contains(quoted, `\`) { - s = quoted - return - } - - // Otherwise process quoted string. - // Each iteration processes one escape sequence along with the - // plain text leading up to it. - var buf bytes.Buffer - for { - // Remove prefix before escape sequence. - i := strings.Index(quoted, `\`) - if i < 0 { - i = len(quoted) - } - buf.WriteString(quoted[:i]) - quoted = quoted[i:] - - if len(quoted) == 0 { - break - } - - // Process escape sequence. - if len(quoted) == 1 { - err = fmt.Errorf(`truncated escape sequence \`) - return - } - - switch quoted[1] { - default: - // In Python, if \z (for some byte z) is not a known escape sequence - // then it appears as literal text in the string. - buf.WriteString(quoted[:2]) - quoted = quoted[2:] - - case '\n': - // Ignore the escape and the line break. - quoted = quoted[2:] - - case 'a', 'b', 'f', 'n', 'r', 't', 'v', '\\', '\'', '"': - // One-char escape - buf.WriteByte(unesc[quoted[1]]) - quoted = quoted[2:] - - case '0', '1', '2', '3', '4', '5', '6', '7': - // Octal escape, up to 3 digits. - n := int(quoted[1] - '0') - quoted = quoted[2:] - for i := 1; i < 3; i++ { - if len(quoted) == 0 || quoted[0] < '0' || '7' < quoted[0] { - break - } - n = n*8 + int(quoted[0]-'0') - quoted = quoted[1:] - } - if n >= 256 { - // NOTE: Python silently discards the high bit, - // so that '\541' == '\141' == 'a'. - // Let's see if we can avoid doing that in BUILD files. - err = fmt.Errorf(`invalid escape sequence \%03o`, n) - return - } - buf.WriteByte(byte(n)) - - case 'x': - // Hexadecimal escape, exactly 2 digits. - if len(quoted) < 4 { - err = fmt.Errorf(`truncated escape sequence %s`, quoted) - return - } - n, err1 := strconv.ParseInt(quoted[2:4], 16, 0) - if err1 != nil { - err = fmt.Errorf(`invalid escape sequence %s`, quoted[:4]) - return - } - buf.WriteByte(byte(n)) - quoted = quoted[4:] - } - } - - s = buf.String() - return -} - -// indexByte returns the index of the first instance of b in s, or else -1. -func indexByte(s string, b byte) int { - for i := 0; i < len(s); i++ { - if s[i] == b { - return i - } - } - return -1 -} - -// hex is a list of the hexadecimal digits, for use in quoting. -// We always print lower-case hexadecimal. -const hex = "0123456789abcdef" - -// quote returns the quoted form of the string value "x". -// If triple is true, quote uses the triple-quoted form """x""". -func quote(unquoted string, triple bool) string { - q := `"` - if triple { - q = `"""` - } - - var buf bytes.Buffer - buf.WriteString(q) - - for i := 0; i < len(unquoted); i++ { - c := unquoted[i] - if c == '"' && triple && (i+1 < len(unquoted) && unquoted[i+1] != '"' || i+2 < len(unquoted) && unquoted[i+2] != '"') { - // Can pass up to two quotes through, because they are followed by a non-quote byte. - buf.WriteByte(c) - if i+1 < len(unquoted) && unquoted[i+1] == '"' { - buf.WriteByte(c) - i++ - } - continue - } - if triple && c == '\n' { - // Can allow newline in triple-quoted string. - buf.WriteByte(c) - continue - } - if c == '\'' { - // Can allow ' since we always use ". - buf.WriteByte(c) - continue - } - if c == '\\' { - if i+1 < len(unquoted) && indexByte(notEsc, unquoted[i+1]) >= 0 { - // Can pass \ through when followed by a byte that - // known not to be a valid escape sequence and also - // that does not trigger an escape sequence of its own. - // Use this, because various BUILD files do. - buf.WriteByte('\\') - buf.WriteByte(unquoted[i+1]) - i++ - continue - } - } - if esc[c] != 0 { - buf.WriteByte('\\') - buf.WriteByte(esc[c]) - continue - } - if c < 0x20 || c >= 0x80 { - // BUILD files are supposed to be Latin-1, so escape all control and high bytes. - // I'd prefer to use \x here, but Blaze does not implement - // \x in quoted strings (b/7272572). - buf.WriteByte('\\') - buf.WriteByte(hex[c>>6]) // actually octal but reusing hex digits 0-7. - buf.WriteByte(hex[(c>>3)&7]) - buf.WriteByte(hex[c&7]) - /* - buf.WriteByte('\\') - buf.WriteByte('x') - buf.WriteByte(hex[c>>4]) - buf.WriteByte(hex[c&0xF]) - */ - continue - } - buf.WriteByte(c) - continue - } - - buf.WriteString(q) - return buf.String() -} diff --git a/vendor/github.com/bazelbuild/buildtools/build/rewrite.go b/vendor/github.com/bazelbuild/buildtools/build/rewrite.go deleted file mode 100644 index 50fb7015a1..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/build/rewrite.go +++ /dev/null @@ -1,1002 +0,0 @@ -/* -Copyright 2016 Google Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -// Rewriting of high-level (not purely syntactic) BUILD constructs. - -package build - -import ( - "github.com/bazelbuild/buildtools/tables" - "path" - "path/filepath" - "regexp" - "sort" - "strings" -) - -// For debugging: flag to disable certain rewrites. -var DisableRewrites []string - -// disabled reports whether the named rewrite is disabled. -func disabled(name string) bool { - for _, x := range DisableRewrites { - if name == x { - return true - } - } - return false -} - -// For debugging: allow sorting of these lists even with sorting otherwise disabled. -var AllowSort []string - -// allowedSort reports whether sorting is allowed in the named context. -func allowedSort(name string) bool { - for _, x := range AllowSort { - if name == x { - return true - } - } - return false -} - -// Rewrite applies the high-level Buildifier rewrites to f, modifying it in place. -// If info is non-nil, Rewrite updates it with information about the rewrite. -func Rewrite(f *File, info *RewriteInfo) { - // Allocate an info so that helpers can assume it's there. - if info == nil { - info = new(RewriteInfo) - } - - for _, r := range rewrites { - if !disabled(r.name) { - if f.Type&r.scope != 0 { - r.fn(f, info) - } - } - } -} - -// RewriteInfo collects information about what Rewrite did. -type RewriteInfo struct { - EditLabel int // number of label strings edited - NameCall int // number of calls with argument names added - SortCall int // number of call argument lists sorted - SortStringList int // number of string lists sorted - UnsafeSort int // number of unsafe string lists sorted - SortLoad int // number of load argument lists sorted - FormatDocstrings int // number of reindented docstrings - ReorderArguments int // number of reordered function call arguments - EditOctal int // number of edited octals - Log []string // log entries - may change -} - -// Stats returns a map with statistics about applied rewrites -func (info *RewriteInfo) Stats() map[string]int { - return map[string]int{ - "label": info.EditLabel, - "callname": info.NameCall, - "callsort": info.SortCall, - "listsort": info.SortStringList, - "unsafesort": info.UnsafeSort, - "sortload": info.SortLoad, - "formatdocstrings": info.FormatDocstrings, - "reorderarguments": info.ReorderArguments, - "editoctal": info.EditOctal, - } -} - -// Each rewrite function can be either applied for BUILD files, other files (such as .bzl), -// or all files. -const ( - scopeDefault = TypeDefault | TypeBzl // .bzl and generic Starlark files - scopeBuild = TypeBuild | TypeWorkspace // BUILD and WORKSPACE files - scopeBoth = scopeDefault | scopeBuild -) - -// rewrites is the list of all Buildifier rewrites, in the order in which they are applied. -// The order here matters: for example, label canonicalization must happen -// before sorting lists of strings. -var rewrites = []struct { - name string - fn func(*File, *RewriteInfo) - scope FileType -}{ - {"callsort", sortCallArgs, scopeBuild}, - {"label", fixLabels, scopeBuild}, - {"listsort", sortStringLists, scopeBoth}, - {"multiplus", fixMultilinePlus, scopeBuild}, - {"loadsort", sortAllLoadArgs, scopeBoth}, - {"formatdocstrings", formatDocstrings, scopeBoth}, - {"reorderarguments", reorderArguments, scopeBoth}, - {"editoctal", editOctals, scopeBoth}, -} - -// DisableLoadSortForBuildFiles disables the loadsort transformation for BUILD files. -// This is a temporary function for backward compatibility, can be called if there's plenty of -// already formatted BUILD files that shouldn't be changed by the transformation. -func DisableLoadSortForBuildFiles() { - for i := range rewrites { - if rewrites[i].name == "loadsort" { - rewrites[i].scope = scopeDefault - break - } - } -} - -// leaveAlone reports whether any of the nodes on the stack are marked -// with a comment containing "buildifier: leave-alone". -func leaveAlone(stk []Expr, final Expr) bool { - for _, x := range stk { - if leaveAlone1(x) { - return true - } - } - if final != nil && leaveAlone1(final) { - return true - } - return false -} - -// hasComment reports whether x is marked with a comment that -// after being converted to lower case, contains the specified text. -func hasComment(x Expr, text string) bool { - for _, com := range x.Comment().Before { - if strings.Contains(strings.ToLower(com.Token), text) { - return true - } - } - return false -} - -// leaveAlone1 reports whether x is marked with a comment containing -// "buildifier: leave-alone", case-insensitive. -func leaveAlone1(x Expr) bool { - return hasComment(x, "buildifier: leave-alone") -} - -// doNotSort reports whether x is marked with a comment containing -// "do not sort", case-insensitive. -func doNotSort(x Expr) bool { - return hasComment(x, "do not sort") -} - -// keepSorted reports whether x is marked with a comment containing -// "keep sorted", case-insensitive. -func keepSorted(x Expr) bool { - return hasComment(x, "keep sorted") -} - -// fixLabels rewrites labels into a canonical form. -// -// First, it joins labels written as string addition, turning -// "//x" + ":y" (usually split across multiple lines) into "//x:y". -// -// Second, it removes redundant target qualifiers, turning labels like -// "//third_party/m4:m4" into "//third_party/m4" as well as ones like -// "@foo//:foo" into "@foo". -// -func fixLabels(f *File, info *RewriteInfo) { - joinLabel := func(p *Expr) { - add, ok := (*p).(*BinaryExpr) - if !ok || add.Op != "+" { - return - } - str1, ok := add.X.(*StringExpr) - if !ok || !strings.HasPrefix(str1.Value, "//") || strings.Contains(str1.Value, " ") { - return - } - str2, ok := add.Y.(*StringExpr) - if !ok || strings.Contains(str2.Value, " ") { - return - } - info.EditLabel++ - str1.Value += str2.Value - - // Deleting nodes add and str2. - // Merge comments from add, str1, and str2 and save in str1. - com1 := add.Comment() - com2 := str1.Comment() - com3 := str2.Comment() - com1.Before = append(com1.Before, com2.Before...) - com1.Before = append(com1.Before, com3.Before...) - com1.Suffix = append(com1.Suffix, com2.Suffix...) - com1.Suffix = append(com1.Suffix, com3.Suffix...) - *str1.Comment() = *com1 - - *p = str1 - } - - labelPrefix := "//" - if tables.StripLabelLeadingSlashes { - labelPrefix = "" - } - // labelRE matches label strings, e.g. @r//x/y/z:abc - // where $1 is @r//x/y/z, $2 is @r//, $3 is r, $4 is z, $5 is abc. - labelRE := regexp.MustCompile(`^(((?:@(\w+))?//|` + labelPrefix + `)(?:.+/)?([^:]*))(?::([^:]+))?$`) - - shortenLabel := func(v Expr) { - str, ok := v.(*StringExpr) - if !ok { - return - } - editPerformed := false - - if tables.StripLabelLeadingSlashes && strings.HasPrefix(str.Value, "//") { - if filepath.Dir(f.Path) == "." || !strings.HasPrefix(str.Value, "//:") { - editPerformed = true - str.Value = str.Value[2:] - } - } - - if tables.ShortenAbsoluteLabelsToRelative { - thisPackage := labelPrefix + filepath.Dir(f.Path) - // filepath.Dir on Windows uses backslashes as separators, while labels always have slashes. - if filepath.Separator != '/' { - thisPackage = strings.Replace(thisPackage, string(filepath.Separator), "/", -1) - } - - if str.Value == thisPackage { - editPerformed = true - str.Value = ":" + path.Base(str.Value) - } else if strings.HasPrefix(str.Value, thisPackage+":") { - editPerformed = true - str.Value = str.Value[len(thisPackage):] - } - } - - m := labelRE.FindStringSubmatch(str.Value) - if m == nil { - return - } - if m[4] != "" && m[4] == m[5] { // e.g. //foo:foo - editPerformed = true - str.Value = m[1] - } else if m[3] != "" && m[4] == "" && m[3] == m[5] { // e.g. @foo//:foo - editPerformed = true - str.Value = "@" + m[3] - } - if editPerformed { - info.EditLabel++ - } - } - - Walk(f, func(v Expr, stk []Expr) { - switch v := v.(type) { - case *CallExpr: - if leaveAlone(stk, v) { - return - } - for i := range v.List { - if leaveAlone1(v.List[i]) { - continue - } - as, ok := v.List[i].(*AssignExpr) - if !ok { - continue - } - key, ok := as.LHS.(*Ident) - if !ok || !tables.IsLabelArg[key.Name] || tables.LabelBlacklist[callName(v)+"."+key.Name] { - continue - } - if leaveAlone1(as.RHS) { - continue - } - if list, ok := as.RHS.(*ListExpr); ok { - for i := range list.List { - if leaveAlone1(list.List[i]) { - continue - } - joinLabel(&list.List[i]) - shortenLabel(list.List[i]) - } - } - if set, ok := as.RHS.(*SetExpr); ok { - for i := range set.List { - if leaveAlone1(set.List[i]) { - continue - } - joinLabel(&set.List[i]) - shortenLabel(set.List[i]) - } - } else { - joinLabel(&as.RHS) - shortenLabel(as.RHS) - } - } - } - }) -} - -// callName returns the name of the rule being called by call. -// If the call is not to a literal rule name, callName returns "". -func callName(call *CallExpr) string { - rule, ok := call.X.(*Ident) - if !ok { - return "" - } - return rule.Name -} - -// sortCallArgs sorts lists of named arguments to a call. -func sortCallArgs(f *File, info *RewriteInfo) { - Walk(f, func(v Expr, stk []Expr) { - call, ok := v.(*CallExpr) - if !ok { - return - } - if leaveAlone(stk, call) { - return - } - rule := callName(call) - if rule == "" { - return - } - - // Find the tail of the argument list with named arguments. - start := len(call.List) - for start > 0 && argName(call.List[start-1]) != "" { - start-- - } - - // Record information about each arg into a sortable list. - var args namedArgs - for i, x := range call.List[start:] { - name := argName(x) - args = append(args, namedArg{ruleNamePriority(rule, name), name, i, x}) - } - - // Sort the list and put the args back in the new order. - if sort.IsSorted(args) { - return - } - info.SortCall++ - sort.Sort(args) - for i, x := range args { - call.List[start+i] = x.expr - } - }) -} - -// ruleNamePriority maps a rule argument name to its sorting priority. -// It could use the auto-generated per-rule tables but for now it just -// falls back to the original list. -func ruleNamePriority(rule, arg string) int { - ruleArg := rule + "." + arg - if val, ok := tables.NamePriority[ruleArg]; ok { - return val - } - return tables.NamePriority[arg] - /* - list := ruleArgOrder[rule] - if len(list) == 0 { - return tables.NamePriority[arg] - } - for i, x := range list { - if x == arg { - return i - } - } - return len(list) - */ -} - -// If x is of the form key=value, argName returns the string key. -// Otherwise argName returns "". -func argName(x Expr) string { - if as, ok := x.(*AssignExpr); ok { - if id, ok := as.LHS.(*Ident); ok { - return id.Name - } - } - return "" -} - -// A namedArg records information needed for sorting -// a named call argument into its proper position. -type namedArg struct { - priority int // kind of name; first sort key - name string // name; second sort key - index int // original index; final sort key - expr Expr // name=value argument -} - -// namedArgs is a slice of namedArg that implements sort.Interface -type namedArgs []namedArg - -func (x namedArgs) Len() int { return len(x) } -func (x namedArgs) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -func (x namedArgs) Less(i, j int) bool { - p := x[i] - q := x[j] - if p.priority != q.priority { - return p.priority < q.priority - } - if p.name != q.name { - return p.name < q.name - } - return p.index < q.index -} - -// sortStringLists sorts lists of string literals used as specific rule arguments. -func sortStringLists(f *File, info *RewriteInfo) { - Walk(f, func(v Expr, stk []Expr) { - switch v := v.(type) { - case *CallExpr: - if leaveAlone(stk, v) { - return - } - rule := callName(v) - for _, arg := range v.List { - if leaveAlone1(arg) { - continue - } - as, ok := arg.(*AssignExpr) - if !ok || leaveAlone1(as) || doNotSort(as) { - continue - } - key, ok := as.LHS.(*Ident) - if !ok { - continue - } - context := rule + "." + key.Name - if !tables.IsSortableListArg[key.Name] || tables.SortableBlacklist[context] || f.Type == TypeDefault || f.Type == TypeBzl { - continue - } - if disabled("unsafesort") && !tables.SortableWhitelist[context] && !allowedSort(context) { - continue - } - sortStringList(as.RHS, info, context) - } - case *AssignExpr: - if disabled("unsafesort") { - return - } - // "keep sorted" comment on x = list forces sorting of list. - as := v - if keepSorted(as) { - sortStringList(as.RHS, info, "?") - } - case *KeyValueExpr: - if disabled("unsafesort") { - return - } - // "keep sorted" before key: list also forces sorting of list. - if keepSorted(v) { - sortStringList(v.Value, info, "?") - } - case *ListExpr: - if disabled("unsafesort") { - return - } - // "keep sorted" comment above first list element also forces sorting of list. - if len(v.List) > 0 && (keepSorted(v) || keepSorted(v.List[0])) { - sortStringList(v, info, "?") - } - } - }) -} - -// SortStringList sorts x, a list of strings. -func SortStringList(x Expr) { - sortStringList(x, nil, "") -} - -// sortStringList sorts x, a list of strings. -// The list is broken by non-strings and by blank lines and comments into chunks. -// Each chunk is sorted in place. -func sortStringList(x Expr, info *RewriteInfo, context string) { - list, ok := x.(*ListExpr) - if !ok || len(list.List) < 2 || doNotSort(list.List[0]) { - return - } - - forceSort := keepSorted(list) || keepSorted(list.List[0]) - - // TODO(bazel-team): Decide how to recognize lists that cannot - // be sorted. Avoiding all lists with comments avoids sorting - // lists that say explicitly, in some form or another, why they - // cannot be sorted. For example, many cc_test rules require - // certain order in their deps attributes. - if !forceSort { - if line, _ := hasComments(list); line { - return - } - } - - // Sort chunks of the list with no intervening blank lines or comments. - for i := 0; i < len(list.List); { - if _, ok := list.List[i].(*StringExpr); !ok { - i++ - continue - } - - j := i + 1 - for ; j < len(list.List); j++ { - if str, ok := list.List[j].(*StringExpr); !ok || len(str.Before) > 0 { - break - } - } - - var chunk []stringSortKey - for index, x := range list.List[i:j] { - chunk = append(chunk, makeSortKey(index, x.(*StringExpr))) - } - if !sort.IsSorted(byStringExpr(chunk)) || !isUniq(chunk) { - if info != nil { - info.SortStringList++ - if !tables.SortableWhitelist[context] { - info.UnsafeSort++ - info.Log = append(info.Log, "sort:"+context) - } - } - before := chunk[0].x.Comment().Before - chunk[0].x.Comment().Before = nil - - sort.Sort(byStringExpr(chunk)) - chunk = uniq(chunk) - - chunk[0].x.Comment().Before = before - for offset, key := range chunk { - list.List[i+offset] = key.x - } - list.List = append(list.List[:(i+len(chunk))], list.List[j:]...) - } - - i = j - } -} - -// uniq removes duplicates from a list, which must already be sorted. -// It edits the list in place. -func uniq(sortedList []stringSortKey) []stringSortKey { - out := sortedList[:0] - for _, sk := range sortedList { - if len(out) == 0 || sk.value != out[len(out)-1].value { - out = append(out, sk) - } - } - return out -} - -// isUniq reports whether the sorted list only contains unique elements. -func isUniq(list []stringSortKey) bool { - for i := range list { - if i+1 < len(list) && list[i].value == list[i+1].value { - return false - } - } - return true -} - -// If stk describes a call argument like rule(arg=...), callArgName -// returns the name of that argument, formatted as "rule.arg". -func callArgName(stk []Expr) string { - n := len(stk) - if n < 2 { - return "" - } - arg := argName(stk[n-1]) - if arg == "" { - return "" - } - call, ok := stk[n-2].(*CallExpr) - if !ok { - return "" - } - rule, ok := call.X.(*Ident) - if !ok { - return "" - } - return rule.Name + "." + arg -} - -// A stringSortKey records information about a single string literal to be -// sorted. The strings are first grouped into four phases: most strings, -// strings beginning with ":", strings beginning with "//", and strings -// beginning with "@". The next significant part of the comparison is the list -// of elements in the value, where elements are split at `.' and `:'. Finally -// we compare by value and break ties by original index. -type stringSortKey struct { - phase int - split []string - value string - original int - x Expr -} - -func makeSortKey(index int, x *StringExpr) stringSortKey { - key := stringSortKey{ - value: x.Value, - original: index, - x: x, - } - - switch { - case strings.HasPrefix(x.Value, ":"): - key.phase = 1 - case strings.HasPrefix(x.Value, "//") || (tables.StripLabelLeadingSlashes && !strings.HasPrefix(x.Value, "@")): - key.phase = 2 - case strings.HasPrefix(x.Value, "@"): - key.phase = 3 - } - - key.split = strings.Split(strings.Replace(x.Value, ":", ".", -1), ".") - return key -} - -// byStringExpr implements sort.Interface for a list of stringSortKey. -type byStringExpr []stringSortKey - -func (x byStringExpr) Len() int { return len(x) } -func (x byStringExpr) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -func (x byStringExpr) Less(i, j int) bool { - xi := x[i] - xj := x[j] - - if xi.phase != xj.phase { - return xi.phase < xj.phase - } - for k := 0; k < len(xi.split) && k < len(xj.split); k++ { - if xi.split[k] != xj.split[k] { - return xi.split[k] < xj.split[k] - } - } - if len(xi.split) != len(xj.split) { - return len(xi.split) < len(xj.split) - } - if xi.value != xj.value { - return xi.value < xj.value - } - return xi.original < xj.original -} - -// fixMultilinePlus turns -// -// ... + -// [ ... ] -// -// ... + -// call(...) -// -// into -// ... + [ -// ... -// ] -// -// ... + call( -// ... -// ) -// -// which typically works better with our aggressively compact formatting. -func fixMultilinePlus(f *File, info *RewriteInfo) { - - // List manipulation helpers. - // As a special case, we treat f([...]) as a list, mainly - // for glob. - - // isList reports whether x is a list. - var isList func(x Expr) bool - isList = func(x Expr) bool { - switch x := x.(type) { - case *ListExpr: - return true - case *CallExpr: - if len(x.List) == 1 { - return isList(x.List[0]) - } - } - return false - } - - // isMultiLine reports whether x is a multiline list. - var isMultiLine func(Expr) bool - isMultiLine = func(x Expr) bool { - switch x := x.(type) { - case *ListExpr: - return x.ForceMultiLine || len(x.List) > 1 - case *CallExpr: - if x.ForceMultiLine || len(x.List) > 1 && !x.ForceCompact { - return true - } - if len(x.List) == 1 { - return isMultiLine(x.List[0]) - } - } - return false - } - - // forceMultiLine tries to force the list x to use a multiline form. - // It reports whether it was successful. - var forceMultiLine func(Expr) bool - forceMultiLine = func(x Expr) bool { - switch x := x.(type) { - case *ListExpr: - // Already multi line? - if x.ForceMultiLine { - return true - } - // If this is a list containing a list, force the - // inner list to be multiline instead. - if len(x.List) == 1 && forceMultiLine(x.List[0]) { - return true - } - x.ForceMultiLine = true - return true - - case *CallExpr: - if len(x.List) == 1 { - return forceMultiLine(x.List[0]) - } - } - return false - } - - skip := map[Expr]bool{} - Walk(f, func(v Expr, stk []Expr) { - if skip[v] { - return - } - bin, ok := v.(*BinaryExpr) - if !ok || bin.Op != "+" { - return - } - - // Found a +. - // w + x + y + z parses as ((w + x) + y) + z, - // so chase down the left side to make a list of - // all the things being added together, separated - // by the BinaryExprs that join them. - // Mark them as "skip" so that when Walk recurses - // into the subexpressions, we won't reprocess them. - var all []Expr - for { - all = append(all, bin.Y, bin) - bin1, ok := bin.X.(*BinaryExpr) - if !ok || bin1.Op != "+" { - break - } - bin = bin1 - skip[bin] = true - } - all = append(all, bin.X) - - // Because the outermost expression was the - // rightmost one, the list is backward. Reverse it. - for i, j := 0, len(all)-1; i < j; i, j = i+1, j-1 { - all[i], all[j] = all[j], all[i] - } - - // The 'all' slice is alternating addends and BinaryExpr +'s: - // w, +, x, +, y, +, z - // If there are no lists involved, don't rewrite anything. - haveList := false - for i := 0; i < len(all); i += 2 { - if isList(all[i]) { - haveList = true - break - } - } - if !haveList { - return - } - - // Okay, there are lists. - // Consider each + next to a line break. - for i := 1; i < len(all); i += 2 { - bin := all[i].(*BinaryExpr) - if !bin.LineBreak { - continue - } - - // We're going to break the line after the +. - // If it is followed by a list, force that to be - // multiline instead. - if forceMultiLine(all[i+1]) { - bin.LineBreak = false - continue - } - - // If the previous list was multiline already, - // don't bother with the line break after - // the +. - if isMultiLine(all[i-1]) { - bin.LineBreak = false - continue - } - } - }) -} - -// sortAllLoadArgs sorts all load arguments in the file -func sortAllLoadArgs(f *File, info *RewriteInfo) { - Walk(f, func(v Expr, stk []Expr) { - if load, ok := v.(*LoadStmt); ok { - if SortLoadArgs(load) { - info.SortLoad++ - } - } - }) -} - -// hasComments reports whether any comments are associated with -// the list or its elements. -func hasComments(list *ListExpr) (line, suffix bool) { - com := list.Comment() - if len(com.Before) > 0 || len(com.After) > 0 || len(list.End.Before) > 0 { - line = true - } - if len(com.Suffix) > 0 { - suffix = true - } - for _, elem := range list.List { - com := elem.Comment() - if len(com.Before) > 0 { - line = true - } - if len(com.Suffix) > 0 { - suffix = true - } - } - return -} - -// A wrapper for a LoadStmt's From and To slices for consistent sorting of their contents. -// It's assumed that the following slices have the same length. The contents are sorted by -// the `To` attribute, but all items with equal "From" and "To" parts are placed before the items -// with different parts. -type loadArgs struct { - From []*Ident - To []*Ident - modified bool -} - -func (args loadArgs) Len() int { - return len(args.From) -} - -func (args loadArgs) Swap(i, j int) { - args.From[i], args.From[j] = args.From[j], args.From[i] - args.To[i], args.To[j] = args.To[j], args.To[i] - args.modified = true -} - -func (args loadArgs) Less(i, j int) bool { - // Arguments with equal "from" and "to" parts are prioritized - equalI := args.From[i].Name == args.To[i].Name - equalJ := args.From[j].Name == args.To[j].Name - if equalI != equalJ { - // If equalI and !equalJ, return true, otherwise false. - // Equivalently, return equalI. - return equalI - } - return args.To[i].Name < args.To[j].Name -} - -// SortLoadArgs sorts a load statement arguments (lexicographically, but positional first) -func SortLoadArgs(load *LoadStmt) bool { - args := loadArgs{From: load.From, To: load.To} - sort.Sort(args) - return args.modified -} - -// formatDocstrings fixes the indentation and trailing whitespace of docstrings -func formatDocstrings(f *File, info *RewriteInfo) { - Walk(f, func(v Expr, stk []Expr) { - def, ok := v.(*DefStmt) - if !ok || len(def.Body) == 0 { - return - } - docstring, ok := def.Body[0].(*StringExpr) - if !ok || !docstring.TripleQuote { - return - } - - oldIndentation := docstring.Start.LineRune - 1 // LineRune starts with 1 - newIndentation := nestedIndentation * len(stk) - - // Operate on Token, not Value, because their line breaks can be different if a line ends with - // a backslash. - updatedToken := formatString(docstring.Token, oldIndentation, newIndentation) - if updatedToken != docstring.Token { - docstring.Token = updatedToken - // Update the value to keep it consistent with Token - docstring.Value, _, _ = Unquote(updatedToken) - info.FormatDocstrings++ - } - }) -} - -// formatString modifies a string value of a docstring to match the new indentation level and -// to remove trailing whitespace from its lines. -func formatString(value string, oldIndentation, newIndentation int) string { - difference := newIndentation - oldIndentation - lines := strings.Split(value, "\n") - for i, line := range lines { - if i == 0 { - // The first line shouldn't be touched because it starts right after ''' or """ - continue - } - if difference > 0 { - line = strings.Repeat(" ", difference) + line - } else { - for i, rune := range line { - if i == -difference || rune != ' ' { - line = line[i:] - break - } - } - } - if i != len(lines)-1 { - // Remove trailing space from the line unless it's the last line that's responsible - // for the indentation of the closing `"""` - line = strings.TrimRight(line, " ") - } - lines[i] = line - } - return strings.Join(lines, "\n") -} - -// argumentType returns an integer by which funcall arguments can be sorted: -// 1 for positional, 2 for named, 3 for *args, 4 for **kwargs -func argumentType(expr Expr) int { - switch expr := expr.(type) { - case *UnaryExpr: - switch expr.Op { - case "**": - return 4 - case "*": - return 3 - } - case *AssignExpr: - return 2 - } - return 1 -} - -// reorderArguments fixes the order of arguments of a function call -// (positional, named, *args, **kwargs) -func reorderArguments(f *File, info *RewriteInfo) { - Walk(f, func(expr Expr, stack []Expr) { - call, ok := expr.(*CallExpr) - if !ok { - return - } - compare := func(i, j int) bool { - return argumentType(call.List[i]) < argumentType(call.List[j]) - } - if !sort.SliceIsSorted(call.List, compare) { - sort.SliceStable(call.List, compare) - info.ReorderArguments++ - } - }) -} - -// editOctals inserts 'o' into octal numbers to make it more obvious they are octal -// 0123 -> 0o123 -func editOctals(f *File, info *RewriteInfo) { - Walk(f, func(expr Expr, stack []Expr) { - l, ok := expr.(*LiteralExpr) - if !ok { - return - } - if len(l.Token) > 1 && l.Token[0] == '0' && l.Token[1] >= '0' && l.Token[1] <= '9' { - l.Token = "0o" + l.Token[1:] - info.EditOctal++ - } - }) -} diff --git a/vendor/github.com/bazelbuild/buildtools/build/rule.go b/vendor/github.com/bazelbuild/buildtools/build/rule.go deleted file mode 100644 index 7fe2434425..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/build/rule.go +++ /dev/null @@ -1,338 +0,0 @@ -/* -Copyright 2016 Google Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -// Rule-level API for inspecting and modifying a build.File syntax tree. - -package build - -import ( - "path/filepath" - "strings" -) - -// A Rule represents a single BUILD rule. -type Rule struct { - Call *CallExpr - ImplicitName string // The name which should be used if the name attribute is not set. See the comment on File.implicitRuleName. -} - -// NewRule is a simple constructor for Rule. -func NewRule(call *CallExpr) *Rule { - return &Rule{call, ""} -} - -func (f *File) Rule(call *CallExpr) *Rule { - r := &Rule{call, ""} - if r.AttrString("name") == "" { - r.ImplicitName = f.implicitRuleName() - } - return r -} - -// Rules returns the rules in the file of the given kind (such as "go_library"). -// If kind == "", Rules returns all rules in the file. -func (f *File) Rules(kind string) []*Rule { - var all []*Rule - - for _, stmt := range f.Stmt { - Walk(stmt, func(x Expr, stk []Expr) { - call, ok := x.(*CallExpr) - if !ok { - return - } - - // Skip nested calls. - for _, frame := range stk { - if _, ok := frame.(*CallExpr); ok { - return - } - } - - // Check if the rule kind is correct. - rule := f.Rule(call) - if kind != "" && rule.Kind() != kind { - return - } - all = append(all, rule) - }) - } - - return all -} - -// RuleAt returns the rule in the file that starts at the specified line, or null if no such rule. -func (f *File) RuleAt(linenum int) *Rule { - - for _, stmt := range f.Stmt { - call, ok := stmt.(*CallExpr) - if !ok { - continue - } - start, end := call.X.Span() - if start.Line <= linenum && linenum <= end.Line { - return f.Rule(call) - } - } - return nil -} - -// DelRules removes rules with the given kind and name from the file. -// An empty kind matches all kinds; an empty name matches all names. -// It returns the number of rules that were deleted. -func (f *File) DelRules(kind, name string) int { - var i int - for _, stmt := range f.Stmt { - if call, ok := stmt.(*CallExpr); ok { - r := f.Rule(call) - if (kind == "" || r.Kind() == kind) && - (name == "" || r.Name() == name) { - continue - } - } - f.Stmt[i] = stmt - i++ - } - n := len(f.Stmt) - i - f.Stmt = f.Stmt[:i] - return n -} - -// If a build file contains exactly one unnamed rule, and no rules in the file explicitly have the -// same name as the name of the directory the build file is in, we treat the unnamed rule as if it -// had the name of the directory containing the BUILD file. -// This is following a convention used in the Pants build system to cut down on boilerplate. -func (f *File) implicitRuleName() string { - // We disallow empty names in the top-level BUILD files. - dir := filepath.Dir(f.Path) - if dir == "." { - return "" - } - sawAnonymousRule := false - possibleImplicitName := filepath.Base(dir) - - for _, stmt := range f.Stmt { - call, ok := stmt.(*CallExpr) - if !ok { - continue - } - temp := &Rule{call, ""} - if temp.AttrString("name") == possibleImplicitName { - // A target explicitly has the name of the dir, so no implicit targets are allowed. - return "" - } - if temp.Kind() != "" && temp.AttrString("name") == "" { - if sawAnonymousRule { - return "" - } - sawAnonymousRule = true - } - } - if sawAnonymousRule { - return possibleImplicitName - } - return "" -} - -// Kind returns the rule's kind (such as "go_library"). -// The kind of the rule may be given by a literal or it may be a sequence of dot expressions that -// begins with a literal, if the call expression does not conform to either of these forms, an -// empty string will be returned -func (r *Rule) Kind() string { - var names []string - expr := r.Call.X - for { - x, ok := expr.(*DotExpr) - if !ok { - break - } - names = append(names, x.Name) - expr = x.X - } - x, ok := expr.(*Ident) - if !ok { - return "" - } - names = append(names, x.Name) - // Reverse the elements since the deepest expression contains the leading literal - for l, r := 0, len(names)-1; l < r; l, r = l+1, r-1 { - names[l], names[r] = names[r], names[l] - } - return strings.Join(names, ".") -} - -// SetKind changes rule's kind (such as "go_library"). -func (r *Rule) SetKind(kind string) { - names := strings.Split(kind, ".") - var expr Expr - expr = &Ident{Name: names[0]} - for _, name := range names[1:] { - expr = &DotExpr{X: expr, Name: name} - } - r.Call.X = expr -} - -// ExplicitName returns the rule's target name if it's explicitly provided as a string value, "" otherwise. -func (r *Rule) ExplicitName() string { - return r.AttrString("name") -} - -// Name returns the rule's target name. -// If the rule has no explicit target name, Name returns the implicit name if there is one, else the empty string. -func (r *Rule) Name() string { - explicitName := r.ExplicitName() - if explicitName == "" && r.Kind() != "package" { - return r.ImplicitName - } - return explicitName -} - -// AttrKeys returns the keys of all the rule's attributes. -func (r *Rule) AttrKeys() []string { - var keys []string - for _, expr := range r.Call.List { - if as, ok := expr.(*AssignExpr); ok { - if keyExpr, ok := as.LHS.(*Ident); ok { - keys = append(keys, keyExpr.Name) - } - } - } - return keys -} - -// AttrDefn returns the AssignExpr defining the rule's attribute with the given key. -// If the rule has no such attribute, AttrDefn returns nil. -func (r *Rule) AttrDefn(key string) *AssignExpr { - for _, kv := range r.Call.List { - as, ok := kv.(*AssignExpr) - if !ok { - continue - } - k, ok := as.LHS.(*Ident) - if !ok || k.Name != key { - continue - } - return as - } - return nil -} - -// Attr returns the value of the rule's attribute with the given key -// (such as "name" or "deps"). -// If the rule has no such attribute, Attr returns nil. -func (r *Rule) Attr(key string) Expr { - as := r.AttrDefn(key) - if as == nil { - return nil - } - return as.RHS -} - -// DelAttr deletes the rule's attribute with the named key. -// It returns the old value of the attribute, or nil if the attribute was not found. -func (r *Rule) DelAttr(key string) Expr { - list := r.Call.List - for i, kv := range list { - as, ok := kv.(*AssignExpr) - if !ok { - continue - } - k, ok := as.LHS.(*Ident) - if !ok || k.Name != key { - continue - } - copy(list[i:], list[i+1:]) - r.Call.List = list[:len(list)-1] - return as.RHS - } - return nil -} - -// SetAttr sets the rule's attribute with the given key to value. -// If the rule has no attribute with the key, SetAttr appends -// one to the end of the rule's attribute list. -func (r *Rule) SetAttr(key string, val Expr) { - as := r.AttrDefn(key) - if as != nil { - as.RHS = val - return - } - - r.Call.List = append(r.Call.List, - &AssignExpr{ - LHS: &Ident{Name: key}, - Op: "=", - RHS: val, - }, - ) -} - -// AttrLiteral returns the literal form of the rule's attribute -// with the given key (such as "cc_api_version"), only when -// that value is an identifier or number. -// If the rule has no such attribute or the attribute is not an identifier or number, -// AttrLiteral returns "". -func (r *Rule) AttrLiteral(key string) string { - value := r.Attr(key) - if ident, ok := value.(*Ident); ok { - return ident.Name - } - if literal, ok := value.(*LiteralExpr); ok { - return literal.Token - } - return "" -} - -// AttrString returns the value of the rule's attribute -// with the given key (such as "name"), as a string. -// If the rule has no such attribute or the attribute has a non-string value, -// Attr returns the empty string. -func (r *Rule) AttrString(key string) string { - str, ok := r.Attr(key).(*StringExpr) - if !ok { - return "" - } - return str.Value -} - -// AttrStrings returns the value of the rule's attribute -// with the given key (such as "srcs"), as a []string. -// If the rule has no such attribute or the attribute is not -// a list of strings, AttrStrings returns a nil slice. -func (r *Rule) AttrStrings(key string) []string { - return Strings(r.Attr(key)) -} - -// Strings returns expr as a []string. -// If expr is not a list of string literals, -// Strings returns a nil slice instead. -// If expr is an empty list of string literals, -// returns a non-nil empty slice. -// (this allows differentiating between these two cases) -func Strings(expr Expr) []string { - list, ok := expr.(*ListExpr) - if !ok { - return nil - } - all := []string{} // not nil - for _, l := range list.List { - str, ok := l.(*StringExpr) - if !ok { - return nil - } - all = append(all, str.Value) - } - return all -} diff --git a/vendor/github.com/bazelbuild/buildtools/build/syntax.go b/vendor/github.com/bazelbuild/buildtools/build/syntax.go deleted file mode 100644 index 8ad5225d51..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/build/syntax.go +++ /dev/null @@ -1,570 +0,0 @@ -/* -Copyright 2016 Google Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -// Package build implements parsing and printing of BUILD files. -package build - -// Syntax data structure definitions. - -import ( - "strings" - "unicode/utf8" -) - -// A Position describes the position between two bytes of input. -type Position struct { - Line int // line in input (starting at 1) - LineRune int // rune in line (starting at 1) - Byte int // byte in input (starting at 0) -} - -// add returns the position at the end of s, assuming it starts at p. -func (p Position) add(s string) Position { - p.Byte += len(s) - if n := strings.Count(s, "\n"); n > 0 { - p.Line += n - s = s[strings.LastIndex(s, "\n")+1:] - p.LineRune = 1 - } - p.LineRune += utf8.RuneCountInString(s) - return p -} - -// An Expr represents an input element. -type Expr interface { - // Span returns the start and end position of the expression, - // excluding leading or trailing comments. - Span() (start, end Position) - - // Comment returns the comments attached to the expression. - // This method would normally be named 'Comments' but that - // would interfere with embedding a type of the same name. - Comment() *Comments -} - -// A Comment represents a single # comment. -type Comment struct { - Start Position - Token string // without trailing newline -} - -// Comments collects the comments associated with an expression. -type Comments struct { - Before []Comment // whole-line comments before this expression - Suffix []Comment // end-of-line comments after this expression - - // For top-level expressions only, After lists whole-line - // comments following the expression. - After []Comment -} - -// Comment returns the receiver. This isn't useful by itself, but -// a Comments struct is embedded into all the expression -// implementation types, and this gives each of those a Comment -// method to satisfy the Expr interface. -func (c *Comments) Comment() *Comments { - return c -} - -// stmtsEnd returns the end position of the last non-nil statement -func stmtsEnd(stmts []Expr) Position { - for i := len(stmts) - 1; i >= 0; i-- { - if stmts[i] != nil { - _, end := stmts[i].Span() - return end - } - } - return Position{} -} - -// A File represents an entire BUILD file. -type File struct { - Path string // file path, relative to workspace directory - Type FileType - Comments - Stmt []Expr -} - -// DisplayPath returns the filename if it's not empty, "" otherwise -func (f *File) DisplayPath() string { - if f.Path == "" { - return "" - } - return f.Path -} - -func (f *File) Span() (start, end Position) { - if len(f.Stmt) == 0 { - p := Position{Line: 1, LineRune: 1} - return p, p - } - start = Position{} - end = stmtsEnd(f.Stmt) - return start, end -} - -// A CommentBlock represents a top-level block of comments separate -// from any rule. -type CommentBlock struct { - Comments - Start Position -} - -func (x *CommentBlock) Span() (start, end Position) { - return x.Start, x.Start -} - -// An Ident represents an identifier. -type Ident struct { - Comments - NamePos Position - Name string -} - -func (x *Ident) Span() (start, end Position) { - return x.NamePos, x.NamePos.add(x.Name) -} - -// BranchStmt represents a `pass`, `break`, or `continue` statement. -type BranchStmt struct { - Comments - Token string // pass, break, continue - TokenPos Position -} - -func (x *BranchStmt) Span() (start, end Position) { - return x.TokenPos, x.TokenPos.add(x.Token) -} - -func (x *Ident) asString() *StringExpr { - _, end := x.Span() - return &StringExpr{ - Comments: x.Comments, - Start: x.NamePos, - Value: x.Name, - End: end, - } -} - -// A LiteralExpr represents a literal number. -type LiteralExpr struct { - Comments - Start Position - Token string // identifier token -} - -func (x *LiteralExpr) Span() (start, end Position) { - return x.Start, x.Start.add(x.Token) -} - -// A StringExpr represents a single literal string. -type StringExpr struct { - Comments - Start Position - Value string // string value (decoded) - TripleQuote bool // triple quote output - End Position - - // To allow specific formatting of string literals, - // at least within our requirements, record the - // preferred form of Value. This field is a hint: - // it is only used if it is a valid quoted form for Value. - Token string -} - -func (x *StringExpr) Span() (start, end Position) { - return x.Start, x.End -} - -// An End represents the end of a parenthesized or bracketed expression. -// It is a place to hang comments. -type End struct { - Comments - Pos Position -} - -func (x *End) Span() (start, end Position) { - return x.Pos, x.Pos.add(")") -} - -// A CallExpr represents a function call expression: X(List). -type CallExpr struct { - Comments - X Expr - ListStart Position // position of ( - List []Expr - End // position of ) - ForceCompact bool // force compact (non-multiline) form when printing - ForceMultiLine bool // force multiline form when printing -} - -func (x *CallExpr) Span() (start, end Position) { - start, _ = x.X.Span() - return start, x.End.Pos.add(")") -} - -// A DotExpr represents a field selector: X.Name. -type DotExpr struct { - Comments - X Expr - Dot Position - NamePos Position - Name string -} - -func (x *DotExpr) Span() (start, end Position) { - start, _ = x.X.Span() - return start, x.NamePos.add(x.Name) -} - -// A Comprehension represents a list comprehension expression: [X for ... if ...]. -type Comprehension struct { - Comments - Curly bool // curly braces (as opposed to square brackets) - Lbrack Position - Body Expr - Clauses []Expr // = *ForClause | *IfClause - ForceMultiLine bool // split expression across multiple lines - End -} - -func (x *Comprehension) Span() (start, end Position) { - return x.Lbrack, x.End.Pos.add("]") -} - -// A ForClause represents a for clause in a list comprehension: for Var in Expr. -type ForClause struct { - Comments - For Position - Vars Expr - In Position - X Expr -} - -func (x *ForClause) Span() (start, end Position) { - _, end = x.X.Span() - return x.For, end -} - -// An IfClause represents an if clause in a list comprehension: if Cond. -type IfClause struct { - Comments - If Position - Cond Expr -} - -func (x *IfClause) Span() (start, end Position) { - _, end = x.Cond.Span() - return x.If, end -} - -// A KeyValueExpr represents a dictionary entry: Key: Value. -type KeyValueExpr struct { - Comments - Key Expr - Colon Position - Value Expr -} - -func (x *KeyValueExpr) Span() (start, end Position) { - start, _ = x.Key.Span() - _, end = x.Value.Span() - return start, end -} - -// A DictExpr represents a dictionary literal: { List }. -type DictExpr struct { - Comments - Start Position - List []Expr // all *KeyValueExprs - End - ForceMultiLine bool // force multiline form when printing -} - -func (x *DictExpr) Span() (start, end Position) { - return x.Start, x.End.Pos.add("}") -} - -// A ListExpr represents a list literal: [ List ]. -type ListExpr struct { - Comments - Start Position - List []Expr - End - ForceMultiLine bool // force multiline form when printing -} - -func (x *ListExpr) Span() (start, end Position) { - return x.Start, x.End.Pos.add("]") -} - -// A SetExpr represents a set literal: { List }. -type SetExpr struct { - Comments - Start Position - List []Expr - End - ForceMultiLine bool // force multiline form when printing -} - -func (x *SetExpr) Span() (start, end Position) { - return x.Start, x.End.Pos.add("}") -} - -// A TupleExpr represents a tuple literal: (List) -type TupleExpr struct { - Comments - NoBrackets bool // true if a tuple has no brackets, e.g. `a, b = x` - Start Position - List []Expr - End - ForceCompact bool // force compact (non-multiline) form when printing - ForceMultiLine bool // force multiline form when printing -} - -func (x *TupleExpr) Span() (start, end Position) { - if !x.NoBrackets { - return x.Start, x.End.Pos.add(")") - } - start, _ = x.List[0].Span() - _, end = x.List[len(x.List)-1].Span() - return start, end -} - -// A UnaryExpr represents a unary expression: Op X. -type UnaryExpr struct { - Comments - OpStart Position - Op string - X Expr -} - -func (x *UnaryExpr) Span() (start, end Position) { - if x.X == nil { - return x.OpStart, x.OpStart - } - _, end = x.X.Span() - return x.OpStart, end -} - -// A BinaryExpr represents a binary expression: X Op Y. -type BinaryExpr struct { - Comments - X Expr - OpStart Position - Op string - LineBreak bool // insert line break between Op and Y - Y Expr -} - -func (x *BinaryExpr) Span() (start, end Position) { - start, _ = x.X.Span() - _, end = x.Y.Span() - return start, end -} - -// An AssignExpr represents a binary expression with `=`: LHS = RHS. -type AssignExpr struct { - Comments - LHS Expr - OpPos Position - Op string - LineBreak bool // insert line break between Op and RHS - RHS Expr -} - -func (x *AssignExpr) Span() (start, end Position) { - start, _ = x.LHS.Span() - _, end = x.RHS.Span() - return start, end -} - -// A ParenExpr represents a parenthesized expression: (X). -type ParenExpr struct { - Comments - Start Position - X Expr - End - ForceMultiLine bool // insert line break after opening ( and before closing ) -} - -func (x *ParenExpr) Span() (start, end Position) { - return x.Start, x.End.Pos.add(")") -} - -// A SliceExpr represents a slice expression: expr[from:to] or expr[from:to:step] . -type SliceExpr struct { - Comments - X Expr - SliceStart Position - From Expr - FirstColon Position - To Expr - SecondColon Position - Step Expr - End Position -} - -func (x *SliceExpr) Span() (start, end Position) { - start, _ = x.X.Span() - return start, x.End.add("]") -} - -// An IndexExpr represents an index expression: X[Y]. -type IndexExpr struct { - Comments - X Expr - IndexStart Position - Y Expr - End Position -} - -func (x *IndexExpr) Span() (start, end Position) { - start, _ = x.X.Span() - return start, x.End.add("]") -} - -// A Function represents the common parts of LambdaExpr and DefStmt -type Function struct { - Comments - StartPos Position // position of DEF or LAMBDA token - Params []Expr - Body []Expr -} - -func (x *Function) Span() (start, end Position) { - _, end = x.Body[len(x.Body)-1].Span() - return x.StartPos, end -} - -// A LambdaExpr represents a lambda expression: lambda Var: Expr. -type LambdaExpr struct { - Comments - Function -} - -func (x *LambdaExpr) Span() (start, end Position) { - return x.Function.Span() -} - -// ConditionalExpr represents the conditional: X if TEST else ELSE. -type ConditionalExpr struct { - Comments - Then Expr - IfStart Position - Test Expr - ElseStart Position - Else Expr -} - -// Span returns the start and end position of the expression, -// excluding leading or trailing comments. -func (x *ConditionalExpr) Span() (start, end Position) { - start, _ = x.Then.Span() - _, end = x.Else.Span() - return start, end -} - -// A LoadStmt loads another module and binds names from it: -// load(Module, "x", y="foo"). -// -// The AST is slightly unfaithful to the concrete syntax here because -// Skylark's load statement, so that it can be implemented in Python, -// binds some names (like y above) with an identifier and some (like x) -// without. For consistency we create fake identifiers for all the -// strings. -type LoadStmt struct { - Comments - Load Position - Module *StringExpr - From []*Ident // name defined in loading module - To []*Ident // name in loaded module - Rparen End - ForceCompact bool // force compact (non-multiline) form when printing -} - -func (x *LoadStmt) Span() (start, end Position) { - return x.Load, x.Rparen.Pos.add(")") -} - -// A DefStmt represents a function definition expression: def foo(List):. -type DefStmt struct { - Comments - Function - Name string - ColonPos Position // position of the ":" - ForceCompact bool // force compact (non-multiline) form when printing the arguments - ForceMultiLine bool // force multiline form when printing the arguments -} - -func (x *DefStmt) Span() (start, end Position) { - return x.Function.Span() -} - -// HeaderSpan returns the span of the function header `def f(...):` -func (x *DefStmt) HeaderSpan() (start, end Position) { - return x.Function.StartPos, x.ColonPos -} - -// A ReturnStmt represents a return statement: return f(x). -type ReturnStmt struct { - Comments - Return Position - Result Expr // may be nil -} - -func (x *ReturnStmt) Span() (start, end Position) { - if x.Result == nil { - return x.Return, x.Return.add("return") - } - _, end = x.Result.Span() - return x.Return, end -} - -// A ForStmt represents a for loop block: for x in range(10):. -type ForStmt struct { - Comments - Function - For Position // position of for - Vars Expr - X Expr - Body []Expr -} - -func (x *ForStmt) Span() (start, end Position) { - end = stmtsEnd(x.Body) - return x.For, end -} - -// An IfStmt represents an if-else block: if x: ... else: ... . -// `elif`s are treated as a chain of `IfStmt`s. -type IfStmt struct { - Comments - If Position // position of if - Cond Expr - True []Expr - ElsePos End // position of else or elif - False []Expr // optional -} - -func (x *IfStmt) Span() (start, end Position) { - body := x.False - if body == nil { - body = x.True - } - end = stmtsEnd(body) - return x.If, end -} diff --git a/vendor/github.com/bazelbuild/buildtools/build/walk.go b/vendor/github.com/bazelbuild/buildtools/build/walk.go deleted file mode 100644 index 91d105bda2..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/build/walk.go +++ /dev/null @@ -1,246 +0,0 @@ -/* -Copyright 2016 Google Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package build - -// Walk walks the expression tree v, calling f on all subexpressions -// in a preorder traversal. -// -// The stk argument is the stack of expressions in the recursion above x, -// from outermost to innermost. -// -func Walk(v Expr, f func(x Expr, stk []Expr)) { - var stack []Expr - walk1(&v, &stack, func(x *Expr, stk []Expr) Expr { - f(*x, stk) - return nil - }) -} - -// WalkPointers is the same as Walk but calls the callback function with pointers to nodes. -func WalkPointers(v Expr, f func(x *Expr, stk []Expr)) { - var stack []Expr - walk1(&v, &stack, func(x *Expr, stk []Expr) Expr { - f(x, stk) - return nil - }) -} - -// Edit walks the expression tree v, calling f on all subexpressions -// in a preorder traversal. If f returns a non-nil value, the tree is mutated. -// The new value replaces the old one. -// -// The stk argument is the stack of expressions in the recursion above x, -// from outermost to innermost. -// -func Edit(v Expr, f func(x Expr, stk []Expr) Expr) Expr { - var stack []Expr - return walk1(&v, &stack, func(x *Expr, stk []Expr) Expr { - return f(*x, stk) - }) -} - -// EditChildren is similar to Edit but doesn't visit the initial node, instead goes -// directly to its children. -func EditChildren(v Expr, f func(x Expr, stk []Expr) Expr) { - stack := []Expr{v} - WalkOnce(v, func(x *Expr) { - walk1(x, &stack, func(x *Expr, stk []Expr) Expr { - return f(*x, stk) - }) - }) -} - -// walk1 is a helper function for Walk, WalkWithPostfix, and Edit. -func walk1(v *Expr, stack *[]Expr, f func(x *Expr, stk []Expr) Expr) Expr { - if v == nil { - return nil - } - - if res := f(v, *stack); res != nil { - *v = res - } - *stack = append(*stack, *v) - - WalkOnce(*v, func(x *Expr) { - walk1(x, stack, f) - }) - - *stack = (*stack)[:len(*stack)-1] - return *v -} - -// WalkOnce calls f on every child of v. -func WalkOnce(v Expr, f func(x *Expr)) { - switch v := v.(type) { - case *File: - for i := range v.Stmt { - f(&v.Stmt[i]) - } - case *DotExpr: - f(&v.X) - case *IndexExpr: - f(&v.X) - f(&v.Y) - case *KeyValueExpr: - f(&v.Key) - f(&v.Value) - case *SliceExpr: - f(&v.X) - if v.From != nil { - f(&v.From) - } - if v.To != nil { - f(&v.To) - } - if v.Step != nil { - f(&v.Step) - } - case *ParenExpr: - f(&v.X) - case *UnaryExpr: - f(&v.X) - case *BinaryExpr: - f(&v.X) - f(&v.Y) - case *AssignExpr: - f(&v.LHS) - f(&v.RHS) - case *LambdaExpr: - for i := range v.Params { - f(&v.Params[i]) - } - for i := range v.Body { - f(&v.Body[i]) - } - case *CallExpr: - f(&v.X) - for i := range v.List { - f(&v.List[i]) - } - case *ListExpr: - for i := range v.List { - f(&v.List[i]) - } - case *SetExpr: - for i := range v.List { - f(&v.List[i]) - } - case *TupleExpr: - for i := range v.List { - f(&v.List[i]) - } - case *DictExpr: - for i := range v.List { - f(&v.List[i]) - } - case *Comprehension: - f(&v.Body) - for _, c := range v.Clauses { - f(&c) - } - case *IfClause: - f(&v.Cond) - case *ForClause: - f(&v.Vars) - f(&v.X) - case *ConditionalExpr: - f(&v.Then) - f(&v.Test) - f(&v.Else) - case *LoadStmt: - module := (Expr)(v.Module) - f(&module) - v.Module = module.(*StringExpr) - for i := range v.From { - from := (Expr)(v.From[i]) - f(&from) - v.From[i] = from.(*Ident) - to := (Expr)(v.To[i]) - f(&to) - v.To[i] = to.(*Ident) - } - case *DefStmt: - for i := range v.Params { - f(&v.Params[i]) - } - for i := range v.Body { - f(&v.Body[i]) - } - case *IfStmt: - f(&v.Cond) - for i := range v.True { - f(&v.True[i]) - } - for i := range v.False { - f(&v.False[i]) - } - case *ForStmt: - f(&v.Vars) - f(&v.X) - for i := range v.Body { - f(&v.Body[i]) - } - case *ReturnStmt: - if v.Result != nil { - f(&v.Result) - } - } -} - -// walkStatements is a helper function for WalkStatements -func walkStatements(v Expr, stack *[]Expr, f func(x Expr, stk []Expr)) { - if v == nil { - return - } - - f(v, *stack) - *stack = append(*stack, v) - - traverse := func(x Expr) { - walkStatements(x, stack, f) - } - - switch expr := v.(type) { - case *File: - for _, s := range expr.Stmt { - traverse(s) - } - case *DefStmt: - for _, s := range expr.Body { - traverse(s) - } - case *IfStmt: - for _, s := range expr.True { - traverse(s) - } - for _, s := range expr.False { - traverse(s) - } - case *ForStmt: - for _, s := range expr.Body { - traverse(s) - } - } - - *stack = (*stack)[:len(*stack)-1] -} - -// WalkStatements traverses sub statements (not all nodes) -func WalkStatements(v Expr, f func(x Expr, stk []Expr)) { - var stack []Expr - walkStatements(v, &stack, f) -} diff --git a/vendor/github.com/bazelbuild/buildtools/tables/BUILD.bazel b/vendor/github.com/bazelbuild/buildtools/tables/BUILD.bazel deleted file mode 100644 index 605858e617..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/tables/BUILD.bazel +++ /dev/null @@ -1,12 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "jsonparser.go", - "tables.go", - ], - importmap = "k8s.io/kops/vendor/github.com/bazelbuild/buildtools/tables", - importpath = "github.com/bazelbuild/buildtools/tables", - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/bazelbuild/buildtools/tables/jsonparser.go b/vendor/github.com/bazelbuild/buildtools/tables/jsonparser.go deleted file mode 100644 index ca2bc4443a..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/tables/jsonparser.go +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2017 Google Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package tables - -import ( - "encoding/json" - "io/ioutil" -) - -type Definitions struct { - IsLabelArg map[string]bool - LabelBlacklist map[string]bool - IsListArg map[string]bool - IsSortableListArg map[string]bool - SortableBlacklist map[string]bool - SortableWhitelist map[string]bool - NamePriority map[string]int - StripLabelLeadingSlashes bool - ShortenAbsoluteLabelsToRelative bool -} - -// ParseJSONDefinitions reads and parses JSON table definitions from file. -func ParseJSONDefinitions(file string) (Definitions, error) { - var definitions Definitions - - data, err := ioutil.ReadFile(file) - if err != nil { - return definitions, err - } - - err = json.Unmarshal(data, &definitions) - return definitions, err -} - -// ParseAndUpdateJSONDefinitions reads definitions from file and merges or -// overrides the values in memory. -func ParseAndUpdateJSONDefinitions(file string, merge bool) error { - definitions, err := ParseJSONDefinitions(file) - if err != nil { - return err - } - - if merge { - MergeTables(definitions.IsLabelArg, definitions.LabelBlacklist, definitions.IsListArg, definitions.IsSortableListArg, definitions.SortableBlacklist, definitions.SortableWhitelist, definitions.NamePriority, definitions.StripLabelLeadingSlashes, definitions.ShortenAbsoluteLabelsToRelative) - } else { - OverrideTables(definitions.IsLabelArg, definitions.LabelBlacklist, definitions.IsListArg, definitions.IsSortableListArg, definitions.SortableBlacklist, definitions.SortableWhitelist, definitions.NamePriority, definitions.StripLabelLeadingSlashes, definitions.ShortenAbsoluteLabelsToRelative) - } - return nil -} diff --git a/vendor/github.com/bazelbuild/buildtools/tables/tables.go b/vendor/github.com/bazelbuild/buildtools/tables/tables.go deleted file mode 100644 index 93828430d7..0000000000 --- a/vendor/github.com/bazelbuild/buildtools/tables/tables.go +++ /dev/null @@ -1,314 +0,0 @@ -/* -Copyright 2016 Google Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -// Tables about what Buildifier can and cannot edit. -// Perhaps eventually this will be -// derived from the BUILD encyclopedia. - -package tables - -// IsLabelArg: a named argument to a rule call is considered to have a value -// that can be treated as a label or list of labels if the name -// is one of these names. There is a separate blacklist for -// rule-specific exceptions. -var IsLabelArg = map[string]bool{ - "app_target": true, - "appdir": true, - "base_package": true, - "build_deps": true, - "cc_deps": true, - "ccdeps": true, - "common_deps": true, - "compile_deps": true, - "compiler": true, - "data": true, - "default_visibility": true, - "dep": true, - "deps": true, - "deps_java": true, - "dont_depend_on": true, - "env_deps": true, - "envscripts": true, - "exported_deps": true, - "exports": true, - "externs_list": true, - "files": true, - "globals": true, - "implementation": true, - "implements": true, - "includes": true, - "interface": true, - "jar": true, - "jars": true, - "javadeps": true, - "lib_deps": true, - "library": true, - "malloc": true, - "model": true, - "mods": true, - "module_deps": true, - "module_target": true, - "of": true, - "plugins": true, - "proto_deps": true, - "proto_target": true, - "protos": true, - "resource": true, - "resources": true, - "runtime_deps": true, - "scope": true, - "shared_deps": true, - "similar_deps": true, - "source_jar": true, - "src": true, - "srcs": true, - "stripped_targets": true, - "suites": true, - "swigdeps": true, - "target": true, - "target_devices": true, - "target_platforms": true, - "template": true, - "test": true, - "tests": true, - "tests_deps": true, - "tool": true, - "tools": true, - "visibility": true, -} - -// LabelBlacklist is the list of call arguments that cannot be -// shortened, because they are not interpreted using the same -// rules as for other labels. -var LabelBlacklist = map[string]bool{ - // Shortening this can cause visibility checks to fail. - "package_group.includes": true, -} - -// By default, edit.types.IsList consults lang.TypeOf to determine if an arg is a list. -// You may override this using IsListArg. Specifying a name here overrides any value -// in lang.TypeOf. -var IsListArg = map[string]bool{} - -// IsSortableListArg: a named argument to a rule call is considered to be a sortable list -// if the name is one of these names. There is a separate blacklist for -// rule-specific exceptions. -var IsSortableListArg = map[string]bool{ - "cc_deps": true, - "common_deps": true, - "compile_deps": true, - "configs": true, - "constraints": true, - "data": true, - "default_visibility": true, - "deps": true, - "deps_java": true, - "exported_deps": true, - "exports": true, - "filegroups": true, - "files": true, - "hdrs": true, - "imports": true, - "includes": true, - "inherits": true, - "javadeps": true, - "lib_deps": true, - "module_deps": true, - "out": true, - "outs": true, - "packages": true, - "plugin_modules": true, - "proto_deps": true, - "protos": true, - "pubs": true, - "resources": true, - "runtime_deps": true, - "shared_deps": true, - "similar_deps": true, - "srcs": true, - "swigdeps": true, - "swig_includes": true, - "tags": true, - "tests": true, - "tools": true, - "to_start_extensions": true, - "visibility": true, -} - -// SortableBlacklist records specific rule arguments that must not be reordered. -var SortableBlacklist = map[string]bool{ - "genrule.outs": true, - "genrule.srcs": true, -} - -// SortableWhitelist records specific rule arguments that are guaranteed -// to be reorderable, because bazel re-sorts the list itself after reading the BUILD file. -var SortableWhitelist = map[string]bool{ - "cc_inc_library.hdrs": true, - "cc_library.hdrs": true, - "java_library.srcs": true, - "java_library.resources": true, - "java_binary.srcs": true, - "java_binary.resources": true, - "java_test.srcs": true, - "java_test.resources": true, - "java_library.constraints": true, - "java_import.constraints": true, -} - -// NamePriority maps an argument name to its sorting priority. -// -// NOTE(bazel-team): These are the old buildifier rules. It is likely that this table -// will change, perhaps swapping in a separate table for each call, -// derived from the order used in the Build Encyclopedia. -var NamePriority = map[string]int{ - "name": -99, - "gwt_name": -98, - "package_name": -97, - "visible_node_name": -96, // for boq_initial_css_modules and boq_jswire_test_suite - "size": -95, - "timeout": -94, - "testonly": -93, - "src": -92, - "srcdir": -91, - "srcs": -90, - "out": -89, - "outs": -88, - "hdrs": -87, - "has_services": -86, // before api versions, for proto - "include": -85, // before exclude, for glob - "of": -84, // for check_dependencies - "baseline": -83, // for searchbox_library - // All others sort here, at 0. - "destdir": 1, - "exports": 2, - "runtime_deps": 3, - "deps": 4, - "implementation": 5, - "implements": 6, - "alwayslink": 7, - // default condition in a dictionary literal passed to select should be - // the last one by convention. - "//conditions:default": 50, -} - -var StripLabelLeadingSlashes = false - -var ShortenAbsoluteLabelsToRelative = false - -// AndroidNativeRules lists all Android rules that are being migrated from Native to Starlark. -var AndroidNativeRules = []string{ - "aar_import", - "android_binary", - "android_device", - "android_instrumentation_test", - "android_library", - "android_local_test", - "android_ndk_respository", - "android_sdk_repository", -} - -// AndroidLoadPath is the load path for the Starlark Android Rules. -var AndroidLoadPath = "@rules_android//android:rules.bzl" - -// CcNativeRules lists all C++ rules that are being migrated from Native to Starlark. -var CcNativeRules = []string{ - "cc_binary", - "cc_test", - "cc_library", - "cc_import", - "cc_proto_library", - "fdo_prefetch_hints", - "fdo_profile", - "cc_toolchain", - "cc_toolchain_suite", - "objc_library", - "objc_import", -} - -// CcLoadPath is the load path for the Starlark C++ Rules. -var CcLoadPath = "@rules_cc//cc:defs.bzl" - -// JavaNativeRules lists all Java rules that are being migrated from Native to Starlark. -var JavaNativeRules = []string{ - "java_binary", - "java_import", - "java_library", - "java_lite_proto_library", - "java_proto_library", - "java_test", - "java_package_configuration", - "java_plugin", - "java_runtime", - "java_toolchain", -} - -// JavaLoadPath is the load path for the Starlark Java Rules. -var JavaLoadPath = "@rules_java//java:defs.bzl" - -// ProtoNativeRules lists all Proto rules that are being migrated from Native to Starlark. -var ProtoNativeRules = []string{ - "proto_lang_toolchain", - "proto_library", -} - -// ProtoNativeSymbols lists all Proto symbols that are being migrated from Native to Starlark. -var ProtoNativeSymbols = []string{ - "ProtoInfo", - "proto_common", -} - -// ProtoLoadPath is the load path for the Starlark Proto Rules. -var ProtoLoadPath = "@rules_proto//proto:defs.bzl" - -// OverrideTables allows a user of the build package to override the special-case rules. The user-provided tables replace the built-in tables. -func OverrideTables(labelArg, blacklist, listArg, sortableListArg, sortBlacklist, sortWhitelist map[string]bool, namePriority map[string]int, stripLabelLeadingSlashes, shortenAbsoluteLabelsToRelative bool) { - IsLabelArg = labelArg - LabelBlacklist = blacklist - IsListArg = listArg - IsSortableListArg = sortableListArg - SortableBlacklist = sortBlacklist - SortableWhitelist = sortWhitelist - NamePriority = namePriority - StripLabelLeadingSlashes = stripLabelLeadingSlashes - ShortenAbsoluteLabelsToRelative = shortenAbsoluteLabelsToRelative -} - -// MergeTables allows a user of the build package to override the special-case rules. The user-provided tables are merged into the built-in tables. -func MergeTables(labelArg, blacklist, listArg, sortableListArg, sortBlacklist, sortWhitelist map[string]bool, namePriority map[string]int, stripLabelLeadingSlashes, shortenAbsoluteLabelsToRelative bool) { - for k, v := range labelArg { - IsLabelArg[k] = v - } - for k, v := range blacklist { - LabelBlacklist[k] = v - } - for k, v := range listArg { - IsListArg[k] = v - } - for k, v := range sortableListArg { - IsSortableListArg[k] = v - } - for k, v := range sortBlacklist { - SortableBlacklist[k] = v - } - for k, v := range sortWhitelist { - SortableWhitelist[k] = v - } - for k, v := range namePriority { - NamePriority[k] = v - } - StripLabelLeadingSlashes = stripLabelLeadingSlashes || StripLabelLeadingSlashes - ShortenAbsoluteLabelsToRelative = shortenAbsoluteLabelsToRelative || ShortenAbsoluteLabelsToRelative -} diff --git a/vendor/github.com/client9/misspell/.gitignore b/vendor/github.com/client9/misspell/.gitignore deleted file mode 100644 index b1b707e326..0000000000 --- a/vendor/github.com/client9/misspell/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -dist/ -bin/ -vendor/ - -# editor turds -*~ -*.gz -*.bz2 -*.csv - -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof diff --git a/vendor/github.com/client9/misspell/.travis.yml b/vendor/github.com/client9/misspell/.travis.yml deleted file mode 100644 index e63e6c2bdc..0000000000 --- a/vendor/github.com/client9/misspell/.travis.yml +++ /dev/null @@ -1,20 +0,0 @@ -sudo: required -dist: trusty -group: edge -language: go -go: - - "1.10" -git: - depth: 1 - -script: - - ./scripts/travis.sh - -# calls goreleaser when a new tag is pushed -deploy: -- provider: script - skip_cleanup: true - script: curl -sL http://git.io/goreleaser | bash - on: - tags: true - condition: $TRAVIS_OS_NAME = linux diff --git a/vendor/github.com/client9/misspell/BUILD.bazel b/vendor/github.com/client9/misspell/BUILD.bazel deleted file mode 100644 index 42e2c8bd6b..0000000000 --- a/vendor/github.com/client9/misspell/BUILD.bazel +++ /dev/null @@ -1,19 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ascii.go", - "case.go", - "legal.go", - "mime.go", - "notwords.go", - "replace.go", - "stringreplacer.go", - "url.go", - "words.go", - ], - importmap = "k8s.io/kops/vendor/github.com/client9/misspell", - importpath = "github.com/client9/misspell", - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/client9/misspell/Dockerfile b/vendor/github.com/client9/misspell/Dockerfile deleted file mode 100644 index b8ea37b4c5..0000000000 --- a/vendor/github.com/client9/misspell/Dockerfile +++ /dev/null @@ -1,37 +0,0 @@ -FROM golang:1.10.0-alpine - -# cache buster -RUN echo 4 - -# git is needed for "go get" below -RUN apk add --no-cache git make - -# these are my standard testing / linting tools -RUN /bin/true \ - && go get -u github.com/golang/dep/cmd/dep \ - && go get -u github.com/alecthomas/gometalinter \ - && gometalinter --install \ - && rm -rf /go/src /go/pkg -# -# * SCOWL word list -# -# Downloads -# http://wordlist.aspell.net/dicts/ -# --> http://app.aspell.net/create -# - -# use en_US large size -# use regular size for others -ENV SOURCE_US_BIG http://app.aspell.net/create?max_size=70&spelling=US&max_variant=2&diacritic=both&special=hacker&special=roman-numerals&download=wordlist&encoding=utf-8&format=inline - -# should be able tell difference between English variations using this -ENV SOURCE_US http://app.aspell.net/create?max_size=60&spelling=US&max_variant=1&diacritic=both&download=wordlist&encoding=utf-8&format=inline -ENV SOURCE_GB_ISE http://app.aspell.net/create?max_size=60&spelling=GBs&max_variant=2&diacritic=both&download=wordlist&encoding=utf-8&format=inline -ENV SOURCE_GB_IZE http://app.aspell.net/create?max_size=60&spelling=GBz&max_variant=2&diacritic=both&download=wordlist&encoding=utf-8&format=inline -ENV SOURCE_CA http://app.aspell.net/create?max_size=60&spelling=CA&max_variant=2&diacritic=both&download=wordlist&encoding=utf-8&format=inline - -RUN /bin/true \ - && mkdir /scowl-wl \ - && wget -O /scowl-wl/words-US-60.txt ${SOURCE_US} \ - && wget -O /scowl-wl/words-GB-ise-60.txt ${SOURCE_GB_ISE} - diff --git a/vendor/github.com/client9/misspell/Gopkg.lock b/vendor/github.com/client9/misspell/Gopkg.lock deleted file mode 100644 index 90ed45115f..0000000000 --- a/vendor/github.com/client9/misspell/Gopkg.lock +++ /dev/null @@ -1,24 +0,0 @@ -# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. - - -[[projects]] - name = "github.com/gobwas/glob" - packages = [ - ".", - "compiler", - "match", - "syntax", - "syntax/ast", - "syntax/lexer", - "util/runes", - "util/strings" - ] - revision = "5ccd90ef52e1e632236f7326478d4faa74f99438" - version = "v0.2.3" - -[solve-meta] - analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "087ea4c49358ea8258ad9edfe514cd5ce9975c889c258e5ec7b5d2b720aae113" - solver-name = "gps-cdcl" - solver-version = 1 diff --git a/vendor/github.com/client9/misspell/Gopkg.toml b/vendor/github.com/client9/misspell/Gopkg.toml deleted file mode 100644 index e9b8e6a45a..0000000000 --- a/vendor/github.com/client9/misspell/Gopkg.toml +++ /dev/null @@ -1,34 +0,0 @@ -# Gopkg.toml example -# -# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html -# for detailed Gopkg.toml documentation. -# -# required = ["github.com/user/thing/cmd/thing"] -# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] -# -# [[constraint]] -# name = "github.com/user/project" -# version = "1.0.0" -# -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# -# [[override]] -# name = "github.com/x/y" -# version = "2.4.0" -# -# [prune] -# non-go = false -# go-tests = true -# unused-packages = true - - -[[constraint]] - name = "github.com/gobwas/glob" - version = "0.2.3" - -[prune] - go-tests = true - unused-packages = true diff --git a/vendor/github.com/client9/misspell/LICENSE b/vendor/github.com/client9/misspell/LICENSE deleted file mode 100644 index 423e1f9e0f..0000000000 --- a/vendor/github.com/client9/misspell/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-2017 Nick Galbreath - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/vendor/github.com/client9/misspell/Makefile b/vendor/github.com/client9/misspell/Makefile deleted file mode 100644 index 862ab77b0d..0000000000 --- a/vendor/github.com/client9/misspell/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -CONTAINER=nickg/misspell - -install: ## install misspell into GOPATH/bin - go install ./cmd/misspell - -build: hooks ## build and lint misspell - ./scripts/build.sh - -test: ## run all tests - go test . - -# real publishing is done only by travis -publish: ## test goreleaser - ./scripts/goreleaser-dryrun.sh - -# the grep in line 2 is to remove misspellings in the spelling dictionary -# that trigger false positives!! -falsepositives: /scowl-wl - cat /scowl-wl/words-US-60.txt | \ - grep -i -v -E "payed|Tyre|Euclidian|nonoccurence|dependancy|reenforced|accidently|surprize|dependance|idealogy|binominal|causalities|conquerer|withing|casette|analyse|analogue|dialogue|paralyse|catalogue|archaeolog|clarinettist|catalyses|cancell|chisell|ageing|cataloguing" | \ - misspell -debug -error - cat /scowl-wl/words-GB-ise-60.txt | \ - grep -v -E "payed|nonoccurence|withing" | \ - misspell -locale=UK -debug -error -# cat /scowl-wl/words-GB-ize-60.txt | \ -# grep -v -E "withing" | \ -# misspell -debug -error -# cat /scowl-wl/words-CA-60.txt | \ -# grep -v -E "withing" | \ -# misspell -debug -error - -bench: ## run benchmarks - go test -bench '.*' - -clean: ## clean up time - rm -rf dist/ bin/ - go clean ./... - git gc --aggressive - -ci: ## run test like travis-ci does, requires docker - docker run --rm \ - -v $(PWD):/go/src/github.com/client9/misspell \ - -w /go/src/github.com/client9/misspell \ - ${CONTAINER} \ - make build falsepositives - -docker-build: ## build a docker test image - docker build -t ${CONTAINER} . - -docker-pull: ## pull latest test image - docker pull ${CONTAINER} - -docker-console: ## log into the test image - docker run --rm -it \ - -v $(PWD):/go/src/github.com/client9/misspell \ - -w /go/src/github.com/client9/misspell \ - ${CONTAINER} sh - -.git/hooks/pre-commit: scripts/pre-commit.sh - cp -f scripts/pre-commit.sh .git/hooks/pre-commit -.git/hooks/commit-msg: scripts/commit-msg.sh - cp -f scripts/commit-msg.sh .git/hooks/commit-msg -hooks: .git/hooks/pre-commit .git/hooks/commit-msg ## install git precommit hooks - -.PHONY: help ci console docker-build bench - -# https://www.client9.com/self-documenting-makefiles/ -help: - @awk -F ':|##' '/^[^\t].+?:.*?##/ {\ - printf "\033[36m%-30s\033[0m %s\n", $$1, $$NF \ - }' $(MAKEFILE_LIST) -.DEFAULT_GOAL=help -.PHONY=help - diff --git a/vendor/github.com/client9/misspell/README.md b/vendor/github.com/client9/misspell/README.md deleted file mode 100644 index 5b68af04da..0000000000 --- a/vendor/github.com/client9/misspell/README.md +++ /dev/null @@ -1,424 +0,0 @@ -[![Build Status](https://travis-ci.org/client9/misspell.svg?branch=master)](https://travis-ci.org/client9/misspell) [![Go Report Card](https://goreportcard.com/badge/github.com/client9/misspell)](https://goreportcard.com/report/github.com/client9/misspell) [![GoDoc](https://godoc.org/github.com/client9/misspell?status.svg)](https://godoc.org/github.com/client9/misspell) [![Coverage](http://gocover.io/_badge/github.com/client9/misspell)](http://gocover.io/github.com/client9/misspell) [![license](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://raw.githubusercontent.com/client9/misspell/master/LICENSE) - -Correct commonly misspelled English words... quickly. - -### Install - - -If you just want a binary and to start using `misspell`: - -``` -curl -L -o ./install-misspell.sh https://git.io/misspell -sh ./install-misspell.sh -``` - - -Both will install as `./bin/misspell`. You can adjust the download location using the `-b` flag. File a ticket if you want another platform supported. - - -If you use [Go](https://golang.org/), the best way to run `misspell` is by using [gometalinter](#gometalinter). Otherwise, install `misspell` the old-fashioned way: - -``` -go get -u github.com/client9/misspell/cmd/misspell -``` - -and misspell will be in your `GOPATH` - - -Also if you like to live dangerously, one could do - -```bash -curl -L https://git.io/misspell | bash -``` - -### Usage - - -```bash -$ misspell all.html your.txt important.md files.go -your.txt:42:10 found "langauge" a misspelling of "language" - -# ^ file, line, column -``` - -``` -$ misspell -help -Usage of misspell: - -debug - Debug matching, very slow - -error - Exit with 2 if misspelling found - -f string - 'csv', 'sqlite3' or custom Golang template for output - -i string - ignore the following corrections, comma separated - -j int - Number of workers, 0 = number of CPUs - -legal - Show legal information and exit - -locale string - Correct spellings using locale perferances for US or UK. Default is to use a neutral variety of English. Setting locale to US will correct the British spelling of 'colour' to 'color' - -o string - output file or [stderr|stdout|] (default "stdout") - -q Do not emit misspelling output - -source string - Source mode: auto=guess, go=golang source, text=plain or markdown-like text (default "auto") - -w Overwrite file with corrections (default is just to display) -``` - -## FAQ - -* [Automatic Corrections](#correct) -* [Converting UK spellings to US](#locale) -* [Using pipes and stdin](#stdin) -* [Golang special support](#golang) -* [gometalinter support](#gometalinter) -* [CSV Output](#csv) -* [Using SQLite3](#sqlite) -* [Changing output format](#output) -* [Checking a folder recursively](#recursive) -* [Performance](#performance) -* [Known Issues](#issues) -* [Debugging](#debug) -* [False Negatives and missing words](#missing) -* [Origin of Word Lists](#words) -* [Software License](#license) -* [Problem statement](#problem) -* [Other spelling correctors](#others) -* [Other ideas](#otherideas) - - -### How can I make the corrections automatically? - -Just add the `-w` flag! - -``` -$ misspell -w all.html your.txt important.md files.go -your.txt:9:21:corrected "langauge" to "language" - -# ^ File is rewritten only if a misspelling is found -``` - - -### How do I convert British spellings to American (or vice-versa)? - -Add the `-locale US` flag! - -```bash -$ misspell -locale US important.txt -important.txt:10:20 found "colour" a misspelling of "color" -``` - -Add the `-locale UK` flag! - -```bash -$ echo "My favorite color is blue" | misspell -locale UK -stdin:1:3:found "favorite color" a misspelling of "favourite colour" -``` - -Help is appreciated as I'm neither British nor an -expert in the English language. - - -### How do you check an entire folder recursively? - -Just list a directory you'd like to check - -```bash -misspell . -misspell aDirectory anotherDirectory aFile -``` - -You can also run misspell recursively using the following shell tricks: - -```bash -misspell directory/**/* -``` - -or - -```bash -find . -type f | xargs misspell -``` - -You can select a type of file as well. The following examples selects all `.txt` files that are *not* in the `vendor` directory: - -```bash -find . -type f -name '*.txt' | grep -v vendor/ | xargs misspell -error -``` - - -### Can I use pipes or `stdin` for input? - -Yes! - -Print messages to `stderr` only: - -```bash -$ echo "zeebra" | misspell -stdin:1:0:found "zeebra" a misspelling of "zebra" -``` - -Print messages to `stderr`, and corrected text to `stdout`: - -```bash -$ echo "zeebra" | misspell -w -stdin:1:0:corrected "zeebra" to "zebra" -zebra -``` - -Only print the corrected text to `stdout`: - -```bash -$ echo "zeebra" | misspell -w -q -zebra -``` - - -### Are there special rules for golang source files? - -Yes! If the file ends in `.go`, then misspell will only check spelling in -comments. - -If you want to force a file to be checked as a golang source, use `-source=go` -on the command line. Conversely, you can check a golang source as if it were -pure text by using `-source=text`. You might want to do this since many -variable names have misspellings in them! - -### Can I check only-comments in other other programming languages? - -I'm told the using `-source=go` works well for ruby, javascript, java, c and -c++. - -It doesn't work well for python and bash. - - -### Does this work with gometalinter? - -[gometalinter](https://github.com/alecthomas/gometalinter) runs -multiple golang linters. Starting on [2016-06-12](https://github.com/alecthomas/gometalinter/pull/134) -gometalinter supports `misspell` natively but it is disabled by default. - -```bash -# update your copy of gometalinter -go get -u github.com/alecthomas/gometalinter - -# install updates and misspell -gometalinter --install --update -``` - -To use, just enable `misspell` - -``` -gometalinter --enable misspell ./... -``` - -Note that gometalinter only checks golang files, and uses the default options -of `misspell` - -You may wish to run this on your plaintext (.txt) and/or markdown files too. - - - -### How Can I Get CSV Output? - -Using `-f csv`, the output is standard comma-seprated values with headers in the first row. - -``` -misspell -f csv * -file,line,column,typo,corrected -"README.md",9,22,langauge,language -"README.md",47,25,langauge,language -``` - - -### How can I export to SQLite3? - -Using `-f sqlite`, the output is a [sqlite3](https://www.sqlite.org/index.html) dump-file. - -```bash -$ misspell -f sqlite * > /tmp/misspell.sql -$ cat /tmp/misspell.sql - -PRAGMA foreign_keys=OFF; -BEGIN TRANSACTION; -CREATE TABLE misspell( - "file" TEXT, - "line" INTEGER,i - "column" INTEGER,i - "typo" TEXT, - "corrected" TEXT -); -INSERT INTO misspell VALUES("install.txt",202,31,"immediatly","immediately"); -# etc... -COMMIT; -``` - -```bash -$ sqlite3 -init /tmp/misspell.sql :memory: 'select count(*) from misspell' -1 -``` - -With some tricks you can directly pipe output to sqlite3 by using `-init /dev/stdin`: - -``` -misspell -f sqlite * | sqlite3 -init /dev/stdin -column -cmd '.width 60 15' ':memory' \ - 'select substr(file,35),typo,count(*) as count from misspell group by file, typo order by count desc;' -``` - - -### How can I ignore rules? - -Using the `-i "comma,separated,rules"` flag you can specify corrections to ignore. - -For example, if you were to run `misspell -w -error -source=text` against document that contains the string `Guy Finkelshteyn Braswell`, misspell would change the text to `Guy Finkelstheyn Bras well`. You can then -determine the rules to ignore by reverting the change and running the with the `-debug` flag. You can then see -that the corrections were `htey -> they` and `aswell -> as well`. To ignore these two rules, you add `-i "htey,aswell"` to -your command. With debug mode on, you can see it print the corrections, but it will no longer make them. - - -### How can I change the output format? - -Using the `-f template` flag you can pass in a -[golang text template](https://golang.org/pkg/text/template/) to format the output. - -One can use `printf "%q" VALUE` to safely quote a value. - -The default template is compatible with [gometalinter](https://github.com/alecthomas/gometalinter) -``` -{{ .Filename }}:{{ .Line }}:{{ .Column }}:corrected {{ printf "%q" .Original }} to "{{ printf "%q" .Corrected }}" -``` - -To just print probable misspellings: - -``` --f '{{ .Original }}' -``` - - -### What problem does this solve? - -This corrects commonly misspelled English words in computer source -code, and other text-based formats (`.txt`, `.md`, etc). - -It is designed to run quickly so it can be -used as a [pre-commit hook](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) -with minimal burden on the developer. - -It does not work with binary formats (e.g. Word, etc). - -It is not a complete spell-checking program nor a grammar checker. - - -### What are other misspelling correctors and what's wrong with them? - -Some other misspelling correctors: - -* https://github.com/vlajos/misspell_fixer -* https://github.com/lyda/misspell-check -* https://github.com/lucasdemarchi/codespell - -They all work but had problems that prevented me from using them at scale: - -* slow, all of the above check one misspelling at a time (i.e. linear) using regexps -* not MIT/Apache2 licensed (or equivalent) -* have dependencies that don't work for me (python3, bash, linux sed, etc) -* don't understand American vs. British English and sometimes makes unwelcome "corrections" - -That said, they might be perfect for you and many have more features -than this project! - - -### How fast is it? - -Misspell is easily 100x to 1000x faster than other spelling correctors. You -should be able to check and correct 1000 files in under 250ms. - -This uses the mighty power of golang's -[strings.Replacer](https://golang.org/pkg/strings/#Replacer) which is -a implementation or variation of the -[Aho–Corasick algorithm](https://en.wikipedia.org/wiki/Aho–Corasick_algorithm). -This makes multiple substring matches *simultaneously*. - -In addition this uses multiple CPU cores to work on multiple files. - - -### What problems does it have? - -Unlike the other projects, this doesn't know what a "word" is. There may be -more false positives and false negatives due to this. On the other hand, it -sometimes catches things others don't. - -Either way, please file bugs and we'll fix them! - -Since it operates in parallel to make corrections, it can be non-obvious to -determine exactly what word was corrected. - - -### It's making mistakes. How can I debug? - -Run using `-debug` flag on the file you want. It should then print what word -it is trying to correct. Then [file a -bug](https://github.com/client9/misspell/issues) describing the problem. -Thanks! - - -### Why is it making mistakes or missing items in golang files? - -The matching function is *case-sensitive*, so variable names that are multiple -worlds either in all-upper or all-lower case sometimes can cause false -positives. For instance a variable named `bodyreader` could trigger a false -positive since `yrea` is in the middle that could be corrected to `year`. -Other problems happen if the variable name uses a English contraction that -should use an apostrophe. The best way of fixing this is to use the -[Effective Go naming -conventions](https://golang.org/doc/effective_go.html#mixed-caps) and use -[camelCase](https://en.wikipedia.org/wiki/CamelCase) for variable names. You -can check your code using [golint](https://github.com/golang/lint) - - -### What license is this? - -The main code is [MIT](https://github.com/client9/misspell/blob/master/LICENSE). - -Misspell also makes uses of the Golang standard library and contains a modified version of Golang's [strings.Replacer](https://golang.org/pkg/strings/#Replacer) -which are covered under a [BSD License](https://github.com/golang/go/blob/master/LICENSE). Type `misspell -legal` for more details or see [legal.go](https://github.com/client9/misspell/blob/master/legal.go) - - -### Where do the word lists come from? - -It started with a word list from -[Wikipedia](https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/For_machines). -Unfortunately, this list had to be highly edited as many of the words are -obsolete or based from mistakes on mechanical typewriters (I'm guessing). - -Additional words were added based on actually mistakes seen in -the wild (meaning self-generated). - -Variations of UK and US spellings are based on many sources including: - -* http://www.tysto.com/uk-us-spelling-list.html (with heavy editing, many are incorrect) -* http://www.oxforddictionaries.com/us/words/american-and-british-spelling-american (excellent site but incomplete) -* Diffing US and UK [scowl dictionaries](http://wordlist.aspell.net) - -American English is more accepting of spelling variations than is British -English, so "what is American or not" is subject to opinion. Corrections and help welcome. - - -### What are some other enhancements that could be done? - -Here's some ideas for enhancements: - -*Capitalization of proper nouns* could be done (e.g. weekday and month names, country names, language names) - -*Opinionated US spellings* US English has a number of words with alternate -spellings. Think [adviser vs. -advisor](http://grammarist.com/spelling/adviser-advisor/). While "advisor" is not wrong, the opinionated US -locale would correct "advisor" to "adviser". - -*Versioning* Some type of versioning is needed so reporting mistakes and errors is easier. - -*Feedback* Mistakes would be sent to some server for agregation and feedback review. - -*Contractions and Apostrophes* This would optionally correct "isnt" to -"isn't", etc. diff --git a/vendor/github.com/client9/misspell/RELEASE-HOWTO.md b/vendor/github.com/client9/misspell/RELEASE-HOWTO.md deleted file mode 100644 index 55b52d962e..0000000000 --- a/vendor/github.com/client9/misspell/RELEASE-HOWTO.md +++ /dev/null @@ -1,38 +0,0 @@ -# Release HOWTO - -since I forget. - - -1. Review existing tags and pick new release number - - ```sh - git tag - ``` - -2. Tag locally - - ```sh - git tag -a v0.1.0 -m "First release" - ``` - - If things get screwed up, delete the tag with - - ```sh - git tag -d v0.1.0 - ``` - -3. Test goreleaser - - TODO: how to install goreleaser - - ```sh - ./scripts/goreleaser-dryrun.sh - ``` - -4. Push - - ```bash - git push origin v0.1.0 - ``` - -5. Verify release and edit notes. See https://github.com/client9/misspell/releases diff --git a/vendor/github.com/client9/misspell/ascii.go b/vendor/github.com/client9/misspell/ascii.go deleted file mode 100644 index 1430718d6a..0000000000 --- a/vendor/github.com/client9/misspell/ascii.go +++ /dev/null @@ -1,62 +0,0 @@ -package misspell - -// ByteToUpper converts an ascii byte to upper cases -// Uses a branchless algorithm -func ByteToUpper(x byte) byte { - b := byte(0x80) | x - c := b - byte(0x61) - d := ^(b - byte(0x7b)) - e := (c & d) & (^x & 0x7f) - return x - (e >> 2) -} - -// ByteToLower converts an ascii byte to lower case -// uses a branchless algorithm -func ByteToLower(eax byte) byte { - ebx := eax&byte(0x7f) + byte(0x25) - ebx = ebx&byte(0x7f) + byte(0x1a) - ebx = ((ebx & ^eax) >> 2) & byte(0x20) - return eax + ebx -} - -// ByteEqualFold does ascii compare, case insensitive -func ByteEqualFold(a, b byte) bool { - return a == b || ByteToLower(a) == ByteToLower(b) -} - -// StringEqualFold ASCII case-insensitive comparison -// golang toUpper/toLower for both bytes and strings -// appears to be Unicode based which is super slow -// based from https://codereview.appspot.com/5180044/patch/14007/21002 -func StringEqualFold(s1, s2 string) bool { - if len(s1) != len(s2) { - return false - } - for i := 0; i < len(s1); i++ { - c1 := s1[i] - c2 := s2[i] - // c1 & c2 - if c1 != c2 { - c1 |= 'a' - 'A' - c2 |= 'a' - 'A' - if c1 != c2 || c1 < 'a' || c1 > 'z' { - return false - } - } - } - return true -} - -// StringHasPrefixFold is similar to strings.HasPrefix but comparison -// is done ignoring ASCII case. -// / -func StringHasPrefixFold(s1, s2 string) bool { - // prefix is bigger than input --> false - if len(s1) < len(s2) { - return false - } - if len(s1) == len(s2) { - return StringEqualFold(s1, s2) - } - return StringEqualFold(s1[:len(s2)], s2) -} diff --git a/vendor/github.com/client9/misspell/case.go b/vendor/github.com/client9/misspell/case.go deleted file mode 100644 index 2ea3850dfa..0000000000 --- a/vendor/github.com/client9/misspell/case.go +++ /dev/null @@ -1,59 +0,0 @@ -package misspell - -import ( - "strings" -) - -// WordCase is an enum of various word casing styles -type WordCase int - -// Various WordCase types.. likely to be not correct -const ( - CaseUnknown WordCase = iota - CaseLower - CaseUpper - CaseTitle -) - -// CaseStyle returns what case style a word is in -func CaseStyle(word string) WordCase { - upperCount := 0 - lowerCount := 0 - - // this iterates over RUNES not BYTES - for i := 0; i < len(word); i++ { - ch := word[i] - switch { - case ch >= 'a' && ch <= 'z': - lowerCount++ - case ch >= 'A' && ch <= 'Z': - upperCount++ - } - } - - switch { - case upperCount != 0 && lowerCount == 0: - return CaseUpper - case upperCount == 0 && lowerCount != 0: - return CaseLower - case upperCount == 1 && lowerCount > 0 && word[0] >= 'A' && word[0] <= 'Z': - return CaseTitle - } - return CaseUnknown -} - -// CaseVariations returns -// If AllUpper or First-Letter-Only is upcased: add the all upper case version -// If AllLower, add the original, the title and upcase forms -// If Mixed, return the original, and the all upcase form -// -func CaseVariations(word string, style WordCase) []string { - switch style { - case CaseLower: - return []string{word, strings.ToUpper(word[0:1]) + word[1:], strings.ToUpper(word)} - case CaseUpper: - return []string{strings.ToUpper(word)} - default: - return []string{word, strings.ToUpper(word)} - } -} diff --git a/vendor/github.com/client9/misspell/cmd/misspell/BUILD.bazel b/vendor/github.com/client9/misspell/cmd/misspell/BUILD.bazel deleted file mode 100644 index 698985efca..0000000000 --- a/vendor/github.com/client9/misspell/cmd/misspell/BUILD.bazel +++ /dev/null @@ -1,16 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") - -go_library( - name = "go_default_library", - srcs = ["main.go"], - importmap = "k8s.io/kops/vendor/github.com/client9/misspell/cmd/misspell", - importpath = "github.com/client9/misspell/cmd/misspell", - visibility = ["//visibility:private"], - deps = ["//vendor/github.com/client9/misspell:go_default_library"], -) - -go_binary( - name = "misspell", - embed = [":go_default_library"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/client9/misspell/cmd/misspell/main.go b/vendor/github.com/client9/misspell/cmd/misspell/main.go deleted file mode 100644 index 174d79d882..0000000000 --- a/vendor/github.com/client9/misspell/cmd/misspell/main.go +++ /dev/null @@ -1,326 +0,0 @@ -// The misspell command corrects commonly misspelled English words in source files. -package main - -import ( - "bytes" - "flag" - "fmt" - "io" - "io/ioutil" - "log" - "os" - "path/filepath" - "runtime" - "strings" - "text/template" - "time" - - "github.com/client9/misspell" -) - -var ( - defaultWrite *template.Template - defaultRead *template.Template - - stdout *log.Logger - debug *log.Logger - - version = "dev" -) - -const ( - // Note for gometalinter it must be "File:Line:Column: Msg" - // note space beteen ": Msg" - defaultWriteTmpl = `{{ .Filename }}:{{ .Line }}:{{ .Column }}: corrected "{{ .Original }}" to "{{ .Corrected }}"` - defaultReadTmpl = `{{ .Filename }}:{{ .Line }}:{{ .Column }}: "{{ .Original }}" is a misspelling of "{{ .Corrected }}"` - csvTmpl = `{{ printf "%q" .Filename }},{{ .Line }},{{ .Column }},{{ .Original }},{{ .Corrected }}` - csvHeader = `file,line,column,typo,corrected` - sqliteTmpl = `INSERT INTO misspell VALUES({{ printf "%q" .Filename }},{{ .Line }},{{ .Column }},{{ printf "%q" .Original }},{{ printf "%q" .Corrected }});` - sqliteHeader = `PRAGMA foreign_keys=OFF; -BEGIN TRANSACTION; -CREATE TABLE misspell( - "file" TEXT, "line" INTEGER, "column" INTEGER, "typo" TEXT, "corrected" TEXT -);` - sqliteFooter = "COMMIT;" -) - -func worker(writeit bool, r *misspell.Replacer, mode string, files <-chan string, results chan<- int) { - count := 0 - for filename := range files { - orig, err := misspell.ReadTextFile(filename) - if err != nil { - log.Println(err) - continue - } - if len(orig) == 0 { - continue - } - - debug.Printf("Processing %s", filename) - - var updated string - var changes []misspell.Diff - - if mode == "go" { - updated, changes = r.ReplaceGo(orig) - } else { - updated, changes = r.Replace(orig) - } - - if len(changes) == 0 { - continue - } - count += len(changes) - for _, diff := range changes { - // add in filename - diff.Filename = filename - - // output can be done by doing multiple goroutines - // and can clobber os.Stdout. - // - // the log package can be used simultaneously from multiple goroutines - var output bytes.Buffer - if writeit { - defaultWrite.Execute(&output, diff) - } else { - defaultRead.Execute(&output, diff) - } - - // goroutine-safe print to os.Stdout - stdout.Println(output.String()) - } - - if writeit { - ioutil.WriteFile(filename, []byte(updated), 0) - } - } - results <- count -} - -func main() { - t := time.Now() - var ( - workers = flag.Int("j", 0, "Number of workers, 0 = number of CPUs") - writeit = flag.Bool("w", false, "Overwrite file with corrections (default is just to display)") - quietFlag = flag.Bool("q", false, "Do not emit misspelling output") - outFlag = flag.String("o", "stdout", "output file or [stderr|stdout|]") - format = flag.String("f", "", "'csv', 'sqlite3' or custom Golang template for output") - ignores = flag.String("i", "", "ignore the following corrections, comma separated") - locale = flag.String("locale", "", "Correct spellings using locale perferances for US or UK. Default is to use a neutral variety of English. Setting locale to US will correct the British spelling of 'colour' to 'color'") - mode = flag.String("source", "auto", "Source mode: auto=guess, go=golang source, text=plain or markdown-like text") - debugFlag = flag.Bool("debug", false, "Debug matching, very slow") - exitError = flag.Bool("error", false, "Exit with 2 if misspelling found") - showVersion = flag.Bool("v", false, "Show version and exit") - - showLegal = flag.Bool("legal", false, "Show legal information and exit") - ) - flag.Parse() - - if *showVersion { - fmt.Println(version) - return - } - if *showLegal { - fmt.Println(misspell.Legal) - return - } - if *debugFlag { - debug = log.New(os.Stderr, "DEBUG ", 0) - } else { - debug = log.New(ioutil.Discard, "", 0) - } - - r := misspell.Replacer{ - Replacements: misspell.DictMain, - Debug: *debugFlag, - } - // - // Figure out regional variations - // - switch strings.ToUpper(*locale) { - case "": - // nothing - case "US": - r.AddRuleList(misspell.DictAmerican) - case "UK", "GB": - r.AddRuleList(misspell.DictBritish) - case "NZ", "AU", "CA": - log.Fatalf("Help wanted. https://github.com/client9/misspell/issues/6") - default: - log.Fatalf("Unknown locale: %q", *locale) - } - - // - // Stuff to ignore - // - if len(*ignores) > 0 { - r.RemoveRule(strings.Split(*ignores, ",")) - } - - // - // Source input mode - // - switch *mode { - case "auto": - case "go": - case "text": - default: - log.Fatalf("Mode must be one of auto=guess, go=golang source, text=plain or markdown-like text") - } - - // - // Custom output - // - switch { - case *format == "csv": - tmpl := template.Must(template.New("csv").Parse(csvTmpl)) - defaultWrite = tmpl - defaultRead = tmpl - stdout.Println(csvHeader) - case *format == "sqlite" || *format == "sqlite3": - tmpl := template.Must(template.New("sqlite3").Parse(sqliteTmpl)) - defaultWrite = tmpl - defaultRead = tmpl - stdout.Println(sqliteHeader) - case len(*format) > 0: - t, err := template.New("custom").Parse(*format) - if err != nil { - log.Fatalf("Unable to compile log format: %s", err) - } - defaultWrite = t - defaultRead = t - default: // format == "" - defaultWrite = template.Must(template.New("defaultWrite").Parse(defaultWriteTmpl)) - defaultRead = template.Must(template.New("defaultRead").Parse(defaultReadTmpl)) - } - - // we cant't just write to os.Stdout directly since we have multiple goroutine - // all writing at the same time causing broken output. Log is routine safe. - // we see it so it doesn't use a prefix or include a time stamp. - switch { - case *quietFlag || *outFlag == "/dev/null": - stdout = log.New(ioutil.Discard, "", 0) - case *outFlag == "/dev/stderr" || *outFlag == "stderr": - stdout = log.New(os.Stderr, "", 0) - case *outFlag == "/dev/stdout" || *outFlag == "stdout": - stdout = log.New(os.Stdout, "", 0) - case *outFlag == "" || *outFlag == "-": - stdout = log.New(os.Stdout, "", 0) - default: - fo, err := os.Create(*outFlag) - if err != nil { - log.Fatalf("unable to create outfile %q: %s", *outFlag, err) - } - defer fo.Close() - stdout = log.New(fo, "", 0) - } - - // - // Number of Workers / CPU to use - // - if *workers < 0 { - log.Fatalf("-j must >= 0") - } - if *workers == 0 { - *workers = runtime.NumCPU() - } - if *debugFlag { - *workers = 1 - } - - // - // Done with Flags. - // Compile the Replacer and process files - // - r.Compile() - - args := flag.Args() - debug.Printf("initialization complete in %v", time.Since(t)) - - // stdin/stdout - if len(args) == 0 { - // if we are working with pipes/stdin/stdout - // there is no concurrency, so we can directly - // send data to the writers - var fileout io.Writer - var errout io.Writer - switch *writeit { - case true: - // if we ARE writing the corrected stream - // the corrected stream goes to stdout - // and the misspelling errors goes to stderr - // so we can do something like this: - // curl something | misspell -w | gzip > afile.gz - fileout = os.Stdout - errout = os.Stderr - case false: - // if we are not writing out the corrected stream - // then work just like files. Misspelling errors - // are sent to stdout - fileout = ioutil.Discard - errout = os.Stdout - } - count := 0 - next := func(diff misspell.Diff) { - count++ - - // don't even evaluate the output templates - if *quietFlag { - return - } - diff.Filename = "stdin" - if *writeit { - defaultWrite.Execute(errout, diff) - } else { - defaultRead.Execute(errout, diff) - } - errout.Write([]byte{'\n'}) - - } - err := r.ReplaceReader(os.Stdin, fileout, next) - if err != nil { - os.Exit(1) - } - switch *format { - case "sqlite", "sqlite3": - fileout.Write([]byte(sqliteFooter)) - } - if count != 0 && *exitError { - // error - os.Exit(2) - } - return - } - - c := make(chan string, 64) - results := make(chan int, *workers) - - for i := 0; i < *workers; i++ { - go worker(*writeit, &r, *mode, c, results) - } - - for _, filename := range args { - filepath.Walk(filename, func(path string, info os.FileInfo, err error) error { - if err == nil && !info.IsDir() { - c <- path - } - return nil - }) - } - close(c) - - count := 0 - for i := 0; i < *workers; i++ { - changed := <-results - count += changed - } - - switch *format { - case "sqlite", "sqlite3": - stdout.Println(sqliteFooter) - } - - if count != 0 && *exitError { - os.Exit(2) - } -} diff --git a/vendor/github.com/client9/misspell/goreleaser.yml b/vendor/github.com/client9/misspell/goreleaser.yml deleted file mode 100644 index 560cb3810c..0000000000 --- a/vendor/github.com/client9/misspell/goreleaser.yml +++ /dev/null @@ -1,38 +0,0 @@ -# goreleaser.yml -# https://github.com/goreleaser/goreleaser - -project_name: misspell - -builds: - - - main: cmd/misspell/main.go - binary: misspell - ldflags: -s -w -X main.version={{.Version}} - goos: - - darwin - - linux - - windows - goarch: - - amd64 - env: - - CGO_ENABLED=0 - ignore: - - goos: darwin - goarch: 386 - - goos: windows - goarch: 386 - -archive: - name_template: "{{ .Binary }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}" - replacements: - amd64: 64bit - 386: 32bit - darwin: mac - files: - - none* - -checksum: - name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt" - -snapshot: - name_template: "SNAPSHOT-{{.Commit}}" diff --git a/vendor/github.com/client9/misspell/install-misspell.sh b/vendor/github.com/client9/misspell/install-misspell.sh deleted file mode 100644 index 8e0ff5d947..0000000000 --- a/vendor/github.com/client9/misspell/install-misspell.sh +++ /dev/null @@ -1,318 +0,0 @@ -#!/bin/sh -set -e -# Code generated by godownloader. DO NOT EDIT. -# - -usage() { - this=$1 - cat </dev/null -} -uname_os() { - os=$(uname -s | tr '[:upper:]' '[:lower:]') - echo "$os" -} -uname_arch() { - arch=$(uname -m) - case $arch in - x86_64) arch="amd64" ;; - x86) arch="386" ;; - i686) arch="386" ;; - i386) arch="386" ;; - aarch64) arch="arm64" ;; - armv5*) arch="arm5" ;; - armv6*) arch="arm6" ;; - armv7*) arch="arm7" ;; - esac - echo ${arch} -} -uname_os_check() { - os=$(uname_os) - case "$os" in - darwin) return 0 ;; - dragonfly) return 0 ;; - freebsd) return 0 ;; - linux) return 0 ;; - android) return 0 ;; - nacl) return 0 ;; - netbsd) return 0 ;; - openbsd) return 0 ;; - plan9) return 0 ;; - solaris) return 0 ;; - windows) return 0 ;; - esac - echo "$0: uname_os_check: internal error '$(uname -s)' got converted to '$os' which is not a GOOS value. Please file bug at https://github.com/client9/shlib" - return 1 -} -uname_arch_check() { - arch=$(uname_arch) - case "$arch" in - 386) return 0 ;; - amd64) return 0 ;; - arm64) return 0 ;; - armv5) return 0 ;; - armv6) return 0 ;; - armv7) return 0 ;; - ppc64) return 0 ;; - ppc64le) return 0 ;; - mips) return 0 ;; - mipsle) return 0 ;; - mips64) return 0 ;; - mips64le) return 0 ;; - s390x) return 0 ;; - amd64p32) return 0 ;; - esac - echo "$0: uname_arch_check: internal error '$(uname -m)' got converted to '$arch' which is not a GOARCH value. Please file bug report at https://github.com/client9/shlib" - return 1 -} -untar() { - tarball=$1 - case "${tarball}" in - *.tar.gz | *.tgz) tar -xzf "${tarball}" ;; - *.tar) tar -xf "${tarball}" ;; - *.zip) unzip "${tarball}" ;; - *) - echo "Unknown archive format for ${tarball}" - return 1 - ;; - esac -} -mktmpdir() { - test -z "$TMPDIR" && TMPDIR="$(mktemp -d)" - mkdir -p "${TMPDIR}" - echo "${TMPDIR}" -} -http_download() { - local_file=$1 - source_url=$2 - header=$3 - headerflag='' - destflag='' - if is_command curl; then - cmd='curl --fail -sSL' - destflag='-o' - headerflag='-H' - elif is_command wget; then - cmd='wget -q' - destflag='-O' - headerflag='--header' - else - echo "http_download: unable to find wget or curl" - return 1 - fi - if [ -z "$header" ]; then - $cmd $destflag "$local_file" "$source_url" - else - $cmd $headerflag "$header" $destflag "$local_file" "$source_url" - fi -} -github_api() { - local_file=$1 - source_url=$2 - header="" - case "$source_url" in - https://api.github.com*) - test -z "$GITHUB_TOKEN" || header="Authorization: token $GITHUB_TOKEN" - ;; - esac - http_download "$local_file" "$source_url" "$header" -} -github_last_release() { - owner_repo=$1 - giturl="https://api.github.com/repos/${owner_repo}/releases/latest" - html=$(github_api - "$giturl") - version=$(echo "$html" | grep -m 1 "\"tag_name\":" | cut -f4 -d'"') - test -z "$version" && return 1 - echo "$version" -} -hash_sha256() { - TARGET=${1:-/dev/stdin} - if is_command gsha256sum; then - hash=$(gsha256sum "$TARGET") || return 1 - echo "$hash" | cut -d ' ' -f 1 - elif is_command sha256sum; then - hash=$(sha256sum "$TARGET") || return 1 - echo "$hash" | cut -d ' ' -f 1 - elif is_command shasum; then - hash=$(shasum -a 256 "$TARGET" 2>/dev/null) || return 1 - echo "$hash" | cut -d ' ' -f 1 - elif is_command openssl; then - hash=$(openssl -dst openssl dgst -sha256 "$TARGET") || return 1 - echo "$hash" | cut -d ' ' -f a - else - echo "hash_sha256: unable to find command to compute sha-256 hash" - return 1 - fi -} -hash_sha256_verify() { - TARGET=$1 - checksums=$2 - if [ -z "$checksums" ]; then - echo "hash_sha256_verify: checksum file not specified in arg2" - return 1 - fi - BASENAME=${TARGET##*/} - want=$(grep "${BASENAME}" "${checksums}" 2>/dev/null | tr '\t' ' ' | cut -d ' ' -f 1) - if [ -z "$want" ]; then - echo "hash_sha256_verify: unable to find checksum for '${TARGET}' in '${checksums}'" - return 1 - fi - got=$(hash_sha256 "$TARGET") - if [ "$want" != "$got" ]; then - echo "hash_sha256_verify: checksum for '$TARGET' did not verify ${want} vs $got" - return 1 - fi -} -cat /dev/null < 50000 { - fin, err := os.Open(filename) - if err != nil { - return "", fmt.Errorf("Unable to open large file %q: %s", filename, err) - } - defer fin.Close() - buf := make([]byte, 512) - _, err = io.ReadFull(fin, buf) - if err != nil { - return "", fmt.Errorf("Unable to read 512 bytes from %q: %s", filename, err) - } - if !isTextFile(buf) { - return "", nil - } - - // set so we don't double check this file - isText = true - } - - // read in whole file - raw, err := ioutil.ReadFile(filename) - if err != nil { - return "", fmt.Errorf("Unable to read all %q: %s", filename, err) - } - - if !isText && !isTextFile(raw) { - return "", nil - } - return string(raw), nil -} diff --git a/vendor/github.com/client9/misspell/notwords.go b/vendor/github.com/client9/misspell/notwords.go deleted file mode 100644 index 06d0d5a5ad..0000000000 --- a/vendor/github.com/client9/misspell/notwords.go +++ /dev/null @@ -1,85 +0,0 @@ -package misspell - -import ( - "bytes" - "regexp" - "strings" -) - -var ( - reEmail = regexp.MustCompile(`[a-zA-Z0-9_.%+-]+@[a-zA-Z0-9-.]+\.[a-zA-Z]{2,6}[^a-zA-Z]`) - reHost = regexp.MustCompile(`[a-zA-Z0-9-.]+\.[a-zA-Z]+`) - reBackslash = regexp.MustCompile(`\\[a-z]`) -) - -// RemovePath attempts to strip away embedded file system paths, e.g. -// /foo/bar or /static/myimg.png -// -// TODO: windows style -// -func RemovePath(s string) string { - out := bytes.Buffer{} - var idx int - for len(s) > 0 { - if idx = strings.IndexByte(s, '/'); idx == -1 { - out.WriteString(s) - break - } - - if idx > 0 { - idx-- - } - - var chclass string - switch s[idx] { - case '/', ' ', '\n', '\t', '\r': - chclass = " \n\r\t" - case '[': - chclass = "]\n" - case '(': - chclass = ")\n" - default: - out.WriteString(s[:idx+2]) - s = s[idx+2:] - continue - } - - endx := strings.IndexAny(s[idx+1:], chclass) - if endx != -1 { - out.WriteString(s[:idx+1]) - out.Write(bytes.Repeat([]byte{' '}, endx)) - s = s[idx+endx+1:] - } else { - out.WriteString(s) - break - } - } - return out.String() -} - -// replaceWithBlanks returns a string with the same number of spaces as the input -func replaceWithBlanks(s string) string { - return strings.Repeat(" ", len(s)) -} - -// RemoveEmail remove email-like strings, e.g. "nickg+junk@xfoobar.com", "nickg@xyz.abc123.biz" -func RemoveEmail(s string) string { - return reEmail.ReplaceAllStringFunc(s, replaceWithBlanks) -} - -// RemoveHost removes host-like strings "foobar.com" "abc123.fo1231.biz" -func RemoveHost(s string) string { - return reHost.ReplaceAllStringFunc(s, replaceWithBlanks) -} - -// RemoveBackslashEscapes removes characters that are preceeded by a backslash -// commonly found in printf format stringd "\nto" -func removeBackslashEscapes(s string) string { - return reBackslash.ReplaceAllStringFunc(s, replaceWithBlanks) -} - -// RemoveNotWords blanks out all the not words -func RemoveNotWords(s string) string { - // do most selective/specific first - return removeBackslashEscapes(RemoveHost(RemoveEmail(RemovePath(StripURL(s))))) -} diff --git a/vendor/github.com/client9/misspell/replace.go b/vendor/github.com/client9/misspell/replace.go deleted file mode 100644 index a99bbcc582..0000000000 --- a/vendor/github.com/client9/misspell/replace.go +++ /dev/null @@ -1,246 +0,0 @@ -package misspell - -import ( - "bufio" - "bytes" - "io" - "regexp" - "strings" - "text/scanner" -) - -func max(x, y int) int { - if x > y { - return x - } - return y -} - -func inArray(haystack []string, needle string) bool { - for _, word := range haystack { - if needle == word { - return true - } - } - return false -} - -var wordRegexp = regexp.MustCompile(`[a-zA-Z0-9']+`) - -// Diff is datastructure showing what changed in a single line -type Diff struct { - Filename string - FullLine string - Line int - Column int - Original string - Corrected string -} - -// Replacer is the main struct for spelling correction -type Replacer struct { - Replacements []string - Debug bool - engine *StringReplacer - corrected map[string]string -} - -// New creates a new default Replacer using the main rule list -func New() *Replacer { - r := Replacer{ - Replacements: DictMain, - } - r.Compile() - return &r -} - -// RemoveRule deletes existings rules. -// TODO: make inplace to save memory -func (r *Replacer) RemoveRule(ignore []string) { - newwords := make([]string, 0, len(r.Replacements)) - for i := 0; i < len(r.Replacements); i += 2 { - if inArray(ignore, r.Replacements[i]) { - continue - } - newwords = append(newwords, r.Replacements[i:i+2]...) - } - r.engine = nil - r.Replacements = newwords -} - -// AddRuleList appends new rules. -// Input is in the same form as Strings.Replacer: [ old1, new1, old2, new2, ....] -// Note: does not check for duplictes -func (r *Replacer) AddRuleList(additions []string) { - r.engine = nil - r.Replacements = append(r.Replacements, additions...) -} - -// Compile compiles the rules. Required before using the Replace functions -func (r *Replacer) Compile() { - - r.corrected = make(map[string]string, len(r.Replacements)/2) - for i := 0; i < len(r.Replacements); i += 2 { - r.corrected[r.Replacements[i]] = r.Replacements[i+1] - } - r.engine = NewStringReplacer(r.Replacements...) -} - -/* -line1 and line2 are different -extract words from each line1 - -replace word -> newword -if word == new-word - continue -if new-word in list of replacements - continue -new word not original, and not in list of replacements - some substring got mixed up. UNdo -*/ -func (r *Replacer) recheckLine(s string, lineNum int, buf io.Writer, next func(Diff)) { - first := 0 - redacted := RemoveNotWords(s) - - idx := wordRegexp.FindAllStringIndex(redacted, -1) - for _, ab := range idx { - word := s[ab[0]:ab[1]] - newword := r.engine.Replace(word) - if newword == word { - // no replacement done - continue - } - - // ignore camelCase words - // https://github.com/client9/misspell/issues/113 - if CaseStyle(word) == CaseUnknown { - continue - } - - if StringEqualFold(r.corrected[strings.ToLower(word)], newword) { - // word got corrected into something we know - io.WriteString(buf, s[first:ab[0]]) - io.WriteString(buf, newword) - first = ab[1] - next(Diff{ - FullLine: s, - Line: lineNum, - Original: word, - Corrected: newword, - Column: ab[0], - }) - continue - } - // Word got corrected into something unknown. Ignore it - } - io.WriteString(buf, s[first:]) -} - -// ReplaceGo is a specialized routine for correcting Golang source -// files. Currently only checks comments, not identifiers for -// spelling. -func (r *Replacer) ReplaceGo(input string) (string, []Diff) { - var s scanner.Scanner - s.Init(strings.NewReader(input)) - s.Mode = scanner.ScanIdents | scanner.ScanFloats | scanner.ScanChars | scanner.ScanStrings | scanner.ScanRawStrings | scanner.ScanComments - lastPos := 0 - output := "" -Loop: - for { - switch s.Scan() { - case scanner.Comment: - origComment := s.TokenText() - newComment := r.engine.Replace(origComment) - - if origComment != newComment { - // s.Pos().Offset is the end of the current token - // subtract len(origComment) to get the start of the token - offset := s.Pos().Offset - output = output + input[lastPos:offset-len(origComment)] + newComment - lastPos = offset - } - case scanner.EOF: - break Loop - } - } - - if lastPos == 0 { - // no changes, no copies - return input, nil - } - if lastPos < len(input) { - output = output + input[lastPos:] - } - diffs := make([]Diff, 0, 8) - buf := bytes.NewBuffer(make([]byte, 0, max(len(input), len(output))+100)) - // faster that making a bytes.Buffer and bufio.ReadString - outlines := strings.SplitAfter(output, "\n") - inlines := strings.SplitAfter(input, "\n") - for i := 0; i < len(inlines); i++ { - if inlines[i] == outlines[i] { - buf.WriteString(outlines[i]) - continue - } - r.recheckLine(inlines[i], i+1, buf, func(d Diff) { - diffs = append(diffs, d) - }) - } - - return buf.String(), diffs - -} - -// Replace is corrects misspellings in input, returning corrected version -// along with a list of diffs. -func (r *Replacer) Replace(input string) (string, []Diff) { - output := r.engine.Replace(input) - if input == output { - return input, nil - } - diffs := make([]Diff, 0, 8) - buf := bytes.NewBuffer(make([]byte, 0, max(len(input), len(output))+100)) - // faster that making a bytes.Buffer and bufio.ReadString - outlines := strings.SplitAfter(output, "\n") - inlines := strings.SplitAfter(input, "\n") - for i := 0; i < len(inlines); i++ { - if inlines[i] == outlines[i] { - buf.WriteString(outlines[i]) - continue - } - r.recheckLine(inlines[i], i+1, buf, func(d Diff) { - diffs = append(diffs, d) - }) - } - - return buf.String(), diffs -} - -// ReplaceReader applies spelling corrections to a reader stream. Diffs are -// emitted through a callback. -func (r *Replacer) ReplaceReader(raw io.Reader, w io.Writer, next func(Diff)) error { - var ( - err error - line string - lineNum int - ) - reader := bufio.NewReader(raw) - for err == nil { - lineNum++ - line, err = reader.ReadString('\n') - - // if it's EOF, then line has the last line - // don't like the check of err here and - // in for loop - if err != nil && err != io.EOF { - return err - } - // easily 5x faster than regexp+map - if line == r.engine.Replace(line) { - io.WriteString(w, line) - continue - } - // but it can be inaccurate, so we need to double check - r.recheckLine(line, lineNum, w, next) - } - return nil -} diff --git a/vendor/github.com/client9/misspell/stringreplacer.go b/vendor/github.com/client9/misspell/stringreplacer.go deleted file mode 100644 index 3151eceb70..0000000000 --- a/vendor/github.com/client9/misspell/stringreplacer.go +++ /dev/null @@ -1,336 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package misspell - -import ( - "io" - // "log" - "strings" -) - -// StringReplacer replaces a list of strings with replacements. -// It is safe for concurrent use by multiple goroutines. -type StringReplacer struct { - r replacer -} - -// replacer is the interface that a replacement algorithm needs to implement. -type replacer interface { - Replace(s string) string - WriteString(w io.Writer, s string) (n int, err error) -} - -// NewStringReplacer returns a new Replacer from a list of old, new string pairs. -// Replacements are performed in order, without overlapping matches. -func NewStringReplacer(oldnew ...string) *StringReplacer { - if len(oldnew)%2 == 1 { - panic("strings.NewReplacer: odd argument count") - } - - return &StringReplacer{r: makeGenericReplacer(oldnew)} -} - -// Replace returns a copy of s with all replacements performed. -func (r *StringReplacer) Replace(s string) string { - return r.r.Replace(s) -} - -// WriteString writes s to w with all replacements performed. -func (r *StringReplacer) WriteString(w io.Writer, s string) (n int, err error) { - return r.r.WriteString(w, s) -} - -// trieNode is a node in a lookup trie for prioritized key/value pairs. Keys -// and values may be empty. For example, the trie containing keys "ax", "ay", -// "bcbc", "x" and "xy" could have eight nodes: -// -// n0 - -// n1 a- -// n2 .x+ -// n3 .y+ -// n4 b- -// n5 .cbc+ -// n6 x+ -// n7 .y+ -// -// n0 is the root node, and its children are n1, n4 and n6; n1's children are -// n2 and n3; n4's child is n5; n6's child is n7. Nodes n0, n1 and n4 (marked -// with a trailing "-") are partial keys, and nodes n2, n3, n5, n6 and n7 -// (marked with a trailing "+") are complete keys. -type trieNode struct { - // value is the value of the trie node's key/value pair. It is empty if - // this node is not a complete key. - value string - // priority is the priority (higher is more important) of the trie node's - // key/value pair; keys are not necessarily matched shortest- or longest- - // first. Priority is positive if this node is a complete key, and zero - // otherwise. In the example above, positive/zero priorities are marked - // with a trailing "+" or "-". - priority int - - // A trie node may have zero, one or more child nodes: - // * if the remaining fields are zero, there are no children. - // * if prefix and next are non-zero, there is one child in next. - // * if table is non-zero, it defines all the children. - // - // Prefixes are preferred over tables when there is one child, but the - // root node always uses a table for lookup efficiency. - - // prefix is the difference in keys between this trie node and the next. - // In the example above, node n4 has prefix "cbc" and n4's next node is n5. - // Node n5 has no children and so has zero prefix, next and table fields. - prefix string - next *trieNode - - // table is a lookup table indexed by the next byte in the key, after - // remapping that byte through genericReplacer.mapping to create a dense - // index. In the example above, the keys only use 'a', 'b', 'c', 'x' and - // 'y', which remap to 0, 1, 2, 3 and 4. All other bytes remap to 5, and - // genericReplacer.tableSize will be 5. Node n0's table will be - // []*trieNode{ 0:n1, 1:n4, 3:n6 }, where the 0, 1 and 3 are the remapped - // 'a', 'b' and 'x'. - table []*trieNode -} - -func (t *trieNode) add(key, val string, priority int, r *genericReplacer) { - if key == "" { - if t.priority == 0 { - t.value = val - t.priority = priority - } - return - } - - if t.prefix != "" { - // Need to split the prefix among multiple nodes. - var n int // length of the longest common prefix - for ; n < len(t.prefix) && n < len(key); n++ { - if t.prefix[n] != key[n] { - break - } - } - if n == len(t.prefix) { - t.next.add(key[n:], val, priority, r) - } else if n == 0 { - // First byte differs, start a new lookup table here. Looking up - // what is currently t.prefix[0] will lead to prefixNode, and - // looking up key[0] will lead to keyNode. - var prefixNode *trieNode - if len(t.prefix) == 1 { - prefixNode = t.next - } else { - prefixNode = &trieNode{ - prefix: t.prefix[1:], - next: t.next, - } - } - keyNode := new(trieNode) - t.table = make([]*trieNode, r.tableSize) - t.table[r.mapping[t.prefix[0]]] = prefixNode - t.table[r.mapping[key[0]]] = keyNode - t.prefix = "" - t.next = nil - keyNode.add(key[1:], val, priority, r) - } else { - // Insert new node after the common section of the prefix. - next := &trieNode{ - prefix: t.prefix[n:], - next: t.next, - } - t.prefix = t.prefix[:n] - t.next = next - next.add(key[n:], val, priority, r) - } - } else if t.table != nil { - // Insert into existing table. - m := r.mapping[key[0]] - if t.table[m] == nil { - t.table[m] = new(trieNode) - } - t.table[m].add(key[1:], val, priority, r) - } else { - t.prefix = key - t.next = new(trieNode) - t.next.add("", val, priority, r) - } -} - -func (r *genericReplacer) lookup(s string, ignoreRoot bool) (val string, keylen int, found bool) { - // Iterate down the trie to the end, and grab the value and keylen with - // the highest priority. - bestPriority := 0 - node := &r.root - n := 0 - for node != nil { - if node.priority > bestPriority && !(ignoreRoot && node == &r.root) { - bestPriority = node.priority - val = node.value - keylen = n - found = true - } - - if s == "" { - break - } - if node.table != nil { - index := r.mapping[ByteToLower(s[0])] - if int(index) == r.tableSize { - break - } - node = node.table[index] - s = s[1:] - n++ - } else if node.prefix != "" && StringHasPrefixFold(s, node.prefix) { - n += len(node.prefix) - s = s[len(node.prefix):] - node = node.next - } else { - break - } - } - return -} - -// genericReplacer is the fully generic algorithm. -// It's used as a fallback when nothing faster can be used. -type genericReplacer struct { - root trieNode - // tableSize is the size of a trie node's lookup table. It is the number - // of unique key bytes. - tableSize int - // mapping maps from key bytes to a dense index for trieNode.table. - mapping [256]byte -} - -func makeGenericReplacer(oldnew []string) *genericReplacer { - r := new(genericReplacer) - // Find each byte used, then assign them each an index. - for i := 0; i < len(oldnew); i += 2 { - key := strings.ToLower(oldnew[i]) - for j := 0; j < len(key); j++ { - r.mapping[key[j]] = 1 - } - } - - for _, b := range r.mapping { - r.tableSize += int(b) - } - - var index byte - for i, b := range r.mapping { - if b == 0 { - r.mapping[i] = byte(r.tableSize) - } else { - r.mapping[i] = index - index++ - } - } - // Ensure root node uses a lookup table (for performance). - r.root.table = make([]*trieNode, r.tableSize) - - for i := 0; i < len(oldnew); i += 2 { - r.root.add(strings.ToLower(oldnew[i]), oldnew[i+1], len(oldnew)-i, r) - } - return r -} - -type appendSliceWriter []byte - -// Write writes to the buffer to satisfy io.Writer. -func (w *appendSliceWriter) Write(p []byte) (int, error) { - *w = append(*w, p...) - return len(p), nil -} - -// WriteString writes to the buffer without string->[]byte->string allocations. -func (w *appendSliceWriter) WriteString(s string) (int, error) { - *w = append(*w, s...) - return len(s), nil -} - -type stringWriterIface interface { - WriteString(string) (int, error) -} - -type stringWriter struct { - w io.Writer -} - -func (w stringWriter) WriteString(s string) (int, error) { - return w.w.Write([]byte(s)) -} - -func getStringWriter(w io.Writer) stringWriterIface { - sw, ok := w.(stringWriterIface) - if !ok { - sw = stringWriter{w} - } - return sw -} - -func (r *genericReplacer) Replace(s string) string { - buf := make(appendSliceWriter, 0, len(s)) - r.WriteString(&buf, s) - return string(buf) -} - -func (r *genericReplacer) WriteString(w io.Writer, s string) (n int, err error) { - sw := getStringWriter(w) - var last, wn int - var prevMatchEmpty bool - for i := 0; i <= len(s); { - // Fast path: s[i] is not a prefix of any pattern. - if i != len(s) && r.root.priority == 0 { - index := int(r.mapping[ByteToLower(s[i])]) - if index == r.tableSize || r.root.table[index] == nil { - i++ - continue - } - } - - // Ignore the empty match iff the previous loop found the empty match. - val, keylen, match := r.lookup(s[i:], prevMatchEmpty) - prevMatchEmpty = match && keylen == 0 - if match { - orig := s[i : i+keylen] - switch CaseStyle(orig) { - case CaseUnknown: - // pretend we didn't match - // i++ - // continue - case CaseUpper: - val = strings.ToUpper(val) - case CaseLower: - val = strings.ToLower(val) - case CaseTitle: - if len(val) < 2 { - val = strings.ToUpper(val) - } else { - val = strings.ToUpper(val[:1]) + strings.ToLower(val[1:]) - } - } - wn, err = sw.WriteString(s[last:i]) - n += wn - if err != nil { - return - } - //log.Printf("%d: Going to correct %q with %q", i, s[i:i+keylen], val) - wn, err = sw.WriteString(val) - n += wn - if err != nil { - return - } - i += keylen - last = i - continue - } - i++ - } - if last != len(s) { - wn, err = sw.WriteString(s[last:]) - n += wn - } - return -} diff --git a/vendor/github.com/client9/misspell/stringreplacer_test.gox b/vendor/github.com/client9/misspell/stringreplacer_test.gox deleted file mode 100644 index 70da997f6e..0000000000 --- a/vendor/github.com/client9/misspell/stringreplacer_test.gox +++ /dev/null @@ -1,421 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package misspell_test - -import ( - "bytes" - "fmt" - "strings" - "testing" - - . "github.com/client9/misspell" -) - -var htmlEscaper = NewStringReplacer( - "&", "&", - "<", "<", - ">", ">", - `"`, """, - "'", "'", -) - -var htmlUnescaper = NewStringReplacer( - "&", "&", - "<", "<", - ">", ">", - """, `"`, - "'", "'", -) - -// The http package's old HTML escaping function. -func oldHTMLEscape(s string) string { - s = strings.Replace(s, "&", "&", -1) - s = strings.Replace(s, "<", "<", -1) - s = strings.Replace(s, ">", ">", -1) - s = strings.Replace(s, `"`, """, -1) - s = strings.Replace(s, "'", "'", -1) - return s -} - -var capitalLetters = NewStringReplacer("a", "A", "b", "B") - -// TestReplacer tests the replacer implementations. -func TestReplacer(t *testing.T) { - type testCase struct { - r *StringReplacer - in, out string - } - var testCases []testCase - - // str converts 0xff to "\xff". This isn't just string(b) since that converts to UTF-8. - str := func(b byte) string { - return string([]byte{b}) - } - var s []string - - // inc maps "\x00"->"\x01", ..., "a"->"b", "b"->"c", ..., "\xff"->"\x00". - for i := 0; i < 256; i++ { - s = append(s, str(byte(i)), str(byte(i+1))) - } - inc := NewStringReplacer(s...) - - // Test cases with 1-byte old strings, 1-byte new strings. - testCases = append(testCases, - testCase{capitalLetters, "brad", "BrAd"}, - testCase{capitalLetters, strings.Repeat("a", (32<<10)+123), strings.Repeat("A", (32<<10)+123)}, - testCase{capitalLetters, "", ""}, - - testCase{inc, "brad", "csbe"}, - testCase{inc, "\x00\xff", "\x01\x00"}, - testCase{inc, "", ""}, - - testCase{NewStringReplacer("a", "1", "a", "2"), "brad", "br1d"}, - ) - - // repeat maps "a"->"a", "b"->"bb", "c"->"ccc", ... - s = nil - for i := 0; i < 256; i++ { - n := i + 1 - 'a' - if n < 1 { - n = 1 - } - s = append(s, str(byte(i)), strings.Repeat(str(byte(i)), n)) - } - repeat := NewStringReplacer(s...) - - // Test cases with 1-byte old strings, variable length new strings. - testCases = append(testCases, - testCase{htmlEscaper, "No changes", "No changes"}, - testCase{htmlEscaper, "I <3 escaping & stuff", "I <3 escaping & stuff"}, - testCase{htmlEscaper, "&&&", "&&&"}, - testCase{htmlEscaper, "", ""}, - - testCase{repeat, "brad", "bbrrrrrrrrrrrrrrrrrradddd"}, - testCase{repeat, "abba", "abbbba"}, - testCase{repeat, "", ""}, - - testCase{NewStringReplacer("a", "11", "a", "22"), "brad", "br11d"}, - ) - - // The remaining test cases have variable length old strings. - - testCases = append(testCases, - testCase{htmlUnescaper, "&amp;", "&"}, - testCase{htmlUnescaper, "<b>HTML's neat</b>", "HTML's neat"}, - testCase{htmlUnescaper, "", ""}, - - testCase{NewStringReplacer("a", "1", "a", "2", "xxx", "xxx"), "brad", "br1d"}, - - testCase{NewStringReplacer("a", "1", "aa", "2", "aaa", "3"), "aaaa", "1111"}, - - testCase{NewStringReplacer("aaa", "3", "aa", "2", "a", "1"), "aaaa", "31"}, - ) - - // gen1 has multiple old strings of variable length. There is no - // overall non-empty common prefix, but some pairwise common prefixes. - gen1 := NewStringReplacer( - "aaa", "3[aaa]", - "aa", "2[aa]", - "a", "1[a]", - "i", "i", - "longerst", "most long", - "longer", "medium", - "long", "short", - "xx", "xx", - "x", "X", - "X", "Y", - "Y", "Z", - ) - testCases = append(testCases, - testCase{gen1, "fooaaabar", "foo3[aaa]b1[a]r"}, - testCase{gen1, "long, longerst, longer", "short, most long, medium"}, - testCase{gen1, "xxxxx", "xxxxX"}, - testCase{gen1, "XiX", "YiY"}, - testCase{gen1, "", ""}, - ) - - // gen2 has multiple old strings with no pairwise common prefix. - gen2 := NewStringReplacer( - "roses", "red", - "violets", "blue", - "sugar", "sweet", - ) - testCases = append(testCases, - testCase{gen2, "roses are red, violets are blue...", "red are red, blue are blue..."}, - testCase{gen2, "", ""}, - ) - - // gen3 has multiple old strings with an overall common prefix. - gen3 := NewStringReplacer( - "abracadabra", "poof", - "abracadabrakazam", "splat", - "abraham", "lincoln", - "abrasion", "scrape", - "abraham", "isaac", - ) - testCases = append(testCases, - testCase{gen3, "abracadabrakazam abraham", "poofkazam lincoln"}, - testCase{gen3, "abrasion abracad", "scrape abracad"}, - testCase{gen3, "abba abram abrasive", "abba abram abrasive"}, - testCase{gen3, "", ""}, - ) - - // foo{1,2,3,4} have multiple old strings with an overall common prefix - // and 1- or 2- byte extensions from the common prefix. - foo1 := NewStringReplacer( - "foo1", "A", - "foo2", "B", - "foo3", "C", - ) - foo2 := NewStringReplacer( - "foo1", "A", - "foo2", "B", - "foo31", "C", - "foo32", "D", - ) - foo3 := NewStringReplacer( - "foo11", "A", - "foo12", "B", - "foo31", "C", - "foo32", "D", - ) - foo4 := NewStringReplacer( - "foo12", "B", - "foo32", "D", - ) - testCases = append(testCases, - testCase{foo1, "fofoofoo12foo32oo", "fofooA2C2oo"}, - testCase{foo1, "", ""}, - - testCase{foo2, "fofoofoo12foo32oo", "fofooA2Doo"}, - testCase{foo2, "", ""}, - - testCase{foo3, "fofoofoo12foo32oo", "fofooBDoo"}, - testCase{foo3, "", ""}, - - testCase{foo4, "fofoofoo12foo32oo", "fofooBDoo"}, - testCase{foo4, "", ""}, - ) - - // genAll maps "\x00\x01\x02...\xfe\xff" to "[all]", amongst other things. - allBytes := make([]byte, 256) - for i := range allBytes { - allBytes[i] = byte(i) - } - allString := string(allBytes) - genAll := NewStringReplacer( - allString, "[all]", - "\xff", "[ff]", - "\x00", "[00]", - ) - testCases = append(testCases, - testCase{genAll, allString, "[all]"}, - testCase{genAll, "a\xff" + allString + "\x00", "a[ff][all][00]"}, - testCase{genAll, "", ""}, - ) - - // Test cases with empty old strings. - - blankToX1 := NewStringReplacer("", "X") - blankToX2 := NewStringReplacer("", "X", "", "") - blankHighPriority := NewStringReplacer("", "X", "o", "O") - blankLowPriority := NewStringReplacer("o", "O", "", "X") - blankNoOp1 := NewStringReplacer("", "") - blankNoOp2 := NewStringReplacer("", "", "", "A") - blankFoo := NewStringReplacer("", "X", "foobar", "R", "foobaz", "Z") - testCases = append(testCases, - testCase{blankToX1, "foo", "XfXoXoX"}, - testCase{blankToX1, "", "X"}, - - testCase{blankToX2, "foo", "XfXoXoX"}, - testCase{blankToX2, "", "X"}, - - testCase{blankHighPriority, "oo", "XOXOX"}, - testCase{blankHighPriority, "ii", "XiXiX"}, - testCase{blankHighPriority, "oiio", "XOXiXiXOX"}, - testCase{blankHighPriority, "iooi", "XiXOXOXiX"}, - testCase{blankHighPriority, "", "X"}, - - testCase{blankLowPriority, "oo", "OOX"}, - testCase{blankLowPriority, "ii", "XiXiX"}, - testCase{blankLowPriority, "oiio", "OXiXiOX"}, - testCase{blankLowPriority, "iooi", "XiOOXiX"}, - testCase{blankLowPriority, "", "X"}, - - testCase{blankNoOp1, "foo", "foo"}, - testCase{blankNoOp1, "", ""}, - - testCase{blankNoOp2, "foo", "foo"}, - testCase{blankNoOp2, "", ""}, - - testCase{blankFoo, "foobarfoobaz", "XRXZX"}, - testCase{blankFoo, "foobar-foobaz", "XRX-XZX"}, - testCase{blankFoo, "", "X"}, - ) - - // single string replacer - - abcMatcher := NewStringReplacer("abc", "[match]") - - testCases = append(testCases, - testCase{abcMatcher, "", ""}, - testCase{abcMatcher, "ab", "ab"}, - testCase{abcMatcher, "abc", "[match]"}, - testCase{abcMatcher, "abcd", "[match]d"}, - testCase{abcMatcher, "cabcabcdabca", "c[match][match]d[match]a"}, - ) - - // Issue 6659 cases (more single string replacer) - - noHello := NewStringReplacer("Hello", "") - testCases = append(testCases, - testCase{noHello, "Hello", ""}, - testCase{noHello, "Hellox", "x"}, - testCase{noHello, "xHello", "x"}, - testCase{noHello, "xHellox", "xx"}, - ) - - // No-arg test cases. - - nop := NewStringReplacer() - testCases = append(testCases, - testCase{nop, "abc", "abc"}, - testCase{nop, "", ""}, - ) - - // Run the test cases. - - for i, tc := range testCases { - if s := tc.r.Replace(tc.in); s != tc.out { - t.Errorf("%d. strings.Replace(%q) = %q, want %q", i, tc.in, s, tc.out) - } - var buf bytes.Buffer - n, err := tc.r.WriteString(&buf, tc.in) - if err != nil { - t.Errorf("%d. WriteString: %v", i, err) - continue - } - got := buf.String() - if got != tc.out { - t.Errorf("%d. WriteString(%q) wrote %q, want %q", i, tc.in, got, tc.out) - continue - } - if n != len(tc.out) { - t.Errorf("%d. WriteString(%q) wrote correct string but reported %d bytes; want %d (%q)", - i, tc.in, n, len(tc.out), tc.out) - } - } -} - -type errWriter struct{} - -func (errWriter) Write(p []byte) (n int, err error) { - return 0, fmt.Errorf("unwritable") -} - -func BenchmarkGenericNoMatch(b *testing.B) { - str := strings.Repeat("A", 100) + strings.Repeat("B", 100) - generic := NewStringReplacer("a", "A", "b", "B", "12", "123") // varying lengths forces generic - for i := 0; i < b.N; i++ { - generic.Replace(str) - } -} - -func BenchmarkGenericMatch1(b *testing.B) { - str := strings.Repeat("a", 100) + strings.Repeat("b", 100) - generic := NewStringReplacer("a", "A", "b", "B", "12", "123") - for i := 0; i < b.N; i++ { - generic.Replace(str) - } -} - -func BenchmarkGenericMatch2(b *testing.B) { - str := strings.Repeat("It's <b>HTML</b>!", 100) - for i := 0; i < b.N; i++ { - htmlUnescaper.Replace(str) - } -} - -func benchmarkSingleString(b *testing.B, pattern, text string) { - r := NewStringReplacer(pattern, "[match]") - b.SetBytes(int64(len(text))) - b.ResetTimer() - for i := 0; i < b.N; i++ { - r.Replace(text) - } -} - -func BenchmarkSingleMaxSkipping(b *testing.B) { - benchmarkSingleString(b, strings.Repeat("b", 25), strings.Repeat("a", 10000)) -} - -func BenchmarkSingleLongSuffixFail(b *testing.B) { - benchmarkSingleString(b, "b"+strings.Repeat("a", 500), strings.Repeat("a", 1002)) -} - -func BenchmarkSingleMatch(b *testing.B) { - benchmarkSingleString(b, "abcdef", strings.Repeat("abcdefghijklmno", 1000)) -} - -func BenchmarkByteByteNoMatch(b *testing.B) { - str := strings.Repeat("A", 100) + strings.Repeat("B", 100) - for i := 0; i < b.N; i++ { - capitalLetters.Replace(str) - } -} - -func BenchmarkByteByteMatch(b *testing.B) { - str := strings.Repeat("a", 100) + strings.Repeat("b", 100) - for i := 0; i < b.N; i++ { - capitalLetters.Replace(str) - } -} - -func BenchmarkByteStringMatch(b *testing.B) { - str := "<" + strings.Repeat("a", 99) + strings.Repeat("b", 99) + ">" - for i := 0; i < b.N; i++ { - htmlEscaper.Replace(str) - } -} - -func BenchmarkHTMLEscapeNew(b *testing.B) { - str := "I <3 to escape HTML & other text too." - for i := 0; i < b.N; i++ { - htmlEscaper.Replace(str) - } -} - -func BenchmarkHTMLEscapeOld(b *testing.B) { - str := "I <3 to escape HTML & other text too." - for i := 0; i < b.N; i++ { - oldHTMLEscape(str) - } -} - -func BenchmarkByteStringReplacerWriteString(b *testing.B) { - str := strings.Repeat("I <3 to escape HTML & other text too.", 100) - buf := new(bytes.Buffer) - for i := 0; i < b.N; i++ { - htmlEscaper.WriteString(buf, str) - buf.Reset() - } -} - -func BenchmarkByteReplacerWriteString(b *testing.B) { - str := strings.Repeat("abcdefghijklmnopqrstuvwxyz", 100) - buf := new(bytes.Buffer) - for i := 0; i < b.N; i++ { - capitalLetters.WriteString(buf, str) - buf.Reset() - } -} - -// BenchmarkByteByteReplaces compares byteByteImpl against multiple Replaces. -func BenchmarkByteByteReplaces(b *testing.B) { - str := strings.Repeat("a", 100) + strings.Repeat("b", 100) - for i := 0; i < b.N; i++ { - strings.Replace(strings.Replace(str, "a", "A", -1), "b", "B", -1) - } -} diff --git a/vendor/github.com/client9/misspell/url.go b/vendor/github.com/client9/misspell/url.go deleted file mode 100644 index 1a259f5f99..0000000000 --- a/vendor/github.com/client9/misspell/url.go +++ /dev/null @@ -1,17 +0,0 @@ -package misspell - -import ( - "regexp" -) - -// Regexp for URL https://mathiasbynens.be/demo/url-regex -// -// original @imme_emosol (54 chars) has trouble with dashes in hostname -// @(https?|ftp)://(-\.)?([^\s/?\.#-]+\.?)+(/[^\s]*)?$@iS -var reURL = regexp.MustCompile(`(?i)(https?|ftp)://(-\.)?([^\s/?\.#]+\.?)+(/[^\s]*)?`) - -// StripURL attemps to replace URLs with blank spaces, e.g. -// "xxx http://foo.com/ yyy -> "xxx yyyy" -func StripURL(s string) string { - return reURL.ReplaceAllStringFunc(s, replaceWithBlanks) -} diff --git a/vendor/github.com/client9/misspell/words.go b/vendor/github.com/client9/misspell/words.go deleted file mode 100644 index c92dd19d04..0000000000 --- a/vendor/github.com/client9/misspell/words.go +++ /dev/null @@ -1,31158 +0,0 @@ -package misspell - -// Code generated automatically. DO NOT EDIT. - -// DictMain is the main rule set, not including locale-specific spellings -var DictMain = []string{ - "differentiatiations", "differentiations", - "disproportionaltely", "disproportionately", - "oversimplificiation", "oversimplification", - "transcendentational", "transcendental", - "anthromorphization", "anthropomorphization", - "disporportionately", "disproportionately", - "dispraportionately", "disproportionately", - "disproportianately", "disproportionately", - "disproportionatley", "disproportionately", - "disproprotionately", "disproportionately", - "fundamentalistisch", "fundamentalists", - "fundamentalistiska", "fundamentalists", - "fundamentalistiske", "fundamentalists", - "fundamentalistiskt", "fundamentalists", - "histocompatability", "histocompatibility", - "microtransacations", "microtransactions", - "microtransacciones", "microtransactions", - "microtransactional", "microtransactions", - "microtransactioned", "microtransactions", - "misunderstandingly", "misunderstandings", - "oversemplification", "oversimplification", - "oversimplifacation", "oversimplification", - "oversimplificaiton", "oversimplification", - "oversimplificating", "oversimplification", - "oversimplyfication", "oversimplification", - "cardiovasculaires", "cardiovascular", - "certificationkits", "certifications", - "counterporductive", "counterproductive", - "coutnerproductive", "counterproductive", - "disporportionatly", "disproportionately", - "disproportiantely", "disproportionately", - "disproportionatly", "disproportionately", - "disproportionnate", "disproportionate", - "disrepresentation", "misrepresentation", - "fundamentalistisk", "fundamentalists", - "incompatabilities", "incompatibilities", - "inconsequentional", "inconsequential", - "indistinguishible", "indistinguishable", - "indistingusihable", "indistinguishable", - "indistinquishable", "indistinguishable", - "indistuingishable", "indistinguishable", - "instatutionalized", "institutionalized", - "institucionalized", "institutionalized", - "institutionilized", "institutionalized", - "instutitionalized", "institutionalized", - "instututionalized", "institutionalized", - "interchangeablely", "interchangeably", - "interchangeablity", "interchangeably", - "intercontinential", "intercontinental", - "micortransactions", "microtransactions", - "microstansactions", "microtransactions", - "microtramsactions", "microtransactions", - "microtranasctions", "microtransactions", - "microtransacitons", "microtransactions", - "microtransacrions", "microtransactions", - "microtransactioms", "microtransactions", - "microtransactiosn", "microtransactions", - "microtranscations", "microtransactions", - "microtrasnactions", "microtransactions", - "mircotransactions", "microtransactions", - "misinterpretating", "misinterpreting", - "misrepresantation", "misrepresentation", - "misrepresentaiton", "misrepresentation", - "misrepresentating", "misrepresenting", - "misunderstantings", "misunderstandings", - "mocrotransactions", "microtransactions", - "oversimplifaction", "oversimplification", - "oversimplificaton", "oversimplification", - "oversimplifiction", "oversimplification", - "responsibillities", "responsibilities", - "unconstitutionnal", "unconstitutional", - "accomplishements", "accomplishments", - "admininistrative", "administrative", - "antidepresssants", "antidepressants", - "architechturally", "architecturally", - "cardiovasculaire", "cardiovascular", - "charactarization", "characterization", - "characterazation", "characterization", - "characterisitics", "characteristics", - "characteristsics", "characteristic", - "characterizarion", "characterization", - "charecterization", "characterization", - "charicterization", "characterization", - "circumstantional", "circumstantial", - "conversationable", "conversational", - "counterprodutive", "counterproductive", - "demonstrationens", "demonstrations", - "deterministische", "deterministic", - "differenciations", "differentiation", - "differentiantion", "differentiation", - "differentiatiors", "differentiation", - "differentitation", "differentiation", - "disperportionate", "disproportionate", - "disporportionate", "disproportionate", - "dispraportionate", "disproportionate", - "disproportianate", "disproportionate", - "disproportionaly", "disproportionately", - "disproprotionate", "disproportionate", - "electromagnectic", "electromagnetic", - "enviornmentalist", "environmentalist", - "environmentality", "environmentally", - "extraordinairily", "extraordinarily", - "extraordinarilly", "extraordinary", - "extraterrestials", "extraterrestrials", - "fundamentalismos", "fundamentalists", - "fundamentalismus", "fundamentalists", - "fundamentalistas", "fundamentalists", - "fundamentalisten", "fundamentalists", - "fundamentalister", "fundamentalists", - "imcomprehensible", "incomprehensible", - "immunosupressant", "immunosuppressant", - "imperfectionists", "imperfections", - "implementaciones", "implementations", - "implementationen", "implementations", - "implementationer", "implementations", - "inappropriatelly", "inappropriately", - "incompatablities", "incompatibilities", - "incompatiblities", "incompatibilities", - "incomprehencible", "incomprehensible", - "incomprehendible", "incomprehensible", - "incomprehenisble", "incomprehensible", - "incomprehensable", "incomprehensible", - "incomprehinsible", "incomprehensible", - "incomprihensible", "incomprehensible", - "inconprehensible", "incomprehensible", - "inconsistentcies", "inconsistencies", - "inconstitutional", "unconstitutional", - "incrompehensible", "incomprehensible", - "indistinguisable", "indistinguishable", - "institutionlized", "institutionalized", - "intellectualiser", "intellectuals", - "intellectualisme", "intellectuals", - "interchangeabley", "interchangeably", - "internationnally", "internationally", - "interpretaciones", "interpretations", - "interpretationen", "interpretations", - "manoeuverability", "maneuverability", - "massachusettians", "massachusetts", - "microtransacions", "microtransactions", - "microtransacting", "microtransactions", - "microtransactios", "microtransactions", - "microtransactons", "microtransactions", - "microtransations", "microtransactions", - "microtranscation", "microtransactions", - "mircotransaction", "microtransactions", - "miscommunciation", "miscommunication", - "miscommunicaiton", "miscommunication", - "miscomunnication", "miscommunication", - "miscummunication", "miscommunication", - "misinterpretated", "misinterpreted", - "misinterpretions", "misinterpreting", - "misinterpretting", "misinterpreting", - "misproportionate", "disproportionate", - "misrepresenation", "misrepresentation", - "misrepresentaion", "misrepresentation", - "misrepresentated", "misrepresented", - "misrepresentatie", "misrepresentation", - "misrepresentativ", "misrepresentation", - "misubderstanding", "misunderstandings", - "misudnerstanding", "misunderstandings", - "misundarstanding", "misunderstandings", - "misunderatanding", "misunderstandings", - "misunderdtanding", "misunderstandings", - "misundersatnding", "misunderstandings", - "misundersranding", "misunderstandings", - "misunderstadings", "misunderstandings", - "misunderstadning", "misunderstandings", - "misunderstamding", "misunderstandings", - "misunderstandigs", "misunderstandings", - "misunderstandimg", "misunderstandings", - "misunderstandind", "misunderstandings", - "misunderstanging", "misunderstandings", - "misunderstanidng", "misunderstandings", - "misunderstanings", "misunderstandings", - "misunderstansing", "misunderstandings", - "misunderstanting", "misunderstandings", - "misunderstending", "misunderstandings", - "misunderstnading", "misunderstandings", - "misunderstsnding", "misunderstandings", - "misunderstunding", "misunderstandings", - "misundertsanding", "misunderstandings", - "misundrestanding", "misunderstandings", - "misunterstanding", "misunderstandings", - "nationalistische", "nationalistic", - "nationalististic", "nationalistic", - "neconstitutional", "unconstitutional", - "notwhithstanding", "notwithstanding", - "objectificiation", "objectification", - "organisationnels", "organisations", - "perpendiculaires", "perpendicular", - "phillosophically", "philosophically", - "preinitalization", "preinitialization", - "prescriptionists", "prescriptions", - "procrastinarting", "procrastinating", - "procrastinationg", "procrastinating", - "procrastinazione", "procrastination", - "professionalisim", "professionalism", - "professionalisme", "professionals", - "professionallism", "professionalism", - "professionnalism", "professionalism", - "programattically", "programmatically", - "proportionallity", "proportionally", - "reaponsibilities", "responsibilities", - "reinitalizations", "reinitializations", - "representaciones", "representations", - "representationen", "representations", - "representationer", "representations", - "repsonsibilities", "responsibilities", - "responcibilities", "responsibilities", - "responisbilities", "responsibilities", - "responsabilities", "responsibilities", - "responsebilities", "responsibilities", - "straightforeward", "straightforward", - "surrepetitiously", "surreptitiously", - "technologicially", "technologically", - "unconditionnally", "unconditionally", - "unconfortability", "discomfort", - "unconstititional", "unconstitutional", - "uncontrollablely", "uncontrollably", - "underestimateing", "underestimating", - "understandablely", "understandably", - "unintentionnally", "unintentionally", - "unsubstantianted", "unsubstantiated", - "unsubstantiative", "unsubstantiated", - "acclimitization", "acclimatization", - "accomplishemnts", "accomplishments", - "accountabillity", "accountability", - "acknolwedgement", "acknowledgement", - "acknoweldgement", "acknowledgement", - "acknowldegement", "acknowledgement", - "acknowlegdement", "acknowledgement", - "administratieve", "administrative", - "administratiors", "administrators", - "administrativne", "administrative", - "aforementionned", "aforementioned", - "anitdepressants", "antidepressants", - "antidepressents", "antidepressants", - "archetecturally", "architecturally", - "associationthis", "associations", - "authobiographic", "autobiographic", - "awknowledgement", "acknowledgement", - "bureaucratische", "bureaucratic", - "cardiovascualar", "cardiovascular", - "carnagie-mellon", "carnegie-mellon", - "carnigie-mellon", "carnegie-mellon", - "celebrationists", "celebrations", - "charactaristics", "characteristics", - "characterisitcs", "characteristics", - "characterisitic", "characteristic", - "characterizaton", "characterization", - "charactersistic", "characteristic", - "charactersitics", "characteristics", - "charactoristics", "characteristics", - "charecteristics", "characteristics", - "comfrontational", "confrontational", - "commuinications", "communications", - "compatabilities", "compatibilities", - "complimentarity", "complimentary", - "compositionwise", "compositions", - "confidenciality", "confidential", - "confidentuality", "confidential", - "confrentational", "confrontational", - "confrontacional", "confrontational", - "conglaturations", "congratulations", - "congradulations", "congratulations", - "congragulations", "congratulations", - "congratualtions", "congratulations", - "congraturations", "congratulations", - "consequentually", "consequently", - "constitutionnal", "constitutional", - "deinitalization", "deinitialization", - "denominationals", "denominations", - "destinationhash", "destinations", - "deterministisch", "deterministic", - "developmentwise", "developments", - "differantiation", "differentiation", - "differenciation", "differentiation", - "differientation", "differentiation", - "discriminatoire", "discriminate", - "discriminatorie", "discriminate", - "disproportiante", "disproportionate", - "disproportinate", "disproportionate", - "elecrtomagnetic", "electromagnetic", - "electormagnetic", "electromagnetic", - "electromagentic", "electromagnetic", - "electromagnatic", "electromagnetic", - "electromangetic", "electromagnetic", - "electromegnetic", "electromagnetic", - "electronagnetic", "electromagnetic", - "enivronmentally", "environmentally", - "entrepreneurers", "entrepreneurs", - "enviornmentally", "environmentally", - "enviromentalist", "environmentalist", - "environemntally", "environmentally", - "envrionmentally", "environmentally", - "evolutionarilly", "evolutionary", - "experementation", "experimentation", - "experimantation", "experimentation", - "experimentacion", "experimentation", - "experimentating", "experimentation", - "experimenterade", "experimented", - "experimintation", "experimentation", - "expirementation", "experimentation", - "extraodrinarily", "extraordinarily", - "extraordinairly", "extraordinarily", - "extraordinarely", "extraordinarily", - "extraordinaryly", "extraordinarily", - "extraterrestial", "extraterrestrial", - "extroardinarily", "extraordinarily", - "fondamentalists", "fundamentalists", - "fundamendalists", "fundamentalists", - "fundamentalisme", "fundamentals", - "fundamentalismo", "fundamentals", - "fundamentalista", "fundamentals", - "fundamentalisti", "fundamentals", - "fundamnetalists", "fundamentalists", - "fundemantalists", "fundamentalists", - "fundimentalists", "fundamentalists", - "fundumentalists", "fundamentalists", - "gongratulations", "congratulations", - "grammaticallity", "grammatically", - "gundamentalists", "fundamentalists", - "idiosynchracies", "idiosyncrasies", - "implementaitons", "implementations", - "implimentations", "implementations", - "inapporpriately", "inappropriately", - "inappropraitely", "inappropriately", - "inappropriatley", "inappropriately", - "incompatability", "incompatibility", - "incompetentence", "incompetence", - "incomprehensibe", "incomprehensible", - "incomprehesible", "incomprehensible", - "inconcequential", "inconsequential", - "inconcistencies", "inconsistencies", - "inconditionally", "unconditionally", - "inconsecuential", "inconsequential", - "inconsequantial", "inconsequential", - "inconsequencial", "inconsequential", - "inconsequentual", "inconsequential", - "inconsiquential", "inconsequential", - "inconsistancies", "inconsistencies", - "inconsistencias", "inconsistencies", - "inconsistensies", "inconsistencies", - "inconsistenties", "inconsistencies", - "independentisme", "independents", - "independentiste", "independents", - "independentness", "independents", - "inexperiencable", "inexperience", - "inplementations", "implementations", - "instantaneoulsy", "instantaneous", - "institutionella", "institutional", - "institutionnels", "institutions", - "instutionalized", "institutionalized", - "insubstantiated", "unsubstantiated", - "interchangabley", "interchangeably", - "interchangebale", "interchangeable", - "intercontinetal", "intercontinental", - "interpertations", "interpretations", - "interpratations", "interpretations", - "interpritations", "interpretations", - "intersectionals", "intersections", - "intrepretations", "interpretations", - "investigationes", "investigations", - "journalistische", "journalistic", - "libertarianisim", "libertarianism", - "libertarianisme", "libertarians", - "libertarianismo", "libertarians", - "libertarianists", "libertarians", - "libertariansism", "libertarianism", - "manisfestations", "manifestations", - "manouverability", "maneuverability", - "manufacturerers", "manufacturers", - "marshmallowiest", "marshmallows", - "marshmallowness", "marshmallows", - "microtransacton", "microtransactions", - "mininterpreting", "misinterpreting", - "miscommuniation", "miscommunication", - "miscommunicatie", "miscommunication", - "miscommuniction", "miscommunication", - "misinterperting", "misinterpreting", - "misinterprating", "misinterpreting", - "misinterprented", "misinterpret", - "misinterprested", "misinterpret", - "misinterpretion", "misinterpreting", - "misinterpretted", "misinterpreted", - "misinterpriting", "misinterpreting", - "misintrepreting", "misinterpreting", - "misrepresention", "misrepresenting", - "misunderstading", "misunderstanding", - "misunderstandig", "misunderstandings", - "misunderstandng", "misunderstandings", - "misunderstaning", "misunderstanding", - "multicultralism", "multiculturalism", - "multinationella", "multinational", - "nationalistisch", "nationalists", - "nationalistisen", "nationalists", - "nationalistiska", "nationalists", - "nationalistiske", "nationalists", - "nationalistiskt", "nationalists", - "nationalistista", "nationalists", - "objectificaiton", "objectification", - "objectivication", "objectification", - "organisationens", "organisations", - "organisationers", "organisations", - "overestimateing", "overestimating", - "paychologically", "psychologically", - "performancetest", "performances", - "performancewise", "performances", - "perpendiculaire", "perpendicular", - "pharamceuticals", "pharmaceutical", - "pharmacueticals", "pharmaceutical", - "philoshopically", "philosophically", - "philosohpically", "philosophically", - "philosophycally", "philosophically", - "phsycologically", "psychologically", - "phychologically", "psychologically", - "phylosophically", "philosophically", - "physcologically", "psychologically", - "precrastination", "procrastination", - "prefessionalism", "professionalism", - "premonasterians", "premonstratensians", - "procastrinating", "procrastinating", - "procastrination", "procrastination", - "procrascinating", "procrastinating", - "procrastenating", "procrastinating", - "procrastiantion", "procrastination", - "procrastibating", "procrastinating", - "procrastibation", "procrastination", - "procrastonating", "procrastinating", - "procrestinating", "procrastinating", - "procrestination", "procrastination", - "professionalsim", "professionalism", - "prograstination", "procrastination", - "progressionists", "progressions", - "progressionwise", "progressions", - "prokrastination", "procrastination", - "proportionallly", "proportionally", - "proscratination", "procrastination", - "pscyhologically", "psychologically", - "pshycologically", "psychologically", - "psichologically", "psychologically", - "psychedelicious", "psychedelics", - "psychedelicness", "psychedelics", - "psycholigically", "psychologically", - "psychopathische", "psychopathic", - "pyschologically", "psychologically", - "racionalization", "rationalization", - "rationalizaiton", "rationalization", - "rationalizating", "rationalization", - "reccomendations", "recommendations", - "recommandations", "recommendations", - "recommondations", "recommendations", - "reinitalization", "reinitialization", - "repersentations", "representations", - "represantations", "representations", - "represantatives", "representatives", - "representatieve", "representative", - "representativas", "representatives", - "representetives", "representatives", - "representitives", "representatives", - "responibilities", "responsibilities", - "responsibilites", "responsibilities", - "responsibilitys", "responsibilities", - "responsibillity", "responsibility", - "responsibilties", "responsibilities", - "responsiblities", "responsibilities", - "ridiculoussness", "ridiculousness", - "saskatchewinian", "saskatchewan", - "satisfactorally", "satisfactory", - "satisfactorilly", "satisfactory", - "schizophreniiic", "schizophrenic", - "sensationalisim", "sensationalism", - "spreadsheeticus", "spreadsheets", - "starightforward", "straightforward", - "straigthforward", "straightforward", - "striaghtforward", "straightforward", - "sustainabillity", "sustainability", - "technoligically", "technologically", - "troubelshooting", "troubleshooting", - "troublehsooting", "troubleshooting", - "troubleshotting", "troubleshooting", - "trustworthyness", "trustworthiness", - "ubsubstantiated", "unsubstantiated", - "unappropriately", "inappropriately", - "uncomfortablely", "uncomfortably", - "uncomfortablity", "uncomfortably", - "unconditionable", "unconditional", - "unconstituional", "unconstitutional", - "uncontitutional", "unconstitutional", - "uncontrollabley", "uncontrollably", - "uncontrollablly", "uncontrollably", - "unconventionnal", "unconventional", - "underastimating", "underestimating", - "underestemating", "underestimating", - "understandabley", "understandably", - "unintensionally", "unintentionally", - "unprofessionnal", "unprofessional", - "unresponsivness", "unresponsive", - "unsibstantiated", "unsubstantiated", - "unsubstanciated", "unsubstantiated", - "unsubstansiated", "unsubstantiated", - "unsusbtantiated", "unsubstantiated", - "untranslateable", "untranslatable", - "vulernabilities", "vulnerabilities", - "vulnarabilities", "vulnerabilities", - "vulnurabilities", "vulnerabilities", - "vunlerabilities", "vulnerabilities", - "vurnerabilities", "vulnerabilities", - "accomplishemnt", "accomplishment", - "accomplishents", "accomplishes", - "acconplishment", "accomplishment", - "acknowledgeing", "acknowledging", - "acknowledgemnt", "acknowledgement", - "acomplishments", "accomplishments", - "administartion", "administration", - "administartors", "administrators", - "administraters", "administrators", - "administratief", "administrative", - "administratiei", "administrative", - "administratior", "administrator", - "administrativo", "administration", - "adminsitration", "administration", - "adminsitrative", "administrative", - "adminsitrators", "administrators", - "affectionatley", "affectionate", - "aforememtioned", "aforementioned", - "aforementioend", "aforementioned", - "alternativelly", "alternatively", - "amministrative", "administrative", - "anitdepressant", "antidepressants", - "approproximate", "approximate", - "approximatelly", "approximately", - "archeaologists", "archeologists", - "architechtures", "architectures", - "architectureal", "architectural", - "architecturial", "architectural", - "assassintation", "assassination", - "authenitcation", "authentication", - "authenticaiton", "authentication", - "authobiography", "autobiography", - "breakthroughts", "breakthroughs", - "bureaucratisch", "bureaucratic", - "calssification", "classification", - "capatilization", "capitalization", - "capitalizacion", "capitalization", - "capitalizaiton", "capitalization", - "capitalizating", "capitalization", - "capitilazation", "capitalization", - "capitolization", "capitalization", - "captialization", "capitalization", - "cardiocascular", "cardiovascular", - "cardiovascualr", "cardiovascular", - "cardiovasuclar", "cardiovascular", - "caridovascular", "cardiovascular", - "cessationalism", "sensationalism", - "cessationalist", "sensationalist", - "charactaristic", "characteristic", - "characterisics", "characteristics", - "characterisitc", "characteristics", - "characteristcs", "characteristics", - "characteritics", "characteristic", - "charactersitic", "characteristics", - "charasteristic", "characteristics", - "charecteristic", "characteristic", - "cheeseburguers", "cheeseburgers", - "cinematagraphy", "cinematography", - "cinematagrophy", "cinematography", - "cinematograhpy", "cinematography", - "cinematogrophy", "cinematography", - "cinematogrpahy", "cinematography", - "cinemetography", "cinematography", - "cinimatography", "cinematography", - "circumstansial", "circumstantial", - "circumstantual", "circumstantial", - "circumstential", "circumstantial", - "circunstantial", "circumstantial", - "classificaiton", "classification", - "coincedentally", "coincidentally", - "coinsidentally", "coincidentally", - "commemmorating", "commemorating", - "communciations", "communications", - "compatablities", "compatibilities", - "compatibillity", "compatibility", - "compatiblities", "compatibilities", - "competitioners", "competitions", - "comphrehensive", "comprehensive", - "computationnal", "computational", - "conciderations", "considerations", - "condescenscion", "condescension", - "condradictions", "contradictions", - "configuartions", "configurations", - "confugurations", "configurations", - "conglaturation", "congratulations", - "congratulatons", "congratulations", - "conicidentally", "coincidentally", - "conifgurations", "configurations", - "conscioussness", "consciousness", - "consentrations", "concentrations", - "consiciousness", "consciousness", - "considerablely", "considerably", - "considerstions", "considerations", - "constititional", "constitutional", - "constitucional", "constitutional", - "contamporaries", "contemporaries", - "contemporaneus", "contemporaneous", - "contraceptivos", "contraceptives", - "contradicitons", "contradictions", - "contradictiong", "contradicting", - "contriceptives", "contraceptives", - "controceptives", "contraceptives", - "controdictions", "contradictions", - "conversacional", "conversational", - "converstaional", "conversational", - "correpsondence", "correspondence", - "correspondants", "correspondents", - "correspondense", "correspondence", - "correspondente", "correspondence", - "corrispondants", "correspondents", - "corrispondence", "correspondence", - "corrospondence", "correspondence", - "costumizations", "customization", - "councidentally", "coincidentally", - "crystalisation", "crystallisation", - "curcumstantial", "circumstantial", - "demenstrations", "demonstrations", - "deminstrations", "demonstrations", - "demonstartions", "demonstrations", - "demonstrativno", "demonstrations", - "demonstrativos", "demonstrations", - "demosntrations", "demonstrations", - "desintegration", "disintegration", - "deterioriating", "deteriorating", - "determinisitic", "deterministic", - "differentiaton", "differentiation", - "disatisfaction", "dissatisfaction", - "discrimanatory", "discriminatory", - "discriminacion", "discrimination", - "discriminitory", "discriminatory", - "disillusionned", "disillusioned", - "diskrimination", "discrimination", - "disproportiate", "disproportionate", - "distingiushing", "distinguishing", - "distingquished", "distinguished", - "distingusihing", "distinguishing", - "distinquishing", "distinguishing", - "distuingishing", "distinguishing", - "dysfunctionnal", "dysfunctional", - "eldistribution", "redistribution", - "electromagnetc", "electromagnetic", - "electromagntic", "electromagnetic", - "endoctrination", "indoctrination", - "enthusiastisch", "enthusiastic", - "entrepreneuers", "entrepreneurs", - "entrepreneures", "entrepreneurs", - "enviormentally", "environmentally", - "enviromentally", "environmentally", - "environmentals", "environments", - "environmentaly", "environmentally", - "experimentaion", "experimentation", - "experimentella", "experimental", - "extraordinairy", "extraordinary", - "extraordinarly", "extraordinary", - "extrordinarily", "extraordinarily", - "fondamentalist", "fundamentalist", - "foreshadowning", "foreshadowing", - "functionallity", "functionality", - "fundamendalist", "fundamentalist", - "fundamentalits", "fundamentalists", - "fundamnetalist", "fundamentalist", - "fundemantalist", "fundamentalist", - "fundimentalist", "fundamentalist", - "fundumentalist", "fundamentalist", - "generalizacion", "generalization", - "generalizating", "generalization", - "generelization", "generalization", - "geographacilly", "geographically", - "geographycally", "geographically", - "geogrpahically", "geographically", - "geopraphically", "geographically", - "goegraphically", "geographically", - "grandchilderen", "grandchildren", - "gravitationnal", "gravitational", - "groubdbreaking", "groundbreaking", - "groudnbreaking", "groundbreaking", - "hallcuinations", "hallucination", - "hallicunations", "hallucinations", - "hallucenations", "hallucinations", - "halluciantions", "hallucinations", - "hallucinaitons", "hallucination", - "hallunications", "hallucinations", - "hallusinations", "hallucinations", - "halluzinations", "hallucinations", - "hellucinations", "hallucinations", - "heterosexuella", "heterosexual", - "hipothetically", "hypothetically", - "homosexuallity", "homosexuality", - "hullucinations", "hallucinations", - "hyopthetically", "hypothetically", - "hypathetically", "hypothetically", - "hypethetically", "hypothetically", - "hypotehtically", "hypothetically", - "hypotethically", "hypothetically", - "identificacion", "identification", - "identificaiton", "identification", - "identificativo", "identification", - "identifikation", "identification", - "imlpementation", "implementations", - "impelmentation", "implementations", - "impersonationg", "impersonating", - "implementacion", "implementation", - "implementaiton", "implementation", - "implementating", "implementation", - "implementatino", "implementations", - "implemetnation", "implementations", - "implimentation", "implementation", - "impossibillity", "impossibility", - "inadvertantely", "inadvertently", - "inappropriatly", "inappropriately", - "inapproprietly", "inappropriately", - "incompatablity", "incompatibility", - "incompatiblity", "incompatibility", - "inconsequental", "inconsequential", - "inconsistentcy", "inconsistency", - "incontrollably", "uncontrollably", - "inconventional", "unconventional", - "inconvienenced", "inconvenience", - "indestrictible", "indestructible", - "indestructuble", "indestructible", - "indetification", "identification", - "indistructible", "indestructible", - "individuallity", "individuality", - "indocrtination", "indoctrination", - "indoctrication", "indoctrination", - "indoktrination", "indoctrination", - "industiralized", "industrialized", - "industrailized", "industrialized", - "industrualized", "industrialized", - "industructible", "indestructible", - "inexplicablely", "inexplicably", - "infrastracture", "infrastructure", - "infrastructuur", "infrastructure", - "infrastrucutre", "infrastructure", - "infrastrukture", "infrastructure", - "infrastrutture", "infrastructure", - "infrasturcture", "infrastructure", - "initalisations", "initialisations", - "initalizations", "initializations", - "inplementation", "implementation", - "inspirationnal", "inspirational", - "instinctivelly", "instinctively", - "institutionale", "institutionalized", - "institutionals", "institutions", - "institutionnal", "institutional", - "intellectualis", "intellectuals", - "intellectualls", "intellectuals", - "intellecutally", "intellectually", - "intercepticons", "interceptions", - "interchangable", "interchangeable", - "interchangably", "interchangeably", - "interchangeble", "interchangeable", - "interchangebly", "interchangeably", - "interlectually", "intellectually", - "internationaal", "international", - "internationaly", "internationally", - "internationnal", "international", - "interpersonnal", "interpersonal", - "interpertation", "interpretation", - "interpratation", "interpretation", - "interpretacion", "interpretation", - "interpretaiton", "interpretations", - "interpretating", "interpretation", - "interpritation", "interpretation", - "interstellaire", "interstellar", - "intillectually", "intellectually", - "intrepretation", "interpretation", - "invesitgations", "investigations", - "investiagtions", "investigations", - "investigatiors", "investigations", - "investigativos", "investigations", - "investigstions", "investigations", - "irrationallity", "irrationally", - "irresponsibile", "irresponsible", - "journalistisch", "journalistic", - "justificativos", "justifications", - "koncentrations", "concentrations", - "liberatrianism", "libertarianism", - "libertarainism", "libertarianism", - "libertariansim", "libertarianism", - "libertarinaism", "libertarianism", - "libertaryanism", "libertarianism", - "libertatianism", "libertarianism", - "liberterianism", "libertarianism", - "libretarianism", "libertarianism", - "manufactureers", "manufactures", - "manufactureras", "manufactures", - "manufacturered", "manufactured", - "manufactureres", "manufacturers", - "manufactureros", "manufactures", - "massachusettes", "massachusetts", - "massachussetts", "massachusetts", - "mataphorically", "metaphorically", - "mathameticians", "mathematicians", - "mathemagically", "mathematically", - "mathematitians", "mathematicians", - "mathemetically", "mathematically", - "mathemeticians", "mathematicians", - "mathimatically", "mathematically", - "mediterainnean", "mediterranean", - "mediterrannean", "mediterranean", - "metaphotically", "metaphorically", - "metephorically", "metaphorically", - "methaporically", "metaphorically", - "metiphorically", "metaphorically", - "metophorically", "metaphorically", - "metropolitaine", "metropolitan", - "misconseptions", "misconceptions", - "misinterperted", "misinterpreted", - "misintrepreted", "misinterpreted", - "mulitnationals", "multinational", - "mulitplication", "multiplication", - "multiplicacion", "multiplication", - "multiplicaiton", "multiplication", - "multiplicativo", "multiplication", - "multiplikation", "multiplication", - "mutlinationals", "multinational", - "mutliplication", "multiplication", - "nationalisitic", "nationalistic", - "nationalistics", "nationalists", - "nationalisties", "nationalists", - "nationalistisk", "nationalists", - "neighbourhoood", "neighbourhood", - "nieghbourhoods", "neighbourhood", - "northereastern", "northeastern", - "objectificaton", "objectification", - "opthalmologist", "ophthalmologist", - "organizacional", "organizational", - "organizaitonal", "organizational", - "organziational", "organizational", - "orginazational", "organizational", - "overestemating", "overestimating", - "overextimating", "overestimating", - "overhwelmingly", "overwhelmingly", - "overhwlemingly", "overwhelmingly", - "overpolulation", "overpopulation", - "overpopluation", "overpopulation", - "oversetimating", "overestimating", - "overshadowered", "overshadowed", - "overwhemlingly", "overwhelmingly", - "overwhlemingly", "overwhelmingly", - "paliamentarian", "parliamentarian", - "parliamentiary", "parliamentary", - "performancepcs", "performances", - "personalitites", "personalities", - "pharamceutical", "pharmaceutical", - "pharmaceudical", "pharmaceutical", - "pharmacuetical", "pharmaceutical", - "pharmaseutical", "pharmaceutical", - "pharmeceutical", "pharmaceutical", - "philosophicaly", "philosophically", - "phramaceutical", "pharmaceutical", - "playthroughers", "playthroughs", - "porportionally", "proportionally", - "practitionners", "practitioners", - "predeterminded", "predetermined", - "predominantely", "predominantly", - "predominantley", "predominantly", - "preinitalizing", "preinitializing", - "prerequisities", "prerequisite", - "procrastinatin", "procrastination", - "procrastinaton", "procrastination", - "professionials", "professionalism", - "professionnals", "professionals", - "profitabillity", "profitability", - "progressivelly", "progressively", - "progressivisme", "progressives", - "pronounciation", "pronunciation", - "proportianally", "proportionally", - "proportionalty", "proportionally", - "proportionella", "proportionally", - "proprotionally", "proportionally", - "protruberances", "protuberances", - "pseudononymous", "pseudonymous", - "psychologicaly", "psychologically", - "qaulifications", "qualification", - "qualifiactions", "qualification", - "qualificaitons", "qualifications", - "quarterbackers", "quarterbacks", - "rationalizaton", "rationalization", - "reaponsibility", "responsibility", - "recommandation", "recommendation", - "recommedations", "recommendations", - "recommondation", "recommendation", - "reconnaissence", "reconnaissance", - "reconstruccion", "reconstruction", - "reconsturction", "reconstruction", - "redistirbution", "redistribution", - "redistribucion", "redistribution", - "redistributivo", "redistribution", - "redistrubition", "redistribution", - "refridgeration", "refrigeration", - "rehabilitacion", "rehabilitation", - "rehabilitaiton", "rehabilitation", - "reinforcemnets", "reinforcements", - "rekommendation", "recommendation", - "rektifications", "certifications", - "reniforcements", "reinforcements", - "repersentation", "representation", - "represantation", "representation", - "represantative", "representative", - "representacion", "representation", - "representaiton", "representations", - "representatief", "representative", - "representating", "representation", - "representativo", "representation", - "representetive", "representative", - "representitive", "representative", - "representstion", "representations", - "representstive", "representatives", - "represetnation", "representations", - "represnetation", "representations", - "reprezentative", "representative", - "repsonsibility", "responsibility", - "resistribution", "redistribution", - "responcibility", "responsibility", - "responisbility", "responsibility", - "responnsibilty", "responsibility", - "responsability", "responsibility", - "responsibilies", "responsibilities", - "responsibities", "responsibilities", - "restaraunteurs", "restaurateurs", - "retroactivelly", "retroactively", - "revolutionairy", "revolutionary", - "revolutionnary", "revolutionary", - "ridicilousness", "ridiculousness", - "ridicoulusness", "ridiculousness", - "rienforcements", "reinforcements", - "righteoussness", "righteousness", - "satisfactoraly", "satisfactory", - "satisfactority", "satisfactorily", - "sceintifically", "scientifically", - "schizophrentic", "schizophrenic", - "screenwrighter", "screenwriter", - "sensacionalism", "sensationalism", - "sensacionalist", "sensationalist", - "sensasionalism", "sensationalism", - "sensasionalist", "sensationalist", - "sensationality", "sensationalist", - "sensationalizm", "sensationalism", - "sensationalsim", "sensationalism", - "sensationilism", "sensationalism", - "sensationilist", "sensationalist", - "sensationslism", "sensationalism", - "sensetionalism", "sensationalism", - "sensibilisiert", "sensibilities", - "sentationalism", "sensationalism", - "sentationalist", "sensationalist", - "senzationalism", "sensationalism", - "senzationalist", "sensationalist", - "sepcifications", "specification", - "simaltaneously", "simultaneously", - "simeltaneously", "simultaneously", - "similtaneously", "simultaneously", - "simlutaneously", "simultaneously", - "simplificacion", "simplification", - "simplificaiton", "simplification", - "simplificating", "simplification", - "simulatenously", "simultaneously", - "simulatneously", "simultaneously", - "simultaenously", "simultaneously", - "simultainously", "simultaneously", - "simultaneoulsy", "simultaneously", - "simultaniously", "simultaneously", - "simulteanously", "simultaneously", - "sistematically", "systematically", - "slaugterhouses", "slaughterhouses", - "specailization", "specialization", - "specialication", "specialization", - "specializaiton", "specialization", - "specificaitons", "specification", - "speciliazation", "specialization", - "spectacularely", "spectacularly", - "spectacularily", "spectacularly", - "spesifications", "specifications", - "spezialisation", "specialization", - "sportsmansship", "sportsmanship", - "spreadsheeters", "spreadsheets", - "straightforwad", "straightforward", - "subconcsiously", "subconsciously", - "subconsicously", "subconsciously", - "subsconciously", "subconsciously", - "sunconsciously", "subconsciously", - "superintendant", "superintendent", - "suppliementing", "supplementing", - "surrepetitious", "surreptitious", - "survivabililty", "survivability", - "survivabillity", "survivability", - "sustainabiltiy", "sustainability", - "syncronization", "synchronization", - "systemetically", "systematically", - "systimatically", "systematically", - "technologicaly", "technologically", - "thermodinamics", "thermodynamics", - "thermodyanmics", "thermodynamics", - "thermodymamics", "thermodynamics", - "thermodymanics", "thermodynamics", - "thermodynamcis", "thermodynamics", - "thermodynanics", "thermodynamics", - "thermodynmaics", "thermodynamics", - "thernodynamics", "thermodynamics", - "theromdynamics", "thermodynamics", - "transformacion", "transformation", - "transfromation", "transformation", - "transitionable", "transitional", - "transitionning", "transitioning", - "transofrmation", "transformation", - "trasnformation", "transformation", - "trasnportation", "transportation", - "unbelievablely", "unbelievably", - "unchallengable", "unchallengeable", - "uncomfortabley", "uncomfortably", - "uncomfortablly", "uncomfortably", - "unconciousness", "unconsciousness", - "unconditionaly", "unconditionally", - "unconditionnal", "unconditional", - "unconsciouslly", "unconsciously", - "uncontrallable", "uncontrollable", - "uncontrallably", "uncontrollably", - "uncontrolablly", "uncontrollably", - "unconvectional", "unconventional", - "unconvencional", "unconventional", - "unconvensional", "unconventional", - "unconventianal", "unconventional", - "underastimated", "underestimated", - "underestamated", "underestimated", - "underestemated", "underestimated", - "underestimeted", "underestimated", - "undersetimated", "underestimated", - "understandebly", "understandably", - "understandible", "understandable", - "understandibly", "understandably", - "undestructible", "indestructible", - "unforetunately", "unfortunately", - "unfortunatelly", "unfortunately", - "unfourtunately", "unfortunately", - "uninitalizable", "uninitializable", - "unintelligient", "unintelligent", - "unintentionaly", "unintentionally", - "unintentionnal", "unintentional", - "unmanouverable", "unmaneuverable", - "unneccessarily", "unnecessarily", - "unnecessarilly", "unnecessarily", - "unprecendented", "unprecedented", - "unprofessionel", "unprofessional", - "unreasonablely", "unreasonably", - "unsubstantiaed", "unsubstantiated", - "unsurprizingly", "unsurprisingly", - "vizualisations", "visualization", - "vulnerabilites", "vulnerabilities", - "vulnerabillity", "vulnerability", - "vulnerablility", "vulnerability", - "wholeheartadly", "wholeheartedly", - "wholeheartidly", "wholeheartedly", - "abbrievations", "abbreviation", - "accelleration", "acceleration", - "accomadations", "accommodations", - "accommadating", "accommodating", - "accommadation", "accommodation", - "accommidation", "accommodation", - "accomodations", "accommodations", - "accomondating", "accommodating", - "accomondation", "accommodation", - "accomplishent", "accomplishment", - "accountabilty", "accountability", - "accredidation", "accreditation", - "acknolwedging", "acknowledging", - "acknowlegding", "acknowledging", - "acomplishment", "accomplishment", - "acquaintaince", "acquaintance", - "acquaintences", "acquaintances", - "acquaintinces", "acquaintances", - "acquanitances", "acquaintance", - "acquantainces", "acquaintances", - "acquantiances", "acquaintances", - "acquiantances", "acquaintances", - "acquiantences", "acquaintances", - "adminastrator", "administrator", - "administartor", "administrator", - "administraion", "administration", - "administraron", "administrator", - "administrater", "administrator", - "administratio", "administrator", - "administraton", "administration", - "adminsitrator", "administrator", - "adminstration", "administration", - "adminstrative", "administrative", - "admissability", "admissibility", - "adnimistrator", "administrators", - "adverticement", "advertisement", - "advertisiment", "advertisement", - "advertisments", "advertisements", - "advirtisement", "advertisement", - "aestethically", "aesthetically", - "aesthatically", "aesthetically", - "aesthitically", "aesthetically", - "affectionnate", "affectionate", - "aforementiond", "aforementioned", - "agriculturual", "agricultural", - "agrumentative", "argumentative", - "alterantively", "alternatively", - "alternativets", "alternatives", - "alternativley", "alternatively", - "alternitavely", "alternatively", - "alternitively", "alternatively", - "aninteresting", "uninteresting", - "annoucnements", "announcements", - "antagonisitic", "antagonistic", - "anthropolgist", "anthropologist", - "apporpriately", "appropriately", - "apporpriation", "appropriation", - "apporximately", "approximately", - "appreciateing", "appreciating", - "appreciateive", "appreciative", - "appreciationg", "appreciating", - "appropirately", "appropriately", - "appropiration", "appropriation", - "appropraitely", "appropriately", - "appropreation", "appropriation", - "appropriatley", "appropriately", - "appropropiate", "appropriate", - "approrpiation", "appropriation", - "approxamately", "approximately", - "approxiamtely", "approximately", - "approximatley", "approximately", - "approximitely", "approximately", - "aqcuaintances", "acquaintances", - "aqquaintances", "acquaintances", - "archaelogical", "archaeological", - "archaelogists", "archaeologists", - "archeaologist", "archeologist", - "archetectural", "architectural", - "architechture", "architecture", - "architechural", "architectural", - "architectrual", "architectural", - "architecutral", "architectural", - "argumentitive", "argumentative", - "arugmentative", "argumentative", - "asethetically", "aesthetically", - "assasinations", "assassinations", - "audomoderator", "automoderator", - "australianess", "australians", - "authenticaion", "authentication", - "authenticaton", "authentication", - "autherization", "authorization", - "authoratitive", "authoritative", - "authoritatian", "authoritarian", - "authoritation", "authorization", - "authorititive", "authoritative", - "authoritorian", "authoritarian", - "authorotative", "authoritative", - "authroization", "authorization", - "automoderador", "automoderator", - "automoderater", "automoderator", - "automodorator", "automoderator", - "automoterator", "automoderator", - "autoritharian", "authoritarian", - "availabillity", "availability", - "awknowledging", "acknowledging", - "billingualism", "bilingualism", - "billionairres", "billionaire", - "borderlanders", "borderlands", - "breadtfeeding", "breastfeeding", - "breastfeading", "breastfeeding", - "breatsfeeding", "breastfeeding", - "broadacasting", "broadcasting", - "bureaucractic", "bureaucratic", - "bureaucratics", "bureaucrats", - "bureaucratius", "bureaucrats", - "californiaman", "californian", - "calrification", "clarification", - "capitalizaton", "capitalization", - "carbohdyrates", "carbohydrates", - "carbohidrates", "carbohydrates", - "carbohyrdates", "carbohydrates", - "carboyhdrates", "carbohydrates", - "carthographer", "cartographer", - "catagorically", "categorically", - "catastrophies", "catastrophe", - "catastrophize", "catastrophe", - "catigorically", "categorically", - "catterpillars", "caterpillars", - "celebrationis", "celebrations", - "ceritfication", "certifications", - "certificaiton", "certification", - "championchips", "championship", - "championshiop", "championships", - "championsship", "championships", - "chanpionships", "championships", - "charactarized", "characterized", - "characterisic", "characteristic", - "characteristc", "characteristics", - "characterists", "characteristics", - "charicterized", "characterized", - "charismatisch", "charismatic", - "checkpointusa", "checkpoints", - "cheeseburgare", "cheeseburger", - "cheeseburgler", "cheeseburger", - "cheeseburguer", "cheeseburger", - "cheezeburgers", "cheeseburgers", - "chornological", "chronological", - "chronoligical", "chronological", - "chronologicly", "chronological", - "cinematograhy", "cinematography", - "cinematograpy", "cinematography", - "circomference", "circumference", - "circumcission", "circumcision", - "circumferance", "circumference", - "circumsicions", "circumcision", - "circumstanial", "circumstantial", - "circumstantal", "circumstantial", - "circumstnaces", "circumstance", - "circunference", "circumference", - "circunstances", "circumstances", - "cirucmference", "circumference", - "cirucmstances", "circumstances", - "civilications", "civilizations", - "civilizaitons", "civilizations", - "clarificaiton", "clarification", - "clasification", "clarification", - "clerification", "clarification", - "coincidentaly", "coincidentally", - "coincidential", "coincidental", - "colaborations", "collaborations", - "collabaration", "collaboration", - "collaberation", "collaboration", - "collaberative", "collaborative", - "collaboratore", "collaborate", - "collectioners", "collections", - "collectivelly", "collectively", - "collobaration", "collaboration", - "combatibility", "compatibility", - "comeptitively", "competitively", - "comfortablely", "comfortably", - "comfortablity", "comfortably", - "comfrontation", "confrontation", - "commemerative", "commemorative", - "commericially", "commercially", - "commerorative", "commemorative", - "comminication", "communication", - "comminucation", "communications", - "commissionees", "commissions", - "commissionned", "commissioned", - "commissionner", "commissioner", - "commmemorated", "commemorated", - "commuications", "communications", - "commuincation", "communications", - "communciation", "communication", - "communiaction", "communications", - "communicaiton", "communication", - "communicatoin", "communications", - "communicatons", "communications", - "compadibility", "compatibility", - "comparativley", "comparatively", - "comparetively", "comparatively", - "comparitavely", "comparatively", - "comparitively", "comparatively", - "compatability", "compatibility", - "compatibiltiy", "compatibility", - "compeditively", "competitively", - "compensantion", "compensation", - "compensationg", "compensating", - "comperatively", "comparatively", - "comperhension", "comprehension", - "competatively", "competitively", - "competitavely", "competitively", - "competitevely", "competitively", - "competitivley", "competitively", - "competiveness", "competitiveness", - "compilcations", "complication", - "compitability", "compatibility", - "complciations", "complication", - "complecations", "complications", - "compliactions", "complication", - "complicaitons", "complication", - "complilations", "complications", - "complimentery", "complimentary", - "complimentoni", "complimenting", - "complimentory", "complimentary", - "comprehention", "comprehension", - "computacional", "computational", - "comtamination", "contamination", - "comtemplating", "contemplating", - "concatination", "contamination", - "conceivablely", "conceivably", - "concencration", "concentration", - "concenrtation", "concentrations", - "concentartion", "concentrations", - "concentracion", "concentration", - "concentraited", "concentrated", - "concentraiton", "concentrations", - "concentratons", "concentrations", - "concervatives", "conservatives", - "concideration", "consideration", - "concioussness", "consciousness", - "concnetration", "concentrations", - "concsiousness", "consciousness", - "condascending", "condescending", - "condescencion", "condescension", - "condescendion", "condescension", - "condescensing", "condescension", - "condiscending", "condescending", - "conditionning", "conditioning", - "condradicting", "contradicting", - "condradiction", "contradiction", - "condradictory", "contradictory", - "conecntration", "concentrations", - "conenctration", "concentrations", - "confidentally", "confidentially", - "configruation", "configurations", - "configuartion", "configuration", - "configuracion", "configuration", - "configuraiton", "configuration", - "configuratoin", "configurations", - "configureable", "configurable", - "confrentation", "confrontation", - "confrontacion", "confrontation", - "confrontating", "confrontation", - "confrontativo", "confrontation", - "congratualted", "congratulate", - "conifguration", "configurations", - "conisderation", "considerations", - "connecticunts", "connecticut", - "connectivitiy", "connectivity", - "conpassionate", "compassionate", - "conplications", "complications", - "conplimentary", "complimentary", - "conplimenting", "complimenting", - "conprehension", "comprehension", - "consdieration", "considerations", - "consenquently", "consequently", - "consentrating", "concentrating", - "consentration", "concentration", - "consequencies", "consequence", - "consequentely", "consequently", - "consequeseces", "consequences", - "conservatisim", "conservatism", - "conservativsm", "conservatism", - "conservitives", "conservatives", - "consicousness", "consciousness", - "considerabely", "considerable", - "considerabile", "considerable", - "considerabley", "considerably", - "considerablly", "considerably", - "consideracion", "consideration", - "consideratoin", "considerations", - "considerstion", "considerations", - "considertaion", "considerations", - "consituencies", "constituencies", - "consitutional", "constitutional", - "constallation", "constellation", - "constarnation", "consternation", - "constillation", "constellation", - "constituintes", "constituents", - "constituional", "constitutional", - "constitutents", "constitutes", - "constitutinal", "constitutional", - "constructicon", "construction", - "constructieve", "constructive", - "constructiong", "constructing", - "consttruction", "construction", - "contaminacion", "contamination", - "contaminanted", "contaminated", - "contanimation", "contamination", - "contenplating", "contemplating", - "contimplating", "contemplating", - "contraceptivo", "contraception", - "contradiccion", "contradiction", - "contradicitng", "contradicting", - "contradiciton", "contradiction", - "contradictary", "contradictory", - "contradictons", "contradicts", - "contraticting", "contradicting", - "contravercial", "controversial", - "contraversial", "controversial", - "contreception", "contraception", - "contreversial", "controversial", - "contributeurs", "contributes", - "contributiors", "contributors", - "contriception", "contraception", - "contridictory", "contradictory", - "contritutions", "contributions", - "contriversial", "controversial", - "controception", "contraception", - "controdicting", "contradicting", - "controdiction", "contradiction", - "controvercial", "controversial", - "controverisal", "controversial", - "controversary", "controversy", - "controversity", "controversy", - "controvertial", "controversial", - "contstruction", "construction", - "conventionnal", "conventional", - "converastions", "conservation", - "conversationa", "conservation", - "conversationg", "conservation", - "conversationy", "conservation", - "conversatiosn", "conservation", - "conversatives", "conservatives", - "converstaions", "conversations", - "convorsations", "conversations", - "cooresponding", "corresponding", - "coorperations", "corporations", - "correctionals", "corrections", - "correpsonding", "corresponding", - "correspondant", "correspondent", - "correspondece", "correspondence", - "corresponders", "corresponds", - "corresponsing", "corresponding", - "corrispondant", "correspondent", - "corrisponding", "corresponding", - "corrosponding", "corresponding", - "costomization", "customization", - "costumization", "customization", - "counterfeight", "counterfeit", - "creationistas", "creationists", - "cricumference", "circumference", - "cringeworthey", "cringeworthy", - "cringeworthly", "cringeworthy", - "crytopgraphic", "cryptographic", - "curcumference", "circumference", - "curcumstances", "circumstances", - "custumization", "customization", - "cuztomization", "customization", - "decentraliced", "decentralized", - "decentrilized", "decentralized", - "decomissioned", "decommissioned", - "decompositing", "decomposing", - "definitivelly", "definitively", - "deinitalizing", "deinitializing", - "demenstration", "demonstration", - "democraticaly", "democratically", - "democraticlly", "democratically", - "demoninations", "denominations", - "demonstarting", "demonstrating", - "demonstartion", "demonstration", - "demonstraiton", "demonstrations", - "demonstratbly", "demonstrably", - "demonstraties", "demonstrate", - "demonstrativo", "demonstration", - "demosntrating", "demonstrating", - "demosntration", "demonstrations", - "denomenations", "denominations", - "denomonations", "denominations", - "deomnstration", "demonstrations", - "dermatalogist", "dermatologist", - "dermatolagist", "dermatologist", - "dermatoligist", "dermatologist", - "dermatologyst", "dermatologist", - "dermetologist", "dermatologist", - "dermitologist", "dermatologist", - "derpatologist", "dermatologist", - "desentralized", "decentralized", - "desillusioned", "disillusioned", - "desintegrated", "disintegrated", - "desinterested", "disinterested", - "determenation", "determination", - "determinacion", "determination", - "determinining", "determining", - "determinisitc", "deterministic", - "determinsitic", "deterministic", - "detmatologist", "dermatologist", - "developmently", "developmental", - "dezentralized", "decentralized", - "differantiate", "differentiate", - "differenciate", "differentiate", - "differintiate", "differentiate", - "diffirentiate", "differentiate", - "disadvandages", "disadvantaged", - "disadvantadge", "disadvantaged", - "disadvanteged", "disadvantaged", - "disadvanteges", "disadvantages", - "disadvatanges", "disadvantages", - "disadventaged", "disadvantaged", - "disadventages", "disadvantages", - "disallusioned", "disillusioned", - "disappearence", "disappearance", - "disappearnace", "disappearance", - "disappearring", "disappearing", - "disatvantaged", "disadvantaged", - "disatvantages", "disadvantages", - "disciplinairy", "disciplinary", - "disciplinerad", "disciplined", - "discipliniary", "disciplinary", - "disconnecters", "disconnects", - "discontinuted", "discontinued", - "discrimianted", "discriminated", - "discriminante", "discriminate", - "discriminatie", "discriminate", - "discriminatin", "discrimination", - "disillisioned", "disillusioned", - "disillutioned", "disillusioned", - "disingenuious", "disingenuous", - "disollusioned", "disillusioned", - "disrecpectful", "disrespectful", - "disrecpecting", "disrespecting", - "disrepsectful", "disrespectful", - "disrepsecting", "disrespecting", - "disresepctful", "disrespectful", - "disresepcting", "disrespecting", - "disrespection", "disrespecting", - "disrespekting", "disrespecting", - "disrispectful", "disrespectful", - "disrispecting", "disrespecting", - "dissagreement", "disagreement", - "dissapearance", "disappearance", - "dissapointted", "dissapointed", - "dissappointed", "disappointed", - "dissobediance", "disobedience", - "dissobedience", "disobedience", - "distingishing", "distinguishing", - "distinguising", "distinguishing", - "distinquished", "distinguished", - "distirbutions", "distributions", - "distiungished", "distinguished", - "distribustion", "distributions", - "distributiors", "distributors", - "distributivos", "distributions", - "distrobutions", "distributions", - "distrubitions", "distributions", - "distuingished", "distinguished", - "documantaries", "documentaries", - "documenatries", "documentaries", - "documentacion", "documentation", - "documentaires", "documentaries", - "documentaiton", "documentation", - "documentarios", "documentaries", - "documentaties", "documentaries", - "documentating", "documentation", - "documenteries", "documentaries", - "documentories", "documentaries", - "drammatically", "grammatically", - "dsyfunctional", "dysfunctional", - "dumbfoundeads", "dumbfounded", - "dusfunctional", "dysfunctional", - "dustification", "justification", - "dysfonctional", "dysfunctional", - "dysfucntional", "dysfunctional", - "dysfuncitonal", "dysfunctional", - "dysfunktional", "dysfunctional", - "easthetically", "aesthetically", - "effectiviness", "effectiveness", - "effictiveness", "effectiveness", - "effortlessely", "effortlessly", - "effortlessley", "effortlessly", - "embarrasement", "embarrassment", - "embarrasments", "embarrassment", - "embarressment", "embarrassment", - "emberrassment", "embarrassment", - "encarceration", "incarceration", - "encorporating", "incorporating", - "encyclopeadia", "encyclopedia", - "encyclopeadic", "encyclopedia", - "encyclopeedia", "encyclopedia", - "encycolpedias", "encyclopedia", - "endoctrinated", "indoctrinated", - "enlightenting", "enlightening", - "enlightnement", "enlightenment", - "enligthenment", "enlightenment", - "enteratinment", "entertainment", - "enterpreneurs", "entrepreneurs", - "enterprenuers", "entrepreneurs", - "enterpreuners", "entrepreneurs", - "entertianment", "entertainment", - "enthusiasists", "enthusiasts", - "enthusiastics", "enthusiasts", - "entrepraneurs", "entrepreneurs", - "entreprenaurs", "entrepreneurs", - "entrepreneuer", "entrepreneurs", - "entreprenours", "entrepreneurs", - "entreprenuers", "entrepreneurs", - "entreprenures", "entrepreneurs", - "entrepreuners", "entrepreneurs", - "entretainment", "entertainment", - "enviornmental", "environmental", - "environemntal", "environmental", - "environmently", "environmental", - "envolutionary", "evolutionary", - "envrionmental", "environmental", - "estabilshment", "establishments", - "establishemnt", "establishments", - "establishmnet", "establishments", - "establsihment", "establishments", - "estbalishment", "establishments", - "ethnocentricm", "ethnocentrism", - "evolutionairy", "evolutionary", - "evolutionarly", "evolutionary", - "evolutionnary", "evolutionary", - "exaggeratting", "exaggerating", - "excpetionally", "exceptionally", - "executioneers", "executioner", - "existentiella", "existential", - "expectionally", "exceptionally", - "experementing", "experimenting", - "experienceing", "experiencing", - "experimentais", "experiments", - "experimention", "experimenting", - "experimentors", "experiments", - "expirementing", "experimenting", - "expodentially", "exponentially", - "exponantially", "exponentially", - "exponencially", "exponentially", - "exponentiella", "exponential", - "extraodrinary", "extraordinary", - "extraordianry", "extraordinary", - "extraordinair", "extraordinary", - "extraordinaly", "extraordinary", - "extraoridnary", "extraordinary", - "extremeophile", "extremophile", - "extroardinary", "extraordinary", - "familiarizate", "familiarize", - "fantasitcally", "fantastically", - "fantasmically", "fantastically", - "fantistically", "fantastically", - "faptastically", "fantastically", - "figurativeley", "figuratively", - "figurativelly", "figuratively", - "frankenstiens", "frankenstein", - "frankenstined", "frankenstein", - "frankenstiner", "frankenstein", - "frankenstines", "frankenstein", - "friendzoneado", "friendzoned", - "fucntionality", "functionality", - "funcitonality", "functionality", - "functionailty", "functionality", - "fundamentalis", "fundamentals", - "fundamnetally", "fundamentally", - "fundementally", "fundamentally", - "fundimentally", "fundamentally", - "gamifications", "ramifications", - "generalizaing", "generalizing", - "generalizaton", "generalization", - "generationals", "generations", - "generationens", "generations", - "generationers", "generations", - "generationnal", "generational", - "geographicaly", "geographically", - "geographicial", "geographical", - "geometricians", "geometers", - "goreshadowing", "foreshadowing", - "governmential", "governmental", - "gradification", "gratification", - "grammarically", "grammatically", - "grandchildern", "grandchildren", - "gratificacion", "gratification", - "gratificaiton", "gratification", - "grativational", "gravitational", - "gravitacional", "gravitational", - "gravitaitonal", "gravitational", - "hallcuination", "hallucination", - "hallicunation", "hallucination", - "hallucenation", "hallucination", - "halluciantion", "hallucinations", - "hallukination", "hallucination", - "hallunication", "hallucination", - "hallusination", "hallucination", - "halluzination", "hallucination", - "heiroglyphics", "hieroglyphics", - "hellucination", "hallucination", - "highlightning", "highlighting", - "homesexuality", "homosexuality", - "homosexualtiy", "homosexuality", - "homosexulaity", "homosexuality", - "horizontallly", "horizontally", - "hullucination", "hallucination", - "hypocriticial", "hypocritical", - "hypotheticaly", "hypothetically", - "hystericallly", "hysterically", - "identificaton", "identification", - "ideoligically", "ideologically", - "ideosyncratic", "idiosyncratic", - "idiologically", "ideologically", - "illistrations", "illustrations", - "illustartions", "illustrations", - "imperfactions", "imperfections", - "impersinating", "impersonating", - "implementaion", "implementation", - "implementatin", "implementations", - "implimenation", "implementation", - "imprefections", "imperfections", - "impresonating", "impersonating", - "inaccessibile", "inaccessible", - "inadventently", "inadvertently", - "inadverdently", "inadvertently", - "inadvertantly", "inadvertently", - "inadvertendly", "inadvertently", - "inapporpriate", "inappropriate", - "inappropirate", "inappropriate", - "inappropraite", "inappropriate", - "inaproppriate", "inappropriate", - "incarcaration", "incarceration", - "incarciration", "incarceration", - "incarseration", "incarceration", - "incerceration", "incarceration", - "incidentially", "incidentally", - "incomfortable", "uncomfortable", - "incomfortably", "uncomfortably", - "incompatabile", "incompatible", - "incompatiable", "incompatible", - "incompatibile", "incompatible", - "inconciderate", "inconsiderate", - "inconcistency", "inconsistency", - "inconditional", "unconditional", - "inconsciously", "unconsciously", - "inconsiderant", "inconsiderate", - "inconsistance", "inconsistency", - "inconsistancy", "inconsistency", - "inconsistenly", "inconsistency", - "inconsistensy", "inconsistency", - "inconsistenty", "inconsistency", - "inconveinence", "inconvenience", - "inconveniance", "inconvenience", - "inconveniente", "inconvenience", - "inconvienence", "inconvenience", - "incoroporated", "incorporated", - "incorparating", "incorporating", - "incorperating", "incorporating", - "incorperation", "incorporation", - "incorruptable", "incorruptible", - "incramentally", "incrementally", - "incrementarla", "incremental", - "incrementarlo", "incremental", - "indavertently", "inadvertently", - "indefinitelly", "indefinitely", - "independantes", "independents", - "independantly", "independently", - "independendet", "independent", - "independendly", "independently", - "indepentently", "independently", - "indespensable", "indispensable", - "indespensible", "indispensable", - "indestructble", "indestructible", - "indestructibe", "indestructible", - "indictrinated", "indoctrinated", - "indipendently", "independently", - "indispensible", "indispensable", - "indivuduality", "individuality", - "indocrtinated", "indoctrinated", - "indocternated", "indoctrinated", - "indoctornated", "indoctrinated", - "indoctrinatie", "indoctrinated", - "indoctrinatin", "indoctrination", - "indoctronated", "indoctrinated", - "industrialied", "industrialized", - "industrialzed", "industrialized", - "inexeprienced", "inexperience", - "inexpeirenced", "inexperience", - "inexpereinced", "inexperienced", - "inexperianced", "inexperienced", - "inexperiecned", "inexperience", - "inexperineced", "inexperience", - "inexpierenced", "inexperienced", - "inexplicabley", "inexplicably", - "inexplicablly", "inexplicably", - "infilitration", "infiltration", - "infrastructre", "infrastructure", - "infrastrucure", "infrastructure", - "inintelligent", "unintelligent", - "ininteresting", "uninteresting", - "initalisation", "initialisation", - "initalization", "initialization", - "inperfections", "imperfections", - "inpersonating", "impersonating", - "inpossibility", "impossibility", - "inpredictable", "unpredictable", - "inresponsible", "irresponsible", - "insectiverous", "insectivorous", - "insecuritites", "insecurities", - "insiginficant", "insignificant", - "insiginifcant", "insignificant", - "insignificent", "insignificant", - "insignificunt", "insignificant", - "insignifigant", "insignificant", - "insiprational", "inspirational", - "insperational", "inspirational", - "inspiritional", "inspirational", - "inspriational", "inspirational", - "instantaenous", "instantaneous", - "instantanious", "instantaneous", - "instanteneous", "instantaneous", - "instantenious", "instantaneous", - "instincitvely", "instinctively", - "instinctivley", "instinctively", - "instititional", "institutional", - "institutionel", "institutional", - "insturmentals", "instrumental", - "instutitional", "institutional", - "insustainable", "unsustainable", - "intelelctuals", "intellectuals", - "intellectualy", "intellectually", - "intellectuels", "intellectuals", - "intellecutals", "intellectuals", - "intellegently", "intelligently", - "intelluctuals", "intellectuals", - "intepretation", "interpretation", - "intereactions", "intersections", - "interesctions", "intersections", - "interlectuals", "intellectuals", - "intermittient", "intermittent", - "intermittment", "intermittent", - "internacional", "international", - "interpersonel", "interpersonal", - "interpresonal", "interpersonal", - "interpretaion", "interpretation", - "interpretarea", "interpreter", - "interpretarem", "interpreter", - "interpretares", "interpreter", - "interpretarse", "interpreter", - "interpretarte", "interpreter", - "interpretatin", "interpretations", - "interpreteert", "interpreter", - "interragation", "interrogation", - "interregation", "interrogation", - "interrigation", "interrogation", - "interrogacion", "interrogation", - "interrogativo", "interrogation", - "intertainment", "entertainment", - "intillectuals", "intellectuals", - "intraspection", "introspection", - "intrensically", "intrinsically", - "intriniscally", "intrinsically", - "intrinsecally", "intrinsically", - "intrisincally", "intrinsically", - "intristically", "intrinsically", - "introductiory", "introductory", - "introspeccion", "introspection", - "introspectivo", "introspection", - "introspektion", "introspection", - "invertibrates", "invertebrates", - "invesitgation", "investigation", - "invesitgative", "investigative", - "invesitgators", "investigators", - "investagators", "investigators", - "investegating", "investigating", - "investegators", "investigators", - "investiagtion", "investigation", - "investiagtive", "investigative", - "investigacion", "investigation", - "investigaiton", "investigations", - "investigaters", "investigators", - "investigativo", "investigation", - "investigatons", "investigations", - "investigsting", "investigating", - "investigstion", "investigations", - "investogators", "investigators", - "invisibillity", "invisibility", - "involuntarely", "involuntary", - "involuntarity", "involuntary", - "invulnerabile", "invulnerable", - "irrationallly", "irrationally", - "irresponcible", "irresponsible", - "irresponisble", "irresponsible", - "irresponsable", "irresponsible", - "irresponsbile", "irresponsible", - "irreversiable", "irreversible", - "irreversibelt", "irreversible", - "irreversibile", "irreversible", - "irrisponsible", "irresponsible", - "jacksonvillle", "jacksonville", - "journalisitic", "journalistic", - "journalistens", "journalists", - "journalisters", "journalists", - "journalistisk", "journalists", - "jsutification", "justifications", - "jurisdicitons", "jurisdictions", - "jurisidctions", "jurisdictions", - "juristictions", "jurisdictions", - "jursidictions", "jurisdictions", - "jusitfication", "justifications", - "justifiaction", "justifications", - "justificacion", "justification", - "justificaiton", "justification", - "justificativo", "justification", - "justificatons", "justifications", - "justificstion", "justifications", - "justiifcation", "justifications", - "karbohydrates", "carbohydrates", - "knoweldgeable", "knowledgeable", - "knowledegable", "knowledgeable", - "knowledgebale", "knowledgable", - "knowlegdeable", "knowledgeable", - "kollaboration", "collaboration", - "koncentration", "concentration", - "konfiguration", "configuration", - "konfrontation", "confrontation", - "konservatives", "conservatives", - "konstellation", "constellation", - "kontamination", "contamination", - "legitimatelly", "legitimately", - "libertariaism", "libertarianism", - "libertariansm", "libertarianism", - "libitarianisn", "libertarianism", - "lighthearthed", "lighthearted", - "mainfestation", "manifestation", - "manafacturers", "manufacturers", - "manafacturing", "manufacturing", - "manafestation", "manifestation", - "manefestation", "manifestation", - "manfuacturers", "manufactures", - "manifacturers", "manufacturers", - "manifacturing", "manufacturing", - "manifastation", "manifestation", - "manifestacion", "manifestation", - "manifestating", "manifestation", - "manifistation", "manifestation", - "manipulationg", "manipulating", - "manufacterers", "manufacturers", - "manufactering", "manufacturing", - "manufacterurs", "manufactures", - "manufactorers", "manufacturers", - "manufactoring", "manufacturing", - "manufactuered", "manufactured", - "manufactuerer", "manufacturer", - "manufactueres", "manufactures", - "manufacturedd", "manufactured", - "manufactureds", "manufactures", - "manufacturerd", "manufactured", - "manufacturier", "manufacturer", - "manufacturors", "manufacturers", - "manufactuters", "manufactures", - "manufacutrers", "manufactures", - "manufcaturers", "manufactures", - "marshmalllows", "marshmallows", - "massachsuetts", "massachusetts", - "massachucetts", "massachusetts", - "massachuestts", "massachusetts", - "massachusents", "massachusetts", - "massachusites", "massachusetts", - "massachussets", "massachusetts", - "massechusetts", "massachusetts", - "masturbateing", "masturbating", - "materialisimo", "materialism", - "mathamatician", "mathematician", - "mathametician", "mathematician", - "mathematicals", "mathematics", - "mathematicaly", "mathematically", - "mathematicans", "mathematics", - "mathematicion", "mathematician", - "mathematitian", "mathematician", - "mathemetician", "mathematician", - "mathmatically", "mathematically", - "mathmaticians", "mathematicians", - "mechanicallly", "mechanically", - "medeterranean", "mediterranean", - "meditarrenean", "mediterranean", - "meditereanean", "mediterranean", - "membranaphone", "membranophone", - "metamorphysis", "metamorphosis", - "metaphoricaly", "metaphorically", - "metaphoricial", "metaphorical", - "metaphysicals", "metaphysics", - "metaphysicans", "metaphysics", - "methamatician", "mathematician", - "methematician", "mathematician", - "metropolitain", "metropolitan", - "metropolitcan", "metropolitan", - "metropolitian", "metropolitan", - "millionairres", "millionaire", - "minneapolites", "minneapolis", - "misanderstood", "misunderstood", - "miscellanious", "miscellaneous", - "misconcpetion", "misconceptions", - "misconecption", "misconceptions", - "misinterperet", "misinterpret", - "misinterprate", "misinterpret", - "misinterprent", "misinterpret", - "misinterprted", "misinterpret", - "misogynisitic", "misogynistic", - "misrepreseted", "misrepresented", - "misunterstood", "misunderstood", - "modificaitons", "modifications", - "motivationals", "motivations", - "motivationnal", "motivational", - "mulitnational", "multinational", - "multimational", "multinational", - "multiplicaton", "multiplication", - "muncipalities", "municipalities", - "munnicipality", "municipality", - "mutlinational", "multinational", - "nacionalistic", "nationalistic", - "narcissisitic", "narcissistic", - "narcississtic", "narcissistic", - "natioanlistic", "nationalistic", - "nationalisitc", "nationalistic", - "nationalistes", "nationalists", - "nationalsitic", "nationalistic", - "neigbhourhood", "neighbourhood", - "neighboorhoud", "neighbourhood", - "neighborehood", "neighbourhood", - "neighborhoood", "neighborhoods", - "neighbourbood", "neighbourhood", - "neighbourgood", "neighbourhood", - "neighbourhoud", "neighbourhood", - "neighourhoods", "neighborhoods", - "nieghborhoods", "neighborhoods", - "nieghbourhood", "neighbourhood", - "noncombatents", "noncombatants", - "noninitalized", "noninitialized", - "northwestener", "northwestern", - "notificaitons", "notifications", - "occassionally", "occasionally", - "operationable", "operational", - "oppertunities", "opportunities", - "opprotunities", "opportunities", - "oppurtunities", "opportunities", - "opthamologist", "ophthalmologist", - "organistaions", "organisations", - "organizatinal", "organizational", - "organizativos", "organizations", - "organsiations", "organisations", - "organziations", "organizations", - "orginasations", "organisations", - "orginazations", "organizations", - "overpopulaton", "overpopulation", - "overreactiong", "overreacting", - "overshaddowed", "overshadowed", - "overwheliming", "overwhelming", - "overwhelmigly", "overwhelmingly", - "overwhelmingy", "overwhelmingly", - "overwhelminly", "overwhelmingly", - "palestininans", "palestinians", - "paraphraseing", "paraphrasing", - "paraphrashing", "paraphrasing", - "parilamentary", "parliamentary", - "parlaimentary", "parliamentary", - "parliamantary", "parliamentary", - "parliamentery", "parliamentary", - "parliamnetary", "parliamentary", - "parliementary", "parliamentary", - "particiaption", "participation", - "participacion", "participation", - "participantes", "participants", - "participativo", "participation", - "particularely", "particularly", - "particularily", "particularly", - "particularlly", "particularly", - "partizipation", "participation", - "passionatelly", "passionately", - "paychiatrists", "psychiatrists", - "paychologists", "psychologists", - "pennsylvainia", "pennsylvania", - "pennsylvanica", "pennsylvania", - "pennsylvannia", "pennsylvania", - "perdominantly", "predominantly", - "perpandicular", "perpendicular", - "perpendicualr", "perpendicular", - "perpenticular", "perpendicular", - "perpetuationg", "perpetuating", - "perpindicular", "perpendicular", - "personalitits", "personalities", - "pessimistisch", "pessimistic", - "pharmaceutial", "pharmaceutical", - "philisophical", "philosophical", - "philosiphical", "philosophical", - "philosohpical", "philosophical", - "philosophycal", "philosophically", - "philospohical", "philosophical", - "phisiological", "physiological", - "photagraphers", "photographers", - "photographics", "photographs", - "photographied", "photographed", - "photographier", "photographer", - "photograpphed", "photographed", - "photogrophers", "photographers", - "photogrpahers", "photographers", - "photoshoppade", "photoshopped", - "photoshoppped", "photoshopped", - "phsyiological", "physiological", - "phychiatrists", "psychiatrists", - "phychological", "psychological", - "phychologists", "psychologists", - "phylosophical", "philosophical", - "physciatrists", "psychiatrists", - "physcological", "psychological", - "physcologists", "psychologists", - "physioligical", "physiological", - "planeswlakers", "planeswalker", - "plansewalkers", "planeswalker", - "playthroughts", "playthroughs", - "polysaccaride", "polysaccharide", - "practicallity", "practically", - "practicioners", "practitioners", - "practisioners", "practitioners", - "practitioneer", "practitioners", - "practitionner", "practitioner", - "pratictioners", "practitioners", - "preconceieved", "preconceived", - "predecessores", "predecessors", - "predetermiend", "predetermined", - "predetirmined", "predetermined", - "preditermined", "predetermined", - "predomenantly", "predominantly", - "predominently", "predominantly", - "pregressively", "progressively", - "preinitalized", "preinitialized", - "preinitalizes", "preinitializes", - "preliferation", "proliferation", - "prependicular", "perpendicular", - "preposterious", "preposterous", - "prerequisties", "prerequisite", - "prerequistite", "prerequisite", - "prescribtions", "prescriptions", - "presumptuious", "presumptuous", - "pretedermined", "predetermined", - "problematisch", "problematic", - "proclaimation", "proclamation", - "prodominantly", "predominantly", - "professionnal", "professional", - "profitiablity", "profitability", - "profitibality", "profitability", - "progressivily", "progressively", - "progressivley", "progressively", - "prononciation", "pronunciation", - "pronouciation", "pronunciation", - "pronunciacion", "pronunciation", - "pronunciating", "pronunciation", - "pronuncuation", "pronunciation", - "pronunication", "pronunciation", - "pronuntiation", "pronunciation", - "propabilities", "probabilities", - "proportionaly", "proportionally", - "proportionnal", "proportional", - "proseletyzing", "proselytizing", - "protagonistas", "protagonists", - "protagonistes", "protagonists", - "protestantisk", "protestants", - "protruberance", "protuberance", - "provocativley", "provocative", - "pscyhiatrists", "psychiatrists", - "pscyhological", "psychological", - "pscyhologists", "psychologists", - "pshycological", "psychological", - "pshycologists", "psychologists", - "psichological", "psychological", - "psychaitrists", "psychiatrists", - "psychedellics", "psychedelics", - "psychiatrisch", "psychiatric", - "psycholigical", "psychological", - "psycholigists", "psychologists", - "psychologycal", "psychologically", - "psychologysts", "psychologists", - "psychyatrists", "psychiatrists", - "psysiological", "physiological", - "purpendicular", "perpendicular", - "pyschiatrists", "psychiatrists", - "pyschological", "psychological", - "pyschologists", "psychologists", - "qaulification", "qualification", - "qualifiaction", "qualification", - "qualificaiton", "qualifications", - "qualificatons", "qualifications", - "qualifikation", "qualification", - "questionalble", "questionable", - "quinessential", "quintessential", - "ramificaitons", "ramifications", - "realisitcally", "realistically", - "realtionships", "relationships", - "reccommending", "recommending", - "receptionnist", "receptionist", - "receptionsist", "receptionist", - "reconaissance", "reconnaissance", - "reconcilation", "reconciliation", - "reconnaisance", "reconnaissance", - "reconstrucion", "reconstruction", - "recreationnal", "recreational", - "rectangulaire", "rectangular", - "redistribuito", "redistribution", - "redistributin", "redistribution", - "reencarnation", "reincarnation", - "refridgerator", "refrigerator", - "rehabilitaion", "rehabilitation", - "rehabilitatin", "rehabilitation", - "rehabilitaton", "rehabilitation", - "reincarantion", "reincarnation", - "reincatnation", "reincarnation", - "reinforcemens", "reinforcements", - "reinforcemnts", "reinforcements", - "reinitalising", "reinitialising", - "reinitalizing", "reinitializing", - "reinkarnation", "reincarnation", - "reinstallling", "reinstalling", - "reintarnation", "reincarnation", - "relationshits", "relationships", - "relationsship", "relationships", - "relatiopnship", "relationship", - "relentlessely", "relentlessly", - "relentlessley", "relentlessly", - "relinqushment", "relinquishment", - "remifications", "ramifications", - "reprehenisble", "reprehensible", - "reprehensable", "reprehensible", - "reprehinsible", "reprehensible", - "represenation", "representation", - "represensible", "reprehensible", - "representaion", "representation", - "representatie", "representatives", - "representatin", "representations", - "representerad", "represented", - "representitve", "representative", - "representives", "representatives", - "repricussions", "repercussions", - "reprihensible", "reprehensible", - "resolutionary", "revolutionary", - "respectivelly", "respectively", - "responsibiliy", "responsibility", - "responsibilty", "responsibility", - "responsiblity", "responsibility", - "respositories", "repositories", - "resssurecting", "resurrecting", - "ressurrection", "resurrection", - "restaraunteur", "restaurateur", - "retoractively", "retroactively", - "retroactivily", "retroactively", - "retroactivley", "retroactively", - "retrocatively", "retroactively", - "revelutionary", "revolutionary", - "revolutionair", "revolutionary", - "revolutionens", "revolutions", - "revolutioners", "revolutions", - "revoultionary", "revolutionary", - "ridiculouness", "ridiculousness", - "rienforcement", "reinforcements", - "righetousness", "righteousness", - "rightiousness", "righteousness", - "rigtheousness", "righteousness", - "rollarcoaster", "rollercoaster", - "rollercaoster", "rollercoaster", - "rollercoaters", "rollercoaster", - "rollercoatser", "rollercoaster", - "rollerocaster", "rollercoaster", - "rollertoaster", "rollercoaster", - "rollorcoaster", "rollercoaster", - "sacrastically", "sarcastically", - "sarcasitcally", "sarcastically", - "satisfactorly", "satisfactory", - "scandianvians", "scandinavian", - "scateboarding", "skateboarding", - "schisophrenic", "schizophrenic", - "schiziphrenic", "schizophrenic", - "schizophernia", "schizophrenia", - "schizophernic", "schizophrenic", - "schizophrania", "schizophrenia", - "schizoprhenia", "schizophrenia", - "schizoprhenic", "schizophrenic", - "schozophrenia", "schizophrenia", - "schozophrenic", "schizophrenic", - "schyzophrenia", "schizophrenia", - "schyzophrenic", "schizophrenic", - "schziophrenia", "schizophrenia", - "schziophrenic", "schizophrenic", - "scientificaly", "scientifically", - "scientificlly", "scientifically", - "segementation", "segmentation", - "sensationable", "sensational", - "sensationails", "sensationalism", - "sensationaism", "sensationalism", - "sensationalim", "sensationalism", - "sensationella", "sensational", - "shcizophrenic", "schizophrenic", - "significanlty", "significantly", - "significently", "significantly", - "signifigantly", "significantly", - "simultaneosly", "simultaneously", - "simultaneuous", "simultaneous", - "simultanously", "simultaneously", - "singificantly", "significantly", - "skatebaording", "skateboarding", - "skateborading", "skateboarding", - "socioecenomic", "socioeconomic", - "socioecomonic", "socioeconomic", - "socioeconimic", "socioeconomic", - "sohpisticated", "sophisticated", - "sophisitcated", "sophisticated", - "sophistacated", "sophisticated", - "sophistocated", "sophisticated", - "sophosticated", "sophisticated", - "spacification", "specification", - "specializaton", "specialization", - "specificaiton", "specifications", - "specificatons", "specifications", - "specifikation", "specification", - "spectaculaire", "spectacular", - "spectaculalry", "spectacularly", - "spectatularly", "spectacularly", - "spesification", "specification", - "spirituallity", "spiritually", - "sponatenously", "spontaneously", - "spontaenously", "spontaneously", - "spontainously", "spontaneously", - "spontaneoulsy", "spontaneously", - "spontaneuosly", "spontaneously", - "spontaniously", "spontaneously", - "spontanuously", "spontaneously", - "sponteanously", "spontaneously", - "sponteneously", "spontaneously", - "sporstmanship", "sportsmanship", - "sportmansship", "sportsmanship", - "sportsmamship", "sportsmanship", - "sportsmenship", "sportsmanship", - "sprotsmanship", "sportsmanship", - "stakeboarding", "skateboarding", - "startegically", "strategically", - "statisitcally", "statistically", - "statistacally", "statistically", - "stereotipical", "stereotypical", - "stereotpyical", "stereotypical", - "stereotypcial", "stereotypical", - "stereotypeing", "stereotyping", - "stereotypying", "stereotyping", - "steriotypical", "stereotypical", - "steroetypical", "stereotypical", - "steryotypical", "stereotypical", - "storytellling", "storytelling", - "stragegically", "strategically", - "stragetically", "strategically", - "straightenend", "straightened", - "straitforward", "straightforward", - "stratagically", "strategically", - "stratigically", "strategically", - "strawberrries", "strawberries", - "stregnthening", "strengthening", - "strenghtening", "strengthening", - "strengthining", "strengthening", - "stretegically", "strategically", - "subcatagories", "subcategories", - "subconsciosly", "subconsciously", - "subconsciouly", "subconsciously", - "subconsiously", "subconsciously", - "subjectivelly", "subjectively", - "subscribtions", "subscriptions", - "substancially", "substantially", - "substanitally", "substantially", - "substansially", "substantially", - "substantiable", "substantial", - "substantually", "substantially", - "substitutents", "substitutes", - "successfullly", "successfully", - "supermarkedet", "supermarket", - "supermarkerts", "supermarkets", - "superpowereds", "superpowers", - "supersticious", "superstitious", - "superstisious", "superstitious", - "superstitiosi", "superstitious", - "superstitiuos", "superstitious", - "superstituous", "superstitious", - "suphisticated", "sophisticated", - "supscriptions", "subscriptions", - "surreptiously", "surreptitiously", - "survavibility", "survivability", - "survibability", "survivability", - "survivabiltiy", "survivability", - "survivalibity", "survivability", - "survivavility", "survivability", - "survivebility", "survivability", - "susbtantially", "substantially", - "sustainabilty", "sustainability", - "synchornously", "synchronously", - "systematicaly", "systematically", - "systematiclly", "systematically", - "techmological", "technological", - "technicallity", "technically", - "technoligical", "technological", - "technologicly", "technological", - "techonlogical", "technological", - "telaportation", "teleportation", - "teleportating", "teleportation", - "teleprotation", "teleportation", - "teliportation", "teleportation", - "teloportation", "teleportation", - "territoriella", "territorial", - "theoratically", "theoretically", - "theoritically", "theoretically", - "therapeutisch", "therapeutic", - "thereotically", "theoretically", - "thermodynaics", "thermodynamics", - "thermodynamcs", "thermodynamics", - "theroetically", "theoretically", - "thoeretically", "theoretically", - "tranistioning", "transitioning", - "transcendance", "transcendence", - "transcribtion", "transcription", - "transcripcion", "transcription", - "transferrring", "transferring", - "transformarea", "transformer", - "transformarem", "transformer", - "transformarse", "transformers", - "transformaton", "transformation", - "transformered", "transformed", - "transgengered", "transgendered", - "transisioning", "transitioning", - "transitionals", "transitions", - "transitionnal", "transitional", - "transitionned", "transitioned", - "transkription", "transcription", - "translyvanian", "transylvania", - "transmisisons", "transmissions", - "transmissable", "transmissible", - "transmisssion", "transmissions", - "transparantie", "transparent", - "transparentcy", "transparency", - "transplantees", "transplants", - "transporation", "transportation", - "transportaion", "transportation", - "transportarme", "transporter", - "transportarse", "transporter", - "transportarte", "transporter", - "transporteurs", "transporter", - "transsexuella", "transsexual", - "transylvannia", "transylvania", - "trasngendered", "transgendered", - "troubleshooot", "troubleshoot", - "udnerestimate", "underestimated", - "umcomfortable", "uncomfortable", - "umcomfortably", "uncomfortably", - "umpredictable", "unpredictable", - "unappropriate", "inappropriate", - "unbelievabley", "unbelievably", - "unbelievablly", "unbelievably", - "uncertaintity", "uncertainty", - "uncomfertable", "uncomfortable", - "uncomfertably", "uncomfortably", - "uncomfortabel", "uncomfortably", - "uncomforyable", "uncomfortably", - "uncomfrotable", "uncomfortable", - "uncomfrotably", "uncomfortably", - "uncomftorable", "uncomfortable", - "uncomftorably", "uncomfortably", - "unconcsiously", "unconsciously", - "unconfortable", "uncomfortable", - "unconfortably", "uncomfortably", - "unconscioulsy", "unconsciously", - "unconsicously", "unconsciously", - "unconsiderate", "inconsiderate", - "uncontrollabe", "uncontrollable", - "uncontrollaby", "uncontrollably", - "unconventinal", "unconventional", - "uncounciously", "unconsciously", - "uncousciously", "unconsciously", - "underastimate", "underestimate", - "underesitmate", "underestimated", - "underestamate", "underestimate", - "underestemate", "underestimate", - "underestiamte", "underestimated", - "undergratuate", "undergraduate", - "underhwelming", "underwhelming", - "underhwleming", "underwhelming", - "underminining", "undermining", - "underpowererd", "underpowered", - "undersetimate", "underestimate", - "understandble", "understandable", - "understandbly", "understandably", - "underwealming", "underwhelming", - "underwhemling", "underwhelming", - "underwhleming", "underwhelming", - "undoctrinated", "indoctrinated", - "unexpectadely", "unexpectedly", - "unfomfortable", "uncomfortable", - "unforgiveable", "unforgivable", - "unfortuantely", "unfortunately", - "unfortunantly", "unfortunately", - "unfortunatley", "unfortunately", - "unfortuneatly", "unfortunately", - "unfortunetely", "unfortunately", - "unilaterallly", "unilaterally", - "uninstallling", "uninstalling", - "unintellegent", "unintelligent", - "unintelligant", "unintelligent", - "unintensional", "unintentional", - "uninteristing", "uninteresting", - "universitites", "universities", - "unnecassarily", "unnecessarily", - "unneccesarily", "unnecessarily", - "unnecessairly", "unnecessarily", - "unnecessarely", "unnecessarily", - "unnecessarity", "unnecessarily", - "unnecesserily", "unnecessarily", - "unnecissarily", "unnecessarily", - "unnessecarily", "unnecessarily", - "unoperational", "nonoperational", - "unprecendeted", "unprecedented", - "unprecidented", "unprecedented", - "unpredecented", "unprecedented", - "unpredicatble", "unpredictable", - "unpredictible", "unpredictable", - "unpresedented", "unprecedented", - "unpridictable", "unpredictable", - "unprofessinal", "unprofessional", - "unrealistisch", "unrealistic", - "unreasonabley", "unreasonably", - "unreasonablly", "unreasonably", - "unrestrictred", "unrestricted", - "unsistainable", "unsustainable", - "unsubscribade", "unsubscribed", - "unsubscribbed", "unsubscribe", - "unsuccesfully", "unsuccessfully", - "unsuccessfull", "unsuccessful", - "unsucessfully", "unsuccessfully", - "unsuprisingly", "unsurprisingly", - "unsuprizingly", "unsurprisingly", - "unsustainible", "unsustainable", - "unsustianable", "unsustainable", - "vertification", "certification", - "villification", "vilification", - "virualization", "visualization", - "visualizacion", "visualization", - "visualizaiton", "visualization", - "visualizating", "visualization", - "vitualization", "visualization", - "vizualization", "visualization", - "volounteering", "volunteering", - "vulberability", "vulnerability", - "vulernability", "vulnerability", - "vulnarability", "vulnerability", - "vulnerabiltiy", "vulnerability", - "vulnurability", "vulnerability", - "vunlerability", "vulnerability", - "vurnerability", "vulnerability", - "weightlfiting", "weightlifting", - "weightlifitng", "weightlifting", - "weightligting", "weightlifting", - "weigthlifting", "weightlifting", - "wholeheartdly", "wholeheartedly", - "wholeheartedy", "wholeheartedly", - "wholeheartely", "wholeheartedly", - "wieghtlifting", "weightlifting", - "abberivation", "abbreviation", - "abberviation", "abbreviation", - "abbreivation", "abbreviation", - "abbreveation", "abbreviation", - "abbrievation", "abbreviation", - "abortificant", "abortifacient", - "abrreviation", "abbreviation", - "academcially", "academically", - "accedentally", "accidentally", - "accelarating", "accelerating", - "accelaration", "acceleration", - "acceleartion", "acceleration", - "acceleraptor", "accelerator", - "accelorating", "accelerating", - "accessibilty", "accessibility", - "accidentlaly", "accidently", - "accomadating", "accommodating", - "accomadation", "accommodation", - "accomodating", "accommodating", - "accomodation", "accommodation", - "accrediation", "accreditation", - "acculumation", "accumulation", - "accumalation", "accumulation", - "accumilation", "accumulation", - "acedemically", "academically", - "acheivements", "achievements", - "acknolwedged", "acknowledged", - "acknolwedges", "acknowledges", - "acknoweldged", "acknowledged", - "acknoweldges", "acknowledges", - "acknowiedged", "acknowledged", - "acknowladges", "acknowledges", - "acknowldeged", "acknowledged", - "acknowledget", "acknowledgement", - "acknowleding", "acknowledging", - "acknowlegded", "acknowledged", - "acknowlegdes", "acknowledges", - "ackumulation", "accumulation", - "acquaintaces", "acquaintances", - "acquaintence", "acquaintance", - "acquantaince", "acquaintance", - "acquantiance", "acquaintances", - "acquiantance", "acquaintances", - "acquiantence", "acquaintance", - "adknowledged", "acknowledged", - "adknowledges", "acknowledges", - "administored", "administer", - "adminsitered", "administered", - "adminstrator", "administrator", - "advantagious", "advantageous", - "advantegeous", "advantageous", - "adventageous", "advantageous", - "adventureous", "adventures", - "adventureres", "adventures", - "adventurious", "adventurous", - "adventuruous", "adventurous", - "advertisiers", "advertisers", - "advertisment", "advertisement", - "advertisters", "advertisers", - "advertisting", "advertising", - "aestheticaly", "aesthetically", - "aestheticlly", "aesthetically", - "afficianados", "aficionados", - "afficionados", "aficionados", - "afghanisthan", "afghanistan", - "afterhtought", "afterthought", - "afterthougth", "afterthought", - "aggressivley", "aggressively", - "agircultural", "agricultural", - "agknowledged", "acknowledged", - "agnosticisim", "agnosticism", - "agracultural", "agricultural", - "agriculteral", "agricultural", - "agriculteurs", "agriculture", - "agricultrual", "agricultural", - "agriculutral", "agricultural", - "agrigultural", "agricultural", - "agrocultural", "agricultural", - "allegiancies", "allegiance", - "alterantives", "alternatives", - "alternatevly", "alternately", - "alternatiely", "alternately", - "alternatieve", "alternative", - "alternativly", "alternatively", - "alternativos", "alternatives", - "alternatvely", "alternately", - "alternitives", "alternatives", - "altruistisch", "altruistic", - "amendmenters", "amendments", - "amohetamines", "amphetamines", - "ampehtamines", "amphetamines", - "ampethamines", "amphetamines", - "amphatamines", "amphetamines", - "amphedamines", "amphetamines", - "amphetamenes", "amphetamines", - "amphetemines", "amphetamines", - "amphetimines", "amphetamines", - "amphetmaines", "amphetamines", - "anecdotallly", "anecdotally", - "annhiliation", "annihilation", - "annihalition", "annihilation", - "annihilatron", "annihilation", - "annihliation", "annihilation", - "annilihation", "annihilation", - "anniversairy", "anniversary", - "anniversarry", "anniversary", - "anniversiary", "anniversary", - "annoucenment", "announcements", - "annoucnement", "announcement", - "announcemnet", "announcements", - "announcemnts", "announcements", - "anphetamines", "amphetamines", - "ansalisation", "nasalisation", - "ansalization", "nasalization", - "antaganistic", "antagonistic", - "antagonisitc", "antagonistic", - "antagonostic", "antagonist", - "antibioticos", "antibiotics", - "anticiaption", "anticipation", - "anticipacion", "anticipation", - "antisipation", "anticipation", - "antogonistic", "antagonistic", - "antrhopology", "anthropology", - "antrophology", "anthropology", - "apllications", "applications", - "apocalypitic", "apocalyptic", - "apologistics", "apologists", - "apologizeing", "apologizing", - "apostrophied", "apostrophe", - "apostrophies", "apostrophe", - "apperciation", "appreciation", - "applicaitons", "applications", - "appoitnments", "appointments", - "apporachable", "approachable", - "appraochable", "approachable", - "appreceating", "appreciating", - "appreciaters", "appreciates", - "appreciatied", "appreciative", - "appreicating", "appreciating", - "appreication", "appreciation", - "appretiation", "appreciation", - "appropriatin", "appropriation", - "appropriatly", "appropriately", - "appropriaton", "appropriation", - "approprietly", "appropriately", - "approstraphe", "apostrophe", - "approxiately", "approximately", - "approximatly", "approximately", - "approximetly", "approximately", - "aproximately", "approximately", - "aqcuaintance", "acquaintance", - "aqquaintance", "acquaintance", - "arbitrariliy", "arbitrarily", - "arbitrarilly", "arbitrarily", - "archetecture", "architecture", - "architechure", "architecture", - "architectual", "architectural", - "architectuur", "architecture", - "architecutre", "architecture", - "architexture", "architecture", - "arcitechture", "architecture", - "areodynamics", "aerodynamics", - "argicultural", "agricultural", - "argumentatie", "argumentative", - "arithmetisch", "arithmetic", - "armageddomon", "armageddon", - "arrengements", "arrangements", - "articifially", "artificially", - "artificailly", "artificially", - "artificiella", "artificial", - "artificually", "artificially", - "artifiically", "artificially", - "assasination", "assassination", - "assassinatin", "assassination", - "assissinated", "assassinated", - "associationg", "associating", - "assoications", "associations", - "assosiations", "associations", - "assosication", "assassination", - "assotiations", "associations", - "assymetrical", "asymmetrical", - "asthetically", "aesthetically", - "astranomical", "astronomical", - "astromonical", "astronomical", - "astronautlis", "astronauts", - "astronimical", "astronomical", - "astronomicly", "astronomical", - "athleticisim", "athleticism", - "atmosphereic", "atmospheric", - "audiobookmrs", "audiobooks", - "auhtenticate", "authenticate", - "australianas", "australians", - "australianos", "australians", - "authentisity", "authenticity", - "authorithies", "authorities", - "authoritiers", "authorities", - "authorizaton", "authorization", - "authrorities", "authorities", - "autochtonous", "autochthonous", - "autocorrrect", "autocorrect", - "automobilies", "automobile", - "automodertor", "automoderator", - "automonomous", "autonomous", - "auxilliaries", "auxiliaries", - "avaliability", "availability", - "avialability", "availability", - "awknowledged", "acknowledged", - "awknowledges", "acknowledges", - "awkwardsness", "awkwardness", - "babysittting", "babysitting", - "beaurocratic", "bureaucratic", - "beautifullly", "beautifully", - "belligerante", "belligerent", - "beuraucratic", "bureaucratic", - "billionairre", "billionaire", - "billionaries", "billionaires", - "billioniares", "billionaires", - "bioligically", "biologically", - "birmingharam", "birmingham", - "bittersweeet", "bittersweet", - "blamethrower", "flamethrower", - "blueberrries", "blueberries", - "blueprintcss", "blueprints", - "boardcasting", "broadcasting", - "bobybuilding", "bodybuilding", - "bodybuidling", "bodybuilding", - "bodybuilidng", "bodybuilding", - "bodybuliding", "bodybuilding", - "bodydbuilder", "bodybuilder", - "bombardement", "bombardment", - "boradcasting", "broadcasting", - "botivational", "motivational", - "brainwahsing", "brainwashing", - "brakethrough", "breakthrough", - "braodcasting", "broadcasting", - "brazilianese", "brazilians", - "brazilianess", "brazilians", - "breakthorugh", "breakthrough", - "breaktrhough", "breakthrough", - "breastfeedig", "breastfeeding", - "breastfeeing", "breastfeeding", - "breasttaking", "breathtaking", - "brianwashing", "brainwashing", - "broadcastors", "broadcasts", - "brotherhoood", "brotherhood", - "buearucratic", "bureaucratic", - "bueraucratic", "bureaucratic", - "bulletprooof", "bulletproof", - "bureaocratic", "bureaucratic", - "bureaucracie", "bureaucratic", - "bureaucracts", "bureaucrats", - "bureaucrates", "bureaucrats", - "bureuacratic", "bureaucratic", - "businessemen", "businessmen", - "cababilities", "capabilities", - "caclulations", "calculations", - "calcluations", "calculation", - "calcualtions", "calculations", - "calculationg", "calculating", - "calculatoare", "calculator", - "californains", "californian", - "californican", "californian", - "californinan", "californian", - "caluclations", "calculations", - "camouflagued", "camouflage", - "canceltation", "cancellation", - "cannibalisim", "cannibalism", - "canniballism", "cannibalism", - "cannotations", "connotations", - "capitalistes", "capitalists", - "caracterized", "characterized", - "carbohydrats", "carbohydrates", - "carbohyrdate", "carbohydrates", - "caricaturale", "caricature", - "caricaturile", "caricature", - "caricaturise", "caricature", - "caricaturize", "caricature", - "catastraphic", "catastrophic", - "catastrohpic", "catastrophic", - "catastrophie", "catastrophe", - "categoricaly", "categorically", - "categoriezed", "categorized", - "catergorized", "categorized", - "caterpillers", "caterpillars", - "catestrophic", "catastrophic", - "catholicisim", "catholicism", - "catholocisim", "catholicism", - "catistrophic", "catastrophic", - "catostraphic", "catastrophic", - "catostrophic", "catastrophic", - "catterpilars", "caterpillars", - "catterpillar", "caterpillar", - "celebratings", "celebrations", - "celebritites", "celebrities", - "celibrations", "celebrations", - "cententenial", "centennial", - "cercumstance", "circumstance", - "cerification", "verification", - "certificiate", "certificate", - "challengeing", "challenging", - "chamiponship", "championships", - "champinoship", "championships", - "championchip", "championship", - "championsihp", "championships", - "championsips", "championships", - "champiosnhip", "championships", - "champoinship", "championship", - "chanpionship", "championship", - "charactarize", "characterize", - "charaterized", "characterized", - "charismastic", "charismatic", - "cheerlearder", "cheerleader", - "cheerleeders", "cheerleaders", - "cheeseberger", "cheeseburger", - "cheeseborger", "cheeseburger", - "cheesebruger", "cheeseburgers", - "cheeseburges", "cheeseburgers", - "cheeseburgie", "cheeseburger", - "cheezeburger", "cheeseburger", - "chirstianity", "christianity", - "chocolateers", "chocolates", - "chrisitanity", "christianity", - "christainity", "christianity", - "christiantiy", "christianity", - "christinaity", "christianity", - "chromosomers", "chromosomes", - "chronologial", "chronological", - "chrsitianity", "christianity", - "cilivization", "civilizations", - "circulatiing", "circulating", - "circulationg", "circulating", - "circumcisied", "circumcised", - "circumcition", "circumcision", - "circumsicion", "circumcision", - "circumsision", "circumcision", - "circumsition", "circumcision", - "circumsizion", "circumcision", - "circumstanes", "circumstance", - "circumstanta", "circumstantial", - "circumstante", "circumstance", - "circuncision", "circumcision", - "circunstance", "circumstance", - "civiliaztion", "civilizations", - "civilizacion", "civilization", - "civilizaiton", "civilization", - "civilizatoin", "civilizations", - "civilizatons", "civilizations", - "civilziation", "civilizations", - "civizilation", "civilizations", - "claculations", "calculations", - "classificato", "classification", - "cockroachers", "cockroaches", - "coefficienct", "coefficient", - "coencidental", "coincidental", - "coincedental", "coincidental", - "coincidencal", "coincidental", - "coincidentia", "coincidental", - "coindidental", "coincidental", - "coinsidental", "coincidental", - "cointerpoint", "counterpoint", - "collaberator", "collaborate", - "collaboratie", "collaborate", - "collaboratin", "collaboration", - "collectivily", "collectively", - "collectivley", "collectively", - "colonialisim", "colonialism", - "colonizacion", "colonization", - "colonizators", "colonizers", - "colonozation", "colonization", - "combanations", "combinations", - "combonations", "combinations", - "comdemnation", "condemnation", - "comemmorates", "commemorates", - "comemoretion", "commemoration", - "comeptitions", "competitions", - "comfirmation", "confirmation", - "comfortabley", "comfortably", - "comfortablly", "comfortably", - "comissioning", "commissioning", - "commandemnts", "commandment", - "commandmants", "commandments", - "commandmends", "commandments", - "commemmorate", "commemorate", - "commendments", "commandments", - "commenteries", "commenters", - "commenwealth", "commonwealth", - "commerciales", "commercials", - "commerically", "commercially", - "comminicated", "communicated", - "commishioned", "commissioned", - "commishioner", "commissioner", - "commisioning", "commissioning", - "commissionar", "commissioner", - "commissionor", "commissioner", - "committments", "commitments", - "commoditites", "commodities", - "commomwealth", "commonwealth", - "commonhealth", "commonwealth", - "commonweatlh", "commonwealth", - "commonwelath", "commonwealth", - "communciated", "communicated", - "communiation", "communication", - "communicatie", "communicate", - "communicatin", "communications", - "communicaton", "communication", - "communitites", "communities", - "compansating", "compensating", - "compansation", "compensation", - "comparativly", "comparatively", - "comparisions", "comparisons", - "comparission", "comparisons", - "comparissons", "comparisons", - "compatablity", "compatibility", - "compatibiliy", "compatibility", - "compatibilty", "compatibility", - "compatiblity", "compatibility", - "compensacion", "compensation", - "compensative", "compensate", - "compesitions", "compositions", - "competetions", "competitions", - "competitevly", "competitively", - "competitiion", "competition", - "competitiors", "competitors", - "competitivly", "competitively", - "competitivos", "competitions", - "compinsating", "compensating", - "compinsation", "compensation", - "complainging", "complaining", - "completetion", "completion", - "compliations", "compilation", - "complicacion", "complication", - "complicatied", "complicate", - "complicaties", "complicate", - "complicatred", "complicate", - "complicatted", "complicate", - "complilation", "complication", - "complimation", "complication", - "complimenary", "complimentary", - "complimentje", "complimented", - "complimentry", "complimentary", - "complination", "complication", - "complitation", "complication", - "composistion", "compositions", - "compramising", "compromising", - "compremising", "compromising", - "compresssion", "compression", - "compromissen", "compromise", - "compromisses", "compromises", - "compromizing", "compromising", - "compromosing", "compromising", - "comptability", "compatibility", - "compulsivley", "compulsive", - "compulsorary", "compulsory", - "computarized", "computerized", - "comrpomising", "compromising", - "comtaminated", "contaminated", - "comtemporary", "contemporary", - "conbinations", "combinations", - "concatinated", "contaminated", - "conceivabley", "conceivably", - "concellation", "cancellation", - "concentraded", "concentrated", - "concentraing", "concentrating", - "concentraion", "concentration", - "concentrarte", "concentrate", - "concentratie", "concentrate", - "concentratin", "concentration", - "concequences", "consequences", - "concequently", "consequently", - "concersation", "conservation", - "concervation", "conservation", - "concervatism", "conservatism", - "concervative", "conservative", - "conciderable", "considerable", - "conciderably", "considerably", - "conciousness", "consciousness", - "conclusiones", "conclusions", - "conclusivley", "conclusive", - "condamnation", "condemnation", - "condemantion", "condemnation", - "condenmation", "condemnation", - "condescening", "condescending", - "condescenion", "condescension", - "conditionnal", "conditional", - "conditionned", "conditioned", - "conditionner", "conditioner", - "condmenation", "condemnation", - "condolencies", "condolences", - "condolensces", "condolences", - "condomnation", "condemnation", - "condradicted", "contradicted", - "conenctivity", "connectivity", - "confedential", "confidential", - "confederancy", "confederacy", - "confederatie", "confederate", - "confermation", "confirmation", - "confersation", "conservation", - "confessionis", "confessions", - "confidencial", "confidential", - "confidentail", "confidential", - "confidentaly", "confidently", - "confidentely", "confidently", - "confidentiel", "confidential", - "configuratin", "configurations", - "configuraton", "configuration", - "confirmacion", "confirmation", - "confrimation", "confirmation", - "confrontaion", "confrontation", - "congegration", "congregation", - "congergation", "congregation", - "congradulate", "congratulate", - "congragation", "congregation", - "congragulate", "congratulate", - "congratualte", "congratulate", - "congregacion", "congregation", - "congresional", "congressional", - "congresssman", "congressman", - "congresssmen", "congressmen", - "congretation", "congregation", - "congrigation", "congregation", - "conicidental", "coincidental", - "connatations", "connotations", - "connecticuit", "connecticut", - "connectivety", "connectivity", - "connetations", "connotations", - "connitations", "connotations", - "connonations", "connotations", - "conolization", "colonization", - "conpensating", "compensating", - "conpensation", "compensation", - "conpetitions", "competitions", - "conplimented", "complimented", - "conpromising", "compromising", - "consciouness", "consciousness", - "consciouslly", "consciously", - "consectutive", "consecutive", - "consecuences", "consequences", - "consecuentes", "consequences", - "consecuently", "consequently", - "consensuarlo", "consensual", - "consentrated", "concentrated", - "consentrates", "concentrates", - "conseqeunces", "consequence", - "consequenses", "consequences", - "consequental", "consequently", - "consequneces", "consequence", - "conservacion", "conservation", - "conservaties", "conservatives", - "conservativo", "conservation", - "conservativs", "conservatism", - "conservitave", "conservatives", - "conservitism", "conservatism", - "conservitive", "conservative", - "considerarle", "considerable", - "considerarte", "considerate", - "consideraste", "considerate", - "consideratie", "considerate", - "consideratin", "considerations", - "consideribly", "considerably", - "consilidated", "consolidated", - "consipracies", "conspiracies", - "consiquently", "consequently", - "consistantly", "consistently", - "consistencey", "consistency", - "consistentcy", "consistently", - "consitutents", "constituents", - "consoldiated", "consolidated", - "consolitated", "consolidate", - "consolodated", "consolidated", - "consoltation", "consultation", - "conspericies", "conspiracies", - "conspiracize", "conspiracies", - "conspiriator", "conspirator", - "conspiricies", "conspiracies", - "conspriacies", "conspiracies", - "consqeuences", "consequence", - "constinually", "continually", - "constitition", "constitution", - "constituante", "constituents", - "constituants", "constituents", - "constituates", "constitutes", - "constitucion", "constitution", - "constituient", "constitute", - "constituinte", "constituents", - "constitutiei", "constitute", - "constitutues", "constitute", - "constiutents", "constituents", - "constracting", "constructing", - "constraction", "construction", - "constrainsts", "constraints", - "construccion", "construction", - "construciton", "construction", - "constructeds", "constructs", - "constructief", "constructive", - "constructies", "constructs", - "constructifs", "constructs", - "constructiin", "constructing", - "constructivo", "construction", - "consturction", "construction", - "consultating", "consultation", - "consumerisim", "consumerism", - "contaiminate", "contaminate", - "contaminatie", "contaminated", - "contaminaton", "contamination", - "contaminents", "containment", - "contamporary", "contemporary", - "contanimated", "contaminated", - "contaniments", "containment", - "contemperary", "contemporary", - "contemporany", "contemporary", - "continentais", "continents", - "continential", "continental", - "contineously", "continuously", - "continiously", "continuously", - "continuacion", "continuation", - "continuating", "continuation", - "continuativo", "continuation", - "continuining", "continuing", - "contirbution", "contribution", - "contirbutors", "contributors", - "contiunation", "continuation", - "contrabution", "contribution", - "contraceptie", "contraceptives", - "contradicing", "contradicting", - "contradicion", "contradiction", - "contradicory", "contradictory", - "contradictie", "contradicted", - "contradictin", "contradiction", - "contradicton", "contradiction", - "contraticted", "contradicted", - "contribucion", "contribution", - "contribuitor", "contributor", - "contributers", "contributors", - "contributivo", "contribution", - "contributons", "contributors", - "contrictions", "contractions", - "contridicted", "contradicted", - "controlleras", "controllers", - "controlllers", "controllers", - "controverial", "controversial", - "controveries", "controversies", - "controversal", "controversial", - "controversey", "controversy", - "contructions", "contractions", - "conveinently", "conveniently", - "convencional", "conventional", - "conveniantly", "conveniently", - "converastion", "conversations", - "converdation", "conservation", - "conversacion", "conversation", - "conversaiton", "conversations", - "conversatino", "conservation", - "conversatism", "conservatism", - "conversatoin", "conversations", - "conversiones", "conversions", - "converstaion", "conversation", - "convertables", "convertibles", - "convertiable", "convertible", - "convertibile", "convertible", - "convervation", "conservation", - "convervatism", "conservatism", - "converzation", "conservation", - "convesration", "conservation", - "convienently", "conveniently", - "convorsation", "conversation", - "convseration", "conservation", - "coordenation", "coordination", - "coordiantion", "coordination", - "coordinacion", "coordination", - "coordinaters", "coordinates", - "coordinatior", "coordinator", - "coordinatore", "coordinate", - "coordonation", "coordination", - "cooridnation", "coordination", - "coorperation", "cooperation", - "coprorations", "corporations", - "corinthianos", "corinthians", - "corinthinans", "corinthians", - "corparations", "corporations", - "corperations", "corporations", - "corporativos", "corporations", - "corproations", "corporations", - "corrdination", "coordination", - "correponding", "corresponding", - "correposding", "corresponding", - "correspondes", "corresponds", - "correspondig", "corresponding", - "corresponing", "corresponding", - "corrisponded", "corresponded", - "costomizable", "customizable", - "costumizable", "customizable", - "councidental", "coincidental", - "counsellling", "counselling", - "counterfiets", "counterfeit", - "counterfited", "counterfeit", - "counterracts", "counterparts", - "countertraps", "counterparts", - "countrywides", "countryside", - "coutnerparts", "counterparts", - "coutnerpoint", "counterpoint", - "covnersation", "conservation", - "crankenstein", "frankenstein", - "creationisim", "creationism", - "creationnism", "creationism", - "creationnist", "creationist", - "creationsism", "creationism", - "creationsist", "creationist", - "creationsits", "creationists", - "credibillity", "credibility", - "crigneworthy", "cringeworthy", - "cringewhorty", "cringeworthy", - "cringeworhty", "cringeworthy", - "cringewrothy", "cringeworthy", - "cringyworthy", "cringeworthy", - "criticallity", "critically", - "criticiszing", "criticising", - "croporations", "corporations", - "crucifiction", "crucifixion", - "cuestionable", "questionable", - "culiminating", "culminating", - "cumulatative", "cumulative", - "cuntaminated", "contaminated", - "curcumcision", "circumcision", - "curcumstance", "circumstance", - "custamizable", "customizable", - "custimizable", "customizable", - "customizaton", "customization", - "customizeble", "customizable", - "customizible", "customizable", - "custumizable", "customizable", - "cuztomizable", "customizable", - "dabilitating", "debilitating", - "dangerousely", "dangerously", - "decensitized", "desensitized", - "deceptionist", "receptionist", - "declareation", "declaration", - "decomposeion", "decomposition", - "decomposited", "decomposed", - "decscription", "description", - "deffensively", "defensively", - "deficiancies", "deficiencies", - "deficiencias", "deficiencies", - "deficiensies", "deficiencies", - "definatively", "definitively", - "defininitely", "definitively", - "definitavely", "definitively", - "definitevely", "definitively", - "definitifely", "definitively", - "definitinely", "definitively", - "definititely", "definitively", - "definitivley", "definitively", - "deinitalized", "deinitialized", - "deinitalizes", "deinitializes", - "delibaretely", "deliberately", - "deliberatley", "deliberately", - "delibirately", "deliberately", - "delibitating", "debilitating", - "deliverately", "deliberately", - "delusionally", "delusively", - "demesticated", "domesticated", - "democracries", "democracies", - "democraphics", "demographics", - "democratisch", "democratic", - "demograhpics", "demographics", - "demogrpahics", "demographics", - "demonination", "denominations", - "demonstarted", "demonstrated", - "demonstartes", "demonstrates", - "demonstrabil", "demonstrably", - "demonstraion", "demonstration", - "demonstraits", "demonstrates", - "demonstrants", "demonstrates", - "demonstratie", "demonstrate", - "demonstratin", "demonstration", - "demonstrerat", "demonstrate", - "demosntrably", "demonstrably", - "demosntrated", "demonstrated", - "demosntrates", "demonstrates", - "demostration", "demonstration", - "denomenation", "denomination", - "denominacion", "denomination", - "denominatior", "denominator", - "denominatons", "denominations", - "denomonation", "denomination", - "deomgraphics", "demographics", - "depencencies", "dependencies", - "dependancies", "dependencies", - "dependencias", "dependencies", - "dependenices", "dependencies", - "dependensies", "dependencies", - "deperecation", "deprecation", - "deplacements", "replacements", - "deregualtion", "deregulation", - "deregulaiton", "deregulation", - "derugulation", "deregulation", - "describtions", "descriptions", - "descriminant", "discriminant", - "descriptivos", "descriptions", - "desctiptions", "descriptions", - "desctruction", "destruction", - "desencitized", "desensitized", - "desensatized", "desensitized", - "desensitived", "desensitized", - "desentisized", "desensitized", - "desentitized", "desensitized", - "desentizised", "desensitized", - "desginations", "destinations", - "desgustingly", "disgustingly", - "desitnations", "destinations", - "despectively", "respectively", - "despensaries", "dispensaries", - "desperatedly", "desperately", - "desperatelly", "desperately", - "desqualified", "disqualified", - "desregarding", "disregarding", - "dessertation", "dissertation", - "destiantions", "destinations", - "destinctions", "destinations", - "destractions", "distractions", - "destributors", "distributors", - "determinanti", "determination", - "determinaton", "determination", - "determinging", "determining", - "determinisic", "deterministic", - "determinisim", "determinism", - "deterministc", "deterministic", - "determinitic", "deterministic", - "detrimential", "detrimental", - "developement", "development", - "developmenet", "developments", - "develpoments", "developments", - "devolopement", "development", - "devolopments", "developments", - "diasspointed", "dissapointed", - "dicitonaries", "dictionaries", - "dictadorship", "dictatorship", - "dictarorship", "dictatorship", - "dictatorshop", "dictatorship", - "dictionaires", "dictionaries", - "didsapointed", "dissapointed", - "differencial", "differential", - "differencies", "differences", - "differentate", "differentiate", - "differnetial", "differential", - "difficulites", "difficulties", - "difficutlies", "difficulties", - "diffuculties", "difficulties", - "dimensionals", "dimensions", - "dimensionnal", "dimensional", - "dimensionsal", "dimensional", - "diplomatisch", "diplomatic", - "directionnal", "directional", - "disaapointed", "dissapointed", - "disadvandage", "disadvantaged", - "disadvantged", "disadvantaged", - "disadvantges", "disadvantages", - "disadvatange", "disadvantage", - "disadventage", "disadvantage", - "disagremeent", "disagreements", - "disapointing", "disappointing", - "disappearnce", "disappearance", - "disappearred", "disappeared", - "disapperaing", "disappearing", - "disaspointed", "dissapointed", - "disastisfied", "dissatisfied", - "disatissfied", "dissatisfied", - "disatvantage", "disadvantage", - "discertation", "dissertation", - "disciniplary", "disciplinary", - "disciplanary", "disciplinary", - "disciplenary", "disciplinary", - "disciplinare", "discipline", - "disciplinera", "disciplinary", - "disciplinery", "disciplinary", - "disclipinary", "disciplinary", - "disconencted", "disconnected", - "disconnectes", "disconnects", - "disconnectme", "disconnected", - "disconnectus", "disconnects", - "discontiuned", "discontinued", - "discountined", "discontinued", - "discreditied", "discredited", - "discreditted", "discredited", - "discriminare", "discriminate", - "discriminted", "discriminated", - "disctinction", "distinction", - "disctinctive", "distinctive", - "disctintions", "distinctions", - "discualified", "disqualified", - "discustingly", "disgustingly", - "disemination", "dissemination", - "disenchanged", "disenchanted", - "disengenuous", "disingenuous", - "disenginuous", "disingenuous", - "disensitized", "desensitized", - "disgareement", "disagreements", - "disgruntaled", "disgruntled", - "disgrunteled", "disgruntled", - "disguntingly", "disgustingly", - "disingeneous", "disingenuous", - "disingenious", "disingenuous", - "disinteresed", "disinterested", - "disintereted", "disinterested", - "dismantleing", "dismantling", - "disobediance", "disobedience", - "disobeidence", "disobedience", - "dispalcement", "displacement", - "dispapointed", "dissapointed", - "dispencaries", "dispensaries", - "dispensaires", "dispensaries", - "dispensarios", "dispensaries", - "dispensiries", "dispensaries", - "dispensories", "dispensaries", - "disqaulified", "disqualified", - "disqualifyed", "disqualified", - "disqustingly", "disgustingly", - "disrecpected", "disrespected", - "disrepsected", "disrespected", - "disresepcted", "disrespected", - "disrespecful", "disrespectful", - "disrespecing", "disrespecting", - "disrespectul", "disrespectful", - "disrespekted", "disrespected", - "disrtibution", "distributions", - "dissapearing", "disappearing", - "dissapionted", "dissapointed", - "dissapoimted", "dissapointed", - "dissapoitned", "dissapointed", - "dissaponited", "dissapointed", - "dissapoonted", "dissapointed", - "dissapounted", "dissapointed", - "dissappinted", "dissapointed", - "dissapponted", "dissapointed", - "dissastified", "dissatisfied", - "dissatisifed", "dissatisfied", - "dissatsified", "dissatisfied", - "dissepointed", "dissapointed", - "dissipointed", "dissapointed", - "dissobediant", "disobedient", - "dissobedient", "disobedient", - "dissopointed", "dissapointed", - "disspaointed", "dissapointed", - "dissppointed", "dissapointed", - "dissspointed", "dissapointed", - "distinations", "distinctions", - "distincitons", "distinctions", - "distingished", "distinguished", - "distingishes", "distinguishes", - "distinguised", "distinguished", - "distirbuting", "distributing", - "distirbution", "distribution", - "distrabution", "distribution", - "distribitors", "distributors", - "distribtuion", "distributions", - "distribucion", "distribution", - "distribuited", "distributed", - "distribuiton", "distributions", - "distribuitor", "distributor", - "distribusion", "distributions", - "distributino", "distributions", - "distributior", "distributor", - "distributons", "distributors", - "distributore", "distribute", - "distriubtion", "distributions", - "distrobution", "distribution", - "distrubances", "disturbance", - "distrubiting", "distributing", - "distrubition", "distribution", - "distrubitors", "distributors", - "distrubution", "distribution", - "distrubutors", "distributors", - "distructions", "distractions", - "distustingly", "disgustingly", - "ditactorship", "dictatorship", - "documenation", "documentation", - "documentaion", "documentation", - "documentaire", "documentaries", - "documentarse", "documentaries", - "documentarsi", "documentaries", - "domesitcated", "domesticated", - "domisticated", "domesticated", - "donesticated", "domesticated", - "donwloadable", "downloadable", - "dossapointed", "dissapointed", - "downlaodable", "downloadable", - "downloadbale", "downloadable", - "downloadeble", "downloadable", - "drankenstein", "frankenstein", - "dublications", "publications", - "dusgustingly", "disgustingly", - "dynamicallly", "dynamically", - "dyregulation", "deregulation", - "earthquackes", "earthquakes", - "earthquakers", "earthquakes", - "econimically", "economically", - "economisesti", "economists", - "educationnal", "educational", - "effectionate", "affectionate", - "effectivelly", "effectively", - "effectivenss", "effectiveness", - "efficienctly", "efficiency", - "effordlessly", "effortlessly", - "ejacualtions", "ejaculation", - "electorlytes", "electrolytes", - "electricrain", "electrician", - "electrictian", "electrician", - "electrobytes", "electrolytes", - "electrocytes", "electrolytes", - "electrolites", "electrolytes", - "electroltyes", "electrolytes", - "electronicas", "electronics", - "electronicos", "electronics", - "electroyltes", "electrolytes", - "elektrolytes", "electrolytes", - "eloctrolytes", "electrolytes", - "embarassment", "embarrassment", - "embarasssing", "embarassing", - "embarrasment", "embarrassment", - "embarressing", "embarrassing", - "embarrissing", "embarrassing", - "emberrassing", "embarrassing", - "emphetamines", "amphetamines", - "emprisonment", "imprisonment", - "encarcerated", "incarcerated", - "enceclopedia", "encyclopedia", - "enchancement", "enhancement", - "enchancments", "enchantments", - "enchantmants", "enchantments", - "enchentments", "enchantments", - "enciclopedia", "encyclopedia", - "enclycopedia", "encyclopedia", - "encorporated", "incorporated", - "encourageing", "encouraging", - "encyclapedia", "encyclopedia", - "encyclepedia", "encyclopedia", - "encyclopadia", "encyclopedia", - "encyclopeida", "encyclopedia", - "encyclopidia", "encyclopedia", - "encycolpedia", "encyclopedia", - "encyklopedia", "encyclopedia", - "encylcopedia", "encyclopedia", - "encyplopedia", "encyclopedia", - "endoresments", "endorsement", - "enemployment", "unemployment", - "enfringement", "infringement", - "enlightended", "enlightened", - "enlightenend", "enlightened", - "enlightented", "enlightened", - "enlightining", "enlightening", - "enligthening", "enlightening", - "entaglements", "entanglements", - "entartaining", "entertaining", - "enterpreneur", "entrepreneurs", - "enterprenuer", "entrepreneur", - "entertainted", "entertained", - "enthusiaists", "enthusiasts", - "enthusuastic", "enthusiastic", - "entoxication", "intoxication", - "entrepeneurs", "entrepreneurs", - "entreperneur", "entrepreneurs", - "entreprenaur", "entrepreneur", - "entrepreners", "entrepreneurs", - "entrepreneus", "entrepreneurs", - "entreprenour", "entrepreneur", - "entreprenure", "entrepreneurs", - "entreprenurs", "entrepreneurs", - "entrepreuner", "entrepreneurs", - "entretaining", "entertaining", - "enviormental", "environmental", - "enviornments", "environments", - "enviromental", "environmental", - "environemnts", "environments", - "environmentl", "environmentally", - "environmetal", "environmental", - "envrionments", "environments", - "establishmet", "establishments", - "evelutionary", "evolutionary", - "exagerrating", "exaggerating", - "exaggarating", "exaggerating", - "exaggaration", "exaggeration", - "exaggeratted", "exaggerated", - "exaggurating", "exaggerating", - "exagguration", "exaggeration", - "exceptionaly", "exceptionally", - "exceptionnal", "exceptional", - "exclusiveity", "exclusivity", - "exclusivelly", "exclusively", - "exclusivitiy", "exclusivity", - "excorciating", "excruciating", - "excrusiating", "excruciating", - "excurciating", "excruciating", - "exectuioners", "executioner", - "executioneer", "executioner", - "executionees", "executions", - "executioness", "executions", - "executionier", "executioner", - "executionner", "executioner", - "exeggerating", "exaggerating", - "exeggeration", "exaggeration", - "expeditonary", "expeditionary", - "expendatures", "expenditures", - "expendetures", "expenditures", - "expentitures", "expenditures", - "experamental", "experimental", - "expereincing", "experiencing", - "experemental", "experimental", - "experiancing", "experiencing", - "experiemntal", "experimental", - "experiemnted", "experimented", - "experimantal", "experimental", - "experimentan", "experimentation", - "experimentes", "experiments", - "experimentle", "experimented", - "experimentos", "experiments", - "experimentul", "experimental", - "expidentures", "expenditures", - "expierencing", "experiencing", - "expiremental", "experimental", - "expiremented", "experimented", - "explaination", "explanation", - "explenations", "explanations", - "expliotation", "exploitation", - "exploitaiton", "exploitation", - "exploitating", "exploitation", - "exploititive", "exploitative", - "explortation", "exploitation", - "explotiation", "exploitation", - "explotiative", "exploitative", - "expolitation", "exploitation", - "expolitative", "exploitative", - "exponentialy", "exponentially", - "expropiation", "expropriation", - "extensivelly", "extensively", - "extradiction", "extradition", - "extraordiary", "extraordinary", - "extraordinay", "extraordinary", - "extrapolerat", "extrapolate", - "extrapoloate", "extrapolate", - "extremistisk", "extremists", - "extrordinary", "extraordinary", - "extruciating", "excruciating", - "facilitatile", "facilitate", - "fahrenheight", "fahrenheit", - "falmethrower", "flamethrower", - "familiarlize", "familiarize", - "fanslaughter", "manslaughter", - "fantasticaly", "fantastically", - "fantasticlly", "fantastically", - "fashionalble", "fashionable", - "fermantation", "fermentation", - "fermentacion", "fermentation", - "fermentaiton", "fermentation", - "fermentating", "fermentation", - "fermintation", "fermentation", - "fictionaries", "dictionaries", - "figuartively", "figuratively", - "figuratevely", "figuratively", - "figurativley", "figuratively", - "figuretively", "figuratively", - "figuritively", "figuratively", - "fingerpoints", "fingerprints", - "firefigthers", "firefighters", - "flamethorwer", "flamethrower", - "flametrhower", "flamethrower", - "flanethrower", "flamethrower", - "flexibillity", "flexibility", - "flourishment", "flourishing", - "fluctiations", "fluctuations", - "flucutations", "fluctuations", - "fluxtuations", "fluctuations", - "forgivenness", "forgiveness", - "fortunatelly", "fortunately", - "framethrower", "flamethrower", - "frankenstain", "frankenstein", - "frankensteen", "frankenstein", - "frankenstine", "frankenstein", - "frankinstein", "frankenstein", - "frementation", "fermentation", - "friendzonded", "friendzoned", - "friendzonned", "friendzoned", - "friendzowned", "friendzoned", - "fringeworthy", "cringeworthy", - "fronkenstein", "frankenstein", - "fruitsations", "frustrations", - "frustrastion", "frustrations", - "fucntionally", "functionally", - "funcitonally", "functionally", - "functionable", "functional", - "functionaliy", "functionally", - "functionalty", "functionality", - "functionlity", "functionality", - "functionning", "functioning", - "fundamentais", "fundamentals", - "fundamentalt", "fundamentalist", - "fundamentaly", "fundamentally", - "fundemantals", "fundamentals", - "fundementals", "fundamentals", - "fundimentals", "fundamentals", - "furstrations", "frustrations", - "futuristisch", "futuristic", - "fwankenstein", "frankenstein", - "geneological", "genealogical", - "generacional", "generational", - "generalizare", "generalize", - "generalizate", "generalize", - "generelizing", "generalizing", - "geograhpical", "geographical", - "geographicly", "geographical", - "geographisch", "geographic", - "geogrpahical", "geographical", - "goegraphical", "geographical", - "governemntal", "governmental", - "governmently", "governmental", - "grammaticaal", "grammatical", - "grammaticaly", "grammatically", - "grandchilden", "grandchildren", - "grandchilder", "grandchildren", - "grandchilren", "grandchildren", - "grassrooters", "grassroots", - "gringeworthy", "cringeworthy", - "guantanameow", "guantanamo", - "guantanamero", "guantanamo", - "hallucinatin", "hallucinations", - "hallucinaton", "hallucination", - "handwritting", "handwriting", - "harrassments", "harassments", - "headqaurters", "headquarters", - "headquatered", "headquartered", - "healthercare", "healthcare", - "heavywieghts", "heavyweight", - "helicopteros", "helicopters", - "hererosexual", "heterosexual", - "heretosexual", "heterosexual", - "heteresexual", "heterosexual", - "hetreosexual", "heterosexual", - "highligthing", "highlighting", - "hipocritical", "hypocritical", - "hipothetical", "hypothetical", - "histarically", "historically", - "histerically", "historically", - "historicians", "historians", - "homogeneized", "homogenized", - "homogenenous", "homogeneous", - "homosexuales", "homosexuals", - "homosexualiy", "homosexuality", - "homosexualls", "homosexuals", - "homosexualty", "homosexuality", - "homosexuella", "homosexual", - "hopsitalized", "hospitalized", - "horisontally", "horizontally", - "horizantally", "horizontally", - "horiztonally", "horizontally", - "horozontally", "horizontally", - "hospitallity", "hospitality", - "hospitilized", "hospitalized", - "hospitolized", "hospitalized", - "hosptialized", "hospitalized", - "humanitarien", "humanitarian", - "humanitarion", "humanitarian", - "humanitatian", "humanitarian", - "humaniterian", "humanitarian", - "humantiarian", "humanitarian", - "huminatarian", "humanitarian", - "hurricanefps", "hurricanes", - "hyopthetical", "hypothetical", - "hypathetical", "hypothetical", - "hypertrophey", "hypertrophy", - "hypethetical", "hypothetical", - "hypocrticial", "hypocritical", - "hypocrytical", "hypocritical", - "hypotehtical", "hypothetical", - "hypotethical", "hypothetical", - "hypotherical", "hypothetical", - "hypotheticly", "hypothetical", - "hystarically", "hysterically", - "hystorically", "hysterically", - "idealistisch", "idealistic", - "identificato", "identification", - "identifierad", "identified", - "identifieras", "identifies", - "identifyable", "identifiable", - "ideologicaly", "ideologically", - "idiosyncracy", "idiosyncrasy", - "illegetimate", "illegitimate", - "illegitamate", "illegitimate", - "illegitamite", "illegitimate", - "illegitemate", "illegitimate", - "illegitimite", "illegitimate", - "illigetimate", "illegitimate", - "illigitemate", "illegitimate", - "illistration", "illustration", - "illsutration", "illustrations", - "illustartion", "illustration", - "illustraitor", "illustrator", - "illustraties", "illustrate", - "illustratior", "illustrator", - "imcompatible", "incompatible", - "imcompetence", "incompetence", - "imexperience", "inexperience", - "immediatelly", "immediately", - "immortallity", "immortality", - "imperialfist", "imperialist", - "imperialisim", "imperialism", - "imperialstic", "imperialist", - "implamenting", "implementing", - "implausibile", "implausible", - "implecations", "implications", - "implementase", "implements", - "implementasi", "implements", - "implementato", "implementation", - "implentation", "implementation", - "implimenting", "implementing", - "imporvements", "improvements", - "impossibilty", "impossibility", - "impossiblely", "impossibly", - "impossiblity", "impossibly", - "impovershied", "impoverished", - "impoversihed", "impoverished", - "imprefection", "imperfections", - "improsonment", "imprisonment", - "improviserad", "improvised", - "imrpovements", "improvements", - "imtimidating", "intimidating", - "imtimidation", "intimidation", - "inaccesibles", "inaccessible", - "inaccessable", "inaccessible", - "inaccessbile", "inaccessible", - "inaccurasies", "inaccuracies", - "inaccuraties", "inaccuracies", - "inaccuricies", "inaccuracies", - "inacuraccies", "inaccuracies", - "inadvertenly", "inadvertently", - "inappropiate", "inappropriate", - "inapproprate", "inappropriate", - "inappropriae", "inappropriately", - "inappropriet", "inappropriately", - "inattractive", "unattractive", - "inbelievable", "unbelievable", - "incarcelated", "incarcerated", - "incarcirated", "incarcerated", - "incarserated", "incarcerated", - "incedentally", "incidentally", - "incentiveise", "incentives", - "incestigator", "investigator", - "incomaptible", "incompatible", - "incomparible", "incompatible", - "incompatable", "incompatible", - "incompatibil", "incompatible", - "incompetance", "incompetence", - "incompetente", "incompetence", - "incompitable", "incompatible", - "incomptetent", "incompetent", - "inconcistent", "inconsistent", - "inconsistant", "inconsistent", - "inconsistecy", "inconsistency", - "inconsisteny", "inconsistency", - "inconveinent", "inconvenient", - "inconveniant", "inconvenient", - "inconveniece", "inconvenience", - "inconvenince", "inconvenience", - "inconvienent", "inconvenient", - "incorparated", "incorporated", - "incorperated", "incorporated", - "incorportaed", "incorporated", - "incorportate", "incorporate", - "incrediblely", "incredibly", - "incrementers", "increments", - "incremential", "incremental", - "indefinately", "indefinitely", - "indefineable", "undefinable", - "indefinetely", "indefinitely", - "indefinitive", "indefinite", - "indefinitley", "indefinitely", - "indefintiely", "indefinitely", - "indepedantly", "independently", - "indepencence", "independence", - "independance", "independence", - "independante", "independents", - "independenet", "independents", - "independenly", "independently", - "independense", "independents", - "independente", "independence", - "independetly", "independently", - "indepentents", "independents", - "indetifiable", "identifiable", - "indianaoplis", "indianapolis", - "indianopolis", "indianapolis", - "indicentally", "incidentally", - "indifferance", "indifference", - "indifferente", "indifference", - "indiffernece", "indifference", - "indimidating", "intimidating", - "indimidation", "intimidation", - "indipendence", "independence", - "indisputible", "indisputable", - "indisputibly", "indisputably", - "individuales", "individuals", - "individualty", "individuality", - "individuella", "individual", - "indiviudally", "individually", - "indivudually", "individually", - "indpendently", "independently", - "indroduction", "introduction", - "indroductory", "introductory", - "industriella", "industrial", - "industrijske", "industries", - "inefficienct", "inefficient", - "inefficienty", "inefficiently", - "inevitablely", "inevitably", - "inevitablity", "inevitably", - "inevititably", "inevitably", - "inexblicably", "inexplicably", - "inexpectedly", "unexpectedly", - "inexpereince", "inexperience", - "inexperiance", "inexperience", - "inexperieced", "inexperienced", - "inexperiened", "inexperienced", - "inexperiente", "inexperience", - "inexpierence", "inexperienced", - "inexplicabil", "inexplicably", - "inexplicibly", "inexplicably", - "infalability", "infallibility", - "infilitrated", "infiltrated", - "infiltraitor", "infiltrator", - "infiltratior", "infiltrator", - "infiltratred", "infiltrate", - "influenceing", "influencing", - "infogrpahics", "infographic", - "inforgivable", "unforgivable", - "infrantryman", "infantryman", - "infridgement", "infringement", - "infrignement", "infringement", - "ingestigator", "investigator", - "ingredientes", "ingredients", - "ingreediants", "ingredients", - "ininterested", "uninterested", - "initalizable", "initializable", - "inkompatible", "incompatible", - "inkompetence", "incompetence", - "inkonsistent", "inconsistent", - "inlightening", "enlightening", - "innersection", "intersection", - "innerstellar", "interstellar", - "inpenetrable", "impenetrable", - "inplementing", "implementing", - "inplications", "implications", - "inpoverished", "impoverished", - "inprisonment", "imprisonment", - "inproductive", "unproductive", - "inprovements", "improvements", - "inresponsive", "unresponsive", - "insentivised", "insensitive", - "insentivises", "insensitive", - "insignifiant", "insignificant", - "insignificat", "insignificant", - "insinuationg", "insinuating", - "instabillity", "instability", - "instalaltion", "installations", - "installatons", "installations", - "installatron", "installation", - "instantaneos", "instantaneous", - "instantaneus", "instantaneous", - "instantanous", "instantaneous", - "instinctivly", "instinctively", - "institutuion", "institution", - "instramental", "instrumental", - "instrcutions", "instruction", - "instrucitons", "instruction", - "instructiosn", "instruction", - "instructores", "instructors", - "instrumentos", "instruments", - "instrumentul", "instrumental", - "insturmental", "instrumental", - "instutitions", "institutions", - "insuccessful", "unsuccessful", - "insufficiant", "insufficient", - "insuffucient", "insufficient", - "insuspecting", "unsuspecting", - "intaxication", "intoxication", - "intelelctual", "intellectuals", - "intellectals", "intellectuals", - "intellectaul", "intellectuals", - "intellectuel", "intellectual", - "intellecutal", "intellectual", - "intelligance", "intelligence", - "intelligenly", "intelligently", - "intelligente", "intelligence", - "intelligenty", "intelligently", - "intelligient", "intelligent", - "intenational", "international", - "intentionnal", "intentional", - "intepretator", "interpretor", - "interatellar", "interstellar", - "interational", "international", - "intercection", "interception", - "intercepcion", "interception", - "interceptons", "interceptions", - "intereaction", "intersection", - "interections", "interactions", - "interersting", "interpreting", - "interesction", "intersection", - "interestigly", "interestingly", - "interestinly", "interestingly", - "interferance", "interference", - "interfereing", "interfering", - "interferisce", "interferes", - "interferisse", "interferes", - "interferring", "interfering", - "intergration", "integration", - "interlectual", "intellectual", - "intermediare", "intermediate", - "intermediete", "intermediate", - "intermettent", "intermittent", - "intermideate", "intermediate", - "intermidiate", "intermediate", - "internatinal", "international", - "internationl", "international", - "internations", "interactions", - "internediate", "intermediate", - "internelized", "internalized", - "internilized", "internalized", - "interperters", "interpreter", - "interperting", "interpreting", - "interprating", "interpreting", - "interpretare", "interpreter", - "interpretato", "interpretation", - "interpreteer", "interpreter", - "interpretier", "interpreter", - "interpretion", "interpreting", - "interpretter", "interpreter", - "interpriting", "interpreting", - "interraccial", "interracial", - "interractial", "interracial", - "interrogatin", "interrogation", - "interrumping", "interrupting", - "interrupteds", "interrupts", - "interruptors", "interrupts", - "interseccion", "intersection", - "interseciton", "intersections", - "interseption", "interception", - "intersetllar", "interstellar", - "interstallar", "interstellar", - "interstaller", "interstellar", - "intersteller", "interstellar", - "interstellor", "interstellar", - "intertaining", "entertaining", - "intertwinded", "intertwined", - "intertwinned", "intertwined", - "interveiwing", "interviewing", - "intervencion", "intervention", - "interveneing", "intervening", - "intervension", "intervention", - "interviening", "interviewing", - "intidimation", "intimidation", - "intillectual", "intellectual", - "intimidacion", "intimidation", - "intimidative", "intimidate", - "intimitading", "intimidating", - "intimitating", "intimidating", - "intimitation", "intimidation", - "intorduction", "introduction", - "intorductory", "introductory", - "intoxicacion", "intoxication", - "intoxination", "intoxication", - "intrepreting", "interpreting", - "intrinsicaly", "intrinsically", - "introdiction", "introduction", - "introduccion", "introduction", - "introduceras", "introduces", - "introduceres", "introduces", - "introduciton", "introduction", - "introductary", "introductory", - "introducting", "introduction", - "introductury", "introductory", - "introduktion", "introduction", - "introspectin", "introspection", - "intruduction", "introduction", - "intruductory", "introductory", - "intsrumental", "instrumental", - "intuitivelly", "intuitively", - "inturrupting", "interrupting", - "invervention", "intervention", - "investagated", "investigated", - "investagator", "investigator", - "investegated", "investigated", - "investegator", "investigator", - "investigaron", "investigator", - "investigater", "investigator", - "investigatie", "investigative", - "investigatin", "investigation", - "investigatio", "investigator", - "investigaton", "investigation", - "investingate", "investigate", - "investogator", "investigator", - "invicibility", "invisibility", - "invididually", "individually", - "invisibiltiy", "invisibility", - "invisilibity", "invisibility", - "invisivility", "invisibility", - "invlunerable", "invulnerable", - "involnerable", "invulnerable", - "involuntairy", "involuntary", - "involuntarly", "involuntary", - "invonvenient", "inconvenient", - "invulenrable", "invulnerable", - "invulernable", "invulnerable", - "invulnarable", "invulnerable", - "invulnerbale", "invulnerable", - "invulnurable", "invulnerable", - "invulverable", "invulnerable", - "invunlerable", "invulnerable", - "invurnerable", "invulnerable", - "irrationably", "irrationally", - "irrationatly", "irrationally", - "irrationella", "irrational", - "irreplacable", "irreplaceable", - "irresistable", "irresistible", - "irresistably", "irresistibly", - "irrespecitve", "irrespective", - "irresponsble", "irresponsible", - "irresponsibe", "irresponsible", - "irreverisble", "irreversible", - "irreversebly", "irreversible", - "irreversibel", "irreversible", - "irrevirsible", "irreversible", - "irrispective", "irrespective", - "irriversible", "irreversible", - "isdefinitely", "indefinitely", - "isntallation", "installation", - "isntrumental", "instrumental", - "jackonsville", "jacksonville", - "jounralistic", "journalistic", - "jouranlistic", "journalistic", - "journalisitc", "journalistic", - "journalistes", "journalists", - "judgementals", "judgements", - "juggernaunts", "juggernaut", - "juridisction", "jurisdictions", - "jurisdiccion", "jurisdiction", - "jurisdiciton", "jurisdiction", - "jurisdiktion", "jurisdiction", - "jurisfiction", "jurisdiction", - "jurisidction", "jurisdiction", - "juristiction", "jurisdiction", - "jursidiction", "jurisdiction", - "jusridiction", "jurisdiction", - "justificatin", "justifications", - "katastrophic", "catastrophic", - "kidnergarten", "kindergarten", - "kindergarden", "kindergarten", - "kingergarten", "kindergarten", - "kintergarten", "kindergarten", - "knolwedgable", "knowledgable", - "knoweldgable", "knowledgable", - "knowladgable", "knowledgable", - "knowldegable", "knowledgable", - "knowldgeable", "knowledgable", - "knowleagable", "knowledgable", - "knowledagble", "knowledgable", - "knowledeable", "knowledgable", - "knowledgabel", "knowledgable", - "knowledgeble", "knowledgeable", - "knowledgebly", "knowledgable", - "knowledgible", "knowledgable", - "knowlegdable", "knowledgable", - "knowlegeable", "knowledgeable", - "knwoledgable", "knowledgable", - "kolonization", "colonization", - "kombinations", "combinations", - "kommissioner", "commissioner", - "kompensation", "compensation", - "konfidential", "confidential", - "konfirmation", "confirmation", - "kongregation", "congregation", - "konservatism", "conservatism", - "konservative", "conservative", - "konsultation", "consultation", - "konversation", "conversation", - "koordination", "coordination", - "krankenstein", "frankenstein", - "leaglization", "legalization", - "legalizacion", "legalization", - "legalizaiton", "legalization", - "legendariske", "legendaries", - "legimitately", "legitimately", - "legislatiors", "legislators", - "legistration", "registration", - "legitamately", "legitimately", - "legitamitely", "legitimately", - "legitemately", "legitimately", - "legitimatley", "legitimately", - "legitimitely", "legitimately", - "liberatrians", "libertarians", - "libertarains", "libertarians", - "libertariens", "libertarians", - "libertaryans", "libertarians", - "libertatians", "libertarians", - "liberterians", "libertarians", - "libretarians", "libertarians", - "lighthearded", "lighthearted", - "linguisticas", "linguistics", - "linguisticos", "linguistics", - "linguistisch", "linguistics", - "litllefinger", "littlefinger", - "littelfinger", "littlefinger", - "litterfinger", "littlefinger", - "littiefinger", "littlefinger", - "littlefigner", "littlefinger", - "littlefinder", "littlefinger", - "littlepinger", "littlefinger", - "lnowledgable", "knowledgable", - "longitudonal", "longitudinal", - "madturbating", "masturbating", - "madturbation", "masturbation", - "magnificient", "magnificent", - "maintainance", "maintenance", - "maintainence", "maintenance", - "maintenaince", "maintenance", - "malfucntions", "malfunction", - "manafactured", "manufactured", - "manafacturer", "manufacturer", - "manafactures", "manufactures", - "manifactured", "manufactured", - "manifacturer", "manufacturer", - "manifactures", "manufactures", - "manifestaion", "manifestation", - "manifestanti", "manifestation", - "manipluating", "manipulating", - "manipluation", "manipulation", - "manipualting", "manipulating", - "manipualtion", "manipulation", - "manipualtive", "manipulative", - "manipulacion", "manipulation", - "manipulitive", "manipulative", - "maniuplating", "manipulating", - "maniuplation", "manipulation", - "maniuplative", "manipulative", - "manouverable", "maneuverable", - "mansalughter", "manslaughter", - "manslaugther", "manslaughter", - "mansluaghter", "manslaughter", - "manufactered", "manufactured", - "manufacterer", "manufacturer", - "manufacteres", "manufactures", - "manufacteurs", "manufactures", - "manufactored", "manufactured", - "manufactorer", "manufacturer", - "manufactores", "manufactures", - "manufactuers", "manufacturers", - "manufactuing", "manufacturing", - "manufacturas", "manufactures", - "manufacturor", "manufacturer", - "manufactuter", "manufacture", - "manufacuters", "manufactures", - "manufacutred", "manufacture", - "manufacutres", "manufactures", - "manufaturing", "manufacturing", - "manupilating", "manipulating", - "manupulating", "manipulating", - "manupulation", "manipulation", - "manupulative", "manipulative", - "marchmallows", "marshmallows", - "marganilized", "marginalized", - "margenalized", "marginalized", - "marginilized", "marginalized", - "marhsmallows", "marshmallows", - "marshamllows", "marshmallows", - "marshmallons", "marshmallows", - "masoginistic", "misogynistic", - "masogynistic", "misogynistic", - "massachusets", "massachusetts", - "massachustts", "massachusetts", - "masterbation", "masturbation", - "masterpeices", "masterpiece", - "mastrubating", "masturbating", - "mastrubation", "masturbation", - "mastubration", "masturbation", - "masturabting", "masturbating", - "masturabtion", "masturbation", - "masturbacion", "masturbation", - "masturbaited", "masturbated", - "masturbathon", "masturbation", - "masturbsting", "masturbating", - "masturdating", "masturbating", - "mastutbation", "masturbation", - "mataphorical", "metaphorical", - "mataphysical", "metaphysical", - "matchmakeing", "matchmaking", - "mathemathics", "mathematics", - "mathematican", "mathematician", - "mathematicas", "mathematics", - "mathematicks", "mathematics", - "mathematicly", "mathematical", - "mathematisch", "mathematics", - "mathemetical", "mathematical", - "matheticians", "mathematicians", - "mathimatical", "mathematical", - "mathmatician", "mathematician", - "mecahnically", "mechanically", - "mechancially", "mechanically", - "meditaciones", "medications", - "mediteranean", "mediterranean", - "mediterraean", "mediterranean", - "mediterranen", "mediterranean", - "memerization", "memorization", - "memorizacion", "memorization", - "memorozation", "memorization", - "metalurgical", "metallurgical", - "metaphisical", "metaphysical", - "metaphoricly", "metaphorical", - "metaphsyical", "metaphysical", - "metaphyiscal", "metaphysical", - "metaphyscial", "metaphysical", - "metaphysisch", "metaphysics", - "metephorical", "metaphorical", - "metephysical", "metaphysical", - "meterologist", "meteorologist", - "meterosexual", "heterosexual", - "methaporical", "metaphorical", - "methematical", "mathematical", - "metiphorical", "metaphorical", - "metophorical", "metaphorical", - "metorpolitan", "metropolitan", - "metrololitan", "metropolitan", - "metropilitan", "metropolitan", - "metroploitan", "metropolitan", - "metropolians", "metropolis", - "metropoliten", "metropolitan", - "metropolitin", "metropolitan", - "metropoliton", "metropolitan", - "microcentres", "microcenter", - "microphonies", "microphones", - "microscophic", "microscopic", - "microscopice", "microscope", - "microscoptic", "microscopic", - "midfieldiers", "midfielders", - "millenialism", "millennialism", - "millionairre", "millionaire", - "millionaries", "millionaires", - "millioniares", "millionaires", - "minimalisitc", "minimalist", - "minimalisity", "minimalist", - "mininterpret", "misinterpret", - "minipulating", "manipulating", - "minipulation", "manipulation", - "minipulative", "manipulative", - "miracilously", "miraculously", - "miracurously", "miraculous", - "miscarraiges", "miscarriage", - "miscelaneous", "miscellaneous", - "miscellanous", "miscellaneous", - "mischievious", "mischievous", - "misdameanors", "misdemeanors", - "misdeamenors", "misdemeanor", - "misfourtunes", "misfortunes", - "misgoynistic", "misogynistic", - "misinterpert", "misinterpret", - "misinterpred", "misinterpreted", - "misinterprit", "misinterpreting", - "misinterpted", "misinterpret", - "misintrepret", "misinterpret", - "misisonaries", "missionaries", - "misoganistic", "misogynistic", - "misogenistic", "misogynistic", - "misoginystic", "misogynistic", - "misognyistic", "misogynistic", - "misogonistic", "misogynistic", - "misogynisitc", "misogynistic", - "misogynsitic", "misogynistic", - "misogynystic", "misogynistic", - "missionaires", "missionaries", - "mississipppi", "mississippi", - "misspellling", "misspelling", - "misteriously", "mysteriously", - "misundersood", "misunderstood", - "misunderstod", "misunderstood", - "misygonistic", "misogynistic", - "modificacion", "modification", - "modificaiton", "modification", - "modificatons", "modifications", - "modifikation", "modification", - "modivational", "motivational", - "moisterizing", "moisturizing", - "moistorizing", "moisturizing", - "moisutrizing", "moisturizing", - "momentarilly", "momentarily", - "monolithisch", "monolithic", - "mositurizing", "moisturizing", - "motherbaords", "motherboards", - "motherborads", "motherboards", - "motivacional", "motivational", - "motovational", "motivational", - "mousturizing", "moisturizing", - "muktitasking", "multitasking", - "mulittasking", "multitasking", - "multinatinal", "multinational", - "multitaksing", "multitasking", - "munipulative", "manipulative", - "mutlitasking", "multitasking", - "mysoganistic", "misogynistic", - "mysogenistic", "misogynistic", - "mysogonistic", "misogynistic", - "mysterioulsy", "mysteriously", - "nacionalists", "nationalists", - "narcisisstic", "narcissistic", - "narcissictic", "narcissistic", - "narcissisism", "narcissism", - "narcissisist", "narcissist", - "narcissisitc", "narcissist", - "narcississts", "narcissist", - "narssicistic", "narcissistic", - "natioanlists", "nationalists", - "nationalisic", "nationalistic", - "nationalisim", "nationalism", - "nationalistc", "nationalistic", - "nationalites", "nationalist", - "nationalitic", "nationalistic", - "nationalitys", "nationalist", - "nationallity", "nationally", - "nationalsits", "nationalists", - "nationalties", "nationalist", - "nazionalists", "nationalists", - "neccessarily", "necessarily", - "neccessities", "necessities", - "necessarilly", "necessarily", - "necessitites", "necessities", - "neckbearders", "neckbeards", - "neckbeardese", "neckbeards", - "neckbeardest", "neckbeards", - "neckbeardies", "neckbeards", - "neckbeardius", "neckbeards", - "negociations", "negotiations", - "negoitations", "negotiations", - "negotiatians", "negotiations", - "negotiatiing", "negotiating", - "negotiationg", "negotiating", - "negotiatiors", "negotiations", - "neigbhorhood", "neighborhoods", - "neigbourhood", "neighbourhood", - "neighboorhod", "neighbourhood", - "neighborhing", "neighboring", - "neighborhods", "neighborhoods", - "neighbourghs", "neighbours", - "neighbourhod", "neighbourhood", - "neighbourood", "neighbourhood", - "neighbrohood", "neighborhoods", - "neighourhood", "neighborhood", - "neoroscience", "neuroscience", - "neruological", "neurological", - "neruoscience", "neuroscience", - "netropolitan", "metropolitan", - "neuorscience", "neuroscience", - "neuralogical", "neurological", - "neuroligical", "neurological", - "neurosceince", "neuroscience", - "neuroscienze", "neuroscience", - "neurosicence", "neuroscience", - "neverhteless", "nevertheless", - "nieghborhood", "neighborhood", - "norhtwestern", "northwestern", - "nothingsness", "nothingness", - "noticeablely", "noticeably", - "notificacion", "notification", - "notificaiton", "notification", - "notificatons", "notifications", - "nuerological", "neurological", - "nueroscience", "neuroscience", - "nutritionnal", "nutritional", - "obersvations", "observations", - "objectivelly", "objectively", - "objectiviser", "objectives", - "objectivitiy", "objectivity", - "obversations", "observations", - "ocassionally", "occasionally", - "occaisonally", "occasionally", - "occasioanlly", "occasionally", - "occassionaly", "occasionally", - "occationally", "occasionally", - "occurrencies", "occurrences", - "offensivelly", "offensively", - "ogranisation", "organisation", - "omniverously", "omnivorously", - "operationnal", "operational", - "opportuniste", "opportunities", - "opportunites", "opportunities", - "oppositition", "opposition", - "opthalmology", "ophthalmology", - "optimistisch", "optimistic", - "optimizacion", "optimization", - "optimizating", "optimization", - "optimziation", "optimization", - "optmizations", "optimizations", - "oragnisation", "organisation", - "orchastrated", "orchestrated", - "orchestarted", "orchestrated", - "orchestraded", "orchestrated", - "orchistrated", "orchestrated", - "orgainsation", "organisation", - "orgainzation", "organizations", - "organisaiton", "organisation", - "organisatons", "organisations", - "organistaion", "organisation", - "organizacion", "organization", - "organizaiton", "organization", - "organizativo", "organization", - "organizatons", "organizations", - "organsiation", "organisation", - "organziation", "organization", - "orginasation", "organisation", - "orginazation", "organization", - "orgnaisation", "organisations", - "originallity", "originality", - "outraegously", "outrageously", - "outrageoulsy", "outrageously", - "outragesouly", "outrageously", - "outrageuosly", "outrageously", - "outragiously", "outrageously", - "outsourceing", "outsourcing", - "overbearring", "overbearing", - "overblocking", "overclocking", - "overclcoking", "overclocking", - "overclicking", "overclocking", - "overcloaking", "overclocking", - "overclockign", "overclocking", - "overclokcing", "overclocking", - "overhearting", "overreacting", - "overheathing", "overheating", - "overhtinking", "overthinking", - "overhwelming", "overwhelming", - "overlappping", "overlapping", - "overlcocking", "overclocking", - "overreaktion", "overreaction", - "overwealming", "overwhelming", - "overwhelemed", "overwhelmed", - "overwhemling", "overwhelming", - "overwhleming", "overwhelming", - "owerpowering", "overpowering", - "painkilllers", "painkillers", - "palastinians", "palestinians", - "palesitnians", "palestinians", - "palestenians", "palestinians", - "palestinains", "palestinians", - "palestiniens", "palestinians", - "palestininan", "palestinian", - "palestininas", "palestinians", - "palistinians", "palestinians", - "palythroughs", "playthroughs", - "parapharsing", "paraphrasing", - "paraphenalia", "paraphernalia", - "paraphrashed", "paraphrase", - "paraphrazing", "paraphrasing", - "paraprashing", "paraphrasing", - "paraprhasing", "paraphrasing", - "parenthesees", "parentheses", - "parenthesies", "parenthesis", - "parliamentry", "parliamentary", - "partecipants", "participants", - "partecipated", "participated", - "parternships", "partnership", - "particapated", "participated", - "particiapnts", "participant", - "particiapted", "participated", - "participante", "participate", - "participaste", "participants", - "participatie", "participated", - "participatin", "participation", - "participatns", "participant", - "participaton", "participant", - "participents", "participants", - "particualrly", "particularly", - "particulalry", "particularly", - "particullary", "particularly", - "passionatley", "passionately", - "pathalogical", "pathological", - "pathelogical", "pathological", - "patholigical", "pathological", - "paychedelics", "psychedelics", - "paychiatrist", "psychiatrist", - "paychologist", "psychologist", - "paychopathic", "psychopathic", - "penetratiing", "penetrating", - "penisylvania", "pennsylvania", - "pennsilvania", "pennsylvania", - "pennslyvania", "pennsylvania", - "pennsylvaina", "pennsylvania", - "pennsyvlania", "pennsylvania", - "pennyslvania", "pennsylvania", - "penssylvania", "pennsylvania", - "pentsylvania", "pennsylvania", - "percentagens", "percentages", - "perferential", "preferential", - "performantes", "performances", - "performences", "performances", - "perfromances", "performances", - "peridoically", "periodically", - "peripathetic", "peripatetic", - "periphereals", "peripherals", - "peripherials", "peripherals", - "permanantely", "permanently", - "permanentely", "permanently", - "permissiable", "permissible", - "peroidically", "periodically", - "perpatrators", "perpetrators", - "perpatuating", "perpetuating", - "perpertators", "perpetrators", - "perpertrated", "perpetrated", - "perpetraitor", "perpetrator", - "perpetraters", "perpetrators", - "perpetuaters", "perpetuates", - "perpitrators", "perpetrators", - "perposefully", "purposefully", - "perposterous", "preposterous", - "perpretators", "perpetrators", - "perpsectives", "perspectives", - "perputrators", "perpetrators", - "perputuating", "perpetuating", - "persepctives", "perspectives", - "perservation", "preservation", - "perseverence", "perseverance", - "personalites", "personalities", - "personallity", "personally", - "personilized", "personalized", - "perspecitves", "perspectives", - "perspectivas", "perspectives", - "persumptuous", "presumptuous", - "perticularly", "particularly", - "pertubations", "perturbations", - "pessimisitic", "pessimistic", - "pessimisstic", "pessimistic", - "phenomenonal", "phenomenal", - "phenomenonly", "phenomenally", - "phenomonenon", "phenomenon", - "phialdelphia", "philadelphia", - "philadalphia", "philadelphia", - "philadelhpia", "philadelphia", - "philadeplhia", "philadelphia", - "philadlephia", "philadelphia", - "philedalphia", "philadelphia", - "philedelphia", "philadelphia", - "philidalphia", "philadelphia", - "philippinnes", "philippines", - "philippinoes", "philippines", - "philisophers", "philosophers", - "philisophies", "philosophies", - "phillippines", "philippines", - "philosiphers", "philosophers", - "philosiphies", "philosophies", - "philosohpers", "philosopher", - "philosohpies", "philosophies", - "philosophiae", "philosophies", - "philosophics", "philosophies", - "philosophios", "philosophies", - "philospohers", "philosophers", - "philospohies", "philosophies", - "photagrapher", "photographer", - "photochopped", "photoshopped", - "photograhper", "photographer", - "photograpers", "photographers", - "photographes", "photographs", - "photographyi", "photographic", - "photogropher", "photographer", - "photogrpahed", "photographed", - "photogrpaher", "photographer", - "photoshipped", "photoshopped", - "photoshooped", "photoshopped", - "photoshoppad", "photoshopped", - "phychedelics", "psychedelics", - "phychiatrist", "psychiatrist", - "phychologist", "psychologist", - "phychopathic", "psychopathic", - "physcedelics", "psychedelics", - "physciatrist", "psychiatrist", - "physcologist", "psychologist", - "physcopathic", "psychopathic", - "physicallity", "physically", - "physiologial", "physiological", - "pilgrimmages", "pilgrimages", - "pitchforkers", "pitchforks", - "pkaythroughs", "playthroughs", - "plabeswalker", "planeswalker", - "plaestinians", "palestinians", - "planeswaller", "planeswalker", - "planeswlaker", "planeswalker", - "planetwalker", "planeswalker", - "plansewalker", "planeswalker", - "plauthroughs", "playthroughs", - "playhtroughs", "playthroughs", - "playtgroughs", "playthroughs", - "playthorughs", "playthroughs", - "playthourghs", "playthroughs", - "playthrougth", "playthroughs", - "playthrouhgs", "playthroughs", - "playthtoughs", "playthroughs", - "playtrhoughs", "playthroughs", - "populationes", "populations", - "pornograpghy", "pornography", - "porportional", "proportional", - "portabillity", "portability", - "portagonists", "protagonists", - "positionning", "positioning", - "positivitely", "positivity", - "possessivize", "possessive", - "possibillity", "possibility", - "possiblility", "possibility", - "possiblities", "possibilities", - "powerfisting", "powerlifting", - "powerlfiting", "powerlifting", - "powerlifitng", "powerlifting", - "powerlisting", "powerlifting", - "powetlifting", "powerlifting", - "powrrlifting", "powerlifting", - "practicioner", "practitioner", - "practisioner", "practitioner", - "pratictioner", "practitioners", - "precedessors", "predecessors", - "preconveived", "preconceived", - "predacessors", "predecessors", - "predeccesors", "predecessor", - "predecesores", "predecessor", - "predescesors", "predecessors", - "predessecors", "predecessors", - "predetermind", "predetermined", - "predicessors", "predecessors", - "predocessors", "predecessors", - "predomiantly", "predominately", - "predominanty", "predominantly", - "predominatly", "predominantly", - "preferantial", "preferential", - "preferentail", "preferential", - "preformances", "performances", - "preinitalize", "preinitialize", - "preliminarly", "preliminary", - "prematurelly", "prematurely", - "premillenial", "premillennial", - "preocupation", "preoccupation", - "preperations", "preparations", - "prepetrators", "perpetrators", - "prepetuating", "perpetuating", - "prepostorous", "preposterous", - "preposturous", "preposterous", - "prerequisets", "prerequisite", - "prescirption", "prescriptions", - "prescribtion", "prescription", - "prescripcion", "prescription", - "prescriptons", "prescriptions", - "prescritpion", "prescriptions", - "presedential", "presidential", - "presentacion", "presentation", - "presentaiton", "presentations", - "preservacion", "preservation", - "preservating", "preservation", - "preservativo", "preservation", - "presidencial", "presidential", - "presidenital", "presidential", - "presidentail", "presidential", - "presnetation", "presentations", - "presonalized", "personalized", - "prespectives", "perspectives", - "presrciption", "prescriptions", - "presumpteous", "presumptuous", - "presumputous", "presumptuous", - "prevantative", "preventative", - "preventation", "presentation", - "preventetive", "preventative", - "preventitive", "preventative", - "prezidential", "presidential", - "principlaity", "principality", - "probabiliste", "probabilities", - "probabilites", "probabilities", - "probabillity", "probability", - "probablistic", "probabilistic", - "proclomation", "proclamation", - "proconceived", "preconceived", - "profesisonal", "professionals", - "professiinal", "professionalism", - "professioanl", "professionals", - "professiomal", "professionalism", - "professionel", "professional", - "professionsl", "professionalism", - "professoinal", "professionals", - "professonial", "professionals", - "proffesional", "professional", - "proficientcy", "proficiency", - "profissional", "professional", - "profitabiliy", "profitability", - "profitabilty", "profitability", - "profressions", "progressions", - "progatonists", "protagonists", - "programmeurs", "programmer", - "progressieve", "progressive", - "progressioin", "progressions", - "progressiong", "progressing", - "progressisme", "progresses", - "progressiste", "progresses", - "progressivas", "progressives", - "progressivey", "progressively", - "progressivly", "progressively", - "progressivsm", "progressives", - "progresssing", "progressing", - "progresssion", "progressions", - "progresssive", "progressives", - "prohibitting", "prohibiting", - "projecticles", "projectiles", - "proletariaat", "proletariat", - "proletariant", "proletariat", - "proletaricat", "proletariat", - "prominantely", "prominently", - "promiscuious", "promiscuous", - "promisculous", "promiscuous", - "promotionnal", "promotional", - "pronounceing", "pronouncing", - "pronunciaton", "pronunciation", - "propertional", "proportional", - "propesterous", "preposterous", - "proportianal", "proportional", - "proportionel", "proportional", - "proposterous", "preposterous", - "proprotional", "proportional", - "prostetution", "prostitution", - "prostitition", "prostitution", - "prostitucion", "prostitution", - "prostituiton", "prostitution", - "prostitutiei", "prostitute", - "protaganists", "protagonists", - "protaginists", "protagonists", - "protagnoists", "protagonists", - "protestantes", "protestants", - "protoganists", "protagonists", - "prouncements", "pronouncements", - "pruposefully", "purposefully", - "pscyhologist", "psychologist", - "pscyhopathic", "psychopathic", - "pshyciatrist", "psychiatrist", - "pshycologist", "psychologist", - "pshycopathic", "psychopathic", - "psichologist", "psychologist", - "psychaitrist", "psychiatrist", - "psychedellic", "psychedelic", - "psychedilics", "psychedelics", - "psychemedics", "psychedelics", - "psychiatirst", "psychiatrists", - "psychiatrics", "psychiatrist", - "psychiatrict", "psychiatrist", - "psychiatrits", "psychiatrists", - "psychistrist", "psychiatrist", - "psychodelics", "psychedelics", - "psycholigist", "psychologist", - "psychologial", "psychological", - "psychologits", "psychologists", - "psychologyst", "psychologist", - "psychopathes", "psychopaths", - "psychyatrist", "psychiatrist", - "puplications", "publications", - "puritannical", "puritanical", - "purpetrators", "perpetrators", - "purpetuating", "perpetuating", - "purpusefully", "purposefully", - "pyschedelics", "psychedelics", - "pyschiatrist", "psychiatrist", - "pyschologist", "psychologist", - "pyschopathic", "psychopathic", - "qualificaton", "qualification", - "qualifierais", "qualifiers", - "qualtitative", "quantitative", - "quantatitive", "quantitative", - "quantititive", "quantitative", - "quarterblack", "quarterback", - "quesitonable", "questionable", - "questionalbe", "questionable", - "questionning", "questioning", - "questionsign", "questioning", - "radioactieve", "radioactive", - "rationallity", "rationally", - "reactionairy", "reactionary", - "reactionnary", "reactionary", - "realisticaly", "realistically", - "realisticlly", "realistically", - "reasonablely", "reasonably", - "recallection", "recollection", - "reccomending", "recommending", - "reccommended", "recommended", - "recepcionist", "receptionist", - "receptionest", "receptionist", - "recgonizable", "recognizable", - "reciporcated", "reciprocate", - "reciprociate", "reciprocate", - "reciprocrate", "reciprocate", - "recognizible", "recognizable", - "recolleciton", "recollection", - "recommanding", "recommending", - "recommendeds", "recommends", - "recommendors", "recommends", - "recommeneded", "recommended", - "recommenting", "recommending", - "recongizable", "recognizable", - "recontructed", "reconstructed", - "recpetionist", "receptionist", - "recreacional", "recreational", - "recriational", "recreational", - "referenceing", "referencing", - "refirgerator", "refrigerator", - "refriderator", "refrigerator", - "refrigarator", "refrigerator", - "refrigerador", "refrigerator", - "refrigerater", "refrigerator", - "refrigirator", "refrigerator", - "regenaration", "regeneration", - "regeneracion", "regeneration", - "regestration", "registration", - "registartion", "registration", - "registrating", "registration", - "regrigerator", "refrigerator", - "regulatorias", "regulators", - "regulatories", "regulators", - "regulatorios", "regulators", - "reicarnation", "reincarnation", - "reinforcemnt", "reinforcement", - "reinitalised", "reinitialised", - "reinitalises", "reinitialises", - "reinitalized", "reinitialized", - "reinitalizes", "reinitializes", - "reinstallled", "reinstalled", - "reisntalling", "reinstalling", - "relaitonship", "relationships", - "relatinoship", "relationships", - "reliabillity", "reliability", - "reluctanctly", "reluctantly", - "remarkablely", "remarkably", - "rememberance", "remembrance", - "reminiscient", "reminiscent", - "renaissaince", "renaissance", - "renegeration", "regeneration", - "reorganision", "reorganisation", - "repalcements", "replacements", - "repersenting", "representing", - "reporduction", "reproduction", - "reporductive", "reproductive", - "reprecussion", "repercussions", - "representate", "representative", - "represention", "representing", - "representive", "representative", - "reproducable", "reproducible", - "reproduccion", "reproduction", - "reproduciton", "reproduction", - "reproducting", "reproduction", - "reproductivo", "reproduction", - "reproduktion", "reproduction", - "repsectfully", "respectfully", - "repsectively", "respectively", - "republicanas", "republicans", - "republicanos", "republicans", - "republicants", "republicans", - "republicians", "republicans", - "requerimento", "requirement", - "requeriments", "requirements", - "requierments", "requirements", - "requriements", "requirements", - "resembelance", "resemblance", - "reseptionist", "receptionist", - "reserrection", "resurrection", - "resintalling", "reinstalling", - "resistancies", "resistances", - "resistencias", "resistances", - "respecitvely", "respectively", - "respectabile", "respectable", - "respectivily", "respectively", - "respectivley", "respectively", - "respectuflly", "respectfully", - "respiratiory", "respiratory", - "responsabile", "responsible", - "responsaveis", "responsive", - "responsbilty", "responsibly", - "responsibile", "responsible", - "responsibily", "responsibility", - "responsibley", "responsibly", - "responsibliy", "responsibly", - "responsiblty", "responsibly", - "ressemblance", "resemblance", - "ressemblence", "resemblance", - "ressurection", "resurrection", - "restaurantes", "restaurants", - "restauration", "restoration", - "restauraunts", "restaurants", - "restirctions", "restrictions", - "restrainting", "restraining", - "restrcitions", "restriction", - "restricitons", "restrictions", - "resurreccion", "resurrection", - "resurrektion", "resurrection", - "retalitation", "retaliation", - "retributioon", "retribution", - "retroactivly", "retroactively", - "revolutionay", "revolutionary", - "revolutionos", "revolutions", - "rezurrection", "resurrection", - "rictatorship", "dictatorship", - "ridicilously", "ridiculously", - "ridicoulusly", "ridiculously", - "righteouness", "righteousness", - "rockerfeller", "rockefeller", - "rollercoaser", "rollercoaster", - "rollercoater", "rollercoaster", - "romanitcally", "romantically", - "roundabounts", "roundabout", - "rudimentatry", "rudimentary", - "rysurrection", "resurrection", - "sacksonville", "jacksonville", - "sacreligious", "sacrilegious", - "sacrificeing", "sacrificing", - "saksatchewan", "saskatchewan", - "salughtering", "slaughtering", - "sanctionning", "sanctioning", - "sarcasticaly", "sarcastically", - "sarcasticlly", "sarcastically", - "sascatchewan", "saskatchewan", - "saskatcehwan", "saskatchewan", - "saskatchawan", "saskatchewan", - "saskatechwan", "saskatchewan", - "sasketchawan", "saskatchewan", - "sasketchewan", "saskatchewan", - "sasktachewan", "saskatchewan", - "satasfaction", "satisfaction", - "satasfactory", "satisfactory", - "satisfaccion", "satisfaction", - "satisfacting", "satisfaction", - "satisfcation", "satisfaction", - "satisfiction", "satisfaction", - "satistactory", "satisfactory", - "satsifaction", "satisfaction", - "satsifactory", "satisfactory", - "scandanivian", "scandinavian", - "scandenavian", "scandinavian", - "scandianvian", "scandinavian", - "scandinacian", "scandinavian", - "scandinaivan", "scandinavia", - "scandinavica", "scandinavian", - "scandinavien", "scandinavian", - "scandinavion", "scandinavian", - "scandivanian", "scandinavian", - "scandonavian", "scandinavian", - "schizophrena", "schizophrenia", - "scholarhsips", "scholarships", - "scholerships", "scholarships", - "scholorships", "scholarships", - "scnadinavian", "scandinavian", - "screenshoots", "screenshot", - "sensationail", "sensational", - "sensationnal", "sensational", - "sensibilites", "sensibilities", - "sensitivitiy", "sensitivity", - "sentimentals", "sentiments", - "sertificates", "certificates", - "serveillance", "surveillance", - "seskatchewan", "saskatchewan", - "shakesperean", "shakespeare", - "shamelessely", "shamelessly", - "shamelessley", "shamelessly", - "shampionship", "championship", - "shardholders", "shareholders", - "shenanigains", "shenanigans", - "shenanigangs", "shenanigans", - "shenaniganns", "shenanigans", - "shenanighans", "shenanigans", - "shopkeeepers", "shopkeepers", - "showboarding", "snowboarding", - "siginificant", "significant", - "significanly", "significantly", - "significante", "significance", - "significanty", "significantly", - "significatly", "significantly", - "signleplayer", "singleplayer", - "simaltaneous", "simultaneous", - "simeltaneous", "simultaneous", - "similaraties", "similarities", - "similiarites", "similarities", - "similiarties", "similarities", - "similiraties", "similarities", - "similtaneous", "simultaneous", - "simliarities", "similarities", - "simlutaneous", "simultaneous", - "simpathizers", "sympathizers", - "simplistisch", "simplistic", - "simulatenous", "simultaneous", - "simulatneous", "simultaneous", - "simultaenous", "simultaneous", - "simultaneuos", "simultaneous", - "simultanious", "simultaneous", - "simulteneous", "simultaneous", - "singelplayer", "singleplayer", - "singlepalyer", "singleplayer", - "sinlgeplayer", "singleplayer", - "situationals", "situations", - "situationnal", "situational", - "skandinavian", "scandinavian", - "skateboaring", "skateboarding", - "skrawberries", "strawberries", - "slaugthering", "slaughtering", - "sloughtering", "slaughtering", - "sluaghtering", "slaughtering", - "snowballling", "snowballing", - "snowbaording", "snowboarding", - "socialistisk", "socialists", - "socialogical", "sociological", - "socioeconimc", "socioeconomic", - "socioeconmic", "socioeconomic", - "socioligical", "sociological", - "sociopolical", "sociological", - "somethingest", "somethings", - "sophisticaed", "sophisticated", - "sophisticted", "sophisticated", - "southamption", "southampton", - "southernerns", "southerners", - "sovereighnty", "sovereignty", - "sovereignety", "sovereignty", - "sovereignity", "sovereignty", - "specialistes", "specialists", - "specializare", "specialize", - "specializate", "specialize", - "specializeds", "specializes", - "specializied", "specialize", - "speciallized", "specialised", - "specifcation", "specification", - "spectacuarly", "spectacular", - "spectaculair", "spectacular", - "spectaculary", "spectacularly", - "spectacullar", "spectacularly", - "specualtions", "speculation", - "spermatozoan", "spermatozoon", - "spesifically", "specifically", - "spirituallly", "spiritually", - "spirtiuality", "spirituality", - "spirutuality", "spirituality", - "spontaneosly", "spontaneously", - "spontaneouly", "spontaneously", - "spreadhseets", "spreadsheets", - "spreadsheats", "spreadsheets", - "spreadsheeds", "spreadsheets", - "spreadsheeet", "spreadsheets", - "standartized", "standardized", - "standerdized", "standardized", - "stardardized", "standardized", - "starightened", "straightened", - "starwberries", "strawberries", - "statisticaly", "statistically", - "stereotpying", "stereotyping", - "stereotypers", "stereotypes", - "stereotypian", "stereotyping", - "steriotyping", "stereotyping", - "steroetyping", "stereotyping", - "steryotyping", "stereotyping", - "straigntened", "straightened", - "straigthened", "straightened", - "strategicaly", "strategically", - "strategiclly", "strategically", - "strawburries", "strawberries", - "streemlining", "streamlining", - "streightened", "straightened", - "strenghening", "strengthening", - "strenghtened", "strengthened", - "strengtheing", "strengthening", - "stroytelling", "storytelling", - "subconcsious", "subconscious", - "subconsicous", "subconscious", - "subcouncious", "subconscious", - "subcsription", "subscriptions", - "subesquently", "subsequently", - "subjectivety", "subjectively", - "subjectivily", "subjectively", - "subjectivley", "subjectively", - "subjudgation", "subjugation", - "subredditors", "subreddits", - "subscirption", "subscriptions", - "subsconcious", "subconscious", - "subscribbers", "subscribers", - "subscribbing", "subscribing", - "subscribirse", "subscriber", - "subscribtion", "subscription", - "subscriptons", "subscriptions", - "subscritpion", "subscriptions", - "subscrpition", "subscriptions", - "subsiquently", "subsequently", - "subsrciption", "subscriptions", - "subsricption", "subscriptions", - "substantialy", "substantially", - "substantitve", "substantive", - "substitition", "substitution", - "substituters", "substitutes", - "substitutivo", "substitution", - "substitutues", "substitutes", - "substracting", "subtracting", - "substraction", "subtraction", - "subterranian", "subterranean", - "succsessfull", "successful", - "sunconscious", "subconscious", - "supermarkeds", "supermarkets", - "supermarkers", "supermarkets", - "supermarkert", "supermarkets", - "supermarkten", "supermarket", - "supermarktes", "supermarkets", - "supernarkets", "supermarkets", - "supernatrual", "supernatural", - "supersticion", "superstition", - "superstision", "superstition", - "superstitios", "superstitious", - "superstitous", "superstitious", - "supervisiors", "supervisors", - "supervisoras", "supervisors", - "supervisores", "supervisors", - "supllemental", "supplemental", - "supplamental", "supplemental", - "supplamented", "supplemented", - "supplimental", "supplemental", - "suppresssion", "suppression", - "supscription", "subscription", - "supsiciously", "suspiciously", - "surprizingly", "surprisingly", - "surrenderred", "surrendered", - "surrundering", "surrendering", - "survaillance", "surveillance", - "survaillence", "surveillance", - "survallience", "surveillance", - "surveillence", "surveillance", - "survelliance", "surveillance", - "surviellance", "surveillance", - "survivabiity", "survivability", - "survivabiliy", "survivability", - "survivabilty", "survivability", - "susceptiable", "susceptible", - "susceptibile", "susceptible", - "suspeciously", "suspiciously", - "suspicioulsy", "suspiciously", - "suspiciuosly", "suspiciously", - "suspisiously", "suspiciously", - "sustainabily", "sustainability", - "symapthizers", "sympathizers", - "symetrically", "symmetrically", - "symmetricaly", "symmetrically", - "sympathethic", "sympathetic", - "sympathsizer", "sympathizers", - "sympathyzers", "sympathizers", - "sympethizers", "sympathizers", - "symphatizers", "sympathizers", - "sympithizers", "sympathizers", - "syncronously", "synchronously", - "sysmatically", "systematically", - "systematisch", "systematic", - "tablespooons", "tablespoon", - "tacticallity", "tactically", - "tangencially", "tangentially", - "tangenitally", "tangentially", - "tangientally", "tangentially", - "teamfighters", "teamfights", - "teansylvania", "transylvania", - "techanically", "mechanically", - "techincality", "technicality", - "technologial", "technological", - "telelevision", "television", - "teleportaion", "teleportation", - "teleportaton", "teleportation", - "temepratures", "temperatures", - "temparatures", "temperatures", - "temperaturas", "temperatures", - "temporarilly", "temporarily", - "tempreatures", "temperatures", - "tempuratures", "temperatures", - "tengentially", "tangentially", - "termendously", "tremendously", - "territorrial", "territorial", - "territorries", "territories", - "testasterone", "testosterone", - "testestorone", "testosterone", - "thanskgiving", "thanksgiving", - "theologicial", "theological", - "theoreticaly", "theoretically", - "thermomenter", "thermometer", - "thermomether", "thermometer", - "thumbnailers", "thumbnails", - "thunderboldt", "thunderbolt", - "tindergarten", "kindergarten", - "torubleshoot", "troubleshoot", - "totalitarion", "totalitarian", - "totalitatian", "totalitarian", - "touchscreeen", "touchscreen", - "traditionaly", "traditionally", - "traditionnal", "traditional", - "tradtionally", "traditionally", - "tramendously", "tremendously", - "tramsformers", "transformers", - "tramsforming", "transforming", - "tranditional", "transitional", - "tranistional", "transitional", - "tranistioned", "transitioned", - "tranlsations", "translations", - "tranmsission", "transmissions", - "transaltions", "translations", - "transaprency", "transparency", - "transational", "transitional", - "transcations", "transactions", - "transcendant", "transcendent", - "transcripton", "transcription", - "transcriptus", "transcripts", - "transesxuals", "transsexuals", - "transfarmers", "transformers", - "transfarring", "transferring", - "transferrred", "transferred", - "transformare", "transformers", - "transformase", "transforms", - "transformees", "transforms", - "transforners", "transformers", - "transfromers", "transformers", - "transfroming", "transforming", - "transgenderd", "transgendered", - "transgendred", "transgendered", - "transgenered", "transgender", - "transicional", "transitional", - "transilvania", "transylvania", - "transimssion", "transmissions", - "transisioned", "transitioned", - "translastion", "translations", - "translateing", "translating", - "translationg", "translating", - "translucient", "translucent", - "translyvania", "transylvania", - "transmisions", "transmission", - "transmisison", "transmission", - "transmissons", "transmissions", - "transmitirte", "transmitter", - "transmittted", "transmitted", - "transmorfers", "transformer", - "transofrmers", "transformers", - "transofrming", "transforming", - "transparancy", "transparency", - "transparenty", "transparency", - "transparrent", "transparent", - "transperancy", "transparency", - "transperency", "transparency", - "transplantes", "transplants", - "transporteur", "transporter", - "transportion", "transporting", - "transpotting", "transporting", - "transsmision", "transmissions", - "transylmania", "transylvania", - "transylvanai", "transylvania", - "trasnferring", "transferring", - "trasnformers", "transformers", - "trasnforming", "transforming", - "trasnmission", "transmissions", - "trasnparency", "transparency", - "trasnporting", "transporting", - "trememdously", "tremendously", - "tremendoulsy", "tremendously", - "tremondously", "tremendously", - "troubelshoot", "troubleshoot", - "troublehsoot", "troubleshoot", - "trumendously", "tremendously", - "trustworthly", "trustworthy", - "ubsubscribed", "unsubscribed", - "udnerpowered", "underpowered", - "umbelievable", "unbelievable", - "umemployment", "unemployment", - "unaccaptable", "unacceptable", - "unacceptible", "unacceptable", - "unaccpetable", "unacceptable", - "unacompanied", "unaccompanied", - "unappealling", "unappealing", - "unattractice", "unattractive", - "unautherized", "unauthorized", - "unauthroized", "unauthorized", - "unbeleivable", "unbelievable", - "unbeleivably", "unbelievably", - "unbeliavable", "unbelievable", - "unbeliavably", "unbelievably", - "unbeliebable", "unbelievable", - "unbelieveble", "unbelievable", - "unbelievibly", "unbelievably", - "unbeliveable", "unbelievable", - "unbeliveably", "unbelievably", - "unbelizeable", "unbelievable", - "unbolievable", "unbelievable", - "uncertainity", "uncertainty", - "uncertaintly", "uncertainty", - "uncompatible", "incompatible", - "unconditinal", "unconditional", - "unconsciosly", "unconsciously", - "unconsciouly", "unconsciously", - "unconsistent", "inconsistent", - "unconvenient", "inconvenient", - "unconvential", "unconventional", - "undecideable", "undecidable", - "undefinitely", "indefinitely", - "undeniablely", "undeniably", - "undergradate", "undergraduate", - "undergradute", "undergraduate", - "underminding", "undermining", - "undermineing", "undermining", - "undermineras", "undermines", - "undermineres", "undermines", - "underminging", "undermining", - "underminning", "undermining", - "undertakeing", "undertaking", - "underwhelimg", "underwhelming", - "underwheling", "underwhelming", - "undesireable", "undesirable", - "undoubtedbly", "undoubtedly", - "unemployemnt", "unemployment", - "unemplyoment", "unemployment", - "unempolyment", "unemployment", - "unenployment", "unemployment", - "unequalities", "inequalities", - "unexpectadly", "unexpectedly", - "unexpectetly", "unexpectedly", - "unexpectidly", "unexpectedly", - "unexperience", "inexperience", - "unexpextedly", "unexpectedly", - "unexplicably", "inexplicably", - "unforgetable", "unforgettable", - "unforgiveble", "unforgivable", - "unforgivible", "unforgivable", - "unfortunatly", "unfortunately", - "unfortunetly", "unfortunately", - "unilatreally", "unilaterally", - "uniliterally", "unilaterally", - "unimpresssed", "unimpressed", - "uninitalised", "uninitialised", - "uninitalized", "uninitialized", - "uninstallimg", "uninstalling", - "uninstallled", "uninstalled", - "unintentinal", "unintentional", - "uninteresing", "uninteresting", - "uninterneted", "uninterested", - "uninterruped", "uninterrupted", - "uninterupted", "uninterrupted", - "unisntalling", "uninstalling", - "unitesstates", "unitedstates", - "univerisites", "universities", - "univeristies", "universities", - "universitets", "universities", - "unliaterally", "unilaterally", - "unneccessary", "unnecessary", - "unnecesarily", "unnecessarily", - "unnecessairy", "unnecessarily", - "unnecessarly", "unnecessarily", - "unnistalling", "uninstalling", - "unpredictabe", "unpredictable", - "unpreductive", "unproductive", - "unproduktive", "unproductive", - "unrealisitic", "unrealistic", - "unreaponsive", "unresponsive", - "unreasonalby", "unreasonably", - "unrepsonsive", "unresponsive", - "unresponcive", "unresponsive", - "unresponisve", "unresponsive", - "unresponsibe", "unresponsive", - "unrestircted", "unrestricted", - "unrestrcited", "unrestricted", - "unristricted", "unrestricted", - "unseccessful", "unsuccessful", - "unsespecting", "unsuspecting", - "unsibscribed", "unsubscribed", - "unsoliciated", "unsolicited", - "unsolicitied", "unsolicited", - "unsubscirbed", "unsubscribed", - "unsubscrible", "unsubscribed", - "unsubscrided", "unsubscribed", - "unsubscriped", "unsubscribed", - "unsubscrubed", "unsubscribed", - "unsubsrcibed", "unsubscribed", - "unsucessfull", "unsuccessful", - "unsunscribed", "unsubscribed", - "unsurprizing", "unsurprising", - "unsusbcribed", "unsubscribed", - "unsustainble", "unsustainable", - "unvelievable", "unbelievable", - "unvelievably", "unbelievably", - "unviersities", "universities", - "unvulnerable", "invulnerable", - "varification", "verification", - "vegetarianas", "vegetarians", - "vegetarianos", "vegetarians", - "verficiation", "verification", - "verificacion", "verification", - "verificaiton", "verification", - "verifikation", "verification", - "vernaculaire", "vernacular", - "versatillity", "versatility", - "verticallity", "vertically", - "videogamemes", "videogames", - "visualizaton", "visualization", - "vocabularily", "vocabulary", - "vocabularity", "vocabulary", - "volonteering", "volunteering", - "volounteered", "volunteered", - "voluntarilly", "voluntarily", - "volunterring", "volunteering", - "vulnerabilty", "vulnerability", - "weightlifing", "weightlifting", - "withdrawalls", "withdrawals", - "withdrawling", "withdrawing", - "withdrawning", "withdrawing", - "wonderfullly", "wonderfully", - "worshippping", "worshipping", - "xenophobical", "xenophobia", - "abandenment", "abandonment", - "abandomnent", "abandonment", - "abandonding", "abandoning", - "abandonnent", "abandonment", - "abandonning", "abandoning", - "abbreviatin", "abbreviation", - "abbreviaton", "abbreviation", - "abdominable", "abdominal", - "abomanation", "abomination", - "abominacion", "abomination", - "abomonation", "abomination", - "abonimation", "abomination", - "aboriginial", "aboriginal", - "aborigional", "aboriginal", - "abreviation", "abbreviation", - "abritrarily", "arbitrarily", - "abritration", "arbitration", - "absolutelly", "absolutely", - "absolutelys", "absolutes", - "absolutisme", "absolutes", - "absolutiste", "absolutes", - "abstraccion", "abstraction", - "abstraktion", "abstraction", - "abstruction", "abstraction", - "abundancies", "abundances", - "academicaly", "academically", - "academicese", "academics", - "accelarated", "accelerated", - "accelarator", "accelerator", - "accelerater", "accelerator", - "acceleratie", "accelerate", - "acceleratio", "accelerator", - "acceleraton", "acceleration", - "accelorated", "accelerated", - "accelorator", "accelerator", - "acceptabelt", "acceptable", - "accesseries", "accessories", - "accessibile", "accessible", - "accessibily", "accessibility", - "accessoires", "accessories", - "accidantely", "accidently", - "accidentaly", "accidentally", - "accidentely", "accidently", - "accidential", "accidental", - "accidentily", "accidently", - "accidentlay", "accidently", - "accidentley", "accidently", - "accidentlly", "accidently", - "accomadated", "accommodated", - "accomadates", "accommodates", - "accommadate", "accommodate", - "accommidate", "accommodate", - "accomodated", "accommodated", - "accomodates", "accommodates", - "accomondate", "accommodate", - "accompained", "accompanied", - "accompanyed", "accompanied", - "accompianed", "accompanied", - "accompinied", "accompanied", - "accomplises", "accomplishes", - "accomplishs", "accomplishes", - "accomponied", "accompanied", - "accountatns", "accountants", - "accountents", "accountants", - "accquainted", "acquainted", - "accrediated", "accredited", - "accreditied", "accredited", - "accreditted", "accredited", - "acculumated", "accumulated", - "accumalated", "accumulated", - "accumelated", "accumulated", - "accumilated", "accumulated", - "accumulatin", "accumulation", - "accumulaton", "accumulation", - "accuratelly", "accurately", - "accustommed", "accustomed", - "acheivement", "achievement", - "acheivments", "achievements", - "achievemint", "achievement", - "achievemnts", "achievements", - "achievments", "achievements", - "achivements", "achievements", - "acknolwedge", "acknowledge", - "acknoweldge", "acknowledge", - "acknowleded", "acknowledged", - "acknowlegde", "acknowledge", - "acknowleged", "acknowledge", - "acknowleges", "acknowledges", - "acknwoledge", "acknowledges", - "acomplished", "accomplished", - "acopalyptic", "apocalyptic", - "acquaintace", "acquaintance", - "acquisation", "acquisition", - "activateing", "activating", - "activationg", "activating", - "activistion", "activision", - "additinally", "additionally", - "additionaly", "additionally", - "additonally", "additionally", - "adequatedly", "adequately", - "adjectiveus", "adjectives", - "administerd", "administered", - "administrar", "administrator", - "administren", "administer", - "administrer", "administer", - "administres", "administer", - "administrez", "administer", - "adminstered", "administered", - "adminstrate", "administrate", - "admittadely", "admittedly", - "adolencence", "adolescence", - "adolescance", "adolescence", - "adolescense", "adolescence", - "advantadges", "advantages", - "advantageos", "advantageous", - "advantageus", "advantageous", - "advantagous", "advantageous", - "adventerous", "adventures", - "adventourus", "adventurous", - "adversiting", "advertising", - "advertisors", "advertisers", - "advertisted", "advertised", - "aesthethics", "aesthetics", - "afficionado", "aficionado", - "affiliction", "affiliation", - "affirmitave", "affirmative", - "affirmitive", "affirmative", - "affixiation", "affiliation", - "affrimative", "affirmative", - "afgahnistan", "afghanistan", - "afganhistan", "afghanistan", - "afghanastan", "afghanistan", - "afghansitan", "afghanistan", - "afhganistan", "afghanistan", - "afternarket", "aftermarket", - "afterthougt", "afterthought", - "aggaravates", "aggravates", - "aggragating", "aggravating", - "aggregatore", "aggregate", - "aggressivly", "aggressively", - "aggresssion", "aggression", - "aggrovating", "aggravating", - "agnostacism", "agnosticism", - "agnostisicm", "agnosticism", - "agnostisism", "agnosticism", - "agnostocism", "agnosticism", - "agnsoticism", "agnosticism", - "agonsticism", "agnosticism", - "agressively", "aggressively", - "agressivley", "agressive", - "agressivnes", "agressive", - "agricolture", "agriculture", - "agriculteur", "agriculture", - "agricultral", "agricultural", - "agricultual", "agricultural", - "agricutlure", "agriculture", - "ahtleticism", "athleticism", - "alcoholicas", "alcoholics", - "alcoholicos", "alcoholics", - "alcoholisim", "alcoholism", - "algorithems", "algorithm", - "algorithims", "algorithm", - "algorithmes", "algorithms", - "algorithmns", "algorithms", - "algorithmus", "algorithms", - "algorithyms", "algorithm", - "algorythims", "algorithms", - "alientating", "alienating", - "alleigances", "allegiance", - "alltogether", "altogether", - "alterantive", "alternative", - "alternatley", "alternately", - "alternitive", "alternative", - "altheticism", "athleticism", - "altnerately", "alternately", - "altruisitic", "altruistic", - "altruistric", "altruistic", - "amalgomated", "amalgamated", - "ambulancier", "ambulance", - "amerliorate", "ameliorate", - "ammendments", "amendments", - "ampehtamine", "amphetamine", - "ampethamine", "amphetamine", - "amphetamies", "amphetamines", - "amphetamins", "amphetamines", - "amphetemine", "amphetamine", - "amphetimine", "amphetamine", - "amphetmaine", "amphetamines", - "analyticals", "analytics", - "anarchistes", "anarchists", - "ancedotally", "anecdotally", - "androgenous", "androgynous", - "anecdatally", "anecdotally", - "anecdotelly", "anecdotally", - "anecodtally", "anecdotally", - "anectodally", "anecdotally", - "anectotally", "anecdotally", - "anedoctally", "anecdotally", - "angosticism", "agnosticism", - "anihilation", "annihilation", - "anitbiotics", "antibiotics", - "annihalated", "annihilated", - "annihilaton", "annihilation", - "annihilited", "annihilated", - "annihliated", "annihilated", - "annilihated", "annihilated", - "anniversery", "anniversary", - "annonymouse", "anonymous", - "announceing", "announcing", - "announcemet", "announcements", - "announcemnt", "announcement", - "announcents", "announces", - "annoymously", "anonymously", - "anonamously", "anonymously", - "anonimously", "anonymously", - "anonmyously", "anonymously", - "anonomously", "anonymously", - "anonymousny", "anonymously", - "anouncement", "announcement", - "antagonisic", "antagonistic", - "antagonistc", "antagonistic", - "antagonstic", "antagonist", - "anthropolgy", "anthropology", - "anthropoloy", "anthropology", - "antibiodics", "antibiotics", - "antibioitcs", "antibiotic", - "antibioitic", "antibiotic", - "antibitoics", "antibiotics", - "antiboitics", "antibiotics", - "anticapated", "anticipated", - "anticiapted", "anticipated", - "anticipatin", "anticipation", - "antiobitics", "antibiotic", - "antiquaited", "antiquated", - "antisipated", "anticipated", - "apacolyptic", "apocalyptic", - "apocaliptic", "apocalyptic", - "apocalpytic", "apocalyptic", - "apocalytpic", "apocalyptic", - "apolagizing", "apologizing", - "apolegetics", "apologetics", - "apologistas", "apologists", - "apologistes", "apologists", - "apostrophie", "apostrophe", - "apparantely", "apparently", - "appareances", "appearances", - "apparentely", "apparently", - "appartments", "apartments", - "appeareance", "appearance", - "appearences", "appearances", - "apperciated", "appreciated", - "apperciates", "appreciates", - "appereances", "appearances", - "applicabile", "applicable", - "applicaiton", "application", - "applicatins", "applicants", - "applicatons", "applications", - "appoitnment", "appointments", - "apporaching", "approaching", - "apporpriate", "appropriate", - "apporximate", "approximate", - "appraoching", "approaching", - "apprearance", "appearance", - "apprecaited", "appreciated", - "apprecaites", "appreciates", - "appreciaite", "appreciative", - "appreciatie", "appreciative", - "appreciatin", "appreciation", - "appreciaton", "appreciation", - "appreciatve", "appreciative", - "appreicated", "appreciated", - "appreicates", "appreciates", - "apprentince", "apprentice", - "appriciated", "appreciated", - "appriciates", "appreciates", - "apprieciate", "appreciate", - "appropirate", "appropriate", - "appropraite", "appropriate", - "appropriato", "appropriation", - "approxamate", "approximate", - "approxiamte", "approximate", - "approxmiate", "approximate", - "aprehensive", "apprehensive", - "apsirations", "aspirations", - "aqcuisition", "acquisition", - "aquaintance", "acquaintance", - "aquiantance", "acquaintance", - "arbitrairly", "arbitrarily", - "arbitralily", "arbitrarily", - "arbitrarely", "arbitrarily", - "arbitrarion", "arbitration", - "arbitratily", "arbitrarily", - "arbritarily", "arbitrarily", - "arbritation", "arbitration", - "arcaheology", "archaeology", - "archaoelogy", "archeology", - "archeaology", "archaeology", - "archimedian", "archimedean", - "architechts", "architect", - "architectes", "architects", - "architecure", "architecture", - "argiculture", "agriculture", - "argumentate", "argumentative", - "aribtrarily", "arbitrarily", - "aribtration", "arbitration", - "arithmentic", "arithmetic", - "arithmethic", "arithmetic", - "arithmetric", "arithmetic", - "armagedddon", "armageddon", - "armageddeon", "armageddon", - "arrangments", "arrangements", - "arrengement", "arrangement", - "articluated", "articulated", - "articualted", "articulated", - "artifically", "artificially", - "artificialy", "artificially", - "aspergerers", "aspergers", - "asphyxation", "asphyxiation", - "aspriations", "aspirations", - "assasinated", "assassinated", - "assasinates", "assassinates", - "assassiante", "assassinate", - "assassinare", "assassinate", - "assassinatd", "assassinated", - "assassinato", "assassination", - "assassinats", "assassins", - "assassinted", "assassinated", - "assembleing", "assembling", - "assemblying", "assembling", - "assertation", "assertion", - "assignemnts", "assignments", - "assimialted", "assimilate", - "assimilatie", "assimilate", - "assimilerat", "assimilate", - "assimiliate", "assimilate", - "assimliated", "assimilate", - "assingments", "assignments", - "assistantes", "assistants", - "assocaition", "associations", - "associaiton", "associations", - "associaties", "associates", - "associatons", "associations", - "assoication", "association", - "assosiating", "associating", - "assosiation", "association", - "assoziation", "association", - "assumptious", "assumptions", - "astonashing", "astonishing", - "astonoshing", "astonishing", - "astronaught", "astronaut", - "astronaunts", "astronaut", - "astronautas", "astronauts", - "astronautes", "astronauts", - "asychronous", "asynchronous", - "asyncronous", "asynchronous", - "atatchments", "attachments", - "atheistisch", "atheistic", - "athelticism", "athleticism", - "athletecism", "athleticism", - "athleticsim", "athleticism", - "athletisicm", "athleticism", - "athletisism", "athleticism", - "atmopsheric", "atmospheric", - "atmoshperic", "atmospheric", - "atmosoheric", "atmospheric", - "atomspheric", "atmospheric", - "atrocitites", "atrocities", - "attachemnts", "attachments", - "attackerasu", "attackers", - "attackerats", "attackers", - "attactments", "attachments", - "attributred", "attributed", - "attributted", "attribute", - "attrocities", "atrocities", - "audiobookas", "audiobooks", - "audioboooks", "audiobook", - "auotcorrect", "autocorrect", - "austrailans", "australians", - "austrailian", "australian", - "australiaan", "australians", - "australiams", "australians", - "australiens", "australians", - "australlian", "australian", - "authenticiy", "authenticity", - "authenticor", "authenticator", - "authenticty", "authenticity", - "authorative", "authoritative", - "authoritate", "authoritative", - "authoroties", "authorities", - "autoatttack", "autoattack", - "autocoreect", "autocorrect", - "autocorrekt", "autocorrect", - "autocorrent", "autocorrect", - "autocorrext", "autocorrect", - "autoctonous", "autochthonous", - "autokorrect", "autocorrect", - "automaticly", "automatically", - "automatonic", "automation", - "automoblies", "automobile", - "auxillaries", "auxiliaries", - "availabiliy", "availability", - "availabilty", "availability", - "availablity", "availability", - "awesoneness", "awesomeness", - "babysittter", "babysitter", - "backbacking", "backpacking", - "backgorunds", "backgrounds", - "backhacking", "backpacking", - "backjacking", "backpacking", - "backtacking", "backpacking", - "bangaldeshi", "bangladesh", - "bangladesch", "bangladesh", - "barceloneta", "barcelona", - "bargainning", "bargaining", - "battelfield", "battlefield", - "battelfront", "battlefront", - "battelships", "battleship", - "battlefeild", "battlefield", - "battlefiend", "battlefield", - "battlefiled", "battlefield", - "battlefornt", "battlefront", - "battlehsips", "battleship", - "beastiality", "bestiality", - "beaurocracy", "bureaucracy", - "beautyfully", "beautifully", - "behaviorial", "behavioral", - "belittleing", "belittling", - "belittlling", "belittling", - "belligerant", "belligerent", - "belligirent", "belligerent", - "bellweather", "bellwether", - "benefitical", "beneficial", - "bestiallity", "bestiality", - "beuatifully", "beautifully", - "beuraucracy", "bureaucracy", - "beuraucrats", "bureaucrats", - "billegerent", "belligerent", - "billionairs", "billionaires", - "billionarie", "billionaire", - "billioniare", "billionaire", - "biologicaly", "biologically", - "birthdayers", "birthdays", - "birthdaymas", "birthdays", - "bittersweat", "bittersweet", - "bitterwseet", "bittersweet", - "blackberrry", "blackberry", - "blacksmitch", "blacksmith", - "bloodboorne", "bloodborne", - "bluebarries", "blueberries", - "blueburries", "blueberries", - "blueprients", "blueprints", - "bodybuildig", "bodybuilding", - "bodybuildng", "bodybuilding", - "bodybuiling", "bodybuilding", - "bombardeada", "bombarded", - "bombardeado", "bombarded", - "bombarderad", "bombarded", - "bordelrands", "borderlands", - "bordlerands", "borderlands", - "bortherhood", "brotherhood", - "bourgeousie", "bourgeois", - "boycottting", "boycotting", - "bracelettes", "bracelets", - "brainwahsed", "brainwashed", - "brainwasing", "brainwashing", - "braziliians", "brazilians", - "breakthough", "breakthrough", - "breakthrouh", "breakthrough", - "breathtakng", "breathtaking", - "brianwashed", "brainwashed", - "brillaintly", "brilliantly", - "broadcasing", "broadcasting", - "broadcastes", "broadcasts", - "broderlands", "borderlands", - "brotherwood", "brotherhood", - "buddhistisk", "buddhists", - "buearucrats", "bureaucrats", - "bueraucracy", "bureaucracy", - "bueraucrats", "bureaucrats", - "buisnessman", "businessman", - "buisnessmen", "businessmen", - "bullerproof", "bulletproof", - "bulletbroof", "bulletproof", - "bulletproff", "bulletproof", - "bulletprrof", "bulletproof", - "bullitproof", "bulletproof", - "bureacuracy", "bureaucracy", - "bureaocracy", "bureaucracy", - "bureaocrats", "bureaucrats", - "bureaucraps", "bureaucrats", - "bureaucrash", "bureaucrats", - "bureaucrasy", "bureaucrats", - "bureaucrazy", "bureaucracy", - "bureuacracy", "bureaucracy", - "bureuacrats", "bureaucrats", - "burueacrats", "bureaucrats", - "businessnes", "businessmen", - "busniessmen", "businessmen", - "butterfiles", "butterflies", - "butterfleye", "butterfly", - "butterflyes", "butterflies", - "butterfries", "butterflies", - "butterlfies", "butterflies", - "caclulating", "calculating", - "caclulation", "calculation", - "caclulators", "calculators", - "cailbration", "calibration", - "calbiration", "calibration", - "calcualting", "calculating", - "calcualtion", "calculations", - "calcualtors", "calculators", - "calculaters", "calculators", - "calculatios", "calculators", - "calculatons", "calculations", - "calibartion", "calibration", - "calibraiton", "calibration", - "califorinan", "californian", - "californain", "californian", - "californica", "california", - "californien", "californian", - "californiia", "californian", - "californina", "californian", - "californnia", "californian", - "califronian", "californian", - "caluclating", "calculating", - "caluclation", "calculation", - "caluclators", "calculators", - "caluculated", "calculated", - "caluiflower", "cauliflower", - "camouflague", "camouflage", - "camouflauge", "camouflage", - "campagining", "campaigning", - "campainging", "campaigning", - "canadianese", "canadians", - "cannabilism", "cannibalism", - "cannabolism", "cannibalism", - "canniablism", "cannibalism", - "cannibalizm", "cannibalism", - "cannibaljim", "cannibalism", - "cannibalsim", "cannibalism", - "cannibilism", "cannibalism", - "cannobalism", "cannibalism", - "cannotation", "connotation", - "capabilites", "capabilities", - "capabilitiy", "capability", - "capabillity", "capability", - "capacitaron", "capacitor", - "capacitores", "capacitors", - "capatilists", "capitalists", - "capatilized", "capitalized", - "caperbility", "capability", - "capitalisim", "capitalism", - "capitilists", "capitalists", - "capitilized", "capitalized", - "capitolists", "capitalists", - "capitolized", "capitalized", - "captialists", "capitalists", - "captialized", "capitalized", - "cariactures", "caricature", - "carniverous", "carnivorous", - "castatrophe", "catastrophe", - "catagorized", "categorized", - "catapillars", "caterpillars", - "catapillers", "caterpillars", - "catasthrope", "catastrophe", - "catastraphe", "catastrophe", - "catastrohpe", "catastrophe", - "catastropic", "catastrophic", - "categroized", "categorized", - "catepillars", "caterpillars", - "catergorize", "categorize", - "caterogized", "categorized", - "caterpilars", "caterpillars", - "caterpiller", "caterpillar", - "catholacism", "catholicism", - "catholicsim", "catholicism", - "catholisicm", "catholicism", - "catholisism", "catholicism", - "catholizism", "catholicism", - "catholocism", "catholicism", - "catogerized", "categorized", - "catterpilar", "caterpillar", - "cauilflower", "cauliflower", - "caulfilower", "cauliflower", - "celebartion", "celebrations", - "celebirties", "celebrities", - "celebracion", "celebration", - "celebrasion", "celebrations", - "celebratons", "celebrations", - "centipeddle", "centipede", - "cerimonious", "ceremonious", - "certaintity", "certainty", - "certificaat", "certificate", - "certificare", "certificate", - "certificato", "certification", - "certificats", "certificates", - "challanging", "challenging", - "challeneged", "challenged", - "challeneger", "challenger", - "challeneges", "challenges", - "chameleooon", "chameleon", - "championshp", "championship", - "championsip", "championship", - "chancellour", "chancellor", - "charachters", "characters", - "charasmatic", "charismatic", - "charimastic", "charismatic", - "charsimatic", "charismatic", - "cheerleadra", "cheerleader", - "cheerleards", "cheerleaders", - "cheerleeder", "cheerleader", - "cheesebuger", "cheeseburger", - "cheeseburgs", "cheeseburgers", - "chihuahuita", "chihuahua", - "childrenmrs", "childrens", - "chloesterol", "cholesterol", - "cholesteral", "cholesterol", - "cholestoral", "cholesterol", - "cholestorol", "cholesterol", - "cholosterol", "cholesterol", - "chormosomes", "chromosomes", - "christianty", "christianity", - "chromasomes", "chromosomes", - "chromesomes", "chromosomes", - "chromisomes", "chromosomes", - "chromosones", "chromosomes", - "chromossome", "chromosomes", - "chromozomes", "chromosomes", - "chronicales", "chronicles", - "chronichles", "chronicles", - "cicrulating", "circulating", - "cincinnasti", "cincinnati", - "cincinnatti", "cincinnati", - "cincinnnati", "cincinnati", - "circimcised", "circumcised", - "circluating", "circulating", - "circualtion", "circulation", - "circulacion", "circulation", - "circumcison", "circumcision", - "circumsiced", "circumcised", - "circumsised", "circumcised", - "circumstace", "circumstance", - "circumvrent", "circumvent", - "circuncised", "circumcised", - "cirticising", "criticising", - "ciruclating", "circulating", - "ciruclation", "circulation", - "citicenship", "citizenship", - "citisenship", "citizenship", - "citizinship", "citizenship", - "civilizatin", "civilizations", - "civilizaton", "civilization", - "claculators", "calculators", - "classifides", "classified", - "cleanilness", "cleanliness", - "cleanleness", "cleanliness", - "cleanlyness", "cleanliness", - "cleansiness", "cleanliness", - "cliffbanger", "cliffhanger", - "cliffhander", "cliffhanger", - "cliffhangar", "cliffhanger", - "clifthanger", "cliffhanger", - "cockaroches", "cockroaches", - "cockraoches", "cockroaches", - "cockroackes", "cockroaches", - "cocktailers", "cocktails", - "coefficeint", "coefficient", - "coefficiant", "coefficient", - "coincedince", "coincidence", - "coincidance", "coincidence", - "coincidense", "coincidence", - "coincidente", "coincidence", - "coincidince", "coincidence", - "coinsidence", "coincidence", - "collabarate", "collaborate", - "collaberate", "collaborate", - "collaborant", "collaborate", - "collaborare", "collaborate", - "collaborato", "collaboration", - "collapseing", "collapsing", - "collaterial", "collateral", - "collectieve", "collective", - "collectivly", "collectively", - "collectivos", "collections", - "collobarate", "collaborate", - "colloborate", "collaborate", - "colonializm", "colonialism", - "colonialsim", "colonialism", - "colonianism", "colonialism", - "colonizaton", "colonization", - "comaprisons", "comparisons", - "combiantion", "combinations", - "combinacion", "combination", - "combinaison", "combinations", - "combinaiton", "combinations", - "combinatino", "combinations", - "combinatins", "combinations", - "combinatios", "combinations", - "combinining", "combining", - "combonation", "combination", - "comediantes", "comedians", - "comeptition", "competition", - "comeptitive", "competitive", - "comeptitors", "competitors", - "comfertable", "comfortable", - "comfertably", "comfortably", - "comfortabel", "comfortably", - "comfortabil", "comfortably", - "comfrotable", "comfortable", - "comftorable", "comfortable", - "comftorably", "comfortably", - "comisioning", "commissioning", - "comissioned", "commissioned", - "comissioner", "commissioner", - "commandered", "commanded", - "commandmant", "commandment", - "commantator", "commentator", - "commendment", "commandment", - "commentarea", "commenter", - "commentaren", "commenter", - "commentater", "commentator", - "commenteers", "commenter", - "commentries", "commenters", - "commercialy", "commercially", - "commericals", "commercials", - "commericial", "commercial", - "comminicate", "communicate", - "comminucate", "communicate", - "commisioned", "commissioned", - "commisioner", "commissioner", - "commisssion", "commissions", - "committment", "commitment", - "commodoties", "commodities", - "commomplace", "commonplace", - "commonspace", "commonplace", - "commonweath", "commonwealth", - "commonwelth", "commonwealth", - "commuincate", "communicated", - "communciate", "communicate", - "communicted", "communicated", - "communistas", "communists", - "communistes", "communists", - "compability", "compatibility", - "compalation", "compilation", - "compansated", "compensated", - "comparabile", "comparable", - "comparasion", "comparison", - "comparasons", "comparisons", - "comparement", "compartment", - "comparetive", "comparative", - "comparision", "comparison", - "comparisson", "comparisons", - "comparitave", "comparative", - "comparitive", "comparative", - "comparsions", "comparisons", - "compassione", "compassionate", - "compasssion", "compassion", - "compatabile", "compatible", - "compatative", "comparative", - "compatiable", "compatible", - "compatibile", "compatible", - "compatibily", "compatibility", - "compeditive", "competitive", - "compeditors", "competitors", - "compeitions", "competitions", - "compeittion", "competitions", - "compelation", "compilation", - "compensante", "compensate", - "compensatie", "compensate", - "compensatin", "compensation", - "compenstate", "compensate", - "comperative", "comparative", - "compesition", "composition", - "competation", "computation", - "competative", "competitive", - "competators", "competitors", - "competetion", "competition", - "competetors", "competitors", - "competiters", "competitors", - "competiting", "competition", - "competitior", "competitor", - "competitivo", "competition", - "competitoin", "competitions", - "competitons", "competitors", - "competution", "computation", - "compilacion", "compilation", - "compilcated", "complicate", - "compination", "compilation", - "compinsated", "compensated", - "compitation", "computation", - "compitetion", "competitions", - "complacient", "complacent", - "complciated", "complicate", - "compleation", "compilation", - "complecated", "complicated", - "completaste", "completes", - "completeing", "completing", - "completeion", "completion", - "completelly", "completely", - "completelyl", "completely", - "completelys", "completes", - "completenes", "completes", - "complexitiy", "complexity", - "compliacted", "complicate", - "compliation", "compilation", - "complicarte", "complicate", - "complicatie", "complicit", - "complicatii", "complicit", - "complicatin", "complicit", - "complictaed", "complicate", - "complimente", "complement", - "complimenty", "complimentary", - "complusions", "compulsion", - "compolation", "compilation", - "componenets", "components", - "componentes", "components", - "composicion", "composition", - "composiiton", "compositions", - "composision", "compositions", - "compositied", "composite", - "composities", "composite", - "compositoin", "compositions", - "compositons", "compositions", - "compositore", "composite", - "compostiion", "compositions", - "compotition", "composition", - "compramised", "compromised", - "compramises", "compromises", - "compremised", "compromised", - "compremises", "compromises", - "comprension", "compression", - "compresores", "compressor", - "compresssed", "compressed", - "compresssor", "compressor", - "comprimised", "compromised", - "comprimises", "compromises", - "compromessi", "compromises", - "compromisng", "compromising", - "compromisse", "compromises", - "compromisso", "compromises", - "compromized", "compromised", - "compulstion", "compulsion", - "compunation", "computation", - "computacion", "computation", - "computating", "computation", - "computition", "computation", - "conceivibly", "conceivably", - "concencrate", "concentrate", - "concentrace", "concentrate", - "concentrade", "concentrated", - "concentrait", "concentrate", - "concentrant", "concentrate", - "concentrare", "concentrate", - "concentrato", "concentration", - "concertmate", "concentrate", - "conceviable", "conceivable", - "conceviably", "conceivably", - "concidering", "considering", - "conciveable", "conceivable", - "conciveably", "conceivably", - "conclsuions", "concussions", - "concludendo", "concluded", - "conclussion", "conclusions", - "conclussive", "conclusive", - "conclutions", "conclusions", - "concsiously", "consciously", - "conculsions", "conclusions", - "concusssion", "concussions", - "condeferacy", "confederacy", - "condicional", "conditional", - "condidtions", "conditions", - "conditionar", "conditioner", - "conditionel", "conditional", - "condolances", "condolences", - "condolenses", "condolences", - "condolonces", "condolences", - "conductiong", "conducting", - "condulences", "condolences", - "conenctions", "connections", - "conescutive", "consecutive", - "confedaracy", "confederacy", - "confedarate", "confederate", - "confederecy", "confederacy", - "conferances", "conferences", - "conferedate", "confederate", - "confererate", "confederate", - "confescated", "confiscated", - "confesssion", "confessions", - "confidantly", "confidently", - "configurare", "configure", - "configurate", "configure", - "configurato", "configuration", - "confilcting", "conflicting", - "confisgated", "confiscated", - "conflciting", "conflicting", - "confortable", "comfortable", - "confrontato", "confrontation", - "confussions", "confessions", - "congrassman", "congressman", - "congratuate", "congratulate", - "conicidence", "coincidence", - "conjonction", "conjunction", - "conjucntion", "conjunction", - "conjuncting", "conjunction", - "conlcusions", "conclusions", - "connatation", "connotation", - "connecitcut", "connecticut", - "connecticon", "connection", - "connectiong", "connecting", - "connectivty", "connectivity", - "connetation", "connotation", - "connonation", "connotation", - "connotacion", "connotation", - "conontation", "connotation", - "conotations", "connotations", - "conquerring", "conquering", - "consdidered", "considered", - "consectuive", "consecutive", - "consecuence", "consequence", - "conseguence", "consequence", - "conselation", "consolation", - "consentrate", "concentrate", - "consequenes", "consequence", - "consequense", "consequences", - "consequente", "consequence", - "consequenty", "consequently", - "consequtive", "consecutive", - "conservanti", "conservation", - "conservatie", "conservatives", - "conservaton", "conservation", - "consficated", "confiscated", - "considerabe", "considerate", - "considerais", "considers", - "considerant", "considerate", - "considerato", "consideration", - "considerble", "considerable", - "considerbly", "considerably", - "considereis", "considers", - "consilation", "consolation", - "consilidate", "consolidate", - "consistance", "consistency", - "consistenly", "consistently", - "consistensy", "consistency", - "consistenty", "consistently", - "consitution", "constitution", - "conslutants", "consultant", - "consolacion", "consolation", - "consoldiate", "consolidate", - "consolidare", "consolidate", - "consolodate", "consolidate", - "consomation", "consolation", - "conspiraces", "conspiracies", - "conspiracys", "conspiracies", - "conspirancy", "conspiracy", - "constantins", "constants", - "constantivs", "constants", - "constarints", "constraint", - "constituant", "constituent", - "constituion", "constitution", - "constituite", "constitute", - "constitutie", "constitutes", - "constrating", "constraint", - "constriants", "constraints", - "construcing", "constructing", - "construcion", "construction", - "construcive", "constructive", - "constructie", "constructive", - "constructos", "constructs", - "constructur", "constructor", - "constructus", "constructs", - "constuction", "construction", - "consturcted", "constructed", - "consuelling", "counselling", - "consulation", "consolation", - "consultaion", "consultation", - "consultanti", "consultation", - "consumation", "consumption", - "consumbales", "consumables", - "consumersim", "consumerism", - "consumibles", "consumables", - "contagiosum", "contagious", - "containered", "contained", - "containmemt", "containment", - "containters", "containers", - "containting", "containing", - "contaminato", "contamination", - "contaminent", "containment", - "contaminted", "contaminated", - "contancting", "contracting", - "contanimate", "contaminated", - "contemplare", "contemplate", - "contempoary", "contemporary", - "contemporay", "contemporary", - "contencious", "contentious", - "contenental", "continental", - "contengency", "contingency", - "contenintal", "continental", - "contenplate", "contemplate", - "contensious", "contentious", - "contentants", "contestants", - "contentuous", "contentious", - "contestaste", "contestants", - "contestents", "contestants", - "contianment", "containment", - "contientous", "contentious", - "contimplate", "contemplate", - "continenets", "continents", - "continentes", "continents", - "continentul", "continental", - "contingancy", "contingency", - "contingient", "contingent", - "contingincy", "contingency", - "continously", "continuously", - "continuarla", "continual", - "continuarlo", "continual", - "continuasse", "continues", - "continueing", "continuing", - "continuemos", "continues", - "continueous", "continuous", - "continuious", "continuous", - "continuning", "continuing", - "continunity", "continuity", - "continuosly", "continuously", - "continuting", "continuing", - "continutity", "continuity", - "continuuing", "continuing", - "continuuity", "continuity", - "contirbuted", "contributed", - "contiunally", "continually", - "contraccion", "contraction", - "contraddice", "contradicted", - "contradices", "contradicts", - "contradtion", "contraction", - "contraversy", "controversy", - "contreversy", "controversy", - "contribuent", "contribute", - "contribuito", "contribution", - "contributer", "contributor", - "contributie", "contribute", - "contributin", "contribution", - "contributos", "contributors", - "contribuyes", "contributes", - "contricting", "contracting", - "contriction", "contraction", - "contridicts", "contradicts", - "contriversy", "controversy", - "controleurs", "controllers", - "controllore", "controllers", - "controvercy", "controversy", - "controversa", "controversial", - "contrubutes", "contributes", - "contructing", "contracting", - "contruction", "construction", - "contructors", "contractors", - "conveinence", "convenience", - "conveneince", "convenience", - "conveniance", "convenience", - "conveniente", "convenience", - "convenietly", "conveniently", - "conventinal", "conventional", - "converitble", "convertible", - "conversaion", "conversion", - "conversatin", "conversations", - "converseley", "conversely", - "converstion", "conversion", - "convertirea", "converter", - "convertirle", "convertible", - "convertirme", "converter", - "convertirte", "converter", - "convicitons", "convictions", - "convienence", "convenience", - "convienient", "convenient", - "convinceing", "convincing", - "convincente", "convenient", - "convincersi", "convinces", - "convirtible", "convertible", - "cooperacion", "cooperation", - "cooperativo", "cooperation", - "cooporation", "cooperation", - "cooporative", "cooperative", - "coordenated", "coordinated", - "coordenates", "coordinates", - "coordianted", "coordinated", - "coordiantes", "coordinates", - "coordiantor", "coordinator", - "coordinador", "coordinator", - "coordinants", "coordinates", - "coordinater", "coordinator", - "coordinaton", "coordination", - "coordonated", "coordinated", - "coordonates", "coordinates", - "coordonator", "coordinator", - "cooridnated", "coordinated", - "cooridnates", "coordinates", - "cooridnator", "coordinator", - "copenhaagen", "copenhagen", - "copenhaegen", "copenhagen", - "copenhaguen", "copenhagen", - "copenhangen", "copenhagen", - "copmetitors", "competitors", - "coproration", "corporation", - "copyrigthed", "copyrighted", - "corinthains", "corinthians", - "corintheans", "corinthians", - "corinthiens", "corinthians", - "corinthinas", "corinthians", - "cornithians", "corinthians", - "corparation", "corporation", - "corperation", "corporation", - "corporacion", "corporation", - "corporativo", "corporation", - "corralation", "correlation", - "correctings", "corrections", - "correctivos", "corrections", - "correktions", "corrections", - "correktness", "correctness", - "correlacion", "correlation", - "correlaties", "correlates", - "corrilation", "correlation", - "corrisponds", "corresponds", - "corrolation", "correlation", - "corrosponds", "corresponds", - "costitution", "constitution", - "councellors", "councillors", - "counrtyside", "countryside", - "counsilling", "counselling", - "countercoat", "counteract", - "counteredit", "counterfeit", - "counterfact", "counteract", - "counterfait", "counterfeit", - "counterfest", "counterfeit", - "counterfiet", "counterfeit", - "counterpaly", "counterplay", - "counterpary", "counterplay", - "counterpath", "counterpart", - "counterpats", "counterparts", - "counterpont", "counterpoint", - "counterract", "counterpart", - "counterside", "countryside", - "countertrap", "counterpart", - "countriside", "countryside", - "countrycide", "countryside", - "countrywise", "countryside", - "courthourse", "courthouse", - "coutnerfeit", "counterfeit", - "coutnerpart", "counterpart", - "coutnerplay", "counterplay", - "creacionism", "creationism", - "creationkit", "creationist", - "creationsim", "creationism", - "creationsit", "creationist", - "creationsts", "creationists", - "creativelly", "creatively", - "credencials", "credentials", - "credentails", "credentials", - "credentaisl", "credentials", - "credientals", "credentials", - "credintials", "credentials", - "cricitising", "criticising", - "criculating", "circulating", - "cringeworhy", "cringeworthy", - "cringeworty", "cringeworthy", - "cringewothy", "cringeworthy", - "criticicing", "criticising", - "criticisied", "criticise", - "criticisims", "criticisms", - "criticisize", "criticise", - "criticiszed", "criticise", - "critisicing", "criticizing", - "critisising", "criticising", - "critizicing", "criticizing", - "critizising", "criticizing", - "critizizing", "criticizing", - "crockodiles", "crocodiles", - "crocodiller", "crocodile", - "crocodilule", "crocodile", - "croporation", "corporation", - "crossfiters", "crossfire", - "cultivative", "cultivate", - "curricullum", "curriculum", - "customizabe", "customizable", - "customizble", "customizable", - "dangeroulsy", "dangerously", - "dardenelles", "dardanelles", - "deadlifters", "deadlifts", - "dealershits", "dealerships", - "deceptivley", "deceptive", - "declaracion", "declaration", - "decleration", "declaration", - "declinining", "declining", - "decloration", "declaration", - "decoartions", "decoration", - "decomposits", "decomposes", - "decoratieve", "decorative", - "decorativos", "decorations", - "decotations", "decorations", - "decsendants", "descendants", - "deductiable", "deductible", - "defenderlas", "defenders", - "defenderlos", "defenders", - "defendernos", "defenders", - "defenesless", "defenseless", - "defenisvely", "defensively", - "defensivley", "defensively", - "deficiencey", "deficiency", - "deficienies", "deficiencies", - "deficientcy", "deficiency", - "definantley", "definately", - "definatedly", "definately", - "definateley", "definately", - "definatelly", "definately", - "definatelty", "definately", - "definatetly", "definately", - "definations", "definitions", - "definatlely", "definately", - "definetally", "definately", - "definetlely", "definetly", - "definitaley", "definately", - "definitelly", "definitely", - "definitevly", "definitively", - "definitiely", "definitively", - "definitieve", "definitive", - "definitiley", "definitively", - "definitivly", "definitively", - "definitivno", "definition", - "definitivos", "definitions", - "definitlely", "definitly", - "definitlety", "definitly", - "deflecticon", "deflection", - "degenererat", "degenerate", - "degradacion", "degradation", - "degradating", "degradation", - "degragation", "degradation", - "degridation", "degradation", - "dehyrdation", "dehydration", - "deinitalize", "deinitialize", - "delaerships", "dealerships", - "delapidated", "dilapidated", - "delcaration", "declaration", - "delearships", "dealerships", - "delevopment", "development", - "deliberante", "deliberate", - "deliberatly", "deliberately", - "deliberetly", "deliberately", - "delightlful", "delightful", - "deliverying", "delivering", - "delusionnal", "delusional", - "deminsional", "dimensional", - "democarcies", "democracies", - "democracize", "democracies", - "democractic", "democratic", - "democraphic", "demographic", - "democrasies", "democracies", - "democrazies", "democracies", - "democrocies", "democracies", - "demograhpic", "demographic", - "demographis", "demographics", - "demograpics", "demographics", - "demogrpahic", "demographic", - "demoninator", "denominator", - "demonstarte", "demonstrate", - "demonstates", "demonstrates", - "demonstraby", "demonstrably", - "demonstrant", "demonstrate", - "demonstrats", "demonstrates", - "demosntrate", "demonstrate", - "denegrating", "denigrating", - "denomenator", "denominator", - "denominador", "denominator", - "denominaron", "denominator", - "denominater", "denominator", - "denominaton", "denomination", - "denomitator", "denominator", - "denomonator", "denominator", - "denonimator", "denominator", - "deocrations", "decorations", - "deomcracies", "democracies", - "deparmental", "departmental", - "depedencies", "dependencies", - "dependancey", "dependency", - "dependencey", "dependency", - "dependencie", "dependence", - "dependenies", "dependencies", - "deplorabile", "deplorable", - "depressieve", "depressive", - "depresssion", "depression", - "deprevation", "deprivation", - "deprication", "deprivation", - "deprivating", "deprivation", - "deprivition", "deprivation", - "deprovation", "deprivation", - "depserately", "desperately", - "depseration", "desperation", - "deregulatin", "deregulation", - "derivativos", "derivatives", - "derivitaves", "derivatives", - "derivitives", "derivatives", - "derpivation", "deprivation", - "derviatives", "derivatives", - "descandants", "descendants", - "descendands", "descendants", - "descendends", "descended", - "descendenta", "descendants", - "descentants", "descendants", - "descirption", "descriptions", - "descprition", "descriptions", - "describiste", "describes", - "describtion", "description", - "descripcion", "description", - "descripiton", "descriptions", - "descripters", "descriptors", - "descriptoin", "descriptions", - "descriptons", "descriptions", - "descritpion", "descriptions", - "descrpition", "descriptions", - "desensitied", "desensitized", - "desensitzed", "desensitized", - "desentisize", "desensitized", - "desgination", "designation", - "designacion", "designation", - "designstion", "designation", - "desinations", "destinations", - "desingation", "designation", - "desitnation", "destination", - "desoriented", "disoriented", - "desparately", "desperately", - "desparation", "desperation", - "desperating", "desperation", - "desperatley", "desperately", - "despirately", "desperately", - "despiration", "desperation", - "destablized", "destabilized", - "destiantion", "destinations", - "destinaiton", "destinations", - "destinatons", "destinations", - "destinction", "destination", - "destraction", "destruction", - "destruccion", "destruction", - "destruciton", "destruction", - "destructivo", "destruction", - "destruktion", "destruction", - "destruktive", "destructive", - "deteoriated", "deteriorated", - "determanism", "determinism", - "determening", "determining", - "determenism", "determinism", - "determinare", "determine", - "determinato", "determination", - "determinded", "determine", - "determinsim", "determinism", - "detramental", "detrimental", - "detremental", "detrimental", - "detrimentul", "detrimental", - "detuschland", "deutschland", - "deustchland", "deutschland", - "deutchsland", "deutschland", - "deutcshland", "deutschland", - "deutschalnd", "deutschland", - "deutshcland", "deutschland", - "develepmont", "developments", - "develompent", "developments", - "developemnt", "developments", - "developmant", "developmental", - "developmetn", "developments", - "developmnet", "developments", - "developpers", "developers", - "develpoment", "developments", - "deveolpment", "developments", - "deveploment", "developments", - "devestating", "devastating", - "devistating", "devastating", - "deyhdration", "dehydration", - "diagnositcs", "diagnostic", - "diagnositic", "diagnostic", - "diagonstics", "diagnostic", - "dictatorhip", "dictatorship", - "dictionaire", "dictionaries", - "dictionairy", "dictionary", - "dictionarys", "dictionaries", - "dictionnary", "dictionary", - "differances", "differences", - "differantly", "differently", - "differental", "differential", - "differentes", "differences", - "differneces", "differences", - "differnetly", "differently", - "difficulity", "difficulty", - "difficultes", "difficulties", - "dificulties", "difficulties", - "dimensiones", "dimensions", - "dimentional", "dimensional", - "dimesnional", "dimensional", - "diminisheds", "diminishes", - "diminsihing", "diminishing", - "diminuitive", "diminutive", - "diminushing", "diminishing", - "dinosaurios", "dinosaurs", - "direccional", "directional", - "direcitonal", "directional", - "directorguy", "directory", - "directorios", "directors", - "direktional", "directional", - "disadvantge", "disadvantage", - "disagreemet", "disagreements", - "disagreemtn", "disagreements", - "disapperead", "disappeared", - "disapporval", "disapproval", - "disapprovel", "disapproval", - "disasterous", "disastrous", - "disastreous", "disastrous", - "disastrious", "disastrous", - "disastruous", "disastrous", - "disatisfied", "dissatisfied", - "disciplened", "disciplined", - "disciplinas", "disciplines", - "disciplince", "disciplines", - "disclipined", "disciplined", - "disclipines", "disciplines", - "discogrophy", "discography", - "discogrpahy", "discography", - "disconencts", "disconnects", - "disconneted", "disconnected", - "disconnnect", "disconnect", - "discontined", "discontinued", - "discontiued", "discontinued", - "discrapency", "discrepancy", - "discretited", "discredited", - "discrimante", "discriminate", - "discrimiate", "discriminate", - "discussiong", "discussing", - "discusssion", "discussions", - "disgraseful", "disgraceful", - "disgrateful", "disgraceful", - "disgrunteld", "disgruntled", - "disgustigly", "disgustingly", - "disgustingy", "disgustingly", - "disgustinly", "disgustingly", - "disicplined", "disciplined", - "disicplines", "disciplines", - "disingenuos", "disingenuous", - "dismanlting", "dismantling", - "dismantaled", "dismantled", - "dismanteled", "dismantled", - "disobediant", "disobedient", - "disocgraphy", "discography", - "disparingly", "disparagingly", - "dispensaire", "dispensaries", - "dispensarie", "dispenser", - "dispensiary", "dispensary", - "displacemnt", "displacement", - "disposicion", "disposition", - "disputandem", "disputandum", - "disqualifed", "disqualified", - "disregaring", "disregarding", - "dissapeared", "disappeared", - "dissapoined", "dissapointed", - "dissapointd", "dissapointed", - "dissapoited", "dissapointed", - "dissappears", "disappears", - "dissatisfed", "dissatisfied", - "disscusions", "discussions", - "dissertaion", "dissertation", - "dissipatore", "dissipate", - "distatesful", "distasteful", - "distatseful", "distasteful", - "disterbance", "disturbance", - "disticntion", "distinctions", - "distinciton", "distinction", - "distincitve", "distinctive", - "distinctily", "distinctly", - "distingiush", "distinguish", - "distinguise", "distinguished", - "distinktion", "distinction", - "distinquish", "distinguish", - "distirbance", "disturbance", - "distirbuted", "distribute", - "distirbutor", "distributor", - "distraccion", "distraction", - "distractons", "distracts", - "distraktion", "distraction", - "distribitor", "distributor", - "distribuent", "distribute", - "distribuite", "distribute", - "distribuito", "distribution", - "distributie", "distributed", - "distributin", "distribution", - "distributio", "distributor", - "distrobuted", "distributed", - "distrubance", "disturbance", - "distrubited", "distributed", - "distrubitor", "distributor", - "distrubuted", "distributed", - "distrubutor", "distributor", - "distructive", "destructive", - "distuingish", "distinguish", - "distunguish", "distinguish", - "disturbante", "disturbance", - "disturbence", "disturbance", - "disucssions", "discussions", - "divisionals", "divisions", - "doccumented", "documented", - "documantary", "documentary", - "documenatry", "documentary", - "documentare", "documentaries", - "documentato", "documentation", - "documentery", "documentary", - "documentory", "documentary", - "domesticted", "domesticated", - "dominateurs", "dominates", - "dominationg", "dominating", - "donwloading", "downloading", - "doublellift", "doublelift", - "downlaoding", "downloading", - "downloadbel", "downloadable", - "downloadbig", "downloading", - "downloadble", "downloadable", - "downvoteers", "downvoters", - "downvoteing", "downvoting", - "downvoteres", "downvoters", - "downvoteros", "downvoters", - "downvoteurs", "downvoters", - "downvotters", "downvoters", - "downvotting", "downvoting", - "dramaticaly", "dramatically", - "dramaticlly", "dramatically", - "drasitcally", "drastically", - "dsyfunction", "dysfunction", - "duetschland", "deutschland", - "durabillity", "durability", - "dyanmically", "dynamically", - "dymanically", "dynamically", - "dysfonction", "dysfunction", - "dysfucntion", "dysfunction", - "dysfunciton", "dysfunction", - "dysfunktion", "dysfunction", - "earhtquakes", "earthquakes", - "earthqaukes", "earthquakes", - "earthquacks", "earthquakes", - "economicaly", "economically", - "economiclly", "economically", - "economisiti", "economist", - "economistes", "economists", - "educacional", "educational", - "effeciently", "efficiently", - "effecitvely", "effectively", - "effectivley", "effectively", - "efficeintly", "efficiently", - "efficiantly", "efficiently", - "efficientcy", "efficiently", - "effortlesly", "effortlessly", - "effortlessy", "effortlessly", - "egaletarian", "egalitarian", - "egalitatian", "egalitarian", - "egaliterian", "egalitarian", - "egostitical", "egotistical", - "egotastical", "egotistical", - "egotestical", "egotistical", - "egotisitcal", "egotistical", - "egotisticle", "egotistical", - "egotystical", "egotistical", - "ehtnicities", "ethnicities", - "ejacluation", "ejaculation", - "ejacualtion", "ejaculation", - "electoratul", "electoral", - "electornics", "electronics", - "electricain", "electrician", - "electricial", "electrical", - "electricien", "electrician", - "electricion", "electrician", - "electricman", "electrician", - "electrisity", "electricity", - "electritian", "electrician", - "electrocity", "electricity", - "electrolyes", "electrolytes", - "electrolyts", "electrolytes", - "electroncis", "electrons", - "electroylte", "electrolytes", - "elementrary", "elementary", - "eleminating", "eliminating", - "elimanation", "elimination", - "eliminacion", "elimination", - "elimintates", "eliminates", - "ellipitcals", "elliptical", - "eloquentely", "eloquently", - "emabrassing", "embarassing", - "embaraasing", "embarassing", - "embarasaing", "embarassing", - "embarassign", "embarassing", - "embarassimg", "embarassing", - "embarassing", "embarrassing", - "embarissing", "embarassing", - "embarrasing", "embarrassing", - "embarressed", "embarrassed", - "embarrssing", "embarassing", - "emergancies", "emergencies", - "emergencias", "emergencies", - "emergenices", "emergencies", - "emmediately", "immediately", - "emmisarries", "emissaries", - "emotionella", "emotionally", - "empahsizing", "emphasizing", - "empathethic", "empathetic", - "emphacizing", "emphasizing", - "emphatising", "emphasizing", - "emphatizing", "emphasizing", - "emphazising", "emphasizing", - "emphesizing", "emphasizing", - "empiracally", "empirically", - "empirialism", "imperialism", - "empirialist", "imperialist", - "enchamtment", "enchantment", - "enchancment", "enchantment", - "enchanement", "enchantment", - "enchanthing", "enchanting", - "enchantmant", "enchantment", - "enchantmens", "enchantments", - "enchantmets", "enchantments", - "encomapsses", "encompasses", - "encompasess", "encompasses", - "encompesses", "encompasses", - "encounteres", "encounters", - "encoutnered", "encountered", - "encryptiion", "encryption", - "encyclopdia", "encyclopedia", - "encylopedia", "encyclopedia", - "endagnering", "endangering", - "endandering", "endangering", - "endorcement", "endorsement", - "endoresment", "endorsement", - "engagaments", "engagements", - "engeneering", "engineering", - "enginerring", "engineering", - "enginnering", "engineering", - "enlargments", "enlargements", - "enligthened", "enlightened", - "enourmously", "enormously", - "enterpirses", "enterprises", - "enterprices", "enterprises", - "enterprishe", "enterprises", - "entertainig", "entertaining", - "entertwined", "entertained", - "enthicities", "ethnicities", - "enthisiasts", "enthusiasts", - "enthuasists", "enthusiasts", - "enthuisasts", "enthusiasts", - "enthusaists", "enthusiasts", - "enthusiants", "enthusiast", - "enthusiasic", "enthusiastic", - "enthusiasim", "enthusiasm", - "enthusiasum", "enthusiasm", - "enthusiatic", "enthusiastic", - "enthusiests", "enthusiasts", - "enthusigasm", "enthusiasm", - "enthusisast", "enthusiasts", - "entrepeneur", "entrepreneur", - "entreperure", "entrepreneur", - "entrepeuner", "entrepreneur", - "entreprener", "entrepreneurs", - "entreprenur", "entrepreneur", - "entretained", "entertained", - "envinroment", "environments", - "enviorments", "environments", - "enviornment", "environment", - "envirnoment", "environment", - "enviroments", "environments", - "enviromnent", "environments", - "environemnt", "environment", - "environmnet", "environments", - "envrionment", "environment", - "equilavents", "equivalents", - "equilbirium", "equilibrium", - "equilevants", "equivalents", - "equilibirum", "equilibrium", - "equilibriam", "equilibrium", - "equilibruim", "equilibrium", - "equivalance", "equivalence", - "equivalants", "equivalents", - "equivalenet", "equivalents", - "equivallent", "equivalent", - "equivelance", "equivalence", - "equivelants", "equivalents", - "equivelents", "equivalents", - "equivilants", "equivalents", - "equivilence", "equivalence", - "equivilents", "equivalents", - "equivlalent", "equivalent", - "equivlanets", "equivalents", - "equivolence", "equivalence", - "equivolents", "equivalents", - "essencially", "essentially", - "essentailly", "essentially", - "essentialls", "essentials", - "essentually", "essentially", - "establising", "establishing", - "ethicallity", "ethically", - "ethincities", "ethnicities", - "ethniticies", "ethnicities", - "europeaners", "europeans", - "europeaness", "europeans", - "evaluatiing", "evaluating", - "evaluationg", "evaluating", - "evangalical", "evangelical", - "evangelikal", "evangelical", - "evengalical", "evangelical", - "evenhtually", "eventually", - "everyonehas", "everyones", - "everyonelse", "everyones", - "evidentally", "evidently", - "exacarbated", "exacerbated", - "exacberated", "exacerbated", - "exagerating", "exaggerating", - "exagerrated", "exaggerated", - "exagerrates", "exaggerates", - "exaggarated", "exaggerated", - "exaggareted", "exaggerate", - "exaggeratin", "exaggeration", - "exaggerrate", "exaggerate", - "exaggurated", "exaggerated", - "exarcebated", "exacerbated", - "excalmation", "exclamation", - "excepcional", "exceptional", - "exceptionel", "exceptional", - "excessivley", "excessively", - "exceutioner", "executioner", - "exchanching", "exchanging", - "exclamacion", "exclamation", - "exclamating", "exclamation", - "exclamativo", "exclamation", - "exclemation", "exclamation", - "exclimation", "exclamation", - "exclucivity", "exclusivity", - "exclusivety", "exclusivity", - "exclusivily", "exclusivity", - "exclusivley", "exclusively", - "excpetional", "exceptional", - "exculsively", "exclusively", - "exculsivity", "exclusivity", - "execitioner", "executioner", - "execptional", "exceptional", - "exectuables", "executable", - "exectuioner", "executioner", - "executionar", "executioner", - "executionor", "executioner", - "exerciseing", "exercising", - "exeuctioner", "executioner", - "existantial", "existential", - "existencial", "existential", - "existensial", "existential", - "existentiel", "existential", - "exlcamation", "exclamation", - "exlcusively", "exclusively", - "exlcusivity", "exclusivity", - "exoskelaton", "exoskeleton", - "expansiones", "expansions", - "expectantcy", "expectancy", - "expectating", "expectation", - "expectional", "exceptional", - "expendature", "expenditure", - "expendeture", "expenditure", - "expentiture", "expenditure", - "expereinced", "experienced", - "expereinces", "experiences", - "experements", "experiments", - "experianced", "experienced", - "experiances", "experiences", - "experiemnts", "experiments", - "experiening", "experiencing", - "experimetal", "experimental", - "experimeted", "experimented", - "experssions", "expressions", - "expiditions", "expeditions", - "expierenced", "experienced", - "expierences", "experiences", - "expirements", "experiments", - "explainging", "explaining", - "explaintory", "explanatory", - "explanaiton", "explanations", - "explanetary", "explanatory", - "explanetory", "explanatory", - "explanitary", "explanatory", - "explanotory", "explanatory", - "explenation", "explanation", - "explenatory", "explanatory", - "explicitely", "explicitly", - "explicitily", "explicitly", - "explination", "explanation", - "explinatory", "explanatory", - "exploitaion", "exploitation", - "exploitatie", "exploitative", - "explonation", "exploration", - "exploracion", "exploration", - "explorating", "exploration", - "explorerers", "explorers", - "explosiones", "explosions", - "explotacion", "exploration", - "expodential", "exponential", - "exponantial", "exponential", - "exponencial", "exponential", - "exponentiel", "exponential", - "expresscoin", "expression", - "expressivos", "expressions", - "expresssive", "expressive", - "expressview", "expressive", - "exprimental", "experimental", - "expropiated", "expropriated", - "extensiones", "extensions", - "extensivley", "extensively", - "extragavant", "extravagant", - "extrapalate", "extrapolate", - "extraploate", "extrapolate", - "extrapolant", "extrapolate", - "extrapolare", "extrapolate", - "extrapolite", "extrapolate", - "extrapulate", "extrapolate", - "extravagent", "extravagant", - "extravagina", "extravagant", - "extravegant", "extravagant", - "extravigant", "extravagant", - "extravogant", "extravagant", - "extremistas", "extremists", - "extremistes", "extremists", - "extropolate", "extrapolate", - "fabircation", "fabrication", - "fabricacion", "fabrication", - "fabrikation", "fabrication", - "facilitarte", "facilitate", - "facilitiate", "facilitate", - "facillitate", "facilitate", - "facisnation", "fascination", - "facsination", "fascination", - "factuallity", "factually", - "familairity", "familiarity", - "familairize", "familiarize", - "familiaries", "familiarize", - "familierize", "familiarize", - "fanatsizing", "fantasizing", - "fanficitons", "fanfiction", - "fantacising", "fantasizing", - "fantacizing", "fantasizing", - "fantasazing", "fantasizing", - "fantasiaing", "fantasizing", - "fantasyzing", "fantasizing", - "fantazising", "fantasizing", - "fascinacion", "fascination", - "fascinatinf", "fascination", - "fascisation", "fascination", - "fascization", "fascination", - "fashionalbe", "fashionable", - "fashoinable", "fashionable", - "fatalitites", "fatalities", - "favoritisme", "favorites", - "favoutrable", "favourable", - "felxibility", "flexibility", - "feministers", "feminists", - "feministisk", "feminists", - "fermentaion", "fermentation", - "fermenterad", "fermented", - "fertilizier", "fertilizer", - "fertizilers", "fertilizer", - "festivalens", "festivals", - "fignernails", "fingernails", - "fignerprint", "fingerprint", - "figurativly", "figuratively", - "finanically", "financially", - "finantially", "financially", - "fingerpints", "fingertips", - "fingerpoint", "fingerprint", - "fingertrips", "fingertips", - "firefighers", "firefighters", - "firefigther", "firefighters", - "firendzoned", "friendzoned", - "firghtening", "frightening", - "flatterende", "flattered", - "flawlessely", "flawlessly", - "flawlessley", "flawlessly", - "flexibiltiy", "flexibility", - "flourescent", "fluorescent", - "fluctuaties", "fluctuate", - "fluctuative", "fluctuate", - "flutteryshy", "fluttershy", - "forcefullly", "forcefully", - "foreseaable", "foreseeable", - "foresseable", "foreseeable", - "forgettting", "forgetting", - "forgiviness", "forgiveness", - "formallized", "formalized", - "formattting", "formatting", - "formidabble", "formidable", - "formidabelt", "formidable", - "formidabile", "formidable", - "fortitudine", "fortitude", - "fortuantely", "fortunately", - "fortunantly", "fortunately", - "fortunatley", "fortunately", - "fortunetely", "fortunately", - "franchieses", "franchises", - "frankensite", "frankenstein", - "frankensten", "frankenstein", - "fransiscans", "franciscans", - "freindships", "friendships", - "freindzoned", "friendzoned", - "frequenices", "frequencies", - "frequensies", "frequencies", - "frequenties", "frequencies", - "frequentily", "frequently", - "frequenzies", "frequencies", - "friendboned", "friendzoned", - "friendlines", "friendlies", - "friendzonie", "friendzoned", - "frientships", "friendships", - "frientzoned", "friendzoned", - "frightenend", "frightened", - "frightining", "frightening", - "frigthening", "frightening", - "frinedzoned", "friendzoned", - "frontlinies", "frontline", - "frontlinjen", "frontline", - "frustartion", "frustrations", - "frustracion", "frustration", - "frustraited", "frustrated", - "frustrantes", "frustrates", - "frustrasion", "frustrations", - "frustrasted", "frustrates", - "frustraties", "frustrates", - "fucntioning", "functioning", - "fulfillling", "fulfilling", - "fulfullment", "fulfillment", - "fullfilment", "fulfillment", - "fullscreeen", "fullscreen", - "funcitoning", "functioning", - "functionaly", "functionally", - "functionnal", "functional", - "fundamentas", "fundamentals", - "fundamently", "fundamental", - "fundametals", "fundamentals", - "fundamnetal", "fundamentals", - "fundemantal", "fundamental", - "fundemental", "fundamental", - "fundimental", "fundamental", - "furhtermore", "furthermore", - "furstration", "frustration", - "furthremore", "furthermore", - "furthurmore", "furthermore", - "futurisitic", "futuristic", - "gangsterest", "gangsters", - "gangsterous", "gangsters", - "gauntlettes", "gauntlets", - "geneologies", "genealogies", - "generalizng", "generalizing", - "generatting", "generating", - "genitaliban", "genitalia", - "gentlemanne", "gentlemen", - "girlfirends", "girlfriends", - "girlfreinds", "girlfriends", - "girlfrients", "girlfriends", - "glorifierad", "glorified", - "glorifindel", "glorified", - "goosebumbps", "goosebumps", - "govenrments", "governments", - "govermental", "governmental", - "governemnts", "governments", - "governmanet", "governmental", - "governmeant", "governmental", - "govormental", "governmental", - "gracefullly", "gracefully", - "grahpically", "graphically", - "grammarical", "grammatical", - "grammaticly", "grammatical", - "grammitical", "grammatical", - "graphcially", "graphically", - "grassrooots", "grassroots", - "gratuitious", "gratuitous", - "gratuituous", "gratuitous", - "gravitatiei", "gravitate", - "grilfriends", "girlfriends", - "grpahically", "graphically", - "guaranteeds", "guarantees", - "guerrillera", "guerrilla", - "gunslingner", "gunslinger", - "hamburgaren", "hamburger", - "hamburgeres", "hamburgers", - "hamburglers", "hamburgers", - "hamburguers", "hamburgers", - "handlebards", "handlebars", - "handrwiting", "handwriting", - "handycapped", "handicapped", - "hanidcapped", "handicapped", - "harassement", "harassment", - "harrasments", "harassments", - "harrassment", "harassment", - "harvestgain", "harvesting", - "headquartes", "headquarters", - "headquaters", "headquarters", - "hearhtstone", "hearthstone", - "heartborken", "heartbroken", - "heartbraker", "heartbreak", - "heartbrakes", "heartbreak", - "heartsthone", "hearthstone", - "heaviweight", "heavyweight", - "heavyweigth", "heavyweight", - "heavywieght", "heavyweight", - "helicoptors", "helicopters", - "helicotpers", "helicopters", - "helicpoters", "helicopters", - "helictopers", "helicopters", - "helikopters", "helicopters", - "hemipsheres", "hemisphere", - "hemishperes", "hemisphere", - "herathstone", "hearthstone", - "heterosexal", "heterosexual", - "hexidecimal", "hexadecimal", - "hierachical", "hierarchical", - "hierarcical", "hierarchical", - "highlighing", "highlighting", - "highschoool", "highschool", - "hipopotamus", "hippopotamus", - "historicaly", "historically", - "historicans", "historians", - "historietas", "histories", - "historinhas", "historians", - "homecomeing", "homecoming", - "homecomming", "homecoming", - "homelesness", "homelessness", - "homelessess", "homelessness", - "homeowneris", "homeowners", - "homoegenous", "homogeneous", - "homogeneize", "homogenize", - "homogenious", "homogeneous", - "homogenuous", "homogeneous", - "homophoboes", "homophobe", - "homosexuais", "homosexuals", - "homosexuels", "homosexuals", - "hopelessely", "hopelessly", - "hopelessley", "hopelessly", - "hopsitality", "hospitality", - "horizonatal", "horizontal", - "horizontaal", "horizontal", - "horizontaly", "horizontally", - "horrendeous", "horrendous", - "horrendious", "horrendous", - "horrenduous", "horrendous", - "hospitalzed", "hospitalized", - "hospotality", "hospitality", - "househoulds", "households", - "humanitarna", "humanitarian", - "humanitites", "humanities", - "humilitaing", "humiliating", - "humilitaion", "humiliation", - "humillating", "humiliating", - "humillation", "humiliation", - "hurricaines", "hurricanes", - "hurricances", "hurricanes", - "hurricanger", "hurricane", - "hyperbollic", "hyperbolic", - "hyperbrophy", "hypertrophy", - "hyperthropy", "hypertrophy", - "hypertorphy", "hypertrophy", - "hypertrohpy", "hypertrophy", - "hypocritcal", "hypocritical", - "hypocritial", "hypocritical", - "hypocrities", "hypocrite", - "hypothesees", "hypotheses", - "hypothesies", "hypothesis", - "hystericaly", "hysterically", - "hystericlly", "hysterically", - "iconclastic", "iconoclastic", - "idealisitic", "idealistic", - "identifible", "identifiable", - "identitites", "identities", - "identitties", "identities", - "ideologiers", "ideologies", - "ideologisen", "ideologies", - "ideologiset", "ideologies", - "ideologiske", "ideologies", - "illegallity", "illegally", - "illegitamte", "illegitimate", - "illegitmate", "illegitimate", - "illsutrator", "illustrator", - "illuminanti", "illuminati", - "illuminarti", "illuminati", - "illuminatti", "illuminati", - "illuminauti", "illuminati", - "illuminiati", "illuminati", - "illuminista", "illuminati", - "illumintati", "illuminati", - "illustarted", "illustrated", - "illustartor", "illustrator", - "illustraded", "illustrated", - "illustraion", "illustration", - "illustrater", "illustrator", - "illustratie", "illustrate", - "illustratin", "illustrations", - "illustraton", "illustration", - "imaganative", "imaginative", - "imaganitive", "imaginative", - "imaginacion", "imagination", - "imaginatiei", "imaginative", - "imaginating", "imagination", - "imaginativo", "imagination", - "imaginitave", "imaginative", - "imbalanaced", "imbalanced", - "imbalanaces", "imbalances", - "imbalancers", "imbalances", - "immatureity", "immaturity", - "immedeately", "immediately", - "immediantly", "immediately", - "immediatley", "immediately", - "immedietely", "immediately", - "immideately", "immediately", - "immidiately", "immediately", - "immigraiton", "immigration", - "immigrantes", "immigrants", - "immoratlity", "immortality", - "immortailty", "immortality", - "immortalisy", "immortals", - "impeccabile", "impeccable", - "imperailist", "imperialist", - "imperealist", "imperialist", - "imperialims", "imperialism", - "imperialsim", "imperialism", - "imperiarist", "imperialist", - "imperically", "empirically", - "imperislist", "imperialist", - "implausable", "implausible", - "implausbile", "implausible", - "implementas", "implements", - "implementes", "implements", - "implementig", "implementing", - "implementos", "implements", - "implicacion", "implication", - "implicatons", "implications", - "implicitely", "implicitly", - "implicitily", "implicitly", - "implikation", "implication", - "implimented", "implemented", - "importantce", "importance", - "importently", "importantly", - "imporvement", "improvement", - "impossibile", "impossible", - "impossibily", "impossibly", - "impossibley", "impossibly", - "impossiblly", "impossibly", - "impoverised", "impoverished", - "impracticle", "impractical", - "impressario", "impresario", - "impresssion", "impressions", - "imprisonent", "imprisonment", - "imprisonned", "imprisoned", - "improbabile", "improbable", - "improtantly", "importantly", - "improvemnts", "improvements", - "improvished", "improvised", - "improvision", "improvisation", - "improvments", "improvements", - "impulsivley", "impulsive", - "imrpovement", "improvement", - "inaccessble", "inaccessible", - "inaccuraces", "inaccuracies", - "inaccurrate", "inaccurate", - "inadvertant", "inadvertent", - "inaguration", "inauguration", - "inahbitants", "inhabitants", - "incarantion", "incarnation", - "incarcerato", "incarceration", - "incarnacion", "incarnation", - "incentivare", "incentive", - "incentivate", "incentive", - "incentivice", "incentive", - "incentivies", "incentives", - "incidencies", "incidence", - "incidentaly", "incidentally", - "incidential", "incidental", - "inclanation", "inclination", - "inclenation", "inclination", - "inclinacion", "inclination", - "inclinaison", "inclination", - "incognition", "incognito", - "incoherrent", "incoherent", - "incompatble", "incompatible", - "incompatent", "incompetent", - "incompetant", "incompetent", - "incompitent", "incompetent", - "incompotent", "incompetent", - "incomptable", "incompatible", - "inconsisent", "inconsistent", - "inconveniet", "inconvenient", - "incoroprate", "incorporate", - "incorparate", "incorporate", - "incorperate", "incorporate", - "incorporare", "incorporate", - "incorported", "incorporated", - "incorprates", "incorporates", - "incorproate", "incorporated", - "incramental", "incremental", - "increadible", "incredible", - "incrediable", "incredible", - "incrediably", "incredibly", - "incredibile", "incredible", - "incredibily", "incredibly", - "incredibley", "incredibly", - "incrememnts", "increments", - "incremenets", "increments", - "incrementas", "increments", - "incremently", "incremental", - "incrementos", "increments", - "incrimental", "incremental", - "inctroduced", "introduced", - "indefinetly", "indefinitely", - "indefininte", "indefinite", - "indefinitly", "indefinitely", - "indepdenent", "independents", - "indepedence", "independence", - "indepednent", "independents", - "independant", "independent", - "independece", "independence", - "independens", "independents", - "independetn", "independents", - "independets", "independents", - "independnet", "independents", - "indepentend", "independents", - "indepentent", "independent", - "indianapols", "indianapolis", - "indicateurs", "indicates", - "indicatiors", "indicators", - "indictement", "indictment", - "indifferant", "indifferent", - "indiffernce", "indifference", - "indigeneous", "indigenous", - "indigenious", "indigenous", - "indigenuous", "indigenous", - "indigineous", "indigenous", - "indipendent", "independent", - "indirectely", "indirectly", - "individiual", "individual", - "individuais", "individuals", - "individualy", "individually", - "individuati", "individuality", - "individuels", "individuals", - "indivuduals", "individuals", - "industriels", "industries", - "ineffecitve", "ineffective", - "ineffektive", "ineffective", - "inefficeint", "inefficient", - "inefficiant", "inefficient", - "ineffictive", "ineffective", - "ineffizient", "inefficient", - "inequallity", "inequality", - "inevitabile", "inevitable", - "inevitabily", "inevitably", - "inevitabley", "inevitably", - "inevitablly", "inevitably", - "inexpencive", "inexpensive", - "inexpenisve", "inexpensive", - "inexperiece", "inexperience", - "inexperince", "inexperience", - "inexplicaby", "inexplicably", - "infallibale", "infallible", - "infallibile", "infallible", - "infectation", "infestation", - "inferioirty", "inferiority", - "infestating", "infestation", - "infilitrate", "infiltrate", - "infiltartor", "infiltrator", - "infiltraron", "infiltrator", - "infiltrarte", "infiltrate", - "infiltrater", "infiltrator", - "infiltratie", "infiltrate", - "infiltrerat", "infiltrate", - "infinitelly", "infinitely", - "infintrator", "infiltrator", - "inflamation", "inflammation", - "inflatabale", "inflatable", - "inflitrator", "infiltrator", - "influancing", "influencing", - "influencial", "influential", - "influencian", "influencing", - "influenting", "influencing", - "influentual", "influential", - "influincing", "influencing", - "infograhpic", "infographic", - "infograpgic", "infographic", - "infogrpahic", "infographic", - "informacion", "information", - "informatice", "informative", - "informatief", "informative", - "informatiei", "informative", - "informatike", "informative", - "informativo", "information", - "informitive", "informative", - "infrigement", "infringement", - "infringeing", "infringing", - "infromation", "information", - "infromative", "informative", - "infulential", "influential", - "ingerdients", "ingredients", - "ingrediants", "ingredients", - "ingreidents", "ingredient", - "ingriedents", "ingredient", - "inhabitents", "inhabitants", - "inheirtance", "inheritance", - "inheratance", "inheritance", - "inheretance", "inheritance", - "inheritence", "inheritance", - "inhertiance", "inheritance", - "initaitives", "initiatives", - "initalisers", "initialisers", - "initalising", "initialising", - "initalizers", "initializers", - "initalizing", "initializing", - "initiaitive", "initiative", - "inititiaves", "initiatives", - "innocenters", "innocents", - "innocentius", "innocents", - "innoculated", "inoculated", - "inpsiration", "inspiration", - "inquisicion", "inquisition", - "inquisistor", "inquisitor", - "inquisiting", "inquisition", - "inquisitior", "inquisitor", - "inquisitivo", "inquisition", - "inquizition", "inquisition", - "insecurites", "insecurities", - "insensative", "insensitive", - "insensetive", "insensitive", - "insentitive", "insensitive", - "insepctions", "inspections", - "inseperable", "inseparable", - "insipration", "inspiration", - "insitutions", "institutions", - "insparation", "inspiration", - "inspecticon", "inspection", - "inspectoras", "inspectors", - "insperation", "inspiration", - "inspiracion", "inspiration", - "inspirating", "inspiration", - "inspriation", "inspiration", - "instalation", "installation", - "instalement", "installment", - "installatin", "installations", - "installeert", "installer", - "installemnt", "installment", - "installling", "installing", - "installmant", "installment", - "instanciate", "instantiate", - "instantaneu", "instantaneous", - "institucion", "institution", - "institutiei", "institute", - "instituttet", "institute", - "instraments", "instruments", - "instruccion", "instruction", - "instruciton", "instruction", - "instructers", "instructors", - "instructior", "instructor", - "instructios", "instructors", - "instructivo", "instruction", - "instructons", "instructors", - "instruktion", "instruction", - "instrumenal", "instrumental", - "instrumetal", "instrumental", - "insturction", "instruction", - "insturctors", "instructors", - "insturments", "instruments", - "instutition", "institution", - "instutution", "institution", - "insufficent", "insufficient", - "insuinating", "insinuating", - "insuniating", "insinuating", - "insurgencey", "insurgency", - "intangiable", "intangible", - "intangibile", "intangible", - "inteferring", "interfering", - "integracion", "integration", - "integratron", "integration", - "integrering", "interfering", - "intelectual", "intellectual", - "inteligence", "intelligence", - "intellectul", "intellectuals", - "intellectus", "intellectuals", - "intellecual", "intellectual", - "intellegent", "intelligent", - "intelligant", "intelligent", - "intencional", "intentional", - "intentionly", "intentional", - "interaccion", "interaction", - "interactice", "interactive", - "interacties", "interacts", - "interactifs", "interacts", - "interactins", "interacts", - "interactios", "interacts", - "interactivo", "interaction", - "interactons", "interacts", - "interaktion", "interaction", - "interaktive", "interactive", - "interasting", "interacting", - "intercation", "integration", - "interceptin", "interception", - "intercoarse", "intercourse", - "intercource", "intercourse", - "interecting", "interacting", - "interection", "interaction", - "interelated", "interrelated", - "interersted", "interpreted", - "interesring", "interfering", - "interessted", "interested", - "interferece", "interference", - "interferens", "interferes", - "interferire", "interfere", - "interfernce", "interference", - "interferred", "interfere", - "interferres", "interferes", - "intergation", "integration", - "intergrated", "integrated", - "intermedate", "intermediate", - "intermedite", "intermediate", - "intermitent", "intermittent", - "internation", "international", - "interneters", "internets", - "internetese", "internets", - "internetest", "internets", - "interneting", "interesting", - "internetors", "internets", - "internettes", "internets", - "interperted", "interpreted", - "interperter", "interpreter", - "interprered", "interpreter", - "interpretor", "interpreter", - "interratial", "interracial", - "interresing", "interfering", - "interrogato", "interrogation", - "interrputed", "interrupted", - "interruping", "interrupting", - "interruptes", "interrupts", - "interruptis", "interrupts", - "intersecton", "intersection", - "interstelar", "interstellar", - "intertained", "intertwined", - "intertvined", "intertwined", - "intertwyned", "intertwined", - "intervalles", "intervals", - "intervation", "integration", - "interveiwed", "interviewed", - "interveiwer", "interviewer", - "intervenion", "intervening", - "intervenire", "intervene", - "interventie", "intervene", - "intervewing", "intervening", - "interviened", "interviewed", - "interviewes", "interviews", - "interviewie", "interviewer", - "intervining", "intervening", - "interwebers", "interwebs", - "interwiever", "interviewer", - "intestinces", "intestines", - "inticracies", "intricacies", - "intimadated", "intimidated", - "intimidades", "intimidated", - "intimidante", "intimidate", - "intimidatie", "intimidated", - "intimidatin", "intimidation", - "intimidaton", "intimidation", - "intimidiate", "intimidate", - "intiminated", "intimidated", - "intimitaded", "intimidated", - "intimitated", "intimidated", - "intiutively", "intuitively", - "intoleranse", "intolerance", - "intolerante", "intolerance", - "intolerence", "intolerance", - "intolernace", "intolerance", - "intolorance", "intolerance", - "intolorence", "intolerance", - "intorducing", "introducing", - "intorverted", "introverted", - "intoxicatin", "intoxication", - "intoxicaton", "intoxication", - "intoxinated", "intoxicated", - "intoxocated", "intoxicated", - "intracacies", "intricacies", - "intracicies", "intricacies", - "intraverted", "introverted", - "intrecacies", "intricacies", - "intrepreted", "interpreted", - "intrepreter", "interpreter", - "intrerupted", "interrupted", - "intricasies", "intricacies", - "intricicies", "intricacies", - "intrigueing", "intriguing", - "intrinsisch", "intrinsic", - "introducion", "introduction", - "introducted", "introduced", - "introductie", "introduce", - "introvertie", "introverted", - "introvertis", "introverts", - "intruducing", "introducing", - "intrumental", "instrumental", - "intuatively", "intuitively", - "intuitevely", "intuitively", - "intuitivley", "intuitively", - "intuituvely", "intuitively", - "inutitively", "intuitively", - "invaldiates", "invalidates", - "invalidades", "invalidates", - "invalidante", "invalidate", - "invariabley", "invariably", - "invariablly", "invariably", - "inventiones", "inventions", - "invesitgate", "investigate", - "investagate", "investigate", - "investiagte", "investigate", - "investigare", "investigate", - "invincibile", "invincible", - "invincinble", "invincible", - "invisibiity", "invisibility", - "invisibiliy", "invisibility", - "involantary", "involuntary", - "involentary", "involuntary", - "involintary", "involuntary", - "involontary", "involuntary", - "involunatry", "involuntary", - "invulnerabe", "invulnerable", - "invulnerble", "invulnerable", - "iresistable", "irresistible", - "iresistably", "irresistibly", - "iresistible", "irresistible", - "iresistibly", "irresistibly", - "irrationaly", "irrationally", - "irrationnal", "irrational", - "islamisists", "islamists", - "islamisters", "islamists", - "islamistisk", "islamists", - "isntruments", "instruments", - "jacksonvile", "jacksonville", - "jailbroaken", "jailbroken", - "jailbrocken", "jailbroken", - "jounralists", "journalists", - "jouranlists", "journalists", - "journalisim", "journalism", - "journalistc", "journalistic", - "journolists", "journalists", - "judegmental", "judgemental", - "judgamental", "judgemental", - "judgementle", "judgemental", - "judgementsl", "judgemental", - "judgenental", "judgemental", - "jugdemental", "judgemental", - "juggernaugt", "juggernaut", - "juggernault", "juggernaut", - "juggernaunt", "juggernaut", - "justifyable", "justifiable", - "kidnappning", "kidnapping", - "kidnappping", "kidnapping", - "kilometeres", "kilometers", - "kindergaten", "kindergarten", - "knowledgabe", "knowledgable", - "knowledgble", "knowledgable", - "kryptoninte", "kryptonite", - "lacklusture", "lackluster", - "laughablely", "laughably", - "legalizaing", "legalizing", - "legalizaton", "legalization", - "legalizeing", "legalizing", - "legenadries", "legendaries", - "legendaires", "legendaries", - "legendarios", "legendaries", - "legendarisk", "legendaries", - "legendaryes", "legendaries", - "legenderies", "legendaries", - "legilsation", "legislation", - "legislacion", "legislation", - "legislativo", "legislation", - "legistation", "legislation", - "legistative", "legislative", - "legistators", "legislators", - "legitematly", "legitimately", - "legitimancy", "legitimacy", - "legitimatcy", "legitimacy", - "legitimatly", "legitimately", - "legitimetly", "legitimately", - "legnedaries", "legendaries", - "lengedaries", "legendaries", - "liberalisim", "liberalism", - "liberatrian", "libertarians", - "libertairan", "libertarians", - "libertarain", "libertarian", - "libertarias", "libertarians", - "libertarien", "libertarian", - "libertaryan", "libertarian", - "libertatian", "libertarian", - "liberterian", "libertarian", - "libguistics", "linguistics", - "libretarian", "libertarian", - "lieutennant", "lieutenant", - "lieutentant", "lieutenant", - "lightenning", "lightening", - "lightenting", "lightening", - "lightheared", "lighthearted", - "lightheated", "lighthearted", - "lightweigth", "lightweight", - "lightwieght", "lightweight", - "lightwright", "lightweight", - "ligthweight", "lightweight", - "limitaitons", "limitation", - "linguisitcs", "linguistics", - "linguisitic", "linguistic", - "lingusitics", "linguistics", - "lithuaninan", "lithuania", - "littlefiger", "littlefinger", - "littlefiner", "littlefinger", - "lockscreeen", "lockscreen", - "longevitity", "longevity", - "lotharingen", "lothringen", - "louisvillle", "louisville", - "maginficent", "magnificent", - "magneficent", "magnificent", - "magnicifent", "magnificent", - "magnifacent", "magnificent", - "magnifecent", "magnificent", - "magnificant", "magnificent", - "magnitudine", "magnitude", - "maintainted", "maintained", - "maintanance", "maintenance", - "maintanence", "maintenance", - "maintenence", "maintenance", - "maintianing", "maintaining", - "maintinaing", "maintaining", - "maintinance", "maintenance", - "maintinence", "maintenance", - "malfonction", "malfunction", - "malfucntion", "malfunction", - "malfunciton", "malfunction", - "malfuncting", "malfunction", - "malfunktion", "malfunction", - "malpractise", "malpractice", - "malpractive", "malpractice", - "maneouvring", "manoeuvring", - "manifestado", "manifesto", - "manifestano", "manifesto", - "manifestato", "manifesto", - "manifestion", "manifesto", - "manifestior", "manifesto", - "manifestons", "manifests", - "manifestors", "manifests", - "manipluated", "manipulated", - "manipualted", "manipulated", - "manipulatie", "manipulative", - "manipulatin", "manipulation", - "manipulaton", "manipulation", - "maniuplated", "manipulated", - "mannerisims", "mannerisms", - "manslaugher", "manslaughter", - "manslaugter", "manslaughter", - "manufacters", "manufactures", - "manufacteur", "manufactures", - "manufactued", "manufactured", - "manufactuer", "manufacture", - "manufacturs", "manufactures", - "manufacuter", "manufacture", - "manufacutre", "manufactures", - "manufatured", "manufactured", - "manupilated", "manipulated", - "marganilize", "marginalized", - "marhsmallow", "marshmallow", - "marijuannas", "marijuana", - "markerplace", "marketplace", - "marketpalce", "marketplace", - "marshamllow", "marshmallow", - "marshmalows", "marshmallows", - "masculanity", "masculinity", - "masculenity", "masculinity", - "masrhmallow", "marshmallow", - "mastermined", "mastermind", - "masterpeace", "masterpiece", - "masterpeice", "masterpiece", - "mastrubated", "masturbated", - "mastrubates", "masturbate", - "masturabted", "masturbated", - "masturbaing", "masturbating", - "masturbarte", "masturbate", - "masturbathe", "masturbated", - "masturbatie", "masturbated", - "masturbatin", "masturbation", - "masturbaton", "masturbation", - "masturbsted", "masturbated", - "masturpiece", "masterpiece", - "masuclinity", "masculinity", - "matchamking", "matchmaking", - "materalists", "materialist", - "materialsim", "materialism", - "mathamatics", "mathematics", - "mathcmaking", "matchmaking", - "mathemagics", "mathematics", - "mathemetics", "mathematics", - "mathimatics", "mathematics", - "matieralism", "materialism", - "maybelleine", "maybelline", - "maybelliene", "maybelline", - "maybellinne", "maybelline", - "maybellline", "maybelline", - "mdifielders", "midfielders", - "meatballers", "meatballs", - "mecernaries", "mercenaries", - "mechanicaly", "mechanically", - "mechanichal", "mechanical", - "mechaniclly", "mechanically", - "mechanicsms", "mechanisms", - "mechanisims", "mechanism", - "mechanismus", "mechanisms", - "medicaitons", "medications", - "medicineras", "medicines", - "meditatiing", "meditating", - "meditationg", "meditating", - "mentionning", "mentioning", - "mercanaries", "mercenaries", - "mercaneries", "mercenaries", - "mercenaires", "mercenaries", - "mercenarias", "mercenaries", - "mercenarios", "mercenaries", - "merceneries", "mercenaries", - "merchandice", "merchandise", - "merchandies", "merchandise", - "merchanidse", "merchandise", - "merchanters", "merchants", - "merchendise", "merchandise", - "merchindise", "merchandise", - "mercinaries", "mercenaries", - "mercineries", "mercenaries", - "metabolisim", "metabolism", - "metabolitic", "metabolic", - "metaphisics", "metaphysics", - "metaphorial", "metaphorical", - "metaphorics", "metaphors", - "metaphsyics", "metaphysics", - "metaphyiscs", "metaphysics", - "methodoligy", "methodology", - "metholodogy", "methodology", - "metropolian", "metropolitan", - "metropolies", "metropolis", - "metropollis", "metropolis", - "metropolois", "metropolis", - "micorcenter", "microcenter", - "micorphones", "microphones", - "microcender", "microcenter", - "microcentre", "microcenter", - "microcentro", "microcenter", - "microhpones", "microphones", - "microscrope", "microscope", - "microwavees", "microwaves", - "microwavers", "microwaves", - "midfeilders", "midfielders", - "midfiedlers", "midfielders", - "midfileders", "midfielders", - "midifelders", "midfielders", - "millienaire", "millionaire", - "millionairs", "millionaires", - "millionarie", "millionaire", - "millioniare", "millionaire", - "mindlessely", "mindlessly", - "mindlessley", "mindlessly", - "minimalstic", "minimalist", - "ministerens", "ministers", - "ministerios", "ministers", - "minneaoplis", "minneapolis", - "minneaplois", "minneapolis", - "minniapolis", "minneapolis", - "miraculaous", "miraculous", - "miraculosly", "miraculously", - "miraculousy", "miraculously", - "mircocenter", "microcenter", - "mircophones", "microphones", - "mircoscopic", "microscopic", - "miscairrage", "miscarriage", - "miscarraige", "miscarriage", - "miscarridge", "miscarriage", - "miscarriege", "miscarriage", - "mischeivous", "mischievous", - "mischevious", "mischievous", - "misdameanor", "misdemeanor", - "misdeamenor", "misdemeanor", - "misdemeaner", "misdemeanor", - "misdemenaor", "misdemeanor", - "misdemenors", "misdemeanors", - "misdimeanor", "misdemeanor", - "misdomeanor", "misdemeanor", - "miserablely", "miserably", - "misfortunte", "misfortune", - "misimformed", "misinformed", - "misinterept", "misinterpret", - "misinterpet", "misinterpret", - "misoginysts", "misogynist", - "misognyists", "misogynist", - "misogyinsts", "misogynist", - "misogynisic", "misogynistic", - "misogynistc", "misogynistic", - "misogynstic", "misogynist", - "missionaire", "missionaries", - "missionairy", "missionary", - "missionares", "missionaries", - "missionaris", "missionaries", - "missionarry", "missionary", - "missionnary", "missionary", - "mississipis", "mississippi", - "misspeeling", "misspelling", - "misspellled", "misspelled", - "mistakengly", "mistakenly", - "mistakently", "mistakenly", - "moderatedly", "moderately", - "moderateurs", "moderates", - "moderatorin", "moderation", - "modificaton", "modification", - "moisterizer", "moisturizer", - "moistruizer", "moisturizer", - "moisturizng", "moisturizing", - "moisturizor", "moisturizer", - "moistutizer", "moisturizer", - "moisutrizer", "moisturizer", - "moleculaire", "molecular", - "molestating", "molestation", - "moleststion", "molestation", - "momemtarily", "momentarily", - "momentairly", "momentarily", - "momentaraly", "momentarily", - "momentarely", "momentarily", - "momenterily", "momentarily", - "monestaries", "monasteries", - "monitoreada", "monitored", - "monitoreado", "monitored", - "monogameous", "monogamous", - "monolitihic", "monolithic", - "monopollies", "monopolies", - "monstorsity", "monstrosity", - "monstrasity", "monstrosity", - "monstrisity", "monstrosity", - "monstrocity", "monstrosity", - "monstrosoty", "monstrosity", - "monstrostiy", "monstrosity", - "monumentaal", "monumental", - "monumentais", "monuments", - "monumentals", "monuments", - "monumentous", "monuments", - "mositurizer", "moisturizer", - "mosntrosity", "monstrosity", - "motehrboard", "motherboard", - "mothebroard", "motherboards", - "motherbaord", "motherboard", - "motherboads", "motherboards", - "motherboars", "motherboards", - "motherborad", "motherboard", - "motherbords", "motherboards", - "motherobard", "motherboards", - "mothreboard", "motherboards", - "motivatinal", "motivational", - "motorcicles", "motorcycles", - "motorcylces", "motorcycles", - "mouthpeices", "mouthpiece", - "mulitplayer", "multiplayer", - "mulitplying", "multiplying", - "multipalyer", "multiplayer", - "multiplater", "multiplayer", - "multiplebgs", "multiples", - "multipleies", "multiples", - "multitaskng", "multitasking", - "multitudine", "multitude", - "multiverese", "multiverse", - "multyplayer", "multiplayer", - "multyplying", "multiplying", - "muncipality", "municipality", - "murdererous", "murderers", - "musicallity", "musically", - "mutliplayer", "multiplayer", - "mutliplying", "multiplying", - "mysterieuse", "mysteries", - "mysteriosly", "mysteriously", - "mysteriouly", "mysteriously", - "mysteriousy", "mysteriously", - "napoleonian", "napoleonic", - "narcisissim", "narcissism", - "narcisissts", "narcissist", - "narcisscism", "narcissism", - "narcisscist", "narcissist", - "narcissisim", "narcissism", - "narcississm", "narcissism", - "narcississt", "narcissist", - "narcissistc", "narcissistic", - "narcissitic", "narcissistic", - "narcisssism", "narcissism", - "narcisssist", "narcissist", - "narcissstic", "narcissist", - "natioanlist", "nationalist", - "nationailty", "nationality", - "nationalesl", "nationals", - "nationalisn", "nationals", - "nationalite", "nationalist", - "nationalits", "nationalist", - "nationalizm", "nationalism", - "nationalsim", "nationalism", - "neccesarily", "necessarily", - "necessairly", "necessarily", - "necessaties", "necessities", - "necesseraly", "necessarily", - "necesserily", "necessarily", - "necessiates", "necessities", - "necessitive", "necessities", - "neckbeardos", "neckbeards", - "neckbeardus", "neckbeards", - "necormancer", "necromancer", - "necromamcer", "necromancer", - "necromanser", "necromancer", - "necromencer", "necromancer", - "needlessley", "needlessly", - "negativeity", "negativity", - "negativelly", "negatively", - "negativitiy", "negativity", - "negiotating", "negotiating", - "negligiable", "negligible", - "negociating", "negotiating", - "negociation", "negotiation", - "negoitating", "negotiating", - "negoitation", "negotiation", - "negotiatied", "negotiate", - "negotiative", "negotiate", - "negotiatons", "negotiations", - "neigborhood", "neighborhood", - "neigbouring", "neighbouring", - "neighborhod", "neighborhood", - "neighbourgs", "neighbours", - "neighouring", "neighboring", - "nercomancer", "necromancer", - "nessasarily", "necessarily", - "neurologial", "neurological", - "neurosciene", "neuroscience", - "neutrallity", "neutrality", - "neverthelss", "nevertheless", - "neverthless", "nevertheless", - "newspapaers", "newspapers", - "newspappers", "newspapers", - "nieghboring", "neighboring", - "nightmarket", "nightmare", - "nonsencical", "nonsensical", - "nonsenscial", "nonsensical", - "nonsensicle", "nonsensical", - "normallized", "normalized", - "northwesten", "northwestern", - "nostalgisch", "nostalgic", - "noteworthly", "noteworthy", - "noticeabley", "noticeably", - "notificaton", "notification", - "notoriuosly", "notoriously", - "numericable", "numerical", - "nurtitional", "nutritional", - "nutricional", "nutritional", - "nutrutional", "nutritional", - "obamination", "abomination", - "obersvation", "observation", - "obilterated", "obliterated", - "objectivety", "objectivity", - "objectivify", "objectivity", - "objectivily", "objectivity", - "objectivley", "objectively", - "obliberated", "obliterated", - "obliderated", "obliterated", - "obligerated", "obliterated", - "oblitarated", "obliterated", - "obliteraded", "obliterated", - "obliterared", "obliterated", - "oblitirated", "obliterated", - "oblitorated", "obliterated", - "obliverated", "obliterated", - "observacion", "observation", - "observaiton", "observant", - "observasion", "observations", - "observating", "observation", - "observerats", "observers", - "obsessivley", "obsessive", - "obstruccion", "obstruction", - "obstruktion", "obstruction", - "obsturction", "obstruction", - "obversation", "observation", - "ocasionally", "occasionally", - "ocassionaly", "occasionally", - "occasionals", "occasions", - "occasionaly", "occasionally", - "occasionnal", "occasional", - "occassional", "occasional", - "occassioned", "occasioned", - "occurrances", "occurrences", - "offensivley", "offensively", - "offesnively", "offensively", - "officiallly", "officially", - "olbiterated", "obliterated", - "omniscienct", "omniscient", - "operacional", "operational", - "operasional", "operational", - "operationel", "operational", - "oppresssing", "oppressing", - "oppresssion", "oppression", - "opprotunity", "opportunity", - "optimisitic", "optimistic", - "optimizaton", "optimization", - "orchestraed", "orchestrated", - "orchestrial", "orchestra", - "oreintation", "orientation", - "organisaton", "organisation", - "organiserad", "organised", - "organistion", "organisation", - "organizarea", "organizer", - "organizarem", "organizer", - "organizarme", "organizer", - "organizarte", "organizer", - "organiztion", "organization", - "oridinarily", "ordinarily", - "orientacion", "orientation", - "originially", "originally", - "originnally", "originally", - "origniality", "originality", - "ostensiably", "ostensibly", - "ostensibily", "ostensibly", - "outclasssed", "outclassed", - "outnunbered", "outnumbered", - "outperfroms", "outperform", - "outpreforms", "outperform", - "outrageosly", "outrageously", - "outrageouly", "outrageously", - "outragerous", "outrageous", - "outskirters", "outskirts", - "outsorucing", "outsourcing", - "outsourcade", "outsourced", - "outsoursing", "outsourcing", - "overbraking", "overbearing", - "overcapping", "overlapping", - "overcharing", "overarching", - "overclcoked", "overclocked", - "overclicked", "overclocked", - "overcloaked", "overclocked", - "overclocing", "overclocking", - "overclockig", "overclocking", - "overclocled", "overclocked", - "overcomeing", "overcoming", - "overcomming", "overcoming", - "overeaching", "overarching", - "overfapping", "overlapping", - "overheading", "overheating", - "overhooking", "overlooking", - "overhwelmed", "overwhelmed", - "overkapping", "overlapping", - "overklocked", "overclocked", - "overlapsing", "overlapping", - "overlcocked", "overclocked", - "overlcoking", "overlooking", - "overlooming", "overlooking", - "overloooked", "overlooked", - "overlordess", "overlords", - "overmapping", "overlapping", - "overpooling", "overlooking", - "overpovered", "overpowered", - "overpoweing", "overpowering", - "overreacing", "overreacting", - "overreactin", "overreaction", - "overreacton", "overreaction", - "overshaddow", "overshadowed", - "overshadowd", "overshadowed", - "overtapping", "overlapping", - "overthining", "overthinking", - "overthinkig", "overthinking", - "overvlocked", "overclocked", - "overwealmed", "overwhelmed", - "overwelming", "overwhelming", - "overwhelemd", "overwhelmed", - "overwhelimg", "overwhelm", - "overwheling", "overwhelming", - "overwhemled", "overwhelmed", - "overwhlemed", "overwhelmed", - "overwritted", "overwrite", - "pakistanais", "pakistani", - "pakistanezi", "pakistani", - "palceholder", "placeholder", - "palesitnian", "palestinians", - "palestenian", "palestinian", - "palestinain", "palestinians", - "palestinans", "palestinians", - "palestinier", "palestine", - "palistinian", "palestinian", - "palythrough", "playthrough", - "papanicalou", "papanicolaou", - "parachutage", "parachute", - "paragraphes", "paragraphs", - "paramedicks", "paramedics", - "paramedicos", "paramedics", - "parameteres", "parameters", - "paranthesis", "parenthesis", - "parapharsed", "paraphrase", - "paraprhased", "paraphrase", - "parasitisme", "parasites", - "parenthasis", "parenthesis", - "parenthesys", "parentheses", - "parenthises", "parenthesis", - "parenthisis", "parenthesis", - "parliamenty", "parliamentary", - "parntership", "partnership", - "parrallelly", "parallelly", - "partecipant", "participant", - "partecipate", "participate", - "parternship", "partnership", - "partiarchal", "patriarchal", - "particapate", "participate", - "particiapte", "participate", - "participait", "participant", - "participans", "participants", - "participare", "participate", - "participatd", "participant", - "participati", "participant", - "participats", "participant", - "participent", "participant", - "particpiate", "participated", - "particually", "particularly", - "particulaly", "particularly", - "particulary", "particularly", - "partnetship", "partnership", - "partonizing", "patronizing", - "passionatly", "passionately", - "passionetly", "passionately", - "passionnate", "passionate", - "passporters", "passports", - "pathologial", "pathological", - "patriarchia", "patriarchal", - "patriarcial", "patriarchal", - "patriarical", "patriarchal", - "patriotisch", "patriotic", - "patriotisim", "patriotism", - "patriottism", "patriotism", - "patronozing", "patronizing", - "peacefullly", "peacefully", - "pedestirans", "pedestrians", - "pedestrains", "pedestrians", - "pedophilies", "pedophile", - "pedophilles", "pedophile", - "penetracion", "penetration", - "penetrading", "penetrating", - "penetrarion", "penetration", - "penninsular", "peninsular", - "pennsylvnia", "pennsylvania", - "pepperocini", "pepperoni", - "percantages", "percentages", - "percautions", "precautions", - "percentille", "percentile", - "percpetions", "perceptions", - "percusssion", "percussion", - "perdicament", "predicament", - "perdictable", "predictable", - "perdictions", "predictions", - "perephirals", "peripherals", - "pereptually", "perpetually", - "perferences", "preferences", - "perfomrance", "performances", - "perforamnce", "performances", - "performaces", "performances", - "performacne", "performances", - "performanes", "performances", - "performanse", "performances", - "performence", "performance", - "performnace", "performances", - "perfromance", "performance", - "perhiperals", "peripherals", - "perihperals", "peripherals", - "periodicaly", "periodically", - "periperhals", "peripherals", - "periphereal", "peripheral", - "peripherial", "peripheral", - "periphirals", "peripherals", - "periphreals", "peripherals", - "periphrials", "peripherals", - "perjorative", "pejorative", - "perliminary", "preliminary", - "permamently", "permanently", - "permanantly", "permanently", - "permaturely", "prematurely", - "permenantly", "permanently", - "permenently", "permanently", - "perminantly", "permanently", - "perminently", "permanently", - "permisisons", "permissions", - "permissable", "permissible", - "permisssion", "permissions", - "pernamently", "permanently", - "perosnality", "personality", - "perparation", "preparation", - "perpatrated", "perpetrated", - "perpatrator", "perpetrator", - "perpatuated", "perpetuated", - "perpatuates", "perpetuates", - "perpertated", "perpetuated", - "perpertator", "perpetrators", - "perpetraded", "perpetrated", - "perpetrador", "perpetrator", - "perpetraron", "perpetrator", - "perpetrater", "perpetrator", - "perpetuaded", "perpetuated", - "perpetutate", "perpetuate", - "perpetuties", "perpetuates", - "perpitrated", "perpetrated", - "perpitrator", "perpetrator", - "perpretated", "perpetrated", - "perpretator", "perpetrators", - "perpsective", "perspective", - "perputrator", "perpetrator", - "perputually", "perpetually", - "perputuated", "perpetuated", - "perputuates", "perpetuates", - "perrogative", "prerogative", - "persceptive", "perspectives", - "persectuion", "persecution", - "persecucion", "persecution", - "persecusion", "persecution", - "persecutted", "persecuted", - "persepctive", "perspective", - "persicution", "persecution", - "persistance", "persistence", - "persistante", "persistent", - "persistense", "persistence", - "persistente", "persistence", - "personhoood", "personhood", - "perspecitve", "perspective", - "perspectief", "perspective", - "perspektive", "perspective", - "persuassion", "persuasion", - "persuassive", "persuasive", - "persucution", "persecution", - "persumption", "presumption", - "pertubation", "perturbation", - "pessimestic", "pessimistic", - "pharamcists", "pharmacist", - "phenomenona", "phenomena", - "philadelpha", "philadelphia", - "philadelpia", "philadelphia", - "philiphines", "philippines", - "philippenes", "philippines", - "philippenis", "philippines", - "philippides", "philippines", - "philippinas", "philippines", - "philippinos", "philippines", - "philisopher", "philosopher", - "phillipines", "philippines", - "philosipher", "philosopher", - "philosopers", "philosophers", - "philosophae", "philosopher", - "philosophia", "philosophical", - "philosopies", "philosophies", - "philosphies", "philosophies", - "philospoher", "philosopher", - "photograhed", "photographed", - "photograher", "photographer", - "photograhic", "photographic", - "photograhpy", "photography", - "photograped", "photographed", - "photograper", "photographer", - "photograpgh", "photographs", - "photograpic", "photographic", - "photogrpahs", "photographs", - "photogrpahy", "photography", - "physcedelic", "psychedelic", - "physciatric", "psychiatric", - "physcopaths", "psychopaths", - "piankillers", "painkillers", - "pilgrimmage", "pilgrimage", - "pitchforcks", "pitchforks", - "pitchforkes", "pitchforks", - "plaestinian", "palestinian", - "plagiariasm", "plagiarism", - "planeswaker", "planeswalker", - "planeswaler", "planeswalker", - "planeswalkr", "planeswalker", - "platfromers", "platformer", - "playhtrough", "playthrough", - "playthorugh", "playthrough", - "playthourgh", "playthrough", - "playthroguh", "playthroughs", - "playthrougs", "playthroughs", - "playthrouhg", "playthroughs", - "playthtough", "playthrough", - "playtrhough", "playthrough", - "ploretariat", "proletariat", - "policitally", "politically", - "policitians", "politicians", - "politicains", "politicians", - "politicanti", "politician", - "politiciens", "politicians", - "politiicans", "politician", - "polititians", "politicians", - "polyphonyic", "polyphonic", - "pomegranite", "pomegranate", - "popluations", "populations", - "poportional", "proportional", - "popoulation", "population", - "porjectiles", "projectiles", - "porletariat", "proletariat", - "pornagraphy", "pornography", - "pornograghy", "pornography", - "pornograhpy", "pornography", - "pornograpgy", "pornography", - "pornogrophy", "pornography", - "pornogrpahy", "pornography", - "porportions", "proportions", - "portestants", "protestants", - "portuguease", "portuguese", - "portuguesse", "portuguese", - "positionial", "positional", - "positionnal", "positional", - "positionned", "positioned", - "positiveity", "positivity", - "positiviely", "positively", - "positivisme", "positives", - "positivisty", "positivity", - "positivitey", "positivity", - "positivitiy", "positivity", - "possesseurs", "possesses", - "possesssion", "possessions", - "possestions", "possessions", - "possiblilty", "possibility", - "potencially", "potentially", - "potentailly", "potentially", - "powerhourse", "powerhouse", - "powerlifing", "powerlifting", - "powerliftng", "powerlifting", - "pracitcally", "practically", - "practicarlo", "practical", - "practioners", "practitioners", - "practitions", "practitioners", - "pragmatisch", "pragmatic", - "precausions", "precautions", - "precedessor", "predecessor", - "precendence", "precedence", - "precentages", "percentages", - "preconceved", "preconceived", - "preconcieve", "preconceived", - "precuations", "precautions", - "predacessor", "predecessor", - "predecesser", "predecessor", - "predections", "predictions", - "predescesor", "predecessors", - "predesessor", "predecessors", - "predesposed", "predisposed", - "predessecor", "predecessor", - "predicatble", "predictable", - "predicement", "predicament", - "predicessor", "predecessor", - "prediciment", "predicament", - "predicitons", "predictions", - "predictible", "predictable", - "predictious", "predictions", - "predictment", "predicament", - "predisposte", "predisposed", - "predocessor", "predecessor", - "preferabbly", "preferably", - "preferabely", "preferable", - "preferabley", "preferably", - "preferablly", "preferably", - "preferances", "preferences", - "preferenser", "preferences", - "preferental", "preferential", - "preferentes", "preferences", - "preferrably", "preferably", - "preferrring", "preferring", - "preformance", "performance", - "pregnanices", "pregnancies", - "pregnencies", "pregnancies", - "pregorative", "prerogative", - "preipherals", "peripherals", - "prejudicies", "prejudice", - "preleminary", "preliminary", - "prelimanary", "preliminary", - "prelimenary", "preliminary", - "premanently", "permanently", - "prematuraly", "prematurely", - "prematurily", "prematurely", - "prematurley", "prematurely", - "premilinary", "preliminary", - "premissible", "permissible", - "premissions", "permissions", - "preorderded", "preordered", - "preorderers", "preorders", - "preparacion", "preparation", - "preperation", "preparation", - "prepetrated", "perpetrated", - "prepetrator", "perpetrator", - "prepetually", "perpetually", - "prepetuated", "perpetuated", - "prepetuates", "perpetuates", - "preporation", "preparation", - "preposterus", "preposterous", - "prerequesit", "prerequisite", - "prerequiste", "prerequisite", - "prerequites", "prerequisite", - "prerogitive", "prerogative", - "prerogotive", "prerogative", - "prescripton", "prescription", - "presecution", "persecution", - "presedintia", "presidential", - "presentaion", "presentation", - "presentatin", "presentations", - "preservaton", "preservation", - "preservered", "preserved", - "presidencey", "presidency", - "presidental", "presidential", - "presidentcy", "presidency", - "presistence", "persistence", - "presitgious", "prestigious", - "presitigous", "prestigious", - "presomption", "presumption", - "prespective", "perspective", - "pressureing", "pressuring", - "prestegious", "prestigious", - "prestigeous", "prestigious", - "prestigieus", "prestigious", - "prestigiosa", "prestigious", - "prestigiose", "prestigious", - "prestigiosi", "prestigious", - "prestigioso", "prestigious", - "prestiguous", "prestigious", - "presumabely", "presumably", - "presumabley", "presumably", - "presumptous", "presumptuous", - "presumptuos", "presumptuous", - "pretencious", "pretentious", - "pretendendo", "pretended", - "pretensious", "pretentious", - "pretentieus", "pretentious", - "prevailaing", "prevailing", - "prevailling", "prevailing", - "preventitve", "preventative", - "preventivno", "prevention", - "primatively", "primitively", - "princessses", "princesses", - "principales", "principles", - "principalis", "principals", - "principielt", "principle", - "privatizied", "privatized", - "priveledges", "privileges", - "privelleges", "privileges", - "privilegeds", "privileges", - "privilegied", "privileged", - "privilegien", "privilege", - "privilegier", "privilege", - "privilegies", "privilege", - "proactivley", "proactive", - "probabilaty", "probability", - "probabilite", "probabilities", - "probalibity", "probability", - "probelmatic", "problematic", - "problamatic", "problematic", - "problimatic", "problematic", - "problomatic", "problematic", - "proccedings", "proceedings", - "proccessing", "processing", - "proceddings", "proceedings", - "procedureal", "procedural", - "procedurial", "procedural", - "procedurile", "procedure", - "processesor", "processors", - "processeurs", "processes", - "processsors", "processors", - "procrastion", "procreation", - "procriation", "procreation", - "prodcutions", "productions", - "prodictions", "productions", - "producerats", "producers", - "producitons", "productions", - "productioin", "productions", - "productivos", "productions", - "productivty", "productivity", - "produktions", "productions", - "professinal", "professional", - "professionl", "professionals", - "professoras", "professors", - "professores", "professors", - "professorin", "profession", - "professsion", "professions", - "proficiancy", "proficiency", - "proficienct", "proficient", - "proficienty", "proficiency", - "proficinecy", "proficiency", - "profitabile", "profitable", - "progerssion", "progressions", - "progerssive", "progressives", - "programable", "programmable", - "programmare", "programmer", - "programmars", "programmers", - "programmate", "programme", - "programmets", "programmers", - "programmeur", "programmer", - "programmier", "programmer", - "programmmed", "programme", - "programmmer", "programme", - "progresison", "progressions", - "progressers", "progresses", - "progressief", "progressive", - "progressino", "progressions", - "progressivo", "progression", - "progressoin", "progressions", - "progressvie", "progressives", - "prohabition", "prohibition", - "prohibation", "prohibition", - "prohibicion", "prohibition", - "prohibiteds", "prohibits", - "prohibitied", "prohibited", - "prohibitifs", "prohibits", - "prohibitivo", "prohibition", - "prohibitons", "prohibits", - "prohibitted", "prohibited", - "projecticle", "projectile", - "projectives", "projectiles", - "projectlies", "projectiles", - "prolateriat", "proletariat", - "proletariet", "proletariat", - "proletariot", "proletariat", - "proletaryat", "proletariat", - "proleteriat", "proletariat", - "prolitariat", "proletariat", - "prologomena", "prolegomena", - "promenantly", "prominently", - "promenently", "prominently", - "prometheius", "prometheus", - "prometheous", "prometheus", - "promethesus", "prometheus", - "prometheyus", "prometheus", - "promimently", "prominently", - "prominantly", "prominently", - "prominately", "prominently", - "promiscious", "promiscuous", - "promocional", "promotional", - "promsicuous", "promiscuous", - "pronography", "pornography", - "pronoucning", "pronouncing", - "pronounched", "pronounced", - "pronunciato", "pronunciation", - "propaganada", "propaganda", - "properitary", "proprietary", - "propertiary", "proprietary", - "propertions", "proportions", - "prophechies", "prophecies", - "propiertary", "proprietary", - "propogation", "propagation", - "proponenets", "proponents", - "proponentes", "proponents", - "proporition", "proposition", - "proportians", "proportions", - "proportinal", "proportional", - "proposicion", "proposition", - "propositivo", "proposition", - "propostions", "proportions", - "propreitary", "proprietary", - "propriatary", "proprietary", - "propriatery", "proprietary", - "propriatory", "proprietary", - "proprietery", "proprietary", - "proprietory", "proprietary", - "propriotary", "proprietary", - "proprotions", "proportions", - "propsective", "prospective", - "propulstion", "propulsion", - "prosectuion", "prosecution", - "prosectuors", "prosecutors", - "prosecuters", "prosecutors", - "prosicution", "prosecution", - "prosocution", "prosecution", - "prosperious", "prosperous", - "prospertity", "prosperity", - "prospettive", "prospective", - "prostethics", "prosthetic", - "prosthethic", "prosthetic", - "prostitites", "prostitutes", - "prostitiute", "prostitute", - "prostituate", "prostitute", - "prostitudes", "prostitutes", - "prostituees", "prostitutes", - "prostituion", "prostitution", - "prostitures", "prostitutes", - "prostitutas", "prostitutes", - "prostitutie", "prostitute", - "prostitutin", "prostitution", - "prostitutke", "prostitutes", - "prostituton", "prostitution", - "prostitutos", "prostitutes", - "protability", "portability", - "protaganist", "protagonist", - "protaginist", "protagonist", - "protagnoist", "protagonist", - "protagoinst", "protagonists", - "protagonits", "protagonists", - "protagonsit", "protagonists", - "protectings", "protections", - "protectoras", "protectors", - "protectores", "protectors", - "protectrons", "protections", - "protelariat", "proletariat", - "protestents", "protestants", - "protistants", "protestants", - "protoganist", "protagonist", - "protogonist", "protagonist", - "protostants", "protestants", - "protototype", "prototype", - "provacative", "provocative", - "provacotive", "provocative", - "provicative", "provocative", - "providencie", "providence", - "provinciaal", "provincial", - "provinicial", "provincial", - "provisiones", "provisions", - "provoactive", "provocative", - "provocatief", "provocative", - "provocitive", "provocative", - "provocotive", "provocative", - "provokative", "provocative", - "pscyhedelic", "psychedelic", - "pscyhiatric", "psychiatric", - "pscyhopaths", "psychopaths", - "pshyciatric", "psychiatric", - "pshycopaths", "psychopaths", - "psychaitric", "psychiatric", - "psychedilic", "psychedelic", - "psychedleic", "psychedelics", - "psychiatist", "psychiatrist", - "psychidelic", "psychedelic", - "psychodelic", "psychedelic", - "psychopants", "psychopaths", - "psychopatch", "psychopath", - "psychopatic", "psychopathic", - "psychotisch", "psychotic", - "psychriatic", "psychiatric", - "publikation", "publication", - "punctiation", "punctuation", - "puncutation", "punctuation", - "punshiments", "punishments", - "punsihments", "punishments", - "purchaseing", "purchasing", - "purchashing", "purchasing", - "purposefuly", "purposefully", - "pyschedelic", "psychedelic", - "pyschiatric", "psychiatric", - "pyschopaths", "psychopaths", - "qaurterback", "quarterback", - "qualificato", "qualification", - "qualifieres", "qualifiers", - "quantitaive", "quantitative", - "quantitatve", "quantitative", - "quantitites", "quantities", - "quantitties", "quantities", - "quarantaine", "quarantine", - "quarantenni", "quarantine", - "quartercask", "quarterbacks", - "quesitoning", "questioning", - "questionned", "questioned", - "questonable", "questionable", - "radiaoctive", "radioactive", - "radioactice", "radioactive", - "radioactief", "radioactive", - "radioaktive", "radioactive", - "radiocative", "radioactive", - "raidoactive", "radioactive", - "reaccurring", "recurring", - "reactionair", "reactionary", - "realibility", "reliability", - "realistisch", "realistic", - "reaserchers", "researchers", - "reaserching", "researching", - "reasonabley", "reasonably", - "reasonablly", "reasonably", - "reassureing", "reassuring", - "reassurring", "reassuring", - "rebuildling", "rebuilding", - "rebuplicans", "republicans", - "reccomended", "recommended", - "receptionst", "receptionist", - "recgonition", "recognition", - "recgonizing", "recognizing", - "rechargable", "rechargeable", - "recipientes", "recipients", - "reciporcate", "reciprocate", - "recipricate", "reciprocate", - "reciprocant", "reciprocate", - "reciprocite", "reciprocate", - "recivership", "receivership", - "reclutantly", "reluctantly", - "recognicing", "recognizing", - "recognision", "recognition", - "recomending", "recommending", - "recommandes", "recommends", - "recommendes", "recommends", - "recommented", "recommended", - "reconcilled", "reconcile", - "recongition", "recognition", - "recongizing", "recognizing", - "reconsidder", "reconsider", - "recrational", "recreational", - "recrutiment", "recruitment", - "rectangluar", "rectangular", - "rectangualr", "rectangular", - "rectengular", "rectangular", - "recuritment", "recruitment", - "redundantcy", "redundancy", - "reevalulate", "reevaluate", - "reevalutate", "reevaluate", - "reevaulated", "reevaluate", - "refelctions", "reflections", - "referancing", "referencing", - "refereneced", "referenced", - "refereneces", "references", - "referincing", "referencing", - "referrences", "references", - "reflectivos", "reflections", - "refreshener", "refresher", - "refrubished", "refurbished", - "refubrished", "refurbished", - "refurbushed", "refurbished", - "regeneratin", "regeneration", - "regeneraton", "regeneration", - "registerdns", "registers", - "registeries", "registers", - "registerred", "registered", - "registraion", "registration", - "regocnition", "recognition", - "regresssion", "regression", - "regresssive", "regressive", - "regualtions", "regulations", - "regulationg", "regulating", - "regulatiors", "regulators", - "reinassance", "renaissance", - "reinforcemt", "reinforcement", - "reinfornced", "reinforced", - "reinitalise", "reinitialise", - "reinitalize", "reinitialize", - "reinstaling", "reinstalling", - "reinstallng", "reinstalling", - "reisntalled", "reinstalled", - "relaibility", "reliability", - "relatiation", "retaliation", - "relationshp", "relationships", - "relativiser", "relatives", - "relativisme", "relatives", - "relativitiy", "relativity", - "relativitly", "relativity", - "relcutantly", "reluctantly", - "relentlesly", "relentlessly", - "relentlessy", "relentlessly", - "relevations", "revelations", - "relfections", "reflections", - "religeously", "religiously", - "religionens", "religions", - "religioners", "religions", - "relpacement", "replacement", - "reluctently", "reluctantly", - "remarkabley", "remarkably", - "remarkablly", "remarkably", - "remasterred", "remastered", - "remembrence", "remembrance", - "reminescent", "reminiscent", - "reminicient", "reminiscent", - "reminiscant", "reminiscent", - "reminiscint", "reminiscent", - "reminscient", "reminiscent", - "reminsicent", "reminiscent", - "renaiisance", "renaissance", - "renaiscance", "renaissance", - "renaissanse", "renaissance", - "renaissence", "renaissance", - "renassaince", "renaissance", - "renassiance", "renaissance", - "reniassance", "renaissance", - "rennovating", "renovating", - "rennovation", "renovation", - "repalcement", "replacement", - "repbulicans", "republicans", - "repeateadly", "repeatedly", - "repectively", "respectively", - "repersented", "represented", - "replacemnet", "replacements", - "replacemnts", "replacements", - "repleacable", "replaceable", - "repositiory", "repository", - "representas", "represents", - "representes", "represents", - "represssion", "repression", - "reproducion", "reproduction", - "reproducive", "reproductive", - "repsectable", "respectable", - "repsonsible", "responsible", - "repsonsibly", "responsibly", - "republcians", "republicans", - "republician", "republican", - "republicons", "republicans", - "repuglicans", "republicans", - "requeriment", "requirement", - "requierment", "requirements", - "resemblence", "resemblance", - "resemblense", "resembles", - "reserachers", "researchers", - "reseraching", "researching", - "resgination", "resignation", - "residencial", "residential", - "residentail", "residential", - "residentual", "residential", - "resignacion", "resignation", - "resignating", "resignation", - "resignement", "resignment", - "resignition", "resignation", - "resintalled", "reinstalled", - "resistansen", "resistances", - "resistanses", "resistances", - "resistences", "resistances", - "resistnaces", "resistances", - "resoltuions", "resolutions", - "resotration", "restoration", - "resoultions", "resolutions", - "respecatble", "respectable", - "respectabil", "respectable", - "respectfuly", "respectfully", - "respectible", "respectable", - "respectivly", "respectively", - "respectuful", "respectful", - "respektable", "respectable", - "resperatory", "respiratory", - "resperitory", "respiratory", - "respiritory", "respiratory", - "respitatory", "respiratory", - "responcible", "responsible", - "responcibly", "responsibly", - "respondendo", "responded", - "responisble", "responsible", - "responisbly", "responsibly", - "responsable", "responsible", - "responsably", "responsibly", - "responsbile", "responsible", - "responsbily", "responsibly", - "responsibel", "responsibly", - "responsibil", "responsibly", - "responsivle", "responsive", - "resporatory", "respiratory", - "respository", "repository", - "respriatory", "respiratory", - "ressembling", "resembling", - "ressurected", "resurrected", - "restaraunts", "restaurants", - "restaruants", "restaurants", - "restauraunt", "restaurant", - "restaurents", "restaurants", - "resteraunts", "restaurants", - "restirction", "restriction", - "restorarion", "restoration", - "restorating", "restoration", - "restrainted", "restrained", - "restrective", "restrictive", - "restriccion", "restriction", - "restricitng", "restricting", - "restriciton", "restrictions", - "restricitve", "restrictive", - "restricteds", "restricts", - "restricters", "restricts", - "restrictied", "restrictive", - "restrictifs", "restricts", - "restrictins", "restricts", - "restrictios", "restricts", - "restrictivo", "restriction", - "restrictons", "restricts", - "restriktion", "restriction", - "restriktive", "restrictive", - "restrittive", "restrictive", - "restructing", "restricting", - "restruction", "restriction", - "restuarants", "restaurants", - "resturaunts", "restaurants", - "resurecting", "resurrecting", - "resurrecion", "resurrection", - "retailation", "retaliation", - "retalitated", "retaliated", - "retardathon", "retardation", - "retardating", "retardation", - "retardatron", "retardation", - "retartation", "retardation", - "retirbution", "retribution", - "retrebution", "retribution", - "retribucion", "retribution", - "retribuiton", "retribution", - "retributivo", "retribution", - "retribvtion", "retribution", - "retrobution", "retribution", - "retrubution", "retribution", - "revealtions", "revelations", - "revelaitons", "revelations", - "revolations", "revolutions", - "revoultions", "revolutions", - "ridiculious", "ridiculous", - "ridiculosly", "ridiculously", - "ridiculouly", "ridiculously", - "ridiculousy", "ridiculously", - "rightfullly", "rightfully", - "rolepalying", "roleplaying", - "romanticaly", "romantically", - "roundabaout", "roundabout", - "roundabount", "roundabout", - "rudimentery", "rudimentary", - "rudimentory", "rudimentary", - "ruidmentary", "rudimentary", - "sacrifacing", "sacrificing", - "sacrificare", "sacrifice", - "sacrificied", "sacrifice", - "sacrificies", "sacrifice", - "sacrifieced", "sacrificed", - "sacrifising", "sacrificing", - "sacrifizing", "sacrificing", - "salughtered", "slaughtered", - "sanctionned", "sanctioned", - "sarcastisch", "sarcastic", - "saskatchewn", "saskatchewan", - "saskatchwan", "saskatchewan", - "satisfacion", "satisfaction", - "satisfacory", "satisfactory", - "scandanavia", "scandinavia", - "scandanivia", "scandinavian", - "scandenavia", "scandinavia", - "scandianvia", "scandinavian", - "scandimania", "scandinavia", - "scandinaiva", "scandinavian", - "scandinavan", "scandinavian", - "scandivania", "scandinavian", - "scandonavia", "scandinavia", - "scarificing", "sacrificing", - "scheduleing", "scheduling", - "schedulling", "scheduling", - "schoalrship", "scholarships", - "scholarhips", "scholarship", - "scholarstic", "scholastic", - "scholership", "scholarship", - "scholorship", "scholarship", - "scientiests", "scientists", - "scnadinavia", "scandinavia", - "scrambleing", "scrambling", - "screenshoot", "screenshot", - "seamlessley", "seamlessly", - "sedentarity", "sedentary", - "seflishness", "selfishness", - "segergation", "segregation", - "segragation", "segregation", - "segregacion", "segregation", - "segretation", "segregation", - "segrigation", "segregation", - "selectivley", "selectively", - "selfeshness", "selfishness", - "senitmental", "sentimental", - "sensacional", "sensational", - "sensasional", "sensational", - "sensationel", "sensational", - "sensetional", "sensational", - "sensitivety", "sensitivity", - "sentamental", "sentimental", - "sentemental", "sentimental", - "sentenceing", "sentencing", - "sentimentos", "sentiments", - "sentimentul", "sentimental", - "separatedly", "separately", - "separatelly", "separately", - "separatisme", "separates", - "separatiste", "separates", - "sepculating", "speculating", - "serivceable", "serviceable", - "serviciable", "serviceable", - "settelement", "settlement", - "settelments", "settlements", - "settlemetns", "settlements", - "sexualizied", "sexualized", - "shakeapeare", "shakespeare", - "shakepseare", "shakespeare", - "shakesphere", "shakespeare", - "shanenigans", "shenanigans", - "shareholdes", "shareholders", - "sharpeneing", "sharpening", - "sharpenning", "sharpening", - "shatterling", "shattering", - "shatterring", "shattering", - "sheakspeare", "shakespeare", - "shenadigans", "shenanigans", - "shenanagans", "shenanigans", - "shenanagins", "shenanigans", - "shenanegans", "shenanigans", - "shenanegins", "shenanigans", - "shenangians", "shenanigans", - "shenanigens", "shenanigans", - "shenanigins", "shenanigans", - "shenenigans", "shenanigans", - "sheninigans", "shenanigans", - "shennaigans", "shenanigans", - "shortenning", "shortening", - "shortenting", "shortening", - "signficiant", "significant", - "signifantly", "significantly", - "significane", "significance", - "significato", "significant", - "signifigant", "significant", - "signifikant", "significant", - "signitories", "signatories", - "signularity", "singularity", - "similarites", "similarities", - "similarlity", "similarity", - "similiarity", "similarity", - "simluations", "simulations", - "simplefying", "simplifying", - "simplicitly", "simplicity", - "simplifiing", "simplifying", - "simplisitic", "simplistic", - "simplyifing", "simplifying", - "simualtions", "simulations", - "simulatious", "simulations", - "simultaneos", "simultaneous", - "simultaneus", "simultaneous", - "simultanous", "simultaneous", - "singluarity", "singularity", - "singualrity", "singularity", - "singulairty", "singularity", - "singularily", "singularity", - "sitautional", "situational", - "situacional", "situational", - "situationly", "situational", - "siutational", "situational", - "skatebaords", "skateboard", - "skateboader", "skateboard", - "skepticisim", "skepticism", - "skillshoots", "skillshots", - "skillshosts", "skillshots", - "slaugthered", "slaughtered", - "slefishness", "selfishness", - "sluaghtered", "slaughtered", - "smarthpones", "smartphones", - "snowboaring", "snowboarding", - "snowbolling", "snowballing", - "snowfalling", "snowballing", - "socailizing", "socializing", - "socialicing", "socializing", - "socialistes", "socialists", - "socialistos", "socialists", - "socializare", "socialize", - "sociapathic", "sociopathic", - "sociologial", "sociological", - "sociopathes", "sociopaths", - "sociopathis", "sociopaths", - "sociophatic", "sociopathic", - "solidariety", "solidarity", - "somethingis", "somethings", - "sorrounding", "surrounding", - "soundtrakcs", "soundtracks", - "southamtpon", "southampton", - "southanpton", "southampton", - "southapmton", "southampton", - "southernese", "southerners", - "southerness", "southerners", - "southernest", "southerners", - "southernors", "southerners", - "southmapton", "southampton", - "southtampon", "southampton", - "soveregnity", "sovereignty", - "sovereighty", "sovereignty", - "sovereingty", "sovereignty", - "sovereinity", "sovereignty", - "soveriegnty", "sovereignty", - "soveriengty", "sovereignty", - "soverignity", "sovereignty", - "specailists", "specialists", - "specailized", "specialized", - "specailizes", "specializes", - "specatcular", "spectacular", - "specialiced", "specialized", - "specialices", "specializes", - "specialites", "specializes", - "speciallist", "specialist", - "speciallity", "specially", - "speciallize", "specialize", - "specialzied", "specialized", - "specifcally", "specifically", - "specificaly", "specifically", - "specificato", "specification", - "specificies", "specifics", - "specifiying", "specifying", - "specilaized", "specialize", - "speciliazed", "specialize", - "spectatores", "spectators", - "spectatular", "spectacular", - "spectauclar", "spectacular", - "spectaulars", "spectaculars", - "spectecular", "spectacular", - "specualting", "speculating", - "specualtion", "speculation", - "specualtive", "speculative", - "specularite", "speculative", - "speculaties", "speculative", - "spiritualiy", "spiritually", - "spiritualty", "spirituality", - "spirituella", "spiritually", - "spirtiually", "spiritually", - "spirutually", "spiritually", - "spitirually", "spiritually", - "sponatenous", "spontaneous", - "sponatneous", "spontaneous", - "sponsership", "sponsorship", - "sponsorhips", "sponsorship", - "sponsorhsip", "sponsorship", - "sponsorshop", "sponsorship", - "spontaenous", "spontaneous", - "spontainous", "spontaneous", - "spontaneuos", "spontaneous", - "spontanious", "spontaneous", - "sponteanous", "spontaneous", - "sponteneous", "spontaneous", - "spreadhseet", "spreadsheet", - "spreadsheat", "spreadsheet", - "spreadshets", "spreadsheets", - "spreedsheet", "spreadsheet", - "springfeild", "springfield", - "springfiled", "springfield", - "sprinklered", "sprinkled", - "squirrelies", "squirrels", - "squirrelius", "squirrels", - "stabilizare", "stabilize", - "stabilizied", "stabilize", - "stabilizier", "stabilize", - "stabilizies", "stabilize", - "staggerring", "staggering", - "staggerwing", "staggering", - "stationairy", "stationary", - "stationerad", "stationed", - "stationnary", "stationary", - "statisitcal", "statistical", - "statisticly", "statistical", - "statistisch", "statistics", - "statsitical", "statistical", - "stereotpyes", "stereotypes", - "stereotying", "stereotyping", - "steriotypes", "stereotypes", - "steroetypes", "stereotypes", - "steryotypes", "stereotypes", - "stimluating", "stimulating", - "stimualting", "stimulating", - "stimualtion", "stimulation", - "stimulantes", "stimulants", - "stockpilled", "stockpile", - "stormfrount", "stormfront", - "storyteling", "storytelling", - "straightden", "straightened", - "straightend", "straightened", - "straightmen", "straighten", - "straightned", "straightened", - "straightner", "straighten", - "strangeshit", "strangest", - "strategisch", "strategic", - "strategiske", "strategies", - "strawberies", "strawberries", - "strawberrry", "strawberry", - "strawbrerry", "strawberry", - "strenghened", "strengthened", - "strenghtend", "strengthen", - "strenghtens", "strengthen", - "strengtened", "strengthened", - "structurels", "structures", - "strugglebus", "struggles", - "struggleing", "struggling", - "stubborness", "stubbornness", - "stutterring", "stuttering", - "subcatagory", "subcategory", - "subconscius", "subconscious", - "subconscous", "subconscious", - "subisdizing", "subsidizing", - "subjectivly", "subjectively", - "submergered", "submerged", - "submisisons", "submissions", - "subredddits", "subreddits", - "subscirbers", "subscribers", - "subscribbed", "subscribe", - "subscribber", "subscriber", - "subscriping", "subscribing", - "subscriptin", "subscriptions", - "subscripton", "subscription", - "subsequenty", "subsequently", - "subsidiezed", "subsidized", - "subsidizied", "subsidized", - "subsidizies", "subsidize", - "subsiziding", "subsidizing", - "subsquently", "subsequently", - "subsrcibers", "subscribers", - "substancial", "substantial", - "substansial", "substantial", - "substansive", "substantive", - "substantied", "substantive", - "substanties", "substantive", - "substential", "substantial", - "substitiute", "substitute", - "substituded", "substituted", - "substitudes", "substitutes", - "substituion", "substitution", - "substitures", "substitutes", - "substitutie", "substitutes", - "substitutos", "substitutes", - "substitutue", "substitutes", - "substracted", "subtracted", - "suburburban", "suburban", - "succesfully", "successfully", - "successeurs", "successes", - "successfull", "successful", - "successfuly", "successfully", - "successsion", "succession", - "successully", "successfully", - "succsesfull", "successfully", - "sucessfully", "successfully", - "sucseptible", "susceptible", - "sufficently", "sufficiently", - "suggestieve", "suggestive", - "sumbissions", "submissions", - "sunglassses", "sunglasses", - "superceeded", "superseded", - "superficiel", "superficial", - "superfulous", "superfluous", - "superhereos", "superhero", - "superifical", "superficial", - "superiorest", "superiors", - "supermacist", "supremacist", - "supermakert", "supermarkets", - "supermakret", "supermarkets", - "supermakter", "supermarkets", - "supermarkts", "supermarkets", - "supermaster", "supermarkets", - "supernatual", "supernatural", - "supersition", "supervision", - "superstiton", "superstition", - "supervisers", "supervisors", - "supervisior", "supervisor", - "suplimented", "supplemented", - "supplaments", "supplements", - "supplemetal", "supplemental", - "supporteurs", "supporters", - "supposedely", "supposedly", - "supposidely", "supposedly", - "supposingly", "supposedly", - "suppresions", "suppression", - "suppresssor", "suppressor", - "supramacist", "supremacist", - "supremacits", "supremacist", - "supremasist", "supremacist", - "supremicist", "supremacist", - "suprimacist", "supremacist", - "suprisingly", "surprisingly", - "suprizingly", "surprisingly", - "suroundings", "surroundings", - "surpemacist", "supremacist", - "surprisinly", "surprisingly", - "surreptious", "surreptitious", - "surroundign", "surroundings", - "surroundigs", "surrounds", - "surroundins", "surrounds", - "surroundngs", "surrounds", - "surveilence", "surveillance", - "survivabily", "survivability", - "susbtantial", "substantial", - "susbtantive", "substantive", - "suscepitble", "susceptible", - "susceptable", "susceptible", - "suscpetible", "susceptible", - "susecptible", "susceptible", - "suspectible", "susceptible", - "suspiciosly", "suspiciously", - "suspiciouly", "suspiciously", - "suspiciouns", "suspicion", - "suspicision", "suspicions", - "suspicisons", "suspicions", - "sustainible", "sustainable", - "switerzland", "switzerland", - "switserland", "switzerland", - "switzlerand", "switzerland", - "swizterland", "switzerland", - "swtizerland", "switzerland", - "symapthetic", "sympathetic", - "symmertical", "symmetrical", - "sympathatic", "sympathetic", - "sympathiers", "sympathizers", - "sympathsize", "sympathize", - "sympethetic", "sympathetic", - "symphatetic", "sympathetic", - "symphatized", "sympathize", - "symphatizer", "sympathizers", - "symphatizes", "sympathize", - "sympothetic", "sympathetic", - "synthesasia", "synthesis", - "synthesesia", "synthesis", - "sypmathetic", "sympathetic", - "tabelspoons", "tablespoons", - "tablepsoons", "tablespoons", - "tablespooon", "tablespoon", - "tablesppons", "tablespoons", - "tailgateing", "tailgating", - "tailgatting", "tailgating", - "tangentialy", "tangentially", - "techincally", "technically", - "techincians", "technicians", - "techiniques", "techniques", - "techncially", "technically", - "technicalty", "technicality", - "technichian", "technician", - "technicials", "technicians", - "techniciens", "technicians", - "technitians", "technicians", - "technnology", "technology", - "technologia", "technological", - "techticians", "technicians", - "teleportato", "teleportation", - "teleportion", "teleporting", - "teleproting", "teleporting", - "temeprature", "temperature", - "temparament", "temperament", - "temparature", "temperature", - "temparement", "temperament", - "tempearture", "temperatures", - "temperamant", "temperament", - "temperarily", "temporarily", - "temperatues", "temperatures", - "temperaturs", "temperatures", - "temperatuur", "temperature", - "temperement", "temperament", - "tempermeant", "temperament", - "tempertaure", "temperature", - "temporairly", "temporarily", - "temporaraly", "temporarily", - "temporarity", "temporarily", - "tempreature", "temperature", - "temproarily", "temporarily", - "tempurature", "temperature", - "tepmorarily", "temporarily", - "termanology", "terminology", - "terminacion", "termination", - "terminaison", "termination", - "terminalogy", "terminology", - "terminatior", "terminator", - "terminatorn", "termination", - "terminilogy", "terminology", - "terminoligy", "terminology", - "terratorial", "territorial", - "terratories", "territories", - "terretorial", "territorial", - "terretories", "territories", - "terrirorial", "territorial", - "terrirories", "territories", - "terriroties", "territories", - "terristrial", "territorial", - "territoires", "territories", - "territorist", "terrorist", - "territority", "territory", - "terroristas", "terrorists", - "terroristes", "terrorists", - "terrorities", "territories", - "terrotorial", "territorial", - "terrotories", "territories", - "testiclular", "testicular", - "thankfullly", "thankfully", - "thanksgivng", "thanksgiving", - "theoligical", "theological", - "theoratical", "theoretical", - "theoreticly", "theoretical", - "theoritical", "theoretical", - "therapautic", "therapeutic", - "therapeudic", "therapeutic", - "therapeutuc", "therapeutic", - "therapuetic", "therapeutic", - "theraupetic", "therapeutic", - "thereaputic", "therapeutic", - "thereotical", "theoretical", - "therepeutic", "therapeutic", - "thermometor", "thermometer", - "thermometre", "thermometer", - "thermomiter", "thermometer", - "thermomoter", "thermometer", - "thermoneter", "thermometer", - "thermostaat", "thermostat", - "theroetical", "theoretical", - "thoeretical", "theoretical", - "threataning", "threatening", - "threatended", "threatened", - "threatining", "threatening", - "throttleing", "throttling", - "throughoput", "throughput", - "throughtout", "throughout", - "throughtput", "throughput", - "thudnerbolt", "thunderbolt", - "thunberbolt", "thunderbolt", - "thunderblot", "thunderbolt", - "thunderboat", "thunderbolt", - "thunderbots", "thunderbolt", - "thunderbowl", "thunderbolt", - "thunderjolt", "thunderbolt", - "thundervolt", "thunderbolt", - "tightenting", "tightening", - "tocuhscreen", "touchscreen", - "torrentking", "torrenting", - "torrentting", "torrenting", - "torublesome", "troublesome", - "torunaments", "tournaments", - "totalitaran", "totalitarian", - "totalitarni", "totalitarian", - "touranments", "tournaments", - "tournamnets", "tournaments", - "tournemants", "tournaments", - "tournements", "tournaments", - "tournmanets", "tournaments", - "tradicional", "traditional", - "tradionally", "traditionally", - "tradisional", "traditional", - "traditionel", "traditional", - "traditition", "tradition", - "tragicallly", "tragically", - "tramautized", "traumatized", - "tramuatized", "traumatized", - "trancendent", "transcendent", - "trancending", "transcending", - "tranclucent", "translucent", - "trandgender", "transgender", - "tranditions", "transitions", - "tranistions", "transitions", - "tranlastion", "translations", - "tranlsating", "translating", - "tranlsation", "translation", - "tranluscent", "translucent", - "trannsexual", "transsexual", - "tranpshobic", "transphobic", - "transaccion", "transaction", - "transaciton", "transactions", - "transalting", "translating", - "transaltion", "translation", - "transations", "transitions", - "transcluent", "translucent", - "transcripto", "transcription", - "transctions", "transitions", - "transculent", "translucent", - "transending", "transcending", - "transfender", "transgender", - "transferers", "transfers", - "transfering", "transferring", - "transfersom", "transforms", - "transfomers", "transforms", - "transformas", "transforms", - "transformes", "transformers", - "transformis", "transforms", - "transformus", "transforms", - "transforums", "transforms", - "transfromed", "transformed", - "transfromer", "transformers", - "transgemder", "transgender", - "transgended", "transgendered", - "transgenger", "transgender", - "transgenres", "transgender", - "transhpobic", "transphobic", - "transisions", "transitions", - "transisitor", "transistor", - "transistion", "transition", - "transistior", "transistor", - "transitiond", "transitioned", - "transitiong", "transitioning", - "translatron", "translation", - "translusent", "translucent", - "transmatter", "transmitter", - "transmision", "transmission", - "transmissin", "transmissions", - "transmisson", "transmission", - "transmittor", "transmitter", - "transmorged", "transformed", - "transmutter", "transmitter", - "transofrmed", "transformed", - "transohobic", "transphobic", - "transparant", "transparent", - "transparecy", "transparency", - "transpareny", "transparency", - "transperant", "transparent", - "transperent", "transparent", - "transphonic", "transphobic", - "transphopic", "transphobic", - "transplanet", "transplant", - "transporder", "transporter", - "transporing", "transporting", - "transportar", "transporter", - "transportng", "transporting", - "transportor", "transporter", - "transseuxal", "transsexual", - "transsexaul", "transsexual", - "transsexuel", "transsexual", - "transulcent", "translucent", - "transylvnia", "transylvania", - "tranzformer", "transformer", - "tranzitions", "transitions", - "tranzporter", "transporter", - "trasncripts", "transcripts", - "trasnferred", "transferred", - "trasnformed", "transformed", - "trasnformer", "transformer", - "trasngender", "transgender", - "trasnmitted", "transmitted", - "trasnmitter", "transmitter", - "trasnparent", "transparent", - "trasnphobic", "transphobic", - "trasnported", "transported", - "trasnporter", "transporter", - "traumatisch", "traumatic", - "traumetized", "traumatized", - "traumitized", "traumatized", - "travellerhd", "travelled", - "travellodge", "travelled", - "tremendeous", "tremendous", - "tremendious", "tremendous", - "tremenduous", "tremendous", - "trespessing", "trespassing", - "tresspasing", "trespassing", - "triggereing", "triggering", - "triggerring", "triggering", - "troubelsome", "troublesome", - "truamatized", "traumatized", - "trushworthy", "trustworthy", - "trustowrthy", "trustworthy", - "trustwhorty", "trustworthy", - "trustworhty", "trustworthy", - "truthfullly", "truthfully", - "tupperwears", "tupperware", - "turstworthy", "trustworthy", - "ubiquitious", "ubiquitous", - "ubiquituous", "ubiquitous", - "ukraininans", "ukrainians", - "ultimatelly", "ultimately", - "unanimoulsy", "unanimous", - "unappeasing", "unappealing", - "unappeeling", "unappealing", - "unathorised", "unauthorised", - "unattendend", "unattended", - "unatteneded", "unattended", - "unattracive", "unattractive", - "unauthoried", "unauthorized", - "unavailible", "unavailable", - "unavaliable", "unavailable", - "unaviodable", "unavoidable", - "unbalanaced", "unbalanced", - "unbraikable", "unbreakable", - "unbrakeable", "unbreakable", - "unbreakabie", "unbreakable", - "unbreakabke", "unbreakable", - "unbreakbale", "unbreakable", - "unbreakeble", "unbreakable", - "unbrearable", "unbreakable", - "uncensorred", "uncensored", - "uncertaincy", "uncertainty", - "uncertanity", "uncertainty", - "uncertianty", "uncertainty", - "unchangable", "unchangeable", - "uncompetive", "uncompetitive", - "unconcsious", "unconscious", - "unconsicous", "unconscious", - "uncouncious", "unconscious", - "undeniabely", "undeniably", - "undeniabley", "undeniably", - "undeniablly", "undeniably", - "undenialbly", "undeniably", - "underestime", "underestimate", - "undergating", "undertaking", - "undergorund", "underground", - "underheight", "underweight", - "undermiming", "undermining", - "undermindes", "undermines", - "undernearth", "underneath", - "underneight", "underweight", - "underpining", "undermining", - "underpowerd", "underpowered", - "underpowred", "underpowered", - "underratted", "underrated", - "understannd", "understands", - "understsand", "understands", - "undertacker", "undertaker", - "underwarter", "underwater", - "underwieght", "underweight", - "underwright", "underweight", - "undesireble", "undesirable", - "undesriable", "undesirable", - "undetecable", "undetectable", - "undiserable", "undesirable", - "undoubedtly", "undoubtedly", - "undoubetdly", "undoubtedly", - "undoubtadly", "undoubtedly", - "undoubtebly", "undoubtedly", - "undoubtetly", "undoubtedly", - "undreground", "underground", - "unemployeed", "unemployed", - "unemployent", "unemployment", - "unemploymed", "unemployed", - "unexpectdly", "unexpectedly", - "unexpectely", "unexpectedly", - "unfamilliar", "unfamiliar", - "unfortuante", "unfortunate", - "ungreatfull", "ungrateful", - "unilateraly", "unilaterally", - "unilaterlly", "unilaterally", - "unimportent", "unimportant", - "uninspiried", "uninspired", - "uninstaling", "uninstalling", - "uninstallng", "uninstalling", - "uninteresed", "uninterested", - "uniquesness", "uniqueness", - "unisntalled", "uninstalled", - "universella", "universally", - "universites", "universities", - "univesities", "universities", - "unjustifyed", "unjustified", - "unknowinlgy", "unknowingly", - "unkowningly", "unknowingly", - "unnecassary", "unnecessary", - "unneccesary", "unnecessary", - "unnecessery", "unnecessary", - "unnecissary", "unnecessary", - "unnessecary", "unnecessary", - "unnistalled", "uninstalled", - "unoriginial", "unoriginal", - "unorigional", "unoriginal", - "unoticeable", "unnoticeable", - "unpleaseant", "unpleasant", - "unportected", "unprotected", - "unprepaired", "unprepared", - "unpreparred", "unprepared", - "unproducive", "unproductive", - "unprotexted", "unprotected", - "unqaulified", "unqualified", - "unrealisitc", "unrealistic", - "unrealsitic", "unrealistic", - "unreasonbly", "unreasonably", - "unregluated", "unregulated", - "unregualted", "unregulated", - "unregulared", "unregulated", - "unrepentent", "unrepentant", - "unresponive", "unresponsive", - "unrestriced", "unrestricted", - "unsettleing", "unsettling", - "unsintalled", "uninstalled", - "unsolicated", "unsolicited", - "unsoliticed", "unsolicited", - "unsolocited", "unsolicited", - "unsubscirbe", "unsubscribe", - "unsubscrbed", "unsubscribed", - "unsubscried", "unsubscribed", - "unsubscripe", "unsubscribe", - "unsubscrive", "unsubscribe", - "unsubscrube", "unsubscribe", - "unsubsrcibe", "unsubscribe", - "unsuccesful", "unsuccessful", - "unsuccessul", "unsuccessful", - "unsucesfuly", "unsuccessfully", - "unsucessful", "unsuccessful", - "unsunscribe", "unsubscribe", - "unsuprising", "unsurprising", - "unsuprizing", "unsurprising", - "unsurprized", "unsurprised", - "unsusbcribe", "unsubscribe", - "unviersally", "universally", - "unwarrented", "unwarranted", - "utiliatrian", "utilitarian", - "utilitatian", "utilitarian", - "utiliterian", "utilitarian", - "utilizacion", "utilization", - "utilizaiton", "utilization", - "utilizating", "utilization", - "utiltiarian", "utilitarian", - "vacciantion", "vaccination", - "vaccinaties", "vaccinate", - "vegaterians", "vegetarians", - "vegetariens", "vegetarians", - "vegetatians", "vegetarians", - "vegeterians", "vegetarians", - "vehementely", "vehemently", - "venezuelean", "venezuela", - "venezuelian", "venezuela", - "ventalation", "ventilation", - "ventelation", "ventilation", - "ventialtion", "ventilation", - "ventilacion", "ventilation", - "verastility", "versatility", - "verfication", "verification", - "versatality", "versatility", - "versitality", "versatility", - "versitilaty", "versatility", - "victorieuse", "victories", - "victoriuous", "victorious", - "vietnameese", "vietnamese", - "vietnamesse", "vietnamese", - "vietnamiese", "vietnamese", - "vietnamnese", "vietnamese", - "vigilanties", "vigilante", - "visibillity", "visibility", - "vocabularly", "vocabulary", - "volatillity", "volatility", - "volonteered", "volunteered", - "volounteers", "volunteers", - "volunatrily", "voluntarily", - "voluntairly", "voluntarily", - "volunteeers", "volunteers", - "volunteraly", "voluntarily", - "voluntereed", "volunteered", - "volunterily", "voluntarily", - "vulnerabile", "vulnerable", - "wallpapaers", "wallpapers", - "wallpappers", "wallpapers", - "washingtion", "washington", - "watermeleon", "watermelon", - "waterprooof", "waterproof", - "wavelegnths", "wavelength", - "wavelenghth", "wavelength", - "wavelenghts", "wavelength", - "weaknessses", "weaknesses", - "wellingston", "wellington", - "wellingtion", "wellington", - "westernerns", "westerners", - "westmisnter", "westminster", - "westmnister", "westminster", - "westmonster", "westminster", - "whisperered", "whispered", - "whitholding", "withholding", - "wikileakers", "wikileaks", - "willingless", "willingness", - "wincheseter", "winchester", - "windsheilds", "windshield", - "withdrawels", "withdrawals", - "withdrawles", "withdrawals", - "withhelding", "withholding", - "withrdawing", "withdrawing", - "witnesssing", "witnessing", - "woodowrking", "woodworking", - "woodworkign", "woodworking", - "worhsipping", "worshipping", - "workstaiton", "workstation", - "workststion", "workstation", - "worshopping", "worshipping", - "xenophoblic", "xenophobic", - "abandining", "abandoning", - "abandonned", "abandoned", - "abbreviato", "abbreviation", - "abnoramlly", "abnormally", - "abnormalty", "abnormally", - "abnornally", "abnormally", - "abominaton", "abomination", - "abondoning", "abandoning", - "aborginial", "aboriginal", - "aboriganal", "aboriginal", - "aborigenal", "aboriginal", - "aborignial", "aboriginal", - "aborigonal", "aboriginal", - "aboroginal", "aboriginal", - "aboslutely", "absolutely", - "abosrption", "absorption", - "abreviated", "abbreviated", - "absintence", "abstinence", - "absitnence", "abstinence", - "absolument", "absolute", - "absolutley", "absolutely", - "absoprtion", "absorption", - "absorbsion", "absorption", - "absorbtion", "absorption", - "absorpsion", "absorption", - "absoultely", "absolutely", - "abstanence", "abstinence", - "abstenance", "abstinence", - "abstenince", "abstinence", - "abstinense", "abstinence", - "abstinince", "abstinence", - "absurditiy", "absurdity", - "abundacies", "abundances", - "academicas", "academics", - "academicos", "academics", - "academicus", "academics", - "accdiently", "accidently", - "accelarate", "accelerate", - "accelerade", "accelerated", - "accelerare", "accelerate", - "accelerato", "acceleration", - "acceleread", "accelerated", - "accelertor", "accelerator", - "accelorate", "accelerate", - "acceptabel", "acceptable", - "acceptabil", "acceptable", - "acceptence", "acceptance", - "accepterad", "accepted", - "acceptible", "acceptable", - "accerelate", "accelerated", - "accesories", "accessories", - "accessable", "accessible", - "accessbile", "accessible", - "accessoire", "accessories", - "accessoirs", "accessories", - "accicently", "accidently", - "accidantly", "accidently", - "accidebtly", "accidently", - "accidenlty", "accidently", - "accidentes", "accidents", - "accidentky", "accidently", - "accidently", "accidentally", - "accidnetly", "accidently", - "accomadate", "accommodate", - "accomodate", "accommodate", - "accompined", "accompanied", - "accomplise", "accomplishes", - "accompliss", "accomplishes", - "accostumed", "accustomed", - "accountent", "accountant", - "accpetable", "acceptable", - "accpetance", "acceptance", - "accuastion", "accusation", - "acculumate", "accumulate", - "accumalate", "accumulate", - "accumelate", "accumulate", - "accumilate", "accumulate", - "accumulare", "accumulate", - "accumulato", "accumulation", - "accumulted", "accumulated", - "accuratley", "accurately", - "accusating", "accusation", - "accusition", "accusation", - "accustumed", "accustomed", - "acheivable", "achievable", - "acheivment", "achievement", - "acheviable", "achievable", - "achiavable", "achievable", - "achieveble", "achievable", - "achievemnt", "achievement", - "achievemts", "achieves", - "achievents", "achieves", - "achievment", "achievement", - "achilleous", "achilles", - "achiveable", "achievable", - "achivement", "achievement", - "acitvating", "activating", - "acitvision", "activision", - "acknowldge", "acknowledge", - "acknowlede", "acknowledge", - "acknowlege", "acknowledge", - "acommodate", "accommodate", - "acopalypse", "apocalypse", - "acordingly", "accordingly", - "acqauinted", "acquainted", - "acquanited", "acquainted", - "acquianted", "acquainted", - "acquinated", "acquainted", - "acquisiton", "acquisition", - "acticating", "activating", - "actication", "activation", - "activacion", "activation", - "activaters", "activates", - "activiates", "activist", - "activiites", "activist", - "activisiom", "activism", - "activisits", "activist", - "activistas", "activists", - "activistes", "activists", - "activiting", "activating", - "activizion", "activision", - "acustommed", "accustomed", - "adaptacion", "adaptation", - "adaptating", "adaptation", - "adaquetely", "adequately", - "addicitons", "addictions", - "addionally", "additionally", - "additivies", "additive", - "additivley", "additive", - "addittions", "addictions", - "addmission", "admission", - "addresable", "addressable", - "addressess", "addresses", - "adequatley", "adequately", - "adequetely", "adequately", - "adequitely", "adequately", - "adernaline", "adrenaline", - "adjectivos", "adjectives", - "adjustible", "adjustable", - "admendment", "amendment", - "administed", "administered", - "administor", "administer", - "administre", "administer", - "administro", "administer", - "adminsiter", "administer", - "admissable", "admissible", - "admittadly", "admittedly", - "admittetly", "admittedly", - "admittidly", "admittedly", - "adolencent", "adolescent", - "adolescant", "adolescent", - "adolescene", "adolescence", - "adoloscent", "adolescent", - "adolsecent", "adolescent", - "adpatation", "adaptation", - "adreanline", "adrenaline", - "adrelanine", "adrenaline", - "adreneline", "adrenaline", - "adreniline", "adrenaline", - "adressable", "addressable", - "advanteges", "advantages", - "advatanges", "advantages", - "adventrous", "adventurous", - "adventrues", "adventures", - "adventuers", "adventures", - "adventuous", "adventurous", - "adventuros", "adventurous", - "adventurus", "adventurous", - "adverticed", "advertised", - "aestethics", "aesthetics", - "aesthatics", "aesthetics", - "aesthestic", "aesthetics", - "affiliaton", "affiliation", - "affilliate", "affiliate", - "affirmitve", "affirmative", - "afflcition", "affliction", - "afflection", "affliction", - "affliation", "affliction", - "affliciton", "affliction", - "afforadble", "affordable", - "affordible", "affordable", - "affortable", "affordable", - "africaners", "africans", - "africaness", "africans", - "aftermaket", "aftermarket", - "afternooon", "afternoon", - "aggravanti", "aggravating", - "aggraveted", "aggravated", - "aggreement", "agreement", - "aggregious", "egregious", - "aggresions", "aggression", - "aggressivo", "aggression", - "aggrovated", "aggravated", - "agnosticim", "agnosticism", - "agnosticsm", "agnosticism", - "agnostisch", "agnostic", - "agnostiscm", "agnosticism", - "agnostisim", "agnosticism", - "agreeement", "agreement", - "agricultre", "agriculture", - "agricultue", "agriculture", - "agriculure", "agriculture", - "agricuture", "agriculture", - "ailenating", "alienating", - "ajdectives", "adjectives", - "alchoholic", "alcoholic", - "alchoolism", "alcoholism", - "alcohalics", "alcoholics", - "alcohalism", "alcoholism", - "alcoholsim", "alcoholism", - "aleinating", "alienating", - "algorhitms", "algorithms", - "algorithem", "algorithm", - "algorithim", "algorithm", - "algorithsm", "algorithms", - "algorithum", "algorithm", - "algorithym", "algorithm", - "algoritmes", "algorithms", - "algoritmos", "algorithms", - "algorthims", "algorithms", - "algortihms", "algorithms", - "algorythms", "algorithms", - "alievating", "alienating", - "alledgedly", "allegedly", - "allegeance", "allegiance", - "allegedely", "allegedly", - "allegedley", "allegedly", - "allegience", "allegiance", - "alleigance", "allegiance", - "allergisch", "allergic", - "alliegance", "allegiance", - "alligeance", "allegiance", - "alocholics", "alcoholics", - "alocholism", "alcoholism", - "alogrithms", "algorithms", - "alphabeast", "alphabet", - "alteracion", "alteration", - "alterarion", "alteration", - "alterating", "alteration", - "alternador", "alternator", - "alternater", "alternator", - "alternatie", "alternatives", - "alternatly", "alternately", - "alternatve", "alternate", - "alternetly", "alternately", - "altogehter", "altogether", - "altogheter", "altogether", - "altriustic", "altruistic", - "altruisitc", "altruistic", - "altrusitic", "altruistic", - "alturistic", "altruistic", - "aluminimum", "aluminum", - "amargeddon", "armageddon", - "amateurest", "amateurs", - "ambassabor", "ambassador", - "ambassader", "ambassador", - "ambassator", "ambassador", - "ambassedor", "ambassador", - "ambassidor", "ambassador", - "ambassodor", "ambassador", - "ambiguitiy", "ambiguity", - "amendmants", "amendments", - "amendmends", "amendments", - "americains", "americas", - "americanas", "americans", - "americanis", "americas", - "americanss", "americas", - "americants", "americas", - "americanus", "americans", - "americares", "americas", - "ammendment", "amendment", - "amrageddon", "armageddon", - "analitical", "analytical", - "analitycal", "analytical", - "analogeous", "analogous", - "analyitcal", "analytical", - "analyseles", "analyses", - "analyseras", "analyses", - "analyseres", "analyses", - "analysised", "analyses", - "analysises", "analyses", - "analysisto", "analysts", - "analystics", "analysts", - "anarchisim", "anarchism", - "anarchistm", "anarchism", - "anarchiszm", "anarchism", - "anarchsits", "anarchists", - "anayltical", "analytical", - "ancilliary", "ancillary", - "androiders", "androids", - "androidtvs", "androids", - "anecdotale", "anecdote", - "anecdotice", "anecdote", - "anestheisa", "anesthesia", - "anesthetia", "anesthesia", - "anesthisia", "anesthesia", - "anitbiotic", "antibiotic", - "anitquated", "antiquated", - "anitsocial", "antisocial", - "aniversary", "anniversary", - "annilihate", "annihilated", - "anniverary", "anniversary", - "anniversay", "anniversary", - "anniversry", "anniversary", - "annointing", "anointing", - "annonceurs", "announcers", - "annoucners", "announcers", - "annoucning", "announcing", - "announched", "announce", - "annyoingly", "annoyingly", - "anonymosly", "anonymously", - "anonymousy", "anonymously", - "antaganist", "antagonist", - "antagnoist", "antagonist", - "antarcitca", "antarctica", - "antarctida", "antarctica", - "anthropoly", "anthropology", - "antibiodic", "antibiotic", - "antibiotcs", "antibiotics", - "antibitoic", "antibiotic", - "antiboitic", "antibiotics", - "anticapate", "anticipate", - "anticiapte", "anticipate", - "anticipare", "anticipate", - "anticipato", "anticipation", - "anticuated", "antiquated", - "antiquited", "antiquated", - "antiqvated", "antiquated", - "antisipate", "anticipate", - "antisocail", "antisocial", - "antisosial", "antisocial", - "antoganist", "antagonist", - "antractica", "antarctica", - "apacolypse", "apocalypse", - "apartheied", "apartheid", - "aplication", "application", - "apocalipse", "apocalypse", - "apocalpyse", "apocalypse", - "apocalypes", "apocalypse", - "apocalypic", "apocalyptic", - "apocalyspe", "apocalypse", - "apocalytic", "apocalyptic", - "apocaplyse", "apocalypse", - "apocolapse", "apocalypse", - "apolagetic", "apologetic", - "apolagized", "apologized", - "apolegetic", "apologetic", - "apoligetic", "apologetic", - "apoligists", "apologists", - "apoligized", "apologized", - "apologisms", "apologists", - "apologiste", "apologise", - "apologitic", "apologetic", - "apostraphe", "apostrophe", - "apostrephe", "apostrophe", - "apostrohpe", "apostrophe", - "apostropes", "apostrophe", - "apparantly", "apparently", - "appareance", "appearance", - "apparenlty", "apparently", - "appartment", "apartment", - "appealling", "appealing", - "appearence", "appearance", - "appearnace", "appearances", - "apperances", "appearances", - "apperantly", "apparently", - "apperciate", "appreciate", - "appereance", "appearance", - "appetities", "appetite", - "appetitite", "appetite", - "appication", "application", - "applainces", "appliances", - "applicaple", "applicable", - "applicates", "applicants", - "applicaton", "application", - "applicible", "applicable", - "appliences", "appliances", - "appointmet", "appointments", - "appologies", "apologies", - "apporached", "approached", - "apporaches", "approaches", - "appraoched", "approached", - "appraoches", "approaches", - "apprecaite", "appreciate", - "appreciato", "appreciation", - "appreciste", "appreciates", - "apprecitae", "appreciates", - "apprecited", "appreciated", - "apprectice", "apprentice", - "appreicate", "appreciate", - "apprendice", "apprentice", - "apprentace", "apprentice", - "apprentise", "apprentice", - "appretiate", "appreciate", - "appretince", "apprentice", - "appriceate", "appreciates", - "appriciate", "appreciate", - "appriecate", "appreciates", - "approacing", "approaching", - "appropiate", "appropriate", - "approprate", "appropriate", - "apropriate", "appropriate", - "aproximate", "approximate", - "apsotrophe", "apostrophe", - "aptitudine", "aptitude", - "aqcuainted", "acquainted", - "aquisition", "acquisition", - "aramgeddon", "armageddon", - "arangement", "arrangement", - "arbitarily", "arbitrarily", - "arbitraily", "arbitrarily", - "arbitraion", "arbitration", - "arbitrairy", "arbitrarily", - "arbitrarly", "arbitrary", - "arbitraton", "arbitration", - "arcehtypes", "archetypes", - "archaelogy", "archaeology", - "archaeolgy", "archaeology", - "archaology", "archeology", - "archatypes", "archetypes", - "archetects", "architects", - "archetipes", "archetypes", - "archetpyes", "archetypes", - "archetypus", "archetypes", - "archeytpes", "archetypes", - "archictect", "architect", - "architechs", "architects", - "architecht", "architect", - "architecte", "architecture", - "architexts", "architects", - "architypes", "archetypes", - "archtiects", "architects", - "archytypes", "archetypes", - "argentinia", "argentina", - "arguements", "arguments", - "argumentas", "arguments", - "argumentos", "arguments", - "arithemtic", "arithmetic", - "arithmitic", "arithmetic", - "aritmethic", "arithmetic", - "armagaddon", "armageddon", - "armageddan", "armageddon", - "armagedden", "armageddon", - "armageddin", "armageddon", - "armagedeon", "armageddon", - "armageedon", "armageddon", - "armagideon", "armageddon", - "armegaddon", "armageddon", - "arrangerad", "arranged", - "arrangment", "arrangement", - "arthimetic", "arithmetic", - "articifial", "artificial", - "articluate", "articulate", - "articualte", "articulate", - "articulted", "articulated", - "artifactos", "artifacts", - "artificiel", "artificial", - "artihmetic", "arithmetic", - "artillerly", "artillery", - "asbestoast", "asbestos", - "asethetics", "aesthetics", - "asisstants", "assistants", - "aspiratons", "aspirations", - "assasinate", "assassinate", - "assassians", "assassin", - "assassinas", "assassins", - "assassines", "assassins", - "assassinos", "assassins", - "assemblare", "assemble", - "assempling", "assembling", - "assersions", "assertions", - "assesement", "assessment", - "assestment", "assessment", - "assignemnt", "assignment", - "assimalate", "assimilate", - "assimilant", "assimilate", - "assimilare", "assimilate", - "assimliate", "assimilate", - "assimulate", "assimilate", - "assingment", "assignment", - "assistanat", "assistants", - "assistanse", "assistants", - "assistante", "assistance", - "assistence", "assistance", - "assistendo", "assisted", - "assistents", "assistants", - "assmebling", "assembling", - "assocaited", "associated", - "assocaites", "associates", - "assocation", "association", - "associatie", "associated", - "associatin", "associations", - "associaton", "association", - "associsted", "associates", - "assoicated", "associated", - "assoicates", "associates", - "assosiated", "associated", - "assosiates", "associates", - "asssassans", "assassins", - "assupmtion", "assumptions", - "assymetric", "asymmetric", - "asteroides", "asteroids", - "asthetical", "aesthetical", - "astonising", "astonishing", - "astornauts", "astronauts", - "astranauts", "astronauts", - "astronatus", "astronauts", - "astronaunt", "astronaut", - "astronomia", "astronomical", - "astronouts", "astronauts", - "astronuats", "astronauts", - "asutralian", "australian", - "atatchment", "attachment", - "athleticos", "athletics", - "athleticsm", "athleticism", - "athletiscm", "athleticism", - "athletisim", "athleticism", - "atmopshere", "atmosphere", - "atmoshpere", "atmosphere", - "atomsphere", "atmosphere", - "atriculate", "articulate", - "atrocoties", "atrocities", - "atrosities", "atrocities", - "attachemnt", "attachment", - "attackeras", "attackers", - "attactment", "attachment", - "attemtping", "attempting", - "attendence", "attendance", - "attendents", "attendants", - "attirbutes", "attributes", - "attmepting", "attempting", - "attracters", "attracts", - "attractice", "attractive", - "attracties", "attracts", - "attractifs", "attracts", - "attraktion", "attraction", - "attraktive", "attractive", - "attribuito", "attribution", - "attritubes", "attributes", - "auctioners", "auctions", - "audioboook", "audiobook", - "audioboost", "audiobooks", - "auidobooks", "audiobooks", - "auotattack", "autoattack", - "austrailan", "australian", - "austrailia", "australia", - "australain", "australians", - "australien", "australian", - "australina", "australians", - "austrlaian", "australians", - "authenticy", "authenticity", - "autherized", "authorized", - "authoritay", "authority", - "authorites", "authorities", - "authorithy", "authority", - "authroized", "authorized", - "autistisch", "autistic", - "autoattaks", "autoattack", - "autocorect", "autocorrect", - "autocorrct", "autocorrect", - "autocorret", "autocorrect", - "autograpgh", "autograph", - "automatice", "automate", - "automatico", "automation", - "automatied", "automate", - "automatiek", "automate", - "automatron", "automation", - "automatted", "automate", - "automibile", "automobile", - "automitive", "automotive", - "automoblie", "automobile", - "automomous", "autonomous", - "automonous", "autonomous", - "automotice", "automotive", - "automotion", "automation", - "automotize", "automotive", - "automotove", "automotive", - "autonamous", "autonomous", - "autonation", "automation", - "autonimous", "autonomous", - "autonomity", "autonomy", - "autononous", "autonomous", - "auttoatack", "autoattack", - "auxilliary", "auxiliary", - "availabale", "available", - "availaible", "available", - "availiable", "available", - "averageadi", "averaged", - "averageifs", "averages", - "awesomeley", "awesomely", - "awesomelly", "awesomely", - "awesomenss", "awesomeness", - "awkwardess", "awkwardness", - "babysister", "babysitter", - "babysiting", "babysitting", - "babysittng", "babysitting", - "bachelores", "bachelors", - "backgorund", "background", - "backgroudn", "backgrounds", - "backgrouds", "backgrounds", - "backgrouns", "backgrounds", - "backgruond", "backgrounds", - "backpacing", "backpacking", - "backpackng", "backpacking", - "backrgound", "backgrounds", - "backrounds", "backgrounds", - "baksetball", "basketball", - "balanceada", "balanced", - "balanceado", "balanced", - "balckberry", "blackberry", - "balckhawks", "blackhawks", - "balcksmith", "blacksmith", - "bandwagoon", "bandwagon", - "bangaldesh", "bangladesh", - "bangladash", "bangladesh", - "bangledash", "bangladesh", - "bangledesh", "bangladesh", - "banglidesh", "bangladesh", - "bankrupcty", "bankruptcy", - "bankruptsy", "bankruptcy", - "bankrutpcy", "bankruptcy", - "barabrians", "barbarians", - "barbariens", "barbarians", - "barbarions", "barbarians", - "barbarisch", "barbaric", - "barberians", "barbarians", - "bargianing", "bargaining", - "bartendars", "bartenders", - "basektball", "basketball", - "baskteball", "basketball", - "bastardous", "bastards", - "battelship", "battleship", - "battelstar", "battlestar", - "battlearts", "battlestar", - "battlechip", "battleship", - "battlefied", "battlefield", - "battlefont", "battlefront", - "battlehips", "battleship", - "battlesaur", "battlestar", - "battlescar", "battlestar", - "battleshop", "battleship", - "battlestsr", "battlestar", - "beahviours", "behaviours", - "beautifuly", "beautifully", - "beautilful", "beautifully", - "beautyfull", "beautiful", - "becnhmarks", "benchmarks", - "beethoveen", "beethoven", - "begginings", "beginnings", - "begininngs", "beginnings", - "beginninng", "beginnings", - "behaivours", "behaviours", - "behaviorly", "behavioral", - "behavoiral", "behavioral", - "behavoiurs", "behaviours", - "behavorial", "behavioral", - "behavoural", "behavioral", - "behvaiours", "behaviours", - "beleagured", "beleaguered", - "beleivable", "believable", - "beliavable", "believable", - "beliebable", "believable", - "believeble", "believable", - "beliveable", "believable", - "benchamrks", "benchmarks", - "benchmakrs", "benchmarks", - "benckmarks", "benchmarks", - "benefecial", "beneficial", - "beneficary", "beneficiary", - "beneficiul", "beneficial", - "benefitial", "beneficial", - "beneifical", "beneficial", - "benelovent", "benevolent", - "benevalent", "benevolent", - "benevelant", "benevolent", - "benevelent", "benevolent", - "benevelont", "benevolent", - "benevloent", "benevolent", - "benevolant", "benevolent", - "benificial", "beneficial", - "benovelent", "benevolent", - "bernouilli", "bernoulli", - "besitality", "bestiality", - "bestaility", "bestiality", - "besteality", "bestiality", - "betrayeado", "betrayed", - "bilateraly", "bilaterally", - "billborads", "billboards", - "bioligical", "biological", - "biologiset", "biologist", - "biologiskt", "biologist", - "birghtness", "brightness", - "birmignham", "birmingham", - "birmimgham", "birmingham", - "bisexuella", "bisexual", - "bitterseet", "bittersweet", - "bitterswet", "bittersweet", - "blackahwks", "blackhawks", - "blackbarry", "blackberry", - "blackbeary", "blackberry", - "blackbeery", "blackberry", - "blackcawks", "blackhawks", - "blackhakws", "blackhawks", - "blackhwaks", "blackhawks", - "blackmsith", "blacksmith", - "blackshits", "blacksmith", - "blasphemey", "blasphemy", - "blitzkreig", "blitzkrieg", - "blochchain", "blockchain", - "blockcahin", "blockchain", - "blockchian", "blockchain", - "bloodboner", "bloodborne", - "bloodbonre", "bloodborne", - "bloodborbe", "bloodborne", - "bloodbrone", "bloodborne", - "bloodporne", "bloodborne", - "bloorborne", "bloodborne", - "blueberies", "blueberries", - "blueberris", "blueberries", - "blueberrry", "blueberry", - "bluebrints", "blueprints", - "boardcasts", "broadcasts", - "bodyheight", "bodyweight", - "bodyweigth", "bodyweight", - "bodywieght", "bodyweight", - "bombarment", "bombardment", - "bookmakred", "bookmarked", - "bootlaoder", "bootloader", - "bootleader", "bootloader", - "boradcasts", "broadcasts", - "borderlads", "borderlands", - "borderlans", "borderlands", - "bottelneck", "bottleneck", - "bottlebeck", "bottleneck", - "boundaires", "boundaries", - "bounderies", "boundaries", - "bourgeoius", "bourgeois", - "boycutting", "boycotting", - "boyfirends", "boyfriends", - "boyfreinds", "boyfriends", - "boyfrients", "boyfriends", - "braceletes", "bracelets", - "braceletts", "bracelets", - "brainwased", "brainwashed", - "brakedowns", "breakdowns", - "braodcasts", "broadcasts", - "brasillian", "brazilian", - "bratenders", "bartenders", - "brazilains", "brazilians", - "brazileans", "brazilians", - "braziliaan", "brazilians", - "brazilions", "brazilians", - "brazillans", "brazilians", - "brightoner", "brighten", - "brigthness", "brightness", - "brillaince", "brilliance", - "brilliante", "brilliance", - "brillianty", "brilliantly", - "brimestone", "brimstone", - "brimingham", "birmingham", - "broacasted", "broadcast", - "brotherhod", "brotherhood", - "brotherood", "brotherhood", - "brusselers", "brussels", - "brutallity", "brutally", - "buisnesses", "businesses", - "bulgariska", "bulgaria", - "bulletpoof", "bulletproof", - "bulletprof", "bulletproof", - "bureaucats", "bureaucrats", - "businesman", "businessman", - "businesmen", "businessmen", - "businessen", "businessmen", - "butterfies", "butterflies", - "cabinettas", "cabinets", - "caclulated", "calculated", - "caclulator", "calculator", - "cahracters", "characters", - "calcluator", "calculators", - "calcualted", "calculated", - "calcualtor", "calculator", - "calculador", "calculator", - "calcularon", "calculator", - "calculater", "calculator", - "calculatin", "calculations", - "calibratin", "calibration", - "calibraton", "calibration", - "califnoria", "californian", - "califonria", "californian", - "califorian", "californian", - "califorina", "california", - "californai", "californian", - "califronia", "california", - "caligraphy", "calligraphy", - "caliofrnia", "californian", - "calrifying", "clarifying", - "calssified", "classified", - "caluclated", "calculated", - "caluclator", "calculator", - "caluculate", "calculate", - "cambodican", "cambodia", - "camofluage", "camouflage", - "camoufalge", "camouflage", - "camouglage", "camouflage", - "campaiging", "campaigning", - "campaignes", "campaigns", - "cancellato", "cancellation", - "candidatas", "candidates", - "candidatxs", "candidates", - "candidiate", "candidate", - "canditates", "candidates", - "cannibalsm", "cannibalism", - "cannisters", "canisters", - "cannonical", "canonical", - "capabality", "capability", - "capabiltiy", "capability", - "capacators", "capacitors", - "capaciters", "capacitors", - "capactiors", "capacitors", - "capasitors", "capacitors", - "capatilism", "capitalism", - "capatilist", "capitalist", - "capatilize", "capitalize", - "capialized", "capitalized", - "capicators", "capacitors", - "capitalisn", "capitals", - "capitalits", "capitalists", - "capitalsim", "capitalism", - "capitalsit", "capitalists", - "capitarist", "capitalist", - "capitilism", "capitalism", - "capitilist", "capitalist", - "capitilize", "capitalize", - "capitlaism", "capitalism", - "capitlaist", "capitalist", - "capitlaize", "capitalized", - "capitolism", "capitalism", - "capitolist", "capitalist", - "capitolize", "capitalize", - "captainers", "captains", - "captialism", "capitalism", - "captialist", "capitalist", - "captialize", "capitalize", - "captivitiy", "captivity", - "caraciture", "caricature", - "carciature", "caricature", - "cardinales", "cardinals", - "cardinalis", "cardinals", - "carefullly", "carefully", - "cariacture", "caricature", - "caricatore", "caricature", - "cariciture", "caricature", - "caricuture", "caricature", - "carismatic", "charismatic", - "carribbean", "caribbean", - "cartdridge", "cartridge", - "cartdriges", "cartridges", - "carthagian", "carthaginian", - "cartilidge", "cartilage", - "cartirdges", "cartridges", - "cartrdiges", "cartridges", - "cartriages", "cartridges", - "cartrigdes", "cartridges", - "casaulties", "casualties", - "cassowarry", "cassowary", - "casualites", "casualties", - "casualries", "casualties", - "casulaties", "casualties", - "cataclysim", "cataclysm", - "cataclysym", "cataclysm", - "catagories", "categories", - "catapillar", "caterpillar", - "catapiller", "caterpillar", - "catastrope", "catastrophe", - "catastrphe", "catastrophe", - "categorice", "categorize", - "categoried", "categorized", - "categoriei", "categorize", - "cateogrize", "categorized", - "catepillar", "caterpillar", - "caterpilar", "caterpillar", - "catholicsm", "catholicism", - "catholicus", "catholics", - "catholisim", "catholicism", - "cativating", "activating", - "cattleship", "battleship", - "causalties", "casualties", - "cautionsly", "cautiously", - "celebratin", "celebration", - "celebrites", "celebrities", - "celebritiy", "celebrity", - "cellpading", "cellpadding", - "cellulaire", "cellular", - "cemetaries", "cemeteries", - "censorhsip", "censorship", - "censurship", "censorship", - "centipedle", "centipede", - "ceremonias", "ceremonies", - "ceremoniis", "ceremonies", - "ceremonije", "ceremonies", - "cerimonial", "ceremonial", - "cerimonies", "ceremonies", - "certainity", "certainty", - "certainlyt", "certainty", - "chairtable", "charitable", - "chalenging", "challenging", - "challanged", "challenged", - "challanges", "challenges", - "challegner", "challenger", - "challender", "challenger", - "challengue", "challenger", - "challengur", "challenger", - "challening", "challenging", - "challneger", "challenger", - "chanceller", "chancellor", - "chancillor", "chancellor", - "chansellor", "chancellor", - "charachter", "character", - "charactere", "characterize", - "characterz", "characterize", - "charactors", "characters", - "charakters", "characters", - "charatable", "charitable", - "charecters", "characters", - "charistics", "characteristics", - "charitible", "charitable", - "chartiable", "charitable", - "chechpoint", "checkpoint", - "checkpiont", "checkpoint", - "checkpoins", "checkpoints", - "checkponts", "checkpoints", - "cheesecase", "cheesecake", - "cheesecave", "cheesecake", - "cheeseface", "cheesecake", - "cheezecake", "cheesecake", - "chemcially", "chemically", - "chidlbirth", "childbirth", - "chihuahuha", "chihuahua", - "childbrith", "childbirth", - "childrends", "childrens", - "childrenis", "childrens", - "childrents", "childrens", - "chirstians", "christians", - "chocalates", "chocolates", - "chocloates", "chocolates", - "chocoaltes", "chocolates", - "chocolatie", "chocolates", - "chocolatos", "chocolates", - "chocolatte", "chocolates", - "chocolotes", "chocolates", - "cholestrol", "cholesterol", - "chormosome", "chromosome", - "chornicles", "chronicles", - "chrisitans", "christians", - "christains", "christians", - "christiaan", "christian", - "christimas", "christians", - "christinas", "christians", - "christines", "christians", - "christmans", "christians", - "chromasome", "chromosome", - "chromesome", "chromosome", - "chromisome", "chromosome", - "chromosmes", "chromosomes", - "chromosoms", "chromosomes", - "chromosone", "chromosome", - "chromosoom", "chromosome", - "chromozome", "chromosome", - "chronciles", "chronicles", - "chronicals", "chronicles", - "chronicels", "chronicles", - "chronocles", "chronicles", - "chronosome", "chromosome", - "chrsitians", "christians", - "cigarattes", "cigarettes", - "cigerattes", "cigarettes", - "cincinatti", "cincinnati", - "cinncinati", "cincinnati", - "circulaire", "circular", - "circulaton", "circulation", - "circumsice", "circumcised", - "circumsied", "circumcised", - "circumwent", "circumvent", - "circunvent", "circumvent", - "cirruculum", "curriculum", - "claculator", "calculator", - "clairfying", "clarifying", - "clasically", "classically", - "classicals", "classics", - "classrooom", "classroom", - "cleanliess", "cleanliness", - "cleareance", "clearance", - "cleverleys", "cleverly", - "cliffhager", "cliffhanger", - "climateers", "climates", - "climatiser", "climates", - "clincially", "clinically", - "clitoridis", "clitoris", - "clitorious", "clitoris", - "co-incided", "coincided", - "cockroachs", "cockroaches", - "cockroahes", "cockroaches", - "coefficent", "coefficient", - "cognatious", "contagious", - "cognitivie", "cognitive", - "coincidnce", "coincide", - "colelctive", "collective", - "colelctors", "collectors", - "collapsers", "collapses", - "collaquial", "colloquial", - "collasping", "collapsing", - "collataral", "collateral", - "collaterol", "collateral", - "collatoral", "collateral", - "collcetion", "collections", - "colleauges", "colleagues", - "colleciton", "collection", - "collectems", "collects", - "collectief", "collective", - "collecties", "collects", - "collectifs", "collects", - "collectivo", "collection", - "collectoin", "collections", - "collectons", "collections", - "collectros", "collects", - "collegaues", "colleagues", - "collequial", "colloquial", - "colleteral", "collateral", - "colliquial", "colloquial", - "collission", "collisions", - "collitions", "collisions", - "colloqiual", "colloquial", - "colloquail", "colloquial", - "colloqueal", "colloquial", - "collpasing", "collapsing", - "colonialsm", "colonialism", - "colorblend", "colorblind", - "coloublind", "colorblind", - "columbidae", "columbia", - "comapnions", "companions", - "comaprable", "comparable", - "comaprison", "comparison", - "comaptible", "compatible", - "combatabts", "combatants", - "combatents", "combatants", - "combinatin", "combinations", - "combinaton", "combination", - "comediants", "comedians", - "comepndium", "compendium", - "comferting", "comforting", - "comforming", "comforting", - "comfortbly", "comfortably", - "comisioned", "commissioned", - "comisioner", "commissioner", - "comissions", "commissions", - "commandbox", "commando", - "commandent", "commandment", - "commandeur", "commanders", - "commandore", "commanders", - "commandpod", "commando", - "commanists", "communists", - "commemters", "commenters", - "commencera", "commerce", - "commenciez", "commence", - "commentaar", "commentary", - "commentare", "commenter", - "commentars", "commenters", - "commentart", "commentator", - "commentery", "commentary", - "commentsry", "commenters", - "commercail", "commercials", - "commercent", "commence", - "commerical", "commercial", - "comminists", "communists", - "commisison", "commissions", - "commissons", "commissions", - "commiteted", "commited", - "commodites", "commodities", - "commtiment", "commitments", - "communicae", "communicated", - "communisim", "communism", - "communiste", "communities", - "communites", "communities", - "communters", "commenters", - "compadible", "compatible", - "compagnons", "companions", - "compainons", "companions", - "compairson", "comparison", - "compalined", "complained", - "compandium", "compendium", - "companians", "companions", - "companines", "companions", - "compansate", "compensate", - "comparabil", "comparable", - "comparason", "comparison", - "comparaste", "compares", - "comparatie", "comparative", - "compareble", "comparable", - "comparemos", "compares", - "comparions", "comparison", - "compariosn", "comparisons", - "comparisen", "compares", - "comparitve", "comparative", - "comparsion", "comparison", - "compartent", "compartment", - "compartmet", "compartment", - "compatibel", "compatible", - "compatibil", "compatible", - "compeating", "completing", - "compeditor", "competitor", - "compednium", "compendium", - "compeeting", "completing", - "compeltely", "completely", - "compelting", "completing", - "compeltion", "completion", - "compemdium", "compendium", - "compenduim", "compendium", - "compenents", "components", - "compenidum", "compendium", - "compensare", "compensate", - "comperable", "comparable", - "comperhend", "comprehend", - "compession", "compassion", - "competance", "competence", - "competator", "competitor", - "competenet", "competence", - "competense", "competence", - "competenze", "competence", - "competeted", "competed", - "competetor", "competitor", - "competidor", "competitor", - "competiors", "competitors", - "competitie", "competitive", - "competitin", "competitions", - "competitio", "competitor", - "competiton", "competition", - "competitve", "competitive", - "compilance", "compliance", - "compilaton", "compilation", - "compinsate", "compensate", - "compitable", "compatible", - "compitance", "compliance", - "complacant", "complacent", - "complaince", "compliance", - "complaines", "complaints", - "complainig", "complaining", - "complainte", "complained", - "complation", "completion", - "compleatly", "completely", - "complecate", "complicate", - "completeds", "completes", - "completent", "complement", - "completily", "complexity", - "completito", "completion", - "completley", "completely", - "complexers", "complexes", - "complexety", "complexity", - "complianed", "compliance", - "compliants", "complaints", - "complicaed", "complicate", - "complicare", "complicate", - "complicati", "complicit", - "complicato", "complication", - "complicite", "complicate", - "complicted", "complicated", - "complience", "compliance", - "complimate", "complicate", - "complition", "completion", - "complusion", "compulsion", - "complusive", "compulsive", - "complusory", "compulsory", - "compolsive", "compulsive", - "compolsory", "compulsory", - "compolsury", "compulsory", - "componants", "components", - "componenet", "components", - "componsate", "compensate", - "comporable", "comparable", - "compositae", "composite", - "compositie", "composite", - "compositon", "composition", - "compraison", "comparisons", - "compramise", "compromise", - "comprassem", "compress", - "comprehand", "comprehend", - "compresion", "compression", - "compresors", "compressor", - "compresser", "compressor", - "compressio", "compressor", - "compresson", "compression", - "comprihend", "comprehend", - "comprimise", "compromise", - "compromiss", "compromises", - "compromize", "compromise", - "compromsie", "compromises", - "comprossor", "compressor", - "compteting", "completing", - "comptetion", "completion", - "compulisve", "compulsive", - "compulosry", "compulsory", - "compulsary", "compulsory", - "compulsery", "compulsory", - "compulsing", "compulsion", - "compulsivo", "compulsion", - "compulsury", "compulsory", - "compuslion", "compulsion", - "compuslive", "compulsive", - "compuslory", "compulsory", - "compustion", "compulsion", - "computanti", "computation", - "conatiners", "containers", - "concedendo", "conceded", - "concedered", "conceded", - "conceitual", "conceptual", - "concentate", "concentrate", - "concenting", "connecting", - "conceptial", "conceptual", - "conceptuel", "conceptual", - "concersion", "concession", - "concesions", "concession", - "concidered", "considered", - "conciously", "consciously", - "concission", "concession", - "conclsuion", "concussion", - "conclusies", "conclusive", - "conclution", "conclusion", - "concorrent", "concurrent", - "concsience", "conscience", - "conculsion", "conclusion", - "conculsive", "conclusive", - "concurment", "concurrent", - "concurrant", "concurrent", - "concurrect", "concurrent", - "concusions", "concussion", - "concusison", "concussions", - "condamning", "condemning", - "condemming", "condemning", - "condencing", "condemning", - "condenming", "condemning", - "condensend", "condensed", - "condidtion", "condition", - "conditinal", "conditional", - "conditiner", "conditioner", - "conditiond", "conditioned", - "conditiong", "conditioning", - "condmening", "condemning", - "conduiting", "conducting", - "conencting", "connecting", - "conenction", "connection", - "conenctors", "connectors", - "conesencus", "consensus", - "confedarcy", "confederacy", - "confedence", "conference", - "confedercy", "confederacy", - "conferance", "conference", - "conferenze", "conference", - "conferming", "confirming", - "confernece", "conferences", - "confessino", "confessions", - "confidance", "confidence", - "confidenly", "confidently", - "confidense", "confidence", - "confidenty", "confidently", - "conflcting", "conflating", - "conflicing", "conflicting", - "conflictos", "conflicts", - "confliting", "conflating", - "confriming", "confirming", - "confussion", "confession", - "congratule", "congratulate", - "congresman", "congressman", - "congresmen", "congressmen", - "congressen", "congressmen", - "conjecutre", "conjecture", - "conjuction", "conjunction", - "conjuncion", "conjunction", - "conlcusion", "conclusion", - "conncetion", "connections", - "conneciton", "connection", - "connecties", "connects", - "connectins", "connects", - "connectivy", "connectivity", - "connectpro", "connector", - "conneticut", "connecticut", - "connotaion", "connotation", - "conpsiracy", "conspiracy", - "conqeuring", "conquering", - "conqouring", "conquering", - "conquerers", "conquerors", - "conquoring", "conquering", - "consciense", "conscience", - "consciouly", "consciously", - "consdiered", "considered", - "consending", "consenting", - "consensuel", "consensual", - "consenusal", "consensual", - "consequece", "consequence", - "consequnce", "consequence", - "conservare", "conserve", - "conservato", "conservation", - "conservice", "conserve", - "conservies", "conserve", - "conservite", "conserve", - "consicence", "conscience", - "consideras", "considers", - "consideret", "considerate", - "consipracy", "conspiracy", - "consistant", "consistent", - "consistens", "consists", - "consisteny", "consistency", - "consitency", "consistency", - "consituted", "constituted", - "conslutant", "consultant", - "consluting", "consulting", - "consolidad", "consolidated", - "consonents", "consonants", - "consorcium", "consortium", - "conspirace", "conspiracies", - "conspiricy", "conspiracy", - "conspriacy", "conspiracy", - "constaints", "constraints", - "constatnly", "constantly", - "constently", "constantly", - "constitude", "constitute", - "constitued", "constitute", - "constituem", "constitute", - "constituer", "constitute", - "constitues", "constitutes", - "constituie", "constitute", - "constituit", "constitute", - "constitutn", "constituents", - "constituye", "constitute", - "constnatly", "constantly", - "constracts", "constructs", - "constraits", "constraints", - "constransi", "constraints", - "constrants", "constraints", - "construced", "constructed", - "constructo", "construction", - "construint", "constraint", - "construits", "constructs", - "construted", "constructed", - "consueling", "consulting", - "consultata", "consultant", - "consultate", "consultant", - "consultati", "consultant", - "consultato", "consultation", - "consultent", "consultant", - "consumated", "consummated", - "consumbale", "consumables", - "consuments", "consumes", - "consumirem", "consumerism", - "consumires", "consumerism", - "consumirse", "consumerism", - "consumiste", "consumes", - "consumpion", "consumption", - "contaction", "contacting", - "contageous", "contagious", - "contagiosa", "contagious", - "contagioso", "contagious", - "contaigous", "contagious", - "containors", "containers", - "contaminen", "containment", - "contanting", "contacting", - "contection", "contention", - "contectual", "contextual", - "conteiners", "contenders", - "contempate", "contemplate", - "contemplat", "contempt", - "contempory", "contemporary", - "contenants", "continents", - "contencion", "contention", - "contendors", "contenders", - "contenents", "continents", - "conteneurs", "contenders", - "contengent", "contingent", - "contension", "contention", - "contentino", "contention", - "contentios", "contentious", - "contentous", "contentious", - "contestais", "contests", - "contestans", "contests", - "contestase", "contests", - "contestion", "contention", - "contestors", "contests", - "contextful", "contextual", - "contextuel", "contextual", - "contextura", "contextual", - "contianers", "containers", - "contianing", "containing", - "contibuted", "contributed", - "contibutes", "contributes", - "contigents", "continents", - "contigious", "contagious", - "contignent", "contingent", - "continants", "continents", - "continenal", "continental", - "continenet", "continents", - "contineous", "continuous", - "continetal", "continental", - "contingecy", "contingency", - "contingeny", "contingency", - "continient", "contingent", - "continious", "continuous", - "continiuty", "continuity", - "contintent", "contingent", - "continualy", "continually", - "continuare", "continue", - "continuati", "continuity", - "continuato", "continuation", - "continuent", "contingent", - "continuety", "continuity", - "continunes", "continents", - "continuons", "continuous", - "continutiy", "continuity", - "continuuum", "continuum", - "contitnent", "contingent", - "contiuning", "containing", - "contiunity", "continuity", - "contorller", "controllers", - "contracing", "contracting", - "contractar", "contractor", - "contracter", "contractor", - "contractin", "contraction", - "contractos", "contracts", - "contradice", "contradicted", - "contradics", "contradicts", - "contredict", "contradict", - "contribued", "contributed", - "contribuem", "contribute", - "contribuer", "contribute", - "contribues", "contributes", - "contribuie", "contribute", - "contribuit", "contribute", - "contributo", "contribution", - "contributs", "contributes", - "contribuye", "contribute", - "contricted", "contracted", - "contridict", "contradict", - "contriubte", "contributes", - "controlelr", "controllers", - "controlers", "controls", - "controling", "controlling", - "controlles", "controls", - "controvery", "controversy", - "controvesy", "controversy", - "contrubite", "contributes", - "contrubute", "contribute", - "contuining", "continuing", - "contuinity", "continuity", - "convaluted", "convoluted", - "convcition", "convictions", - "conveinent", "convenient", - "conveluted", "convoluted", - "convencion", "convention", - "conveniant", "convenient", - "conveniece", "convenience", - "convenince", "convenience", - "convential", "conventional", - "converesly", "conversely", - "convergens", "converse", - "converison", "conversions", - "converning", "converting", - "conversare", "converse", - "conversino", "conversions", - "conversley", "conversely", - "conversoin", "conversions", - "conversons", "conversions", - "convertion", "conversion", - "convertire", "converter", - "converying", "converting", - "conveyered", "conveyed", - "conviccion", "conviction", - "conviciton", "conviction", - "convienent", "convenient", - "conviluted", "convoluted", - "convincted", "convince", - "convinsing", "convincing", - "convinving", "convincing", - "convoluded", "convoluted", - "convoulted", "convoluted", - "convulated", "convoluted", - "convuluted", "convoluted", - "cooperatve", "cooperative", - "coordenate", "coordinate", - "coordiante", "coordinate", - "coordinare", "coordinate", - "coordinato", "coordination", - "coordinats", "coordinates", - "coordonate", "coordinate", - "cooridnate", "coordinate", - "copehnagen", "copenhagen", - "copenaghen", "copenhagen", - "copenahgen", "copenhagen", - "copengagen", "copenhagen", - "copengahen", "copenhagen", - "copenhagan", "copenhagen", - "copenhague", "copenhagen", - "copenhagun", "copenhagen", - "copenhaven", "copenhagen", - "copenhegan", "copenhagen", - "copyrighed", "copyrighted", - "copyrigted", "copyrighted", - "corinthans", "corinthians", - "corinthias", "corinthians", - "corinthins", "corinthians", - "cornmitted", "committed", - "corporatie", "corporate", - "corralated", "correlated", - "corralates", "correlates", - "correccion", "correction", - "correciton", "corrections", - "correcters", "correctors", - "correctess", "correctness", - "correctivo", "correction", - "correctons", "corrections", - "corregated", "correlated", - "correkting", "correcting", - "correlatas", "correlates", - "correlatie", "correlated", - "correlatos", "correlates", - "correspend", "correspond", - "corrilated", "correlated", - "corrilates", "correlates", - "corrispond", "correspond", - "corrolated", "correlated", - "corrolates", "correlates", - "corrospond", "correspond", - "corrpution", "corruption", - "corrulates", "correlates", - "corrupcion", "corruption", - "cosmeticas", "cosmetics", - "cosmeticos", "cosmetics", - "costumized", "customized", - "counceling", "counseling", - "councellor", "councillor", - "councelors", "counselors", - "councilers", "councils", - "counselers", "counselors", - "counsellng", "counselling", - "counsilers", "counselors", - "counsiling", "counseling", - "counsilors", "counselors", - "counsolers", "counselors", - "counsoling", "counseling", - "countepart", "counteract", - "counteratk", "counteract", - "counterbat", "counteract", - "countercat", "counteract", - "countercut", "counteract", - "counteries", "counters", - "countoring", "countering", - "countryies", "countryside", - "countrying", "countering", - "courcework", "coursework", - "coursefork", "coursework", - "courthosue", "courthouse", - "courtrooom", "courtroom", - "cousnelors", "counselors", - "coutneract", "counteract", - "coutnering", "countering", - "covenental", "covenant", - "cranberrry", "cranberry", - "creationis", "creations", - "creationsm", "creationism", - "creationst", "creationist", - "creativily", "creatively", - "creativley", "creatively", - "credibilty", "credibility", - "creeperest", "creepers", - "crimanally", "criminally", - "criminalty", "criminally", - "criminalul", "criminally", - "criticable", "critical", - "criticarlo", "critical", - "criticiing", "criticising", - "criticisim", "criticism", - "criticisme", "criticise", - "criticisng", "criticising", - "criticists", "critics", - "criticisze", "criticise", - "criticizms", "criticisms", - "criticizng", "criticizing", - "critisiced", "criticized", - "critisicms", "criticisms", - "critisicsm", "criticisms", - "critisiscm", "criticisms", - "critisisms", "criticisms", - "critisizes", "criticises", - "critisizms", "criticisms", - "critiziced", "criticized", - "critizised", "criticized", - "critizisms", "criticisms", - "critizized", "criticized", - "crocodille", "crocodile", - "crossfiter", "crossfire", - "crutchetts", "crutches", - "crystalens", "crystals", - "crystalisk", "crystals", - "crystallis", "crystals", - "cuatiously", "cautiously", - "culterally", "culturally", - "cultrually", "culturally", - "culumative", "cumulative", - "culutrally", "culturally", - "cumbersone", "cumbersome", - "cumbursome", "cumbersome", - "cumpolsory", "compulsory", - "cumulitive", "cumulative", - "currancies", "currencies", - "currenctly", "currency", - "currenices", "currencies", - "currentfps", "currents", - "currentlys", "currents", - "currentpos", "currents", - "currentusa", "currents", - "curriculem", "curriculum", - "curriculim", "curriculum", - "curriences", "currencies", - "curroption", "corruption", - "custimized", "customized", - "customzied", "customized", - "custumized", "customized", - "cutscences", "cutscene", - "cutscenses", "cutscene", - "dangerouly", "dangerously", - "dealerhsip", "dealerships", - "deathamtch", "deathmatch", - "deathmacth", "deathmatch", - "debateable", "debatable", - "decembeard", "december", - "decendants", "descendants", - "decendents", "descendants", - "decideable", "decidable", - "deciptions", "depictions", - "decisiones", "decisions", - "declarasen", "declares", - "declaraste", "declares", - "declaremos", "declares", - "decomposit", "decompose", - "decoracion", "decoration", - "decorativo", "decoration", - "decoritive", "decorative", - "decroative", "decorative", - "decsending", "descending", - "dedicacion", "dedication", - "dedikation", "dedication", - "deducatble", "deductible", - "deducitble", "deductible", - "defacation", "defamation", - "defamating", "defamation", - "defanitely", "definately", - "defelction", "deflection", - "defendeers", "defender", - "defendents", "defendants", - "defenderes", "defenders", - "defenesman", "defenseman", - "defenselss", "defenseless", - "defensivly", "defensively", - "defianetly", "definately", - "defiantely", "definately", - "defiantley", "definately", - "defibately", "definately", - "deficately", "definately", - "deficiancy", "deficiency", - "deficience", "deficiencies", - "deficienct", "deficient", - "deficienty", "deficiency", - "defiintely", "definately", - "definaetly", "definately", - "definaitly", "definately", - "definaltey", "definately", - "definataly", "definately", - "definateky", "definately", - "definately", "definitely", - "definatily", "definately", - "defination", "definition", - "definative", "definitive", - "definatlly", "definately", - "definatrly", "definately", - "definayely", "definately", - "defineatly", "definately", - "definetaly", "definately", - "definetely", "definitely", - "definetily", "definately", - "definetlly", "definetly", - "definettly", "definately", - "definicion", "definition", - "definietly", "definitely", - "definining", "defining", - "definitaly", "definately", - "definiteyl", "definitly", - "definitivo", "definition", - "definitley", "definitely", - "definitlly", "definitly", - "definitlry", "definitly", - "definitlty", "definitly", - "definjtely", "definately", - "definltely", "definately", - "definotely", "definately", - "definstely", "definately", - "defintaley", "definately", - "defintiely", "definitely", - "defintiion", "definitions", - "definutely", "definately", - "deflaction", "deflection", - "defleciton", "deflection", - "deflektion", "deflection", - "defniately", "definately", - "degenarate", "degenerate", - "degenerare", "degenerate", - "degenerite", "degenerate", - "degoratory", "derogatory", - "degraderad", "degraded", - "dehydraded", "dehydrated", - "dehyrdated", "dehydrated", - "deifnately", "definately", - "deisgnated", "designated", - "delaership", "dealership", - "delearship", "dealership", - "delegaties", "delegate", - "delegative", "delegate", - "delfection", "deflection", - "delibarate", "deliberate", - "deliberant", "deliberate", - "delibirate", "deliberate", - "deligthful", "delightful", - "deliverate", "deliberate", - "deliverees", "deliveries", - "deliviered", "delivered", - "deliviring", "delivering", - "delporable", "deplorable", - "delpoyment", "deployment", - "delutional", "delusional", - "dementieva", "dementia", - "deminsions", "dimensions", - "democracis", "democracies", - "democracts", "democrat", - "democratas", "democrats", - "democrates", "democrats", - "demograhic", "demographic", - "demographs", "demographics", - "demograpic", "demographic", - "demolation", "demolition", - "demolicion", "demolition", - "demolision", "demolition", - "demolitian", "demolition", - "demoliting", "demolition", - "demoloshed", "demolished", - "demolution", "demolition", - "demonished", "demolished", - "demonstate", "demonstrate", - "demonstras", "demonstrates", - "demorcracy", "democracy", - "denegerate", "degenerate", - "denominato", "denomination", - "denomintor", "denominator", - "deocrative", "decorative", - "deomcratic", "democratic", - "deparments", "departments", - "departmens", "departments", - "departmnet", "departments", - "depcitions", "depictions", - "depdending", "depending", - "depencency", "dependency", - "dependance", "dependence", - "dependancy", "dependency", - "dependandt", "dependant", - "dependends", "depended", - "dependened", "depended", - "dependenta", "dependant", - "dependente", "dependence", - "depicitons", "depictions", - "deplorabel", "deplorable", - "deplorabil", "deplorable", - "deplorible", "deplorable", - "deplyoment", "deployment", - "depolyment", "deployment", - "depositers", "deposits", - "depressief", "depressive", - "depressies", "depressive", - "deprivaton", "deprivation", - "deragotory", "derogatory", - "derivaties", "derivatives", - "deriviated", "derived", - "derivitave", "derivative", - "derivitive", "derivative", - "derogatary", "derogatory", - "derogatery", "derogatory", - "derogetory", "derogatory", - "derogitory", "derogatory", - "derogotary", "derogatory", - "derogotory", "derogatory", - "derviative", "derivative", - "descendats", "descendants", - "descendend", "descended", - "descenting", "descending", - "descerning", "descending", - "descipable", "despicable", - "descisions", "decisions", - "descriibes", "describes", - "descripton", "description", - "desginated", "designated", - "desigining", "designing", - "desireable", "desirable", - "desktopbsd", "desktops", - "despciable", "despicable", - "desperatly", "desperately", - "desperetly", "desperately", - "despicaple", "despicable", - "despicible", "despicable", - "dessicated", "desiccated", - "destinatin", "destinations", - "destinaton", "destination", - "destoryers", "destroyers", - "destorying", "destroying", - "destroyeds", "destroyers", - "destroyeer", "destroyers", - "destrucion", "destruction", - "destrucive", "destructive", - "destryoing", "destroying", - "detectarlo", "detector", - "detectaron", "detector", - "detectoare", "detector", - "determinas", "determines", - "determinig", "determining", - "determinsm", "determinism", - "deutschand", "deutschland", - "devastaded", "devastated", - "devastaing", "devastating", - "devastanti", "devastating", - "devasteted", "devastated", - "develepors", "developers", - "develoeprs", "developers", - "developmet", "developments", - "developors", "develops", - "developped", "developed", - "developres", "develops", - "develpment", "development", - "devestated", "devastated", - "devolvendo", "devolved", - "deyhdrated", "dehydrated", - "diagnosied", "diagnose", - "diagnosies", "diagnosis", - "diagnositc", "diagnostic", - "diagnossed", "diagnose", - "diagnosted", "diagnose", - "diagnotics", "diagnostic", - "diagonstic", "diagnostic", - "dichotomoy", "dichotomy", - "dicitonary", "dictionary", - "diconnects", "disconnects", - "dicovering", "discovering", - "dictateurs", "dictates", - "dictionare", "dictionaries", - "differance", "difference", - "differenly", "differently", - "differense", "differences", - "differente", "difference", - "differentl", "differential", - "differenty", "differently", - "differnece", "difference", - "difficulte", "difficulties", - "difficults", "difficulties", - "difficutly", "difficulty", - "diffuculty", "difficulty", - "diganostic", "diagnostic", - "dimensinal", "dimensional", - "dimentions", "dimensions", - "dimesnions", "dimensions", - "dimineshes", "diminishes", - "diminising", "diminishing", - "dimunitive", "diminutive", - "dinosaures", "dinosaurs", - "dinosaurus", "dinosaurs", - "dipections", "depictions", - "diplimatic", "diplomatic", - "diplomacia", "diplomatic", - "diplomancy", "diplomacy", - "dipolmatic", "diplomatic", - "directinla", "directional", - "directionl", "directional", - "directivos", "directions", - "directores", "directors", - "directorys", "directors", - "directsong", "directions", - "disaapoint", "disappoint", - "disagreeed", "disagreed", - "disapeared", "disappeared", - "disappeard", "disappeared", - "disappered", "disappeared", - "disappiont", "disappoint", - "disaproval", "disapproval", - "disastorus", "disastrous", - "disastrosa", "disastrous", - "disastrose", "disastrous", - "disastrosi", "disastrous", - "disastroso", "disastrous", - "disaterous", "disastrous", - "discalimer", "disclaimer", - "discapline", "discipline", - "discepline", "discipline", - "disception", "discretion", - "discharded", "discharged", - "disciplers", "disciples", - "disciplies", "disciplines", - "disciplins", "disciplines", - "disciprine", "discipline", - "disclamier", "disclaimer", - "discliamer", "disclaimer", - "disclipine", "discipline", - "disclousre", "disclosure", - "disclsoure", "disclosure", - "discograhy", "discography", - "discograpy", "discography", - "discolsure", "disclosure", - "disconenct", "disconnect", - "disconncet", "disconnects", - "disconnets", "disconnects", - "discontued", "discounted", - "discoruage", "discourages", - "discources", "discourse", - "discourgae", "discourages", - "discourges", "discourages", - "discoveres", "discovers", - "discoveryd", "discovered", - "discoverys", "discovers", - "discrecion", "discretion", - "discreddit", "discredited", - "discrepany", "discrepancy", - "discresion", "discretion", - "discreting", "discretion", - "discribing", "describing", - "discrimine", "discriminate", - "discrouage", "discourages", - "discrption", "discretion", - "discusison", "discussions", - "discusting", "discussing", - "disgracful", "disgraceful", - "disgrunted", "disgruntled", - "disgruntld", "disgruntled", - "disguisted", "disguise", - "disgustiny", "disgustingly", - "disgustosa", "disgusts", - "disgustose", "disgusts", - "disgustosi", "disgusts", - "disgustoso", "disgusts", - "dishcarged", "discharged", - "dishinored", "dishonored", - "disicpline", "discipline", - "disiplined", "disciplined", - "dislcaimer", "disclaimer", - "dismanteld", "dismantled", - "dismanting", "dismantling", - "dismentled", "dismantled", - "dispecable", "despicable", - "dispencary", "dispensary", - "dispencers", "dispenser", - "dispencing", "dispensing", - "dispensare", "dispenser", - "dispensory", "dispensary", - "dispesnary", "dispensary", - "dispicable", "despicable", - "displayfps", "displays", - "dispositon", "disposition", - "dispostion", "disposition", - "disputerad", "disputed", - "disrecpect", "disrespect", - "disrection", "discretion", - "disrepsect", "disrespect", - "disresepct", "disrespect", - "disrespekt", "disrespect", - "disription", "disruption", - "disrispect", "disrespect", - "disrputing", "disrupting", - "disruptivo", "disruption", - "disruptron", "disruption", - "dissapears", "disappears", - "dissappear", "disappear", - "disscusion", "discussion", - "dissmisive", "dismissive", - "dissodance", "dissonance", - "dissonante", "dissonance", - "dissonence", "dissonance", - "distastful", "distasteful", - "disticntly", "distinctly", - "distiction", "distinction", - "distincion", "distinction", - "distincive", "distinctive", - "distinclty", "distinctly", - "distinctie", "distinctive", - "distinctin", "distinctions", - "distingish", "distinguish", - "distingush", "distinguish", - "distintcly", "distinctly", - "distoriton", "distortion", - "distorsion", "distortion", - "distortian", "distortion", - "distortron", "distortion", - "distractes", "distracts", - "distractia", "district", - "distractin", "district", - "distractiv", "district", - "distration", "distortion", - "distribuem", "distribute", - "distribuer", "distribute", - "distribuie", "distribute", - "distribuit", "distribute", - "distributs", "distributors", - "distribuye", "distribute", - "distrotion", "distortion", - "distrubing", "disturbing", - "distrubtes", "distrust", - "distrubute", "distribute", - "distubring", "disturbing", - "disturbace", "disturbance", - "disturping", "disrupting", - "disucssing", "discussing", - "disucssion", "discussion", - "disurption", "disruption", - "ditributed", "distributed", - "diversifiy", "diversify", - "dividendes", "dividends", - "dividendos", "dividends", - "divideneds", "dividend", - "divinition", "divination", - "divinitory", "divinity", - "divisiones", "divisions", - "dobulelift", "doublelift", - "doccuments", "documents", - "documentry", "documentary", - "dogmatisch", "dogmatic", - "dolphinese", "dolphins", - "domianting", "dominating", - "domimation", "domination", - "dominacion", "domination", - "dominaters", "dominates", - "donwgraded", "downgraded", - "donwloaded", "downloaded", - "donwvoters", "downvoters", - "donwvoting", "downvoting", - "doomsdaily", "doomsday", - "doubellift", "doublelift", - "doubleiift", "doublelift", - "doubleleft", "doublelift", - "doublelfit", "doublelift", - "doublerift", "doublelift", - "doulbelift", "doublelift", - "downgarded", "downgraded", - "downgrated", "downgrade", - "downlaoded", "downloaded", - "downloadas", "downloads", - "downloades", "downloads", - "downovting", "downvoting", - "downroaded", "downgraded", - "downsiders", "downsides", - "downstaris", "downstairs", - "downstiars", "downstairs", - "downtokers", "downvoters", - "downtoking", "downvoting", - "downtraded", "downgraded", - "downviting", "downvoting", - "downvotear", "downvoters", - "downvoteas", "downvoters", - "downvoteds", "downvoters", - "downvotees", "downvoters", - "downvotesd", "downvoters", - "downvotess", "downvoters", - "downvotest", "downvoters", - "downvoteur", "downvoters", - "downvoties", "downvoters", - "downvotres", "downvoters", - "downvotted", "downvote", - "downvottes", "downvoters", - "downwoters", "downvoters", - "downwoting", "downvoting", - "drasticaly", "drastically", - "drasticlly", "drastically", - "draughtman", "draughtsman", - "dumbbellls", "dumbbells", - "dumbfouded", "dumbfounded", - "dumbfouned", "dumbfounded", - "dungeoness", "dungeons", - "dupilcates", "duplicates", - "duplicants", "duplicates", - "duplicatas", "duplicates", - "duplicitas", "duplicates", - "duplifaces", "duplicates", - "durabiltiy", "durability", - "dyamically", "dynamically", - "dynamicaly", "dynamically", - "dynamicdns", "dynamics", - "dynamiclly", "dynamically", - "dynamicpsf", "dynamics", - "dynamitage", "dynamite", - "dysfuncion", "dysfunction", - "earhtbound", "earthbound", - "earthqauke", "earthquake", - "earthquack", "earthquake", - "earthquaks", "earthquakes", - "earthquate", "earthquake", - "earthqukes", "earthquakes", - "easthetics", "aesthetics", - "ecoligical", "ecological", - "ecomonical", "economical", - "econimical", "economical", - "econimists", "economists", - "economicas", "economics", - "economicos", "economics", - "economicus", "economics", - "economisch", "economic", - "economisit", "economists", - "effeciency", "efficiency", - "effectivly", "effectively", - "efficeincy", "efficiency", - "efficently", "efficiently", - "efficiancy", "efficiency", - "efficienct", "efficient", - "efficienty", "efficiently", - "egotistcal", "egotistical", - "ehtnically", "ethnically", - "ejaculaion", "ejaculation", - "ejaculatie", "ejaculate", - "ejaculatin", "ejaculation", - "ejaculaton", "ejaculation", - "ejaculatte", "ejaculate", - "electircal", "electrical", - "electivite", "elective", - "electoraat", "electorate", - "electorale", "electorate", - "electorite", "electorate", - "electornic", "electronic", - "electrican", "electrician", - "electriciy", "electricity", - "electricty", "electricity", - "electrinic", "electrician", - "electroate", "electorate", - "electrodan", "electron", - "electroinc", "electron", - "electrolye", "electrolytes", - "electroman", "electron", - "electroncs", "electrons", - "electrones", "electrons", - "electronik", "election", - "electronis", "electronics", - "electronix", "election", - "elemantary", "elementary", - "elementery", "elementary", - "elementray", "elementary", - "eleminated", "eliminated", - "elephantes", "elephants", - "elephantis", "elephants", - "elephantos", "elephants", - "elephantus", "elephants", - "eletricity", "electricity", - "elimanates", "eliminates", - "elimenates", "eliminates", - "elimentary", "elementary", - "elimimates", "eliminates", - "eliminaste", "eliminates", - "eliminatin", "elimination", - "eliminaton", "elimination", - "eliminster", "eliminates", - "ellipitcal", "elliptical", - "ellipsical", "elliptical", - "ellipticle", "elliptical", - "ellitpical", "elliptical", - "ellpitical", "elliptical", - "eloquantly", "eloquently", - "eloquintly", "eloquently", - "emapthetic", "empathetic", - "embarassed", "embarrassed", - "embarassig", "embarassing", - "embarrased", "embarrassed", - "embarrases", "embarrassed", - "embezelled", "embezzled", - "emblamatic", "emblematic", - "embodyment", "embodiment", - "emergenies", "emergencies", - "emmigrated", "emigrated", - "emminently", "eminently", - "emmisaries", "emissaries", - "emobdiment", "embodiment", - "emotionaly", "emotionally", - "empahsized", "emphasized", - "empahsizes", "emphasizes", - "empathatic", "empathetic", - "emphacized", "emphasized", - "emphatetic", "empathetic", - "emphatised", "emphasized", - "emphatized", "emphasized", - "emphatizes", "emphasizes", - "emphazised", "emphasized", - "emphazises", "emphasizes", - "emphesized", "emphasized", - "emphesizes", "emphasizes", - "emphisized", "emphasized", - "emphisizes", "emphasizes", - "empiricaly", "empirically", - "employeers", "employees", - "employeurs", "employer", - "emprisoned", "imprisoned", - "encahnting", "enchanting", - "enchancing", "enchanting", - "enchanging", "enchanting", - "enchantent", "enchantment", - "enchantmet", "enchantments", - "encompases", "encompasses", - "encounterd", "encountered", - "encountred", "encountered", - "encouraing", "encouraging", - "encoutners", "encounters", - "encription", "encryption", - "encrpytion", "encryption", - "encyrption", "encryption", - "endlessley", "endlessly", - "endolithes", "endoliths", - "enforceing", "enforcing", - "engagemnet", "engagements", - "engagemnts", "engagements", - "engieneers", "engineers", - "enginereed", "engineered", - "enivitable", "inevitable", - "enlargment", "enlargement", - "enlighment", "enlighten", - "enlightend", "enlightened", - "enlightned", "enlightened", - "enrolement", "enrollment", - "enrollemnt", "enrollment", - "enterpirse", "enterprise", - "enterprice", "enterprise", - "enterpries", "enterprises", - "enterprize", "enterprise", - "enterprsie", "enterprises", - "enterrpise", "enterprises", - "entertaing", "entertaining", - "enthically", "ethnically", - "enthisiast", "enthusiast", - "enthuiasts", "enthusiast", - "enthuisast", "enthusiasts", - "enthusiams", "enthusiasm", - "enthusiant", "enthusiast", - "enthusiats", "enthusiast", - "enthusiest", "enthusiast", - "enthusists", "enthusiasts", - "envelopped", "envelope", - "enveloppen", "envelope", - "enveloppes", "envelope", - "enviorment", "environment", - "enviroment", "environment", - "environmet", "environments", - "equiavlent", "equivalents", - "equilavent", "equivalent", - "equilibium", "equilibrium", - "equilibrim", "equilibrium", - "equilibrum", "equilibrium", - "equippment", "equipment", - "equitorial", "equatorial", - "equivalant", "equivalent", - "equivalnce", "equivalence", - "equivalnet", "equivalents", - "equivelant", "equivalent", - "equivelent", "equivalent", - "equivilant", "equivalent", - "equivilent", "equivalent", - "equivlaent", "equivalents", - "equivolent", "equivalent", - "eratically", "erratically", - "escalative", "escalate", - "escavation", "escalation", - "esitmation", "estimation", - "esoterisch", "esoteric", - "especailly", "especially", - "espeically", "especially", - "espressino", "espresso", - "espression", "espresso", - "essencials", "essentials", - "essensials", "essentials", - "essentails", "essentials", - "essentialy", "essentially", - "essentiels", "essentials", - "essentuals", "essentials", - "estabishes", "establishes", - "estimacion", "estimation", - "estimativo", "estimation", - "estination", "estimation", - "ethicallly", "ethically", - "ethincally", "ethnically", - "ethnicites", "ethnicities", - "ethnicitiy", "ethnicity", - "euphorical", "euphoria", - "euphorisch", "euphoric", - "euthanaisa", "euthanasia", - "euthanazia", "euthanasia", - "euthanesia", "euthanasia", - "evaluacion", "evaluation", - "evalutaion", "evaluation", - "evaulating", "evaluating", - "evaulation", "evaluation", - "eventaully", "eventually", - "eventially", "eventually", - "everyoneis", "everyones", - "exacberate", "exacerbated", - "exagerated", "exaggerated", - "exagerates", "exaggerates", - "exagerrate", "exaggerate", - "exaggarate", "exaggerate", - "exaggurate", "exaggerate", - "exahusting", "exhausting", - "exahustion", "exhaustion", - "examinated", "examined", - "examinerad", "examined", - "exapansion", "expansion", - "exapnsions", "expansions", - "exauhsting", "exhausting", - "exauhstion", "exhaustion", - "excecuting", "executing", - "excecution", "execution", - "exceedigly", "exceedingly", - "exceedinly", "exceedingly", - "excellance", "excellence", - "excellenet", "excellence", - "excellenze", "excellence", - "excerising", "exercising", - "excessivly", "excessively", - "exchangees", "exchanges", - "excitiment", "excitement", - "exclsuives", "exclusives", - "exclusivas", "exclusives", - "exclusivly", "exclusively", - "exclusivos", "exclusives", - "exclusivty", "exclusivity", - "exclussive", "exclusives", - "exclusvies", "exclusives", - "excpetions", "exceptions", - "exculsives", "exclusives", - "exculsivly", "exclusively", - "execptions", "exceptions", - "exectuable", "executable", - "exectuions", "executions", - "exectuives", "executives", - "execusions", "executions", - "executabil", "executable", - "executible", "executable", - "executiner", "executioner", - "executings", "executions", - "executivas", "executives", - "exeedingly", "exceedingly", - "exepmtions", "exemptions", - "exeptional", "exceptional", - "exercicing", "exercising", - "exercizing", "exercising", - "exersicing", "exercising", - "exersising", "exercising", - "exersizing", "exercising", - "exerternal", "external", - "exeuctions", "executions", - "exhasuting", "exhausting", - "exhasution", "exhaustion", - "exhaustivo", "exhaustion", - "exhibicion", "exhibition", - "exhibitons", "exhibits", - "exhuasting", "exhausting", - "exhuastion", "exhaustion", - "exibitions", "exhibitions", - "exictement", "excitement", - "exipration", "expiration", - "existantes", "existent", - "existenial", "existential", - "existental", "existential", - "exlcusives", "exclusives", - "exorbatant", "exorbitant", - "exorbatent", "exorbitant", - "exorbidant", "exorbitant", - "exorbirant", "exorbitant", - "exorbitent", "exorbitant", - "expalining", "explaining", - "expanisons", "expansions", - "expansivos", "expansions", - "expanssion", "expansions", - "expantions", "expansions", - "expecially", "especially", - "expectaion", "expectation", - "expectansy", "expectancy", - "expectency", "expectancy", - "expections", "exceptions", - "expedetion", "expedition", - "expedicion", "expedition", - "expeditivo", "expedition", - "expeiments", "experiments", - "expemtions", "exemptions", - "expendeble", "expendable", - "expendible", "expendable", - "expensable", "expendable", - "expentancy", "expectancy", - "expereince", "experience", - "experement", "experiment", - "experiance", "experience", - "experieced", "experienced", - "experieces", "experiences", - "experiemnt", "experiment", - "experiened", "experienced", - "experiense", "experiences", - "expermient", "experiments", - "experssion", "expression", - "expextancy", "expectancy", - "expidetion", "expedition", - "expierence", "experience", - "expination", "expiration", - "expirement", "experiment", - "explanatin", "explanations", - "explicatia", "explicit", - "explicatie", "explicit", - "explicatif", "explicit", - "explicatii", "explicit", - "explicetly", "explicitly", - "explicilty", "explicitly", - "explioting", "exploiting", - "exploiding", "exploiting", - "exploition", "exploiting", - "explorarea", "explorer", - "exploreres", "explorers", - "explosivas", "explosives", - "explossion", "explosions", - "explossive", "explosives", - "explosvies", "explosives", - "explotions", "explosions", - "explusions", "explosions", - "expodition", "exposition", - "expoliting", "exploiting", - "expolsions", "explosions", - "expolsives", "explosives", - "exponental", "exponential", - "exposicion", "exposition", - "expositivo", "exposition", - "expotition", "exposition", - "exprensive", "expressive", - "expresions", "expression", - "expresison", "expressions", - "expressens", "expresses", - "expressief", "expressive", - "expressley", "expressly", - "expriation", "expiration", - "extensivly", "extensively", - "extentions", "extensions", - "exterioara", "exterior", - "exterioare", "exterior", - "extermally", "externally", - "extermists", "extremists", - "extraccion", "extraction", - "extractivo", "extraction", - "extractnow", "extraction", - "extradtion", "extraction", - "extremaste", "extremes", - "extremeley", "extremely", - "extremelly", "extremely", - "extrememly", "extremely", - "extremests", "extremists", - "extremised", "extremes", - "extremisim", "extremism", - "extremisme", "extremes", - "extremiste", "extremes", - "extrenally", "externally", - "extrimists", "extremists", - "eyeballers", "eyeballs", - "fabriacted", "fabricated", - "fabricatie", "fabricated", - "faciliated", "facilitated", - "facilitait", "facilitate", - "facilitant", "facilitate", - "facilitare", "facilitate", - "facisnated", "fascinated", - "facitilies", "facilities", - "facsinated", "fascinated", - "fahernheit", "fahrenheit", - "fahrenhiet", "fahrenheit", - "fallatious", "fallacious", - "fallicious", "fallacious", - "falshbacks", "flashbacks", - "familiarty", "familiarity", - "familiarze", "familiarize", - "fanaticals", "fanatics", - "fanfaction", "fanfiction", - "fanfcition", "fanfiction", - "fanficiton", "fanfiction", - "fanserivce", "fanservice", - "fanservise", "fanservice", - "fanservive", "fanservice", - "fantasiose", "fantasies", - "farehnheit", "fahrenheit", - "farhenheit", "fahrenheit", - "fascianted", "fascinated", - "fascinatie", "fascinated", - "fascinatin", "fascination", - "fascistisk", "fascists", - "fatalaties", "fatalities", - "favoruites", "favourites", - "favourates", "favourites", - "favouritsm", "favourites", - "favourties", "favourites", - "federacion", "federation", - "federativo", "federation", - "fellowhsip", "fellowship", - "fellowshop", "fellowship", - "feminimity", "femininity", - "feministas", "feminists", - "feminitity", "femininity", - "fermentato", "fermentation", - "fertalizer", "fertilizer", - "fertelizer", "fertilizer", - "fertilizar", "fertilizer", - "fertilzier", "fertilizer", - "fertiziler", "fertilizer", - "festivales", "festivals", - "fetishiste", "fetishes", - "ficticious", "fictitious", - "filessytem", "filesystem", - "filesytems", "filesystem", - "filmamkers", "filmmakers", - "filmmakare", "filmmakers", - "finallizes", "finalizes", - "financialy", "financially", - "fingernals", "fingernails", - "fingerpies", "fingertips", - "fingerpint", "fingerprint", - "fingertaps", "fingertips", - "fingertits", "fingertips", - "fingertops", "fingertips", - "fireballls", "fireballs", - "firefigher", "firefighter", - "firefigter", "firefighter", - "firendlies", "friendlies", - "firghtened", "frightened", - "fisionable", "fissionable", - "flashligth", "flashlight", - "flaskbacks", "flashbacks", - "flawleslly", "flawlessly", - "flexibiliy", "flexibility", - "flexibilty", "flexibility", - "flimmakers", "filmmakers", - "fluctuatie", "fluctuate", - "fluctuatin", "fluctuations", - "flutterhsy", "fluttershy", - "fluttersky", "fluttershy", - "flutterspy", "fluttershy", - "forcifully", "forcefully", - "forecfully", "forcefully", - "foreginers", "foreigners", - "foregorund", "foreground", - "foreignese", "foreigners", - "foreigness", "foreigners", - "foreignors", "foreigners", - "foreingers", "foreigners", - "forensisch", "forensic", - "foreseeble", "foreseeable", - "forgeiners", "foreigners", - "forgieners", "foreigners", - "forgivance", "forgiven", - "forgivenss", "forgiveness", - "forgotting", "forgetting", - "foriegners", "foreigners", - "formadible", "formidable", - "formalhaut", "fomalhaut", - "formallity", "formally", - "formallize", "formalize", - "formatiing", "formatting", - "formatings", "formations", - "formativos", "formations", - "formidabel", "formidable", - "formidabil", "formidable", - "formidible", "formidable", - "forminable", "formidable", - "formitable", "formidable", - "formuladas", "formulas", - "formulados", "formulas", - "forseeable", "foreseeable", - "fortelling", "foretelling", - "fortunatly", "fortunately", - "fortunetly", "fortunately", - "foundaiton", "foundations", - "foundaries", "foundries", - "foundatoin", "foundations", - "fractalers", "fractals", - "fractalius", "fractals", - "fractalpus", "fractals", - "fracturare", "fracture", - "fragmanted", "fragment", - "francaises", "franchises", - "franchices", "franchises", - "franchines", "franchises", - "franchizes", "franchises", - "franchsies", "franchises", - "fransiscan", "franciscan", - "franticaly", "frantically", - "franticlly", "frantically", - "fraternaty", "fraternity", - "fraternety", "fraternity", - "fraterntiy", "fraternity", - "fraturnity", "fraternity", - "fraudalent", "fraudulent", - "fraudelant", "fraudulent", - "fraudelent", "fraudulent", - "fraudolent", "fraudulent", - "fraudulant", "fraudulent", - "freedomers", "freedoms", - "freedomest", "freedoms", - "freindlies", "friendlies", - "freindship", "friendship", - "frequencey", "frequency", - "friednship", "friendships", - "friednzone", "friendzoned", - "friendhsip", "friendship", - "friendsies", "friendlies", - "friendzies", "friendlies", - "friendzond", "friendzoned", - "frientship", "friendship", - "frigthened", "frightened", - "fromatting", "formatting", - "fromidable", "formidable", - "frontlinie", "frontline", - "fruadulent", "fraudulent", - "frustraded", "frustrated", - "frustradet", "frustrates", - "frustraits", "frustrates", - "frustrants", "frustrates", - "frustratin", "frustration", - "frustrsted", "frustrates", - "fucntional", "functional", - "fulfulling", "fulfilling", - "fullfiling", "fulfilling", - "fullfilled", "fulfilled", - "fullscrean", "fullscreen", - "fulttershy", "fluttershy", - "funcitonal", "functional", - "fundametal", "fundamental", - "furstrated", "frustrated", - "furstrates", "frustrates", - "furutistic", "futuristic", - "futhermore", "furthermore", - "futurestic", "futuristic", - "futurisitc", "futuristic", - "futurustic", "futuristic", - "galvinized", "galvanized", - "garuanteed", "guaranteed", - "garuantees", "guarantees", - "gauntanamo", "guantanamo", - "gauntlents", "gauntlet", - "gauranteed", "guaranteed", - "gaurantees", "guarantees", - "gaurenteed", "guaranteed", - "gaurentees", "guarantees", - "generalice", "generalize", - "generalife", "generalize", - "generalnie", "generalize", - "generaters", "generates", - "generaties", "generate", - "generatios", "generators", - "generatons", "generators", - "generatore", "generate", - "generelize", "generalize", - "generocity", "generosity", - "generoisty", "generosity", - "generostiy", "generosity", - "geneticaly", "genetically", - "geneticlly", "genetically", - "genitalias", "genitals", - "genuinelly", "genuinely", - "geographia", "geographical", - "geogrpahic", "geographic", - "germanisch", "germanic", - "gigantisch", "gigantic", - "gimmickers", "gimmicks", - "girlfirend", "girlfriend", - "girlfreind", "girlfriend", - "girlfriens", "girlfriends", - "girlfrinds", "girlfriends", - "girlfrined", "girlfriends", - "goalkeaper", "goalkeeper", - "goalkeeprs", "goalkeeper", - "goalkepeer", "goalkeeper", - "goegraphic", "geographic", - "golakeeper", "goalkeeper", - "goldburger", "goldberg", - "goosebumbs", "goosebumps", - "goosegumps", "goosebumps", - "goosepumps", "goosebumps", - "gothenberg", "gothenburg", - "govenrment", "government", - "govermenet", "goverment", - "govermnent", "governments", - "governemnt", "government", - "governened", "governed", - "governered", "governed", - "governmant", "governmental", - "governmetn", "governments", - "governmnet", "government", - "govnerment", "government", - "govornment", "government", - "gradiating", "graduating", - "gradiation", "graduation", - "graduacion", "graduation", - "grapefriut", "grapefruit", - "grapefrukt", "grapefruit", - "graphicaly", "graphically", - "graphiclly", "graphically", - "gratituous", "gratuitous", - "gratiutous", "gratuitous", - "gratuidous", "gratuitous", - "gratuituos", "gratuitous", - "gratutious", "gratuitous", - "graudating", "graduating", - "graudation", "graduation", - "gravitatie", "gravitate", - "greatfully", "gratefully", - "greenhosue", "greenhouse", - "greviances", "grievances", - "grievences", "grievances", - "grilfriend", "girlfriend", - "guaduloupe", "guadalupe", - "guanatanmo", "guantanamo", - "guantamamo", "guantanamo", - "guantamano", "guantanamo", - "guantanano", "guantanamo", - "guantanemo", "guantanamo", - "guantanoma", "guantanamo", - "guantanomo", "guantanamo", - "guantonamo", "guantanamo", - "guarantess", "guarantees", - "guardiands", "guardians", - "guardianes", "guardians", - "guardianis", "guardians", - "guarenteed", "guaranteed", - "guarentees", "guarantees", - "guarnateed", "guaranteed", - "guarnatees", "guarantees", - "guarunteed", "guaranteed", - "guaruntees", "guarantees", - "guatamalan", "guatemalan", - "gunatanamo", "guantanamo", - "gunlsinger", "gunslinger", - "gunsiinger", "gunslinger", - "gunslanger", "gunslinger", - "gunsligner", "gunslinger", - "gunstinger", "gunslinger", - "gymanstics", "gymnastics", - "gymnasitcs", "gymnastics", - "gynmastics", "gymnastics", - "haemorrage", "haemorrhage", - "halloweeen", "halloween", - "hambergers", "hamburgers", - "hamburgare", "hamburger", - "hamburgesa", "hamburgers", - "hamburgles", "hamburgers", - "hamburgurs", "hamburgers", - "handcuffes", "handcuffs", - "handelbars", "handlebars", - "handicaped", "handicapped", - "handwritng", "handwriting", - "harasments", "harassments", - "hardlinked", "hardline", - "harmoniacs", "harmonic", - "harmonisch", "harmonic", - "harrasment", "harassment", - "harrassing", "harassing", - "harvasting", "harvesting", - "haversting", "harvesting", - "headhpones", "headphones", - "headphoens", "headphones", - "headquarer", "headquarter", - "headquater", "headquarter", - "headshoots", "headshot", - "healtchare", "healthcare", - "healtheast", "healthiest", - "healthyest", "healthiest", - "heapdhones", "headphones", - "heartbeart", "heartbeat", - "heartbeast", "heartbeat", - "heartborne", "heartbroken", - "heartbrake", "heartbreak", - "hearthsone", "hearthstone", - "heatlhcare", "healthcare", - "heavyweght", "heavyweight", - "heavyweigt", "heavyweight", - "hedgehodge", "hedgehog", - "heidelburg", "heidelberg", - "heigthened", "heightened", - "heistation", "hesitation", - "helathcare", "healthcare", - "helicopers", "helicopters", - "helicoptor", "helicopter", - "helicotper", "helicopters", - "helicpoter", "helicopter", - "helictoper", "helicopters", - "helikopter", "helicopter", - "hemingwary", "hemingway", - "hemingwavy", "hemingway", - "hemipshere", "hemisphere", - "hemishpere", "hemisphere", - "hemmorhage", "hemorrhage", - "hempishere", "hemisphere", - "herculeans", "hercules", - "herculeasy", "hercules", - "herculeees", "hercules", - "hesitstion", "hesitation", - "hestiation", "hesitation", - "hieghtened", "heightened", - "hierachies", "hierarchies", - "hieroglphs", "hieroglyphs", - "highalnder", "highlander", - "highlighed", "highlighted", - "highligted", "highlighted", - "highloader", "highlander", - "highpander", "highlander", - "highscholl", "highschool", - "highshcool", "highschool", - "hillarious", "hilarious", - "hinderance", "hindrance", - "hinderence", "hindrance", - "hipsterest", "hipsters", - "hispanicos", "hispanics", - "hispanicus", "hispanics", - "histarical", "historical", - "histerical", "historical", - "historiaan", "historians", - "historicas", "historians", - "historicly", "historical", - "historiens", "histories", - "historisch", "historic", - "hoemopathy", "homeopathy", - "hollywoood", "hollywood", - "homecuming", "homecoming", - "homeoapthy", "homeopathy", - "homeonwers", "homeowners", - "homeopahty", "homeopathy", - "homeophaty", "homeopathy", - "homeopothy", "homeopathy", - "homeothapy", "homeopathy", - "homepoathy", "homeopathy", - "homewoners", "homeowners", - "homoepathy", "homeopathy", - "homogeneos", "homogeneous", - "homogeneus", "homogeneous", - "homophibia", "homophobia", - "homophibic", "homophobic", - "homophobie", "homophobe", - "homophonia", "homophobia", - "homophopia", "homophobia", - "homophopic", "homophobic", - "homosexaul", "homosexual", - "homosexuel", "homosexual", - "honeymooon", "honeymoon", - "hopefullly", "hopefully", - "hopeleslly", "hopelessly", - "horisontal", "horizontal", - "horizantal", "horizontal", - "horizontes", "horizons", - "horiztonal", "horizontal", - "horrendeus", "horrendous", - "horriblely", "horribly", - "hospitales", "hospitals", - "hospitalty", "hospitality", - "hospitible", "hospitable", - "hsitorians", "historians", - "humanaties", "humanities", - "humanitary", "humanity", - "humiliatin", "humiliation", - "humiliaton", "humiliation", - "humilitied", "humiliated", - "humillated", "humiliated", - "hurricance", "hurricane", - "hurriganes", "hurricanes", - "hurrikanes", "hurricanes", - "hurrycanes", "hurricanes", - "hydropilic", "hydrophilic", - "hydropobic", "hydrophobic", - "hyperbolie", "hyperbole", - "hyperlobic", "hyperbolic", - "hyperlogic", "hyperbolic", - "hypertrohy", "hypertrophy", - "hypertropy", "hypertrophy", - "hyphotesis", "hypothesis", - "hypocrates", "hypocrites", - "hypocriscy", "hypocrisy", - "hypocrises", "hypocrites", - "hypocritus", "hypocrites", - "hypocrties", "hypocrites", - "hypocrytes", "hypocrites", - "hypokrites", "hypocrites", - "hypothecis", "hypothesis", - "hypotheiss", "hypotheses", - "hypothesus", "hypotheses", - "hypothises", "hypotheses", - "hypothisis", "hypothesis", - "hypothosis", "hypothesis", - "hyprocites", "hypocrites", - "hystarical", "hysterical", - "hystericly", "hysterical", - "hysteriska", "hysteria", - "ibuprofein", "ibuprofen", - "ibuprofine", "ibuprofen", - "icelandinc", "icelandic", - "idealisitc", "idealistic", - "idealogies", "ideologies", - "identicial", "identical", - "identifyed", "identified", - "identitets", "identities", - "ideolagies", "ideologies", - "ideoligies", "ideologies", - "ideologias", "ideologies", - "ideologice", "ideologies", - "ideologije", "ideologies", - "ideologins", "ideologies", - "ideologisk", "ideologies", - "ideolouges", "ideologies", - "illegalest", "illegals", - "illegallly", "illegally", - "illegimacy", "illegitimacy", - "illegitime", "illegitimate", - "illegitimt", "illegitimate", - "illimunati", "illuminati", - "illinoians", "illinois", - "illistrate", "illiterate", - "illitarate", "illiterate", - "illitirate", "illiterate", - "illumanati", "illuminati", - "illumaniti", "illuminati", - "illumianti", "illuminati", - "illumimati", "illuminati", - "illuminaci", "illuminati", - "illuminadi", "illuminati", - "illuminami", "illuminati", - "illuminazi", "illuminati", - "illuminite", "illuminati", - "illuminiti", "illuminati", - "illuminoti", "illuminati", - "illuminuti", "illuminati", - "illumniati", "illuminati", - "illumunati", "illuminati", - "illuninati", "illuminati", - "illusiones", "illusions", - "illustrant", "illustrate", - "illustrare", "illustrate", - "illustrato", "illustration", - "imablanced", "imbalanced", - "imablances", "imbalances", - "imaginatie", "imaginative", - "imaginaton", "imagination", - "imaginitve", "imaginative", - "imbalenced", "imbalanced", - "imbalences", "imbalances", - "imcomplete", "incomplete", - "imediately", "immediately", - "imigration", "emigration", - "immaturaty", "immaturity", - "immaturety", "immaturity", - "immedeatly", "immediately", - "immediatly", "immediately", - "immedietly", "immediately", - "immenseley", "immensely", - "immidately", "immediately", - "immigranti", "immigration", - "immigrents", "immigrants", - "immitating", "imitating", - "immobilien", "immobile", - "immobilier", "immobile", - "immobilzed", "immobile", - "immobilzer", "immobile", - "immobilzes", "immobile", - "immortales", "immortals", - "immortalis", "immortals", - "immortaliy", "immortality", - "immortalls", "immortals", - "immortalty", "immortality", - "impartirla", "impartial", - "impecabbly", "impeccably", - "impeccible", "impeccable", - "impeckable", "impeccable", - "impelments", "implements", - "imperetive", "imperative", - "imperialsm", "imperialism", - "imperialst", "imperialist", - "imperitave", "imperative", - "imperitive", "imperative", - "implaments", "implements", - "implantase", "implants", - "implausble", "implausible", - "implausibe", "implausible", - "implemenet", "implements", - "implicatia", "implicit", - "implicatie", "implicit", - "implicatii", "implicit", - "implicetly", "implicitly", - "impliciete", "implicit", - "implicilty", "implicitly", - "impliments", "implements", - "imporbable", "improbable", - "importanly", "importantly", - "importanty", "importantly", - "importence", "importance", - "importerad", "imported", - "imporvised", "improvised", - "impossable", "impossible", - "impossbily", "impossibly", - "impossibal", "impossibly", - "impossibel", "impossibly", - "impossibry", "impossibly", - "impossibul", "impossibly", - "impractial", "impractical", - "impreative", "imperative", - "impresison", "impressions", - "impressoin", "impressions", - "impressons", "impressions", - "improbabil", "improbable", - "improbible", "improbable", - "impropable", "improbable", - "improsined", "imprisoned", - "improsoned", "imprisoned", - "improvemnt", "improvement", - "improvents", "improves", - "improvized", "improvised", - "imprsioned", "imprisoned", - "impulsemos", "impulses", - "imrpovised", "improvised", - "inablility", "inability", - "inaccruate", "inaccurate", - "inadaquate", "inadequate", - "inadaquete", "inadequate", - "inadecuate", "inadequate", - "inadeguate", "inadequate", - "inadeqaute", "inadequate", - "inadequete", "inadequate", - "inadequite", "inadequate", - "inadiquate", "inadequate", - "inagurated", "inaugurated", - "inbalanced", "imbalanced", - "inbetweeen", "inbetween", - "incarnaton", "incarnation", - "incentivos", "incentives", - "inchoerent", "incoherent", - "incidentes", "incidents", - "incidently", "incidentally", - "incidentul", "incidental", - "inclreased", "increased", - "incognitio", "incognito", - "incoherant", "incoherent", - "incohorent", "incoherent", - "incorectly", "incorrectly", - "incorrecly", "incorrectly", - "incorrecty", "incorrectly", - "incorretly", "incorrectly", - "incraments", "increments", - "incredable", "incredible", - "incredably", "incredibly", - "incremetal", "incremental", - "incriments", "increments", - "inctroduce", "introduce", - "indefenite", "indefinite", - "indefinate", "indefinite", - "indefinete", "indefinite", - "indefinity", "indefinitely", - "indeginous", "indigenous", - "indentical", "identical", - "independet", "independent", - "indepenent", "independent", - "inderictly", "indirectly", - "indicaters", "indicates", - "indicativo", "indication", - "indicatore", "indicate", - "indicitave", "indicative", - "indicitive", "indicative", - "indiffernt", "indifferent", - "indigenius", "indigenous", - "indiginous", "indigenous", - "indigneous", "indigenous", - "indikation", "indication", - "indireclty", "indirectly", - "indirektly", "indirectly", - "individuel", "individual", - "indiviudal", "individuals", - "indivudual", "individual", - "indoensian", "indonesian", - "indonasian", "indonesian", - "indoneisan", "indonesian", - "indonesean", "indonesian", - "indonesien", "indonesian", - "indonesion", "indonesian", - "indonisian", "indonesian", - "indonistan", "indonesian", - "indpendent", "independent", - "industiral", "industrial", - "industires", "industries", - "industrail", "industrial", - "industrees", "industries", - "industrias", "industries", - "industriel", "industrial", - "industrija", "industrial", - "industrije", "industries", - "indviduals", "individuals", - "inefficent", "inefficient", - "ineqaulity", "inequality", - "inequailty", "inequality", - "inevatible", "inevitable", - "inevetable", "inevitable", - "inevetably", "inevitably", - "inevetible", "inevitable", - "inevidable", "inevitable", - "inevidably", "inevitably", - "inevitible", "inevitable", - "inevitibly", "inevitably", - "inevtiable", "inevitable", - "inevtiably", "inevitably", - "infallable", "infallible", - "infaltable", "inflatable", - "infeccious", "infectious", - "infecteous", "infectious", - "infectuous", "infectious", - "infedility", "infidelity", - "infektious", "infectious", - "inferioara", "inferior", - "inferioare", "inferior", - "inferiorty", "inferiority", - "inferrence", "inference", - "infestaion", "infestation", - "infestaton", "infestation", - "infestions", "infections", - "infideltiy", "infidelity", - "infidility", "infidelity", - "infiltrade", "infiltrate", - "infiltrait", "infiltrate", - "infiltrare", "infiltrate", - "infiltrase", "infiltrate", - "infinately", "infinitely", - "infinetely", "infinitely", - "infiniment", "infinite", - "infinitley", "infinitely", - "infintiely", "infinitely", - "inflamable", "inflatable", - "inflateble", "inflatable", - "inflatible", "inflatable", - "infleunced", "influenced", - "inflitrate", "infiltrate", - "influanced", "influenced", - "influances", "influences", - "influencie", "influences", - "influening", "influencing", - "influensed", "influences", - "influenser", "influences", - "influenses", "influences", - "influental", "influential", - "influented", "influenced", - "influentes", "influences", - "influneced", "influenced", - "infograhic", "infographic", - "infograpic", "infographic", - "infomation", "information", - "informable", "informal", - "informarla", "informal", - "informarle", "informal", - "informarlo", "informal", - "informatie", "informative", - "informella", "informal", - "informerad", "informed", - "informtion", "information", - "infridging", "infringing", - "infrigning", "infringing", - "infulenced", "influenced", - "infulences", "influences", - "ingenuitiy", "ingenuity", - "ingrediant", "ingredient", - "ingrediens", "ingredients", - "ingrediets", "ingredient", - "inhabitans", "inhabitants", - "inhabitats", "inhabitants", - "inherantly", "inherently", - "inherintly", "inherently", - "inheritage", "heritage", - "inhernetly", "inherently", - "inifnitely", "infinitely", - "initaition", "initiation", - "initalised", "initialised", - "initaliser", "initialiser", - "initalises", "initialises", - "initalisms", "initialisms", - "initalized", "initialized", - "initalizer", "initializer", - "initalizes", "initializes", - "initalling", "initialling", - "initalness", "initialness", - "initiaitve", "initiatives", - "initiaties", "initiatives", - "initiativs", "initiatives", - "initiatves", "initiatives", - "initiavite", "initiatives", - "inititaive", "initiatives", - "inititiave", "initiatives", - "initmately", "intimately", - "initmidate", "intimidate", - "inituition", "initiation", - "injustaces", "injustices", - "injusticas", "injustices", - "inmigrants", "immigrants", - "innoavtion", "innovations", - "innocentes", "innocents", - "innotation", "innovation", - "innovacion", "innovation", - "innovaiton", "innovations", - "innovatief", "innovate", - "innovaties", "innovate", - "innovativo", "innovation", - "innvoation", "innovation", - "inofficial", "unofficial", - "inpsection", "inspection", - "inquisator", "inquisitor", - "inquisidor", "inquisitor", - "inquisiter", "inquisitor", - "inquisitio", "inquisitor", - "inquisitir", "inquisitor", - "inquisiton", "inquisition", - "inquistior", "inquisitor", - "inquizitor", "inquisitor", - "inqusitior", "inquisitor", - "insensitve", "insensitive", - "insepction", "inspection", - "insistance", "insistence", - "insistente", "insistence", - "insistenze", "insistence", - "insistince", "insistence", - "insitution", "institution", - "inspeccion", "inspection", - "inspeciton", "inspections", - "inspectons", "inspections", - "inspectres", "inspectors", - "inspektion", "inspection", - "inspektors", "inspectors", - "inspiraste", "inspires", - "inspiraton", "inspiration", - "inspirerad", "inspired", - "inspireras", "inspires", - "insrugency", "insurgency", - "instabiliy", "instability", - "instabilty", "instability", - "installeer", "installer", - "installent", "installment", - "installesd", "installs", - "installion", "installing", - "instatance", "instance", - "instelling", "installing", - "instituded", "instituted", - "instituion", "institution", - "institutie", "institute", - "institutue", "instituted", - "instrament", "instrument", - "instrcutor", "instructors", - "instrucion", "instruction", - "instructer", "instructor", - "instructie", "instructed", - "instruktor", "instructor", - "instuction", "instruction", - "instuments", "instruments", - "insturcted", "instructed", - "insturctor", "instructor", - "insturment", "instrument", - "instutions", "intuitions", - "instututed", "instituted", - "insurgance", "insurgency", - "insurgancy", "insurgency", - "intangable", "intangible", - "intangeble", "intangible", - "intangibil", "intangible", - "intanjible", "intangible", - "integraded", "integrated", - "integrarla", "integral", - "integrarlo", "integral", - "integratie", "integrated", - "integreres", "interferes", - "integreted", "integrated", - "inteligent", "intelligent", - "intenseley", "intensely", - "intensitiy", "intensity", - "intentinal", "intentional", - "intentines", "intestines", - "interacive", "interactive", - "interactes", "interacts", - "interactie", "interactive", - "interactue", "interacted", - "interasted", "interacted", - "interbread", "interbreed", - "intercepto", "interception", - "intercorse", "intercourse", - "intercouse", "intercourse", - "intereacts", "interfaces", - "interected", "interacted", - "interefers", "interferes", - "interesant", "interest", - "interesing", "interesting", - "interestes", "interests", - "interfacce", "interfaces", - "interfears", "interferes", - "interfeers", "interferes", - "interferce", "interferes", - "interferre", "interfere", - "intergated", "integrated", - "interioara", "interior", - "interioare", "interior", - "intermedie", "intermediate", - "internetbs", "internets", - "internetes", "internets", - "internetis", "internets", - "internetts", "internets", - "internetus", "internets", - "interprate", "interpret", - "interrugum", "interregnum", - "interruped", "interrupted", - "interstela", "interstellar", - "intervalls", "intervals", - "intervalos", "intervals", - "interveign", "intervening", - "interveing", "intervening", - "interveiws", "interviews", - "intervento", "intervention", - "intervenue", "intervene", - "interveres", "interferes", - "intervieni", "interviewing", - "intervieuw", "interviews", - "interviewd", "interviewed", - "interviewr", "interviewer", - "intervines", "intervenes", - "interviwed", "interviewed", - "interviwer", "interviewer", - "interwebbs", "interwebs", - "intestents", "intestines", - "intestinas", "intestines", - "intestinos", "intestines", - "intestions", "intestines", - "intidimate", "intimidate", - "intimadate", "intimidate", - "intimatley", "intimately", - "intimiated", "intimidate", - "intimidade", "intimidated", - "intimidant", "intimidate", - "intimidare", "intimidate", - "intimitade", "intimidated", - "intimitaly", "intimately", - "intimitate", "intimidate", - "intimitely", "intimately", - "intolarant", "intolerant", - "intolerace", "intolerance", - "intolerate", "intolerant", - "intolerent", "intolerant", - "intolorant", "intolerant", - "intolorent", "intolerant", - "intorduced", "introduced", - "intorduces", "introduces", - "intorverts", "introverts", - "intoxicted", "intoxicated", - "intraverts", "introverts", - "intreguing", "intriguing", - "intricaces", "intricacies", - "intriguied", "intrigue", - "intrigured", "intrigue", - "intrinseci", "intrinsic", - "intrinsinc", "intrinsic", - "intriquing", "intriguing", - "intriuging", "intriguing", - "introdecks", "introduces", - "introdused", "introduces", - "introvents", "introverts", - "introvered", "introverted", - "introversa", "introverts", - "introverse", "introverts", - "introversi", "introverts", - "introverso", "introverts", - "introversy", "introverts", - "introveted", "introverted", - "intruduced", "introduced", - "intruduces", "introduces", - "intruiging", "intriguing", - "intruments", "instruments", - "intuitevly", "intuitively", - "intuitivly", "intuitively", - "intuitivno", "intuition", - "intutively", "intuitively", - "inumerable", "enumerable", - "inusrgency", "insurgency", - "invaderats", "invaders", - "invaildate", "invalidates", - "invairably", "invariably", - "invaldiate", "invalidates", - "invalidade", "invalidate", - "invalidare", "invalidate", - "invalubale", "invaluable", - "invalueble", "invaluable", - "invaraibly", "invariably", - "invariabil", "invariably", - "invaribaly", "invariably", - "invaulable", "invaluable", - "inveitable", "inevitable", - "inveitably", "inevitably", - "invensions", "inventions", - "inventario", "inventor", - "inventarlo", "inventor", - "inventaron", "inventor", - "inventings", "inventions", - "inventivos", "inventions", - "invertendo", "inverted", - "inverterad", "inverted", - "invertions", "inventions", - "investemnt", "investments", - "investiage", "investigate", - "investions", "inventions", - "investirat", "investigator", - "investmens", "investments", - "invicinble", "invincible", - "invididual", "individual", - "invincable", "invincible", - "invinceble", "invincible", - "invinicble", "invincible", - "invinsible", "invincible", - "invinvible", "invincible", - "invisibily", "invisibility", - "invitacion", "invitation", - "invitating", "invitation", - "involunary", "involuntary", - "involvment", "involvement", - "ironcially", "ironically", - "irracional", "irrational", - "irrationel", "irrational", - "irrelavant", "irrelevant", - "irrelavent", "irrelevant", - "irrelevent", "irrelevant", - "irrelivant", "irrelevant", - "irrelivent", "irrelevant", - "irrevelant", "irrelevant", - "irreverant", "irrelevant", - "irridation", "irritation", - "irriration", "irritation", - "irritacion", "irritation", - "irritaties", "irritate", - "islamisist", "islamist", - "islamistas", "islamists", - "isntalling", "installing", - "isntructed", "instructed", - "isntrument", "instrument", - "israeliens", "israelis", - "israelitas", "israelis", - "italianess", "italians", - "itnroduced", "introduced", - "jailborken", "jailbroken", - "jalibroken", "jailbroken", - "jamaicains", "jamaican", - "jamaicaman", "jamaican", - "jerusaleum", "jerusalem", - "jounralism", "journalism", - "jounralist", "journalist", - "jouranlism", "journalism", - "jouranlist", "journalist", - "journalims", "journals", - "journalits", "journals", - "journalizm", "journalism", - "journalsim", "journalism", - "journolist", "journalist", - "judegments", "judgements", - "judgemenal", "judgemental", - "judgemetal", "judgemental", - "jugdements", "judgements", - "juggarnaut", "juggernaut", - "juggeranut", "juggernaut", - "juggernath", "juggernaut", - "juggernout", "juggernaut", - "juggernuat", "juggernaut", - "juggetnaut", "juggernaut", - "jugglenaut", "juggernaut", - "juggurnaut", "juggernaut", - "justifible", "justifiable", - "juvenilles", "juvenile", - "kickstarer", "kickstarter", - "kickstartr", "kickstarter", - "kickstater", "kickstarter", - "kidnapning", "kidnapping", - "kidnappade", "kidnapped", - "killingest", "killings", - "kilometros", "kilometers", - "kilomiters", "kilometers", - "kilomoters", "kilometers", - "kilomteres", "kilometers", - "kindapping", "kidnapping", - "kingdomers", "kingdoms", - "krpytonite", "kryptonite", - "krypotnite", "kryptonite", - "krypronite", "kryptonite", - "kryptinite", "kryptonite", - "kryptolite", "kryptonite", - "kryptonyte", "kryptonite", - "krypyonite", "kryptonite", - "krytponite", "kryptonite", - "kyrptonite", "kryptonite", - "labarotory", "laboratory", - "laboratroy", "laboratory", - "laborerers", "laborers", - "laboritory", "laboratory", - "laborotory", "laboratory", - "lackbuster", "lackluster", - "lacklaster", "lackluster", - "landacapes", "landscapes", - "landingers", "landings", - "landshapes", "landscapes", - "landspaces", "landscapes", - "lannasters", "lannisters", - "lannesters", "lannisters", - "lannistars", "lannisters", - "lannsiters", "lannisters", - "lateration", "alteration", - "latitudine", "latitude", - "laughabley", "laughably", - "laughablly", "laughably", - "launchered", "launched", - "leaglizing", "legalizing", - "lectureres", "lectures", - "legalazing", "legalizing", - "legalizare", "legalize", - "legalizate", "legalize", - "legendaies", "legendaries", - "legendaris", "legendaries", - "legimitacy", "legitimacy", - "legimitate", "legitimate", - "legislatie", "legislative", - "legitamacy", "legitimacy", - "legitamate", "legitimate", - "legitamicy", "legitimacy", - "legitamite", "legitimate", - "legitemacy", "legitimacy", - "legitemate", "legitimate", - "legitimaly", "legitimacy", - "legitimicy", "legitimacy", - "legitimite", "legitimate", - "leiutenant", "lieutenant", - "lesbianese", "lesbians", - "lesbianest", "lesbians", - "leuitenant", "lieutenant", - "levetating", "levitating", - "liberacion", "liberation", - "liberalest", "liberate", - "liberalizm", "liberalism", - "liberalnim", "liberalism", - "liberalsim", "liberalism", - "liberarion", "liberation", - "liberaties", "liberate", - "liberatore", "liberate", - "libertania", "libertarians", - "libguistic", "linguistic", - "lietuenant", "lieutenant", - "lieutanant", "lieutenant", - "lieutanent", "lieutenant", - "lieutenent", "lieutenant", - "lifestiles", "lifestyles", - "lifestlyes", "lifestyles", - "lifesystem", "filesystem", - "lifesytles", "lifestyles", - "lifetimers", "lifetimes", - "lifetsyles", "lifestyles", - "lighhtning", "lightening", - "lightergas", "lighters", - "lighthning", "lightening", - "lighthorse", "lighthouse", - "lighthosue", "lighthouse", - "lighthours", "lighthouse", - "lightining", "lighting", - "lightneing", "lightening", - "lightnting", "lightening", - "lightrooom", "lightroom", - "lightweigt", "lightweight", - "ligitation", "litigation", - "ligthening", "lightening", - "ligthhouse", "lighthouse", - "likelyhood", "likelihood", - "limination", "limitation", - "limitacion", "limitation", - "limitaiton", "limitation", - "limitating", "limitation", - "limitativo", "limitation", - "linguisics", "linguistics", - "linguisitc", "linguistics", - "linguistcs", "linguistics", - "linguistis", "linguistics", - "linguitics", "linguistic", - "lingusitic", "linguistics", - "lingvistic", "linguistic", - "liousville", "louisville", - "listeneres", "listeners", - "literallly", "literally", - "literarely", "literary", - "literarlly", "literary", - "literatire", "literate", - "literative", "literate", - "literatute", "literate", - "lithuanina", "lithuania", - "litterally", "literally", - "liuetenant", "lieutenant", - "liveatream", "livestream", - "livelehood", "livelihood", - "liverpoool", "liverpool", - "livescream", "livestream", - "livestreem", "livestream", - "livestrems", "livestream", - "livilehood", "livelihood", - "livliehood", "livelihood", - "lobbyistes", "lobbyists", - "lockacreen", "lockscreen", - "logictical", "logistical", - "logisitcal", "logistical", - "logisticas", "logistics", - "logisticly", "logistical", - "loiusville", "louisville", - "lollipoopy", "lollipop", - "lonelyness", "loneliness", - "longevitiy", "longevity", - "lonileness", "loneliness", - "lonlieness", "loneliness", - "louieville", "louisville", - "louisiania", "louisiana", - "louisianna", "louisiana", - "louisivlle", "louisville", - "louisviile", "louisville", - "lousiville", "louisville", - "luietenant", "lieutenant", - "mabyelline", "maybelline", - "magnifient", "magnificent", - "mainpulate", "manipulate", - "mainstreem", "mainstream", - "maintaince", "maintained", - "maintaines", "maintains", - "maintainig", "maintaining", - "maintenace", "maintenance", - "maintianed", "maintained", - "maintioned", "mentioned", - "malfuncion", "malfunction", - "malpractce", "malpractice", - "managebale", "manageable", - "maneagable", "manageable", - "maneouvred", "manoeuvred", - "maneouvres", "manoeuvres", - "maneuveres", "maneuvers", - "maneuveurs", "maneuver", - "manifestas", "manifests", - "manifestes", "manifests", - "manifestus", "manifests", - "manipluate", "manipulate", - "manipualte", "manipulate", - "manipulant", "manipulate", - "manipulare", "manipulate", - "manipulted", "manipulated", - "maniuplate", "manipulate", - "mannarisms", "mannerisms", - "mannersims", "mannerisms", - "mannorisms", "mannerisms", - "manufacter", "manufacture", - "manufacure", "manufacture", - "manufature", "manufacture", - "maraudeurs", "marauder", - "margaritte", "margaret", - "margianlly", "marginally", - "marginaali", "marginal", - "marginable", "marginal", - "marignally", "marginally", - "marijuanna", "marijuana", - "marketting", "marketing", - "marshmalow", "marshmallow", - "masculinty", "masculinity", - "massacrare", "massacre", - "massivelly", "massively", - "masteriers", "masteries", - "masternind", "mastermind", - "masterpice", "masterpiece", - "mastrubate", "masturbate", - "mastubrate", "masturbated", - "masturabte", "masturbate", - "masturbait", "masturbate", - "masturbare", "masturbate", - "masturbeta", "masturbated", - "masturdate", "masturbate", - "materiales", "materials", - "materialsm", "materialism", - "maximazing", "maximizing", - "maximixing", "maximizing", - "mayballine", "maybelline", - "maybellene", "maybelline", - "maybellibe", "maybelline", - "maybilline", "maybelline", - "mccarthyst", "mccarthyist", - "mdifielder", "midfielder", - "meagthread", "megathread", - "meaningess", "meanings", - "meaningles", "meanings", - "meatballls", "meatballs", - "mecahnical", "mechanical", - "mecahnisms", "mechanisms", - "mechancial", "mechanical", - "mechandise", "merchandise", - "mechanichs", "mechanics", - "mechanicle", "mechanical", - "mechanicly", "mechanical", - "mechanicus", "mechanics", - "mechanincs", "mechanic", - "mechanisim", "mechanism", - "mechansims", "mechanisms", - "mechinical", "mechanical", - "mechinisms", "mechanisms", - "mediaction", "medications", - "medicacion", "medication", - "medicaiton", "medication", - "medicalert", "medicare", - "medicallly", "medically", - "medicatons", "medications", - "medicinens", "medicines", - "medicinske", "medicine", - "medicority", "mediocrity", - "medidating", "meditating", - "mediocirty", "mediocrity", - "mediocraty", "mediocrity", - "mediocrety", "mediocrity", - "mediocricy", "mediocrity", - "mediocrily", "mediocrity", - "mediocrisy", "mediocrity", - "meditacion", "medications", - "meditaiton", "meditation", - "melatonian", "melatonin", - "melatonion", "melatonin", - "mellinnium", "millennium", - "melodieuse", "melodies", - "membrances", "membrane", - "mentallity", "mentally", - "mentionnes", "mentions", - "mercenaire", "mercenaries", - "mercenares", "mercenaries", - "mercentile", "mercantile", - "merchanise", "merchandise", - "merchantos", "merchants", - "messagease", "messages", - "messagepad", "messaged", - "messenging", "messaging", - "metabalism", "metabolism", - "metabilism", "metabolism", - "metabloism", "metabolism", - "metablosim", "metabolism", - "metabolics", "metabolism", - "metabolizm", "metabolism", - "metabolsim", "metabolism", - "metalurgic", "metallurgic", - "metaphoras", "metaphors", - "metaphores", "metaphors", - "metaphyics", "metaphysics", - "meterology", "meteorology", - "methaphors", "metaphors", - "methodolgy", "methodology", - "methodoloy", "methodology", - "metrapolis", "metropolis", - "metrolopis", "metropolis", - "metropilis", "metropolis", - "metroplois", "metropolis", - "metropolin", "metropolitan", - "metropolos", "metropolis", - "metropolys", "metropolis", - "mexicanese", "mexicans", - "mexicaness", "mexicans", - "michelline", "michelle", - "micorwaves", "microwaves", - "microhpone", "microphone", - "microscoop", "microscope", - "microvaves", "microwaves", - "microvaxes", "microwaves", - "micrpohone", "microphones", - "midfeilder", "midfielder", - "midfiedler", "midfielder", - "midfieldes", "midfielders", - "midfielers", "midfielders", - "midfileder", "midfielder", - "midifelder", "midfielder", - "midnlessly", "mindlessly", - "migitation", "mitigation", - "migrainers", "migraines", - "miletsones", "milestones", - "milisecond", "millisecond", - "militiades", "militias", - "militiants", "militias", - "millinnium", "millennium", - "miminalist", "minimalist", - "minamilist", "minimalist", - "mindleslly", "mindlessly", - "minimazing", "minimizing", - "minimilast", "minimalist", - "minimilist", "minimalist", - "mininalist", "minimalist", - "ministeres", "ministers", - "ministerns", "ministers", - "minneaplis", "minneapolis", - "minneapols", "minneapolis", - "minnesotta", "minnesota", - "minoritets", "minorities", - "minoroties", "minorities", - "miracalous", "miraculous", - "miracluous", "miraculous", - "miracoulus", "miraculous", - "mircophone", "microphone", - "mircoscope", "microscope", - "mircowaves", "microwaves", - "misandrony", "misandry", - "miscarrage", "miscarriage", - "miscarrige", "miscarriage", - "misdemenor", "misdemeanor", - "miserabley", "miserably", - "miserablly", "miserably", - "misforture", "misfortune", - "misgoynist", "misogynist", - "misinfomed", "misinformed", - "misinterpt", "misinterpret", - "misisonary", "missionary", - "misoganist", "misogynist", - "misogenist", "misogynist", - "misoginist", "misogynist", - "misoginyst", "misogynist", - "misognyist", "misogynist", - "misogonist", "misogynist", - "misogonyst", "misogynist", - "misogyinst", "misogynist", - "misogynyst", "misogynist", - "misoygnist", "misogynist", - "mispelling", "misspelling", - "missionare", "missionaries", - "missionera", "missionary", - "missisippi", "mississippi", - "mississipi", "mississippi", - "mississppi", "mississippi", - "misspeling", "misspelling", - "misspellng", "misspelling", - "mistakedly", "mistakenly", - "mistakinly", "mistakenly", - "mistankely", "mistakenly", - "misterious", "mysterious", - "misteryous", "mysterious", - "mistreaded", "mistreated", - "misygonist", "misogynist", - "mitigaiton", "mitigation", - "moderacion", "moderation", - "moderaters", "moderates", - "moderatley", "moderately", - "moderatore", "moderate", - "moderatorn", "moderation", - "modificato", "modification", - "modifieras", "modifiers", - "modifieres", "modifiers", - "moisturier", "moisturizer", - "moleculair", "molecular", - "molestaion", "molestation", - "molestarle", "molester", - "molestarme", "molester", - "molestarse", "molester", - "molestarte", "molester", - "molestered", "molested", - "momentarly", "momentarily", - "monagomous", "monogamous", - "monetizare", "monetize", - "monitering", "monitoring", - "monogymous", "monogamous", - "monolistic", "monolithic", - "monolitich", "monolithic", - "monolopies", "monopolies", - "monolothic", "monolithic", - "monolythic", "monolithic", - "monopilies", "monopolies", - "monoploies", "monopolies", - "monopolets", "monopolies", - "monopolice", "monopolies", - "monopolios", "monopolies", - "monothilic", "monolithic", - "monsterous", "monsters", - "montioring", "monitoring", - "monumentos", "monuments", - "monumentul", "monumental", - "monumentus", "monuments", - "mormonisim", "mormonism", - "morphinate", "morphine", - "morrisette", "morissette", - "morrisound", "morrison", - "mosquitero", "mosquito", - "mosquiters", "mosquitoes", - "motherbard", "motherboard", - "motherboad", "motherboard", - "motherbord", "motherboard", - "motivaiton", "motivations", - "motiviated", "motivated", - "motorcicle", "motorcycle", - "motorcylce", "motorcycle", - "motorcyles", "motorcycles", - "motorollas", "motorola", - "mouthpeace", "mouthpiece", - "mouthpeice", "mouthpiece", - "movespeeed", "movespeed", - "mozzaralla", "mozzarella", - "mozzeralla", "mozzarella", - "mozzorella", "mozzarella", - "mulitation", "mutilation", - "mulitplied", "multiplied", - "mulitplier", "multiplier", - "mulitverse", "multiverse", - "multilpier", "multiplier", - "multiplaer", "multiplier", - "multiplaye", "multiply", - "multiplayr", "multiply", - "multiplays", "multiply", - "multipleye", "multiply", - "multipling", "multiplying", - "multiplyed", "multiplied", - "multiplyer", "multiple", - "multiplyng", "multiplying", - "murderered", "murdered", - "murdereres", "murderers", - "muscicians", "musicians", - "musculaire", "muscular", - "mushroooms", "mushroom", - "mutialtion", "mutilation", - "mutiliated", "mutilated", - "mutliation", "mutilation", - "mutliplied", "multiplied", - "mutliplier", "multiplier", - "mutliverse", "multiverse", - "mysogynist", "misogynist", - "mysterieus", "mysteries", - "nagivating", "navigating", - "nagivation", "navigation", - "narcassism", "narcissism", - "narcassist", "narcissist", - "narcessist", "narcissist", - "narciscism", "narcissism", - "narciscist", "narcissist", - "narcisissm", "narcissism", - "narcisisst", "narcissist", - "narcisists", "narcissist", - "narcissicm", "narcissism", - "narcissict", "narcissist", - "narcissitc", "narcissist", - "narcissits", "narcissist", - "narcoticos", "narcotics", - "narrativas", "narratives", - "narrativos", "narratives", - "narritives", "narratives", - "nashvillle", "nashville", - "nationales", "nationals", - "nationalis", "nationals", - "nationalit", "nationalist", - "nationaliy", "nationality", - "nationalty", "nationality", - "nationella", "national", - "naturually", "naturally", - "naviagting", "navigating", - "naviagtion", "navigation", - "navigatore", "navigate", - "neccessary", "necessary", - "necesarily", "necessarily", - "necessairy", "necessarily", - "necessarly", "necessary", - "necessarry", "necessary", - "necessiate", "necessitate", - "necessites", "necessities", - "neckbeared", "neckbeard", - "neckboards", "neckbeards", - "neckbreads", "neckbeards", - "neckneards", "neckbeards", - "necromacer", "necromancer", - "necromaner", "necromancer", - "needleslly", "needlessly", - "negativaty", "negativity", - "negativley", "negatively", - "negelcting", "neglecting", - "negilgence", "negligence", - "negiotated", "negotiated", - "neglacting", "neglecting", - "neglagence", "negligence", - "neglegance", "negligence", - "neglegible", "negligible", - "neglegting", "neglecting", - "neglibible", "negligible", - "neglicence", "negligence", - "neglicible", "negligible", - "neglicting", "neglecting", - "negligable", "negligible", - "negligance", "negligence", - "negligeble", "negligible", - "negligente", "negligence", - "negociated", "negotiated", - "negogiated", "negotiated", - "negoitated", "negotiated", - "negotaited", "negotiated", - "negotation", "negotiation", - "negotiaion", "negotiation", - "negotiatie", "negotiated", - "negotiatin", "negotiations", - "negotiaton", "negotiation", - "neigbhours", "neighbours", - "neighbhors", "neighbours", - "neighbords", "neighbours", - "neighbores", "neighbours", - "netowrking", "networking", - "netruality", "neutrality", - "neturality", "neutrality", - "netwroking", "networking", - "neurologia", "neurological", - "neutrailty", "neutrality", - "newletters", "newsletters", - "newlsetter", "newsletter", - "newsettler", "newsletter", - "newslatter", "newsletter", - "nieghbours", "neighbours", - "nightmates", "nightmares", - "nightmears", "nightmares", - "nightmeres", "nightmares", - "nigthmares", "nightmares", - "nipticking", "nitpicking", - "nitpciking", "nitpicking", - "nominacion", "nomination", - "nominatino", "nominations", - "nominativo", "nomination", - "nominatons", "nominations", - "nonsencial", "nonsensical", - "nontheless", "nonetheless", - "northerend", "northern", - "nostalgica", "nostalgia", - "nostalgija", "nostalgia", - "noteworhty", "noteworthy", - "nothingess", "nothingness", - "noticabely", "noticeably", - "noticabley", "noticeably", - "noticiably", "noticeably", - "notoriosly", "notoriously", - "novembeard", "november", - "nuetrality", "neutrality", - "nutricious", "nutritious", - "nutrientes", "nutrients", - "nutritents", "nutrients", - "nutritinal", "nutritional", - "nutritiuos", "nutritious", - "nutritivos", "nutritious", - "nutrituous", "nutritious", - "nutrutious", "nutritious", - "obatinable", "obtainable", - "obejctives", "objectives", - "obilgatory", "obligatory", - "objecitves", "objectives", - "objectivas", "objectives", - "objectivly", "objectively", - "objectivst", "objectives", - "objectivty", "objectivity", - "objektives", "objectives", - "obligitary", "obligatory", - "obligitory", "obligatory", - "observabil", "observable", - "observarse", "observers", - "observaton", "observation", - "observeras", "observers", - "observered", "observed", - "observeres", "observers", - "observible", "observable", - "obstancles", "obstacles", - "obstrucion", "obstruction", - "obstructin", "obstruction", - "obtainabie", "obtainable", - "obtaineble", "obtainable", - "obtainible", "obtainable", - "obtianable", "obtainable", - "ocasionaly", "occasionally", - "ocassional", "occasional", - "ocassioned", "occasioned", - "occaisonal", "occasional", - "occasionly", "occasional", - "occassions", "occasions", - "occational", "occasional", - "occulation", "occupation", - "occupaiton", "occupation", - "occurances", "occurrences", - "occurences", "occurrences", - "occurrance", "occurrence", - "octohedral", "octahedral", - "octohedron", "octahedron", - "offensivly", "offensively", - "offereings", "offerings", - "officailly", "officially", - "olbigatory", "obligatory", - "ominpotent", "omnipotent", - "ominscient", "omniscient", - "omnipetent", "omnipotent", - "omnipitent", "omnipotent", - "omnipotant", "omnipotent", - "omnisicent", "omniscient", - "omniverous", "omnivorous", - "omnsicient", "omniscient", - "onmipotent", "omnipotent", - "onmiscient", "omniscient", - "operatings", "operations", - "operativne", "operative", - "operativos", "operations", - "oportunity", "opportunity", - "opponenets", "opponent", - "oppononent", "opponent", - "oppressiun", "oppressing", - "optimisitc", "optimistic", - "optimizare", "optimize", - "optimizate", "optimize", - "optimizied", "optimize", - "organicaly", "organically", - "organiclly", "organically", - "organisate", "organise", - "organische", "organise", - "organisera", "organizers", - "organisere", "organizers", - "organisert", "organizers", - "organisier", "organise", - "organisims", "organism", - "organismed", "organise", - "organismen", "organise", - "organismer", "organise", - "organismes", "organisms", - "organismus", "organisms", - "organisten", "organise", - "organiszed", "organise", - "organizaed", "organize", - "organizare", "organizer", - "organizate", "organize", - "organizors", "organizers", - "organizuje", "organize", - "organziers", "organizers", - "orientaion", "orientation", - "orientarla", "oriental", - "orientarlo", "oriental", - "origianlly", "originally", - "originales", "originals", - "originalet", "originated", - "originalis", "originals", - "originalty", "originality", - "orignially", "originally", - "origniated", "originated", - "origonally", "originally", - "origonated", "originated", - "ostencibly", "ostensibly", - "ostenisbly", "ostensibly", - "ostensably", "ostensibly", - "ostentibly", "ostensibly", - "ostrasiced", "ostracized", - "ostrasized", "ostracized", - "ostraziced", "ostracized", - "ostrazised", "ostracized", - "ostrecized", "ostracized", - "ostricized", "ostracized", - "ostrocized", "ostracized", - "oustanding", "outstanding", - "outcalssed", "outclassed", - "outlcassed", "outclassed", - "outnumberd", "outnumbered", - "outnumbred", "outnumbered", - "outperfoms", "outperform", - "outperfrom", "outperform", - "outpreform", "outperform", - "outrageuos", "outrageous", - "outragious", "outrageous", - "outragoues", "outrageous", - "outreagous", "outrageous", - "outsourcad", "outsourced", - "outsouring", "outsourcing", - "outsoursed", "outsourced", - "outweighes", "outweighs", - "overarcing", "overarching", - "overclockd", "overclocked", - "overcloked", "overclocked", - "overcoding", "overcoming", - "overheards", "overhead", - "overheared", "overhead", - "overhooked", "overlooked", - "overlanded", "overloaded", - "overlaoded", "overloaded", - "overlaping", "overlapping", - "overlauded", "overloaded", - "overloards", "overload", - "overlorded", "overloaded", - "overlordes", "overlords", - "overnurfed", "overturned", - "overpirced", "overpriced", - "overpowerd", "overpowered", - "overpowred", "overpowered", - "overprised", "overpriced", - "overtunned", "overturned", - "overtunred", "overturned", - "overturing", "overturn", - "overweigth", "overweight", - "overwhemed", "overwhelmed", - "overwieght", "overweight", - "overwritte", "overwrite", - "pahtfinder", "pathfinder", - "painfullly", "painfully", - "painkilers", "painkillers", - "pairlament", "parliament", - "pakistanti", "pakistani", - "paladinlst", "paladins", - "palcements", "placements", - "paleolitic", "paleolithic", - "palestinan", "palestinian", - "paltformer", "platformer", - "palyerbase", "playerbase", - "parachutte", "parachute", - "parademics", "paramedics", - "paradiggum", "paradigm", - "paragraghs", "paragraphs", - "paragrahps", "paragraphs", - "paragrapgh", "paragraphs", - "paragrpahs", "paragraphs", - "parahprase", "paraphrase", - "paralleles", "parallels", - "parallells", "parallels", - "paramadics", "paramedics", - "paramaters", "parameters", - "paramecias", "paramedics", - "parametics", "paramedics", - "parametros", "parameters", - "paramiters", "parameters", - "paramormal", "paranormal", - "paranoicas", "paranoia", - "paranomral", "paranormal", - "paranornal", "paranormal", - "parapharse", "paraphrase", - "paraphraze", "paraphrase", - "paraprhase", "paraphrase", - "parasitter", "parasite", - "parilament", "parliament", - "parituclar", "particular", - "parlaiment", "parliament", - "parliamant", "parliament", - "parliamone", "parliament", - "parliement", "parliament", - "parrallell", "parallel", - "parrallely", "parallelly", - "partiarchy", "patriarchy", - "participas", "participants", - "participat", "participants", - "participte", "participate", - "particualr", "particular", - "partiotism", "patriotism", - "passionais", "passions", - "passionale", "passionately", - "passionant", "passionate", - "passionite", "passionate", - "passivedns", "passives", - "passivelly", "passively", - "patenterad", "patented", - "pathfidner", "pathfinder", - "pathfindir", "pathfinder", - "pathifnder", "pathfinder", - "patientens", "patients", - "patrairchy", "patriarchy", - "patriachry", "patriarchy", - "patriarcal", "patriarchal", - "patriarhal", "patriarchal", - "patriatchy", "patriarchy", - "patriatism", "patriotism", - "patrionism", "patriotism", - "patriotics", "patriotism", - "patriotisk", "patriots", - "patroitism", "patriotism", - "patryarchy", "patriarchy", - "pedantisch", "pedantic", - "pedestiran", "pedestrian", - "pedestrain", "pedestrian", - "pedictions", "depictions", - "pedohpiles", "pedophiles", - "pedohpilia", "pedophilia", - "pedophilac", "pedophilia", - "pedophilea", "pedophilia", - "pedophilie", "pedophile", - "pedophilla", "pedophilia", - "pedophille", "pedophile", - "pedopholia", "pedophilia", - "penetraion", "penetration", - "penetratin", "penetration", - "penetraton", "penetration", - "penguinese", "penguins", - "penguiness", "penguins", - "peninsulla", "peninsula", - "penninsula", "peninsula", - "peodphiles", "pedophiles", - "peodphilia", "pedophilia", - "pepperment", "peppermint", - "pepperonni", "pepperoni", - "percantage", "percentage", - "percantile", "percentile", - "percaution", "precaution", - "percenatge", "percentages", - "percential", "percentile", - "percentige", "percentile", - "perceptoin", "perceptions", - "percession", "percussion", - "percetange", "percentages", - "percetnage", "percentages", - "percintile", "percentile", - "percission", "percussion", - "percpetion", "perceptions", - "percusions", "percussion", - "perdicting", "predicting", - "perdiction", "prediction", - "perdictive", "predictive", - "perenially", "perennially", - "perfeccion", "perfection", - "perfecxion", "perfection", - "perfektion", "perfection", - "perferable", "preferable", - "perferably", "preferably", - "perference", "preference", - "perferring", "preferring", - "perfexcion", "perfection", - "perfomance", "performance", - "performace", "performance", - "performane", "performances", - "performans", "performances", - "performens", "performers", - "performous", "performs", - "perfromers", "performers", - "perhiperal", "peripheral", - "peridinkle", "periwinkle", - "perihperal", "peripheral", - "periodisch", "periodic", - "periperhal", "peripheral", - "peripheals", "peripherals", - "peripheria", "peripheral", - "periphiral", "peripheral", - "periphreal", "peripheral", - "periphrial", "peripheral", - "peritinkle", "periwinkle", - "periwankle", "periwinkle", - "periwinkel", "periwinkle", - "periwinkie", "periwinkle", - "periwinlke", "periwinkle", - "permanenty", "permanently", - "permanetly", "permanently", - "permisions", "permission", - "permisison", "permissions", - "permissble", "permissible", - "permissibe", "permissible", - "permissons", "permissions", - "perogative", "prerogative", - "perordered", "preordered", - "perpatuate", "perpetuate", - "perpetualy", "perpetually", - "perpetuare", "perpetuate", - "persausion", "persuasion", - "persausive", "persuasive", - "persective", "respective", - "persectued", "persecuted", - "persecutie", "persecuted", - "persecutin", "persecution", - "perserving", "preserving", - "persicuted", "persecuted", - "persistant", "persistent", - "persistens", "persists", - "persoanlly", "personally", - "persocuted", "persecuted", - "personalie", "personalized", - "personalis", "personas", - "personarse", "personas", - "personatus", "personas", - "personnell", "personnel", - "perspecive", "perspective", - "perspectie", "perspectives", - "persuasian", "persuasion", - "persuasing", "persuasion", - "persuasivo", "persuasion", - "persuation", "persuasion", - "persucuted", "persecuted", - "persumably", "presumably", - "persussion", "persuasion", - "persvasive", "persuasive", - "perswasion", "persuasion", - "pertinante", "pertinent", - "pervailing", "prevailing", - "pervalence", "prevalence", - "pervention", "prevention", - "perversley", "perverse", - "pesitcides", "pesticides", - "pessimistc", "pessimistic", - "pessimitic", "pessimistic", - "pestacides", "pesticides", - "pestecides", "pesticides", - "pesticedes", "pesticides", - "pesticidas", "pesticides", - "pestisides", "pesticides", - "pestizides", "pesticides", - "pharamcist", "pharmacist", - "pharmacias", "pharmacist", - "pharmacyst", "pharmacist", - "pharmasist", "pharmacist", - "pharmicist", "pharmacist", - "phemonenon", "phenomenon", - "phenemenon", "phenomenon", - "phenemonal", "phenomenal", - "phenomanal", "phenomenal", - "phenomanon", "phenomenon", - "phenomemon", "phenomenon", - "phenomenen", "phenomenon", - "phenomenol", "phenomenal", - "phenomenom", "phenomenon", - "phenominon", "phenomenon", - "phenomonal", "phenomenal", - "phenomonen", "phenomenon", - "phenomonon", "phenomenon", - "phenonemal", "phenomenal", - "phenonemon", "phenomenon", - "phenonmena", "phenomena", - "philipines", "philippines", - "philippins", "philippines", - "philisophy", "philosophy", - "phillipine", "philippine", - "phillipses", "phillies", - "philosiphy", "philosophy", - "philosohpy", "philosophy", - "philosoper", "philosopher", - "philospher", "philosopher", - "philospohy", "philosophy", - "photogragh", "photograph", - "photograhs", "photographs", - "photograhy", "photography", - "photograps", "photographs", - "photograpy", "photography", - "photogrpah", "photographs", - "photoshopd", "photoshopped", - "photoshope", "photoshopped", - "phramacist", "pharmacist", - "phsyically", "physically", - "phsyicians", "physicians", - "phsyicists", "physicists", - "phsyiology", "physiology", - "phycisians", "physicians", - "phycisists", "physicists", - "phyiscally", "physically", - "phyisology", "physiology", - "physcially", "physically", - "physcology", "psychology", - "physcopath", "psychopath", - "physicials", "physicians", - "physiciens", "physicians", - "physioligy", "physiology", - "picthforks", "pitchforks", - "pinoneered", "pioneered", - "pitchferks", "pitchforks", - "pitchfolks", "pitchforks", - "pitchfords", "pitchforks", - "pitchworks", "pitchforks", - "pitckforks", "pitchforks", - "pittaburgh", "pittsburgh", - "pittsbrugh", "pittsburgh", - "placehoder", "placeholder", - "placeholdr", "placeholder", - "placeholer", "placeholder", - "placemenet", "placements", - "plagairism", "plagiarism", - "plagarisim", "plagiarism", - "plagiariam", "plagiarism", - "plagiarios", "plagiarism", - "plagiarius", "plagiarism", - "plagiarizm", "plagiarism", - "plagierism", "plagiarism", - "plaguarism", "plagiarism", - "plaigarism", "plagiarism", - "plasticosa", "plastics", - "platfarmer", "platformer", - "platformar", "platformer", - "platformie", "platformer", - "platfotmer", "platformer", - "platfromer", "platformer", - "platofrmer", "platformer", - "playaround", "playground", - "playersare", "playerbase", - "playgorund", "playground", - "playthrogh", "playthrough", - "playthrouh", "playthrough", - "playwrites", "playwrights", - "plethorian", "plethora", - "policitian", "politician", - "polinators", "pollinators", - "polishuset", "polishes", - "politessen", "politeness", - "politicain", "politician", - "politicaly", "politically", - "politicien", "politician", - "politicing", "politician", - "politicion", "politician", - "politickin", "politician", - "politiikan", "politician", - "politiness", "politeness", - "polititian", "politician", - "popualtion", "populations", - "populairty", "popularity", - "populaiton", "populations", - "popularaty", "popularity", - "popularest", "populate", - "popularily", "popularity", - "populaties", "populate", - "populatiry", "popularity", - "populative", "populate", - "populatoin", "populations", - "popultaion", "populations", - "pormetheus", "prometheus", - "pornograhy", "pornography", - "pornograpy", "pornography", - "pornogrphy", "pornography", - "porportion", "proportion", - "portabilty", "portability", - "portarying", "portraying", - "portoguese", "portuguese", - "portraiing", "portraying", - "portrating", "portraying", - "portrayels", "portrays", - "portugeuse", "portuguese", - "portuguise", "portuguese", - "posessions", "possessions", - "posicional", "positional", - "positevely", "positively", - "positioing", "positioning", - "positionly", "positional", - "positionne", "positioned", - "positivley", "positively", - "possesives", "possessive", - "possessers", "possesses", - "possessess", "possesses", - "possibiliy", "possibility", - "possibilty", "possibility", - "possissive", "possessive", - "posthomous", "posthumous", - "potentialy", "potentially", - "poulations", "populations", - "powerhorse", "powerhouse", - "powerhosue", "powerhouse", - "powerhours", "powerhouse", - "powerhsell", "powershell", - "powerprint", "powerpoint", - "powersehll", "powershell", - "ppublisher", "publisher", - "practially", "practically", - "practicaly", "practically", - "practicess", "practise", - "practiclly", "practically", - "practioner", "practitioner", - "precaucion", "precaution", - "precausion", "precaution", - "precautios", "precautions", - "precedance", "precedence", - "precedense", "precedence", - "preceeding", "preceding", - "precendece", "precedence", - "precentage", "percentage", - "precentile", "percentile", - "preciselly", "precisely", - "precuation", "precautions", - "precussion", "percussion", - "predecated", "predicated", - "predecence", "precedence", - "predecesor", "predecessor", - "predection", "prediction", - "predective", "predictive", - "prediccion", "prediction", - "prediceted", "predicated", - "predicited", "predicated", - "predicitng", "predicting", - "prediciton", "prediction", - "predicitve", "predictive", - "predickted", "predicated", - "predictave", "predictive", - "predictivo", "prediction", - "predictons", "predictions", - "predjuiced", "prejudiced", - "predjuices", "prejudices", - "preduction", "prediction", - "preductive", "predictive", - "predujiced", "prejudiced", - "predujices", "prejudices", - "prefarable", "preferable", - "prefarably", "preferably", - "prefection", "perfection", - "preferance", "preference", - "prefereble", "preferable", - "preferente", "preference", - "preferenze", "preference", - "preferible", "preferable", - "preferibly", "preferably", - "prefernece", "preferences", - "preformers", "performers", - "pregancies", "pregnancies", - "pregnanies", "pregnancies", - "preipheral", "peripheral", - "preisdents", "presidents", - "preisthood", "priesthood", - "prejeduced", "prejudiced", - "prejeduces", "prejudices", - "prejiduced", "prejudiced", - "prejiduces", "prejudices", - "prejucided", "prejudiced", - "prejucides", "prejudices", - "prejuduced", "prejudiced", - "prejuduces", "prejudices", - "prelimiary", "preliminary", - "prematurly", "prematurely", - "preminence", "preeminence", - "premission", "permission", - "preorderes", "preorders", - "prepartion", "preparation", - "prepetuate", "perpetuate", - "preposters", "preposterous", - "prescients", "presidents", - "prescirbed", "prescribed", - "prescriped", "prescribed", - "presearing", "preserving", - "presecuted", "persecuted", - "presedency", "presidency", - "presedents", "presidents", - "presenning", "presenting", - "presentase", "presents", - "presentato", "presentation", - "presention", "presenting", - "presentors", "presents", - "preservare", "preserve", - "preservato", "preservation", - "preserverd", "preserved", - "presidancy", "presidency", - "presidante", "presidents", - "presidenta", "presidential", - "presidenty", "presidency", - "presidunce", "presidency", - "presistent", "persistent", - "presonally", "personally", - "presonhood", "personhood", - "pressuming", "pressuring", - "prestigios", "prestigious", - "prestigous", "prestigious", - "presuambly", "presumably", - "presuasion", "persuasion", - "presuasive", "persuasive", - "presumebly", "presumably", - "presumendo", "presumed", - "presumibly", "presumably", - "presumpton", "presumption", - "pretaining", "pertaining", - "pretection", "protection", - "pretendias", "pretends", - "pretensive", "pretense", - "pretentios", "pretentious", - "pretentous", "pretentious", - "prevalecen", "prevalence", - "prevalente", "prevalence", - "prevencion", "prevention", - "preventivo", "prevention", - "preventors", "prevents", - "previaling", "prevailing", - "previosuly", "previously", - "previoulsy", "previously", - "prevolence", "prevalence", - "pricinpals", "principals", - "primarilly", "primarily", - "primatives", "primitives", - "princepals", "principals", - "princesess", "princesses", - "princibles", "principles", - "principaly", "principality", - "principels", "principals", - "principial", "principal", - "principias", "principals", - "principlas", "principals", - "prinicipal", "principal", - "prinicpals", "principals", - "prinicples", "principles", - "printerest", "printers", - "prioratize", "prioritize", - "prioretize", "prioritize", - "prioritice", "prioritize", - "prioritied", "prioritize", - "prioroties", "priorities", - "priorotize", "prioritize", - "priotities", "priorities", - "priotitize", "prioritize", - "privaleged", "privileged", - "privaleges", "privileges", - "privaticed", "privatized", - "privelaged", "privileged", - "privelages", "privileges", - "priveldges", "privileges", - "priveleged", "privileged", - "priveleges", "privileges", - "privelidge", "privileged", - "priveliged", "privileged", - "priveliges", "privileges", - "privetized", "privatized", - "privilaged", "privileged", - "privilages", "privileges", - "priviledge", "privilege", - "privilegde", "privileges", - "privilegie", "privilege", - "priviliged", "privileged", - "priviliges", "privileges", - "privitazed", "privatized", - "privitized", "privatized", - "probabiliy", "probability", - "probabilty", "probability", - "probablies", "probable", - "probablybe", "probable", - "problemita", "problematic", - "procalimed", "proclaimed", - "procceding", "proceeding", - "procedding", "proceeding", - "procederal", "procedural", - "procedings", "proceedings", - "procedrual", "procedural", - "proceededs", "proceeds", - "proceedure", "procedure", - "proceesing", "proceeding", - "processsor", "processors", - "proclamied", "proclaimed", - "proclaming", "proclaiming", - "procliamed", "proclaimed", - "procreatin", "procreation", - "procudures", "procedures", - "prodcution", "production", - "prodecural", "procedural", - "prodecures", "procedures", - "produccion", "production", - "produceras", "produces", - "produceres", "produces", - "producirse", "producers", - "produciton", "production", - "producting", "production", - "productino", "productions", - "productivo", "production", - "productivy", "productivity", - "productoin", "productions", - "produktion", "production", - "produktive", "productive", - "produtcion", "productions", - "profesions", "profession", - "professers", "professors", - "professorn", "profession", - "professsor", "professors", - "proffesion", "profession", - "proficeint", "proficient", - "proficiant", "proficient", - "proficieny", "proficiency", - "proficincy", "proficiency", - "profitabel", "profitable", - "profitabil", "profitable", - "profitible", "profitable", - "proftiable", "profitable", - "programmar", "programmer", - "programmme", "programme", - "progresing", "progressing", - "progresion", "progression", - "progresive", "progressive", - "progressie", "progressives", - "progressin", "progression", - "progresson", "progression", - "progressos", "progresses", - "progressus", "progresses", - "prohibirte", "prohibit", - "prohibites", "prohibits", - "prohibitng", "prohibiting", - "prohibiton", "prohibition", - "prohibitus", "prohibits", - "prohibitve", "prohibited", - "prohobited", "prohibited", - "prohpecies", "prophecies", - "projecitle", "projectiles", - "projectiel", "projectiles", - "projecties", "projectiles", - "projectils", "projectiles", - "projectles", "projectiles", - "projectlie", "projectiles", - "projectyle", "projectile", - "projektile", "projectile", - "projektion", "projection", - "prometheas", "prometheus", - "promethese", "prometheus", - "promethius", "prometheus", - "promethous", "prometheus", - "promethues", "prometheus", - "prominance", "prominence", - "prominenty", "prominently", - "prominetly", "prominently", - "promiscous", "promiscuous", - "promiscuos", "promiscuous", - "promoteurs", "promotes", - "promotheus", "prometheus", - "promotinal", "promotional", - "pronoucned", "pronounced", - "pronouning", "pronouncing", - "propechies", "prophecies", - "propencity", "propensity", - "propenents", "proponents", - "properites", "properties", - "propersity", "propensity", - "propertion", "proportion", - "propertius", "properties", - "prophacies", "prophecies", - "prophocies", "prophecies", - "propietary", "proprietary", - "proplusion", "propulsion", - "propoganda", "propaganda", - "propogates", "propagates", - "propolsion", "propulsion", - "proponants", "proponents", - "proponenet", "proponent", - "proporcion", "proportion", - "proporties", "properties", - "proporting", "proportion", - "propositon", "proposition", - "propotions", "proportions", - "proprietry", "proprietary", - "proprotion", "proportion", - "propserity", "prosperity", - "propserous", "prosperous", - "propulaios", "propulsion", - "propulsing", "propulsion", - "propultion", "propulsion", - "propuslion", "propulsion", - "prosectued", "prosecuted", - "prosectuor", "prosecutor", - "prosecuter", "prosecutor", - "prosecutie", "prosecuted", - "prosicuted", "prosecuted", - "prosicutor", "prosecutor", - "prosocuted", "prosecuted", - "prosparity", "prosperity", - "prospectos", "prospects", - "prosperety", "prosperity", - "prospertiy", "prosperity", - "prosphetic", "prosthetic", - "prosporous", "prosperous", - "prostehtic", "prosthetic", - "prosterity", "prosperity", - "prostethic", "prosthetic", - "prostitite", "prostitute", - "prostitude", "prostitute", - "prostituee", "prostitute", - "prostituer", "prostitute", - "prostitues", "prostitutes", - "prostiture", "prostitute", - "prostituto", "prostitution", - "prostituye", "prostitute", - "protaginst", "protagonist", - "protastant", "protestant", - "proteccion", "protection", - "proteciton", "protections", - "protectice", "protective", - "protectiei", "protective", - "protectoin", "protections", - "protectons", "protectors", - "protectron", "protection", - "protestans", "protests", - "protestare", "protesters", - "protestato", "protestant", - "protestent", "protestant", - "protestina", "protestant", - "prothsetic", "prosthetic", - "protistant", "protestant", - "protocoles", "protocols", - "protocolls", "protocols", - "protocolos", "protocols", - "protohypes", "prototypes", - "protostant", "protestant", - "prototipes", "prototypes", - "prototpyes", "prototypes", - "protraying", "portraying", - "protuguese", "portuguese", - "provencial", "provincial", - "proveribal", "proverbial", - "provervial", "proverbial", - "providance", "providence", - "providince", "providence", - "provinciae", "province", - "provincies", "province", - "provincija", "provincial", - "provinence", "providence", - "provinical", "provincial", - "provintial", "provincial", - "provinvial", "provincial", - "provisiosn", "provision", - "provisonal", "provisional", - "provocatie", "provocative", - "pscyhology", "psychology", - "pscyhopath", "psychopath", - "pshycology", "psychology", - "pshycopath", "psychopath", - "psychedlic", "psychedelic", - "psychiatic", "psychiatric", - "psycholoog", "psychology", - "psychopaat", "psychopath", - "psychopats", "psychopaths", - "ptichforks", "pitchforks", - "publicitan", "publication", - "publisheed", "published", - "publisherr", "publisher", - "publishher", "publisher", - "publissher", "publisher", - "publlisher", "publisher", - "punihsment", "punishments", - "punishemnt", "punishments", - "punishible", "punishable", - "punishmnet", "punishments", - "punissable", "punishable", - "punsihable", "punishable", - "purchacing", "purchasing", - "purpolsion", "propulsion", - "purposedly", "purposely", - "purposelly", "purposely", - "purpotedly", "purportedly", - "pususading", "persuading", - "pyschology", "psychology", - "pyschopath", "psychopath", - "qaulifiers", "qualifiers", - "quailfiers", "qualifiers", - "qualfiiers", "qualifiers", - "qualifieds", "qualifies", - "qualifiies", "qualifiers", - "qualifiing", "qualifying", - "qualifires", "qualifiers", - "qualifyers", "qualifiers", - "qualitying", "qualifying", - "quanitites", "quantities", - "quantaties", "quantities", - "quantitize", "quantities", - "quarantena", "quarantine", - "quarantene", "quarantine", - "quarantied", "quarantine", - "quarintine", "quarantine", - "quaruntine", "quarantine", - "quesitoned", "questioned", - "questional", "questionable", - "questionne", "questioned", - "rabinnical", "rabbinical", - "radiactive", "radioactive", - "radioacive", "radioactive", - "rainbowers", "rainbows", - "randmoness", "randomness", - "randomzied", "randomized", - "randonmess", "randomness", - "randumness", "randomness", - "raspberrry", "raspberry", - "rationalle", "rationale", - "readmition", "readmission", - "realitvely", "relatively", - "realtively", "relatively", - "realtivity", "relativity", - "reaserched", "researched", - "reasercher", "researcher", - "rebiulding", "rebuilding", - "reboudning", "rebounding", - "rebouncing", "rebounding", - "rebuidling", "rebuilding", - "rebuliding", "rebuilding", - "rebuplican", "republican", - "reccommend", "recommend", - "recepients", "recipients", - "receptoras", "receptors", - "receptores", "receptors", - "recgonised", "recognised", - "recgonized", "recognized", - "recgonizes", "recognizes", - "reciepents", "recipients", - "recipeints", "recipients", - "recipiants", "recipients", - "recocnised", "recognised", - "recoginsed", "recognised", - "recoginzed", "recognized", - "recognices", "recognizes", - "recogniton", "recognition", - "recognzied", "recognised", - "recomended", "recommended", - "recommande", "recommend", - "recommands", "recommends", - "recommeded", "recommended", - "recommened", "recommend", - "recommennd", "recommends", - "recomments", "recommends", - "recompence", "recompense", - "reconcider", "reconsider", - "reconcille", "reconcile", - "recongised", "recognised", - "recongized", "recognized", - "recongizes", "recognizes", - "reconisder", "reconsider", - "reconsiled", "reconsider", - "recordarle", "recorder", - "recordarme", "recorder", - "recordarse", "recorder", - "recordarte", "recorder", - "recreacion", "recreation", - "recreatief", "recreate", - "recreativo", "recreation", - "recrutiers", "recruiters", - "rectanglar", "rectangular", - "rectangual", "rectangular", - "rectanguar", "rectangular", - "recuriters", "recruiters", - "recurrance", "recurrence", - "recursivly", "recursively", - "redefinied", "redefine", - "redefinine", "redefine", - "redemtpion", "redemption", - "redepmtion", "redemption", - "redesiging", "redesign", - "rediculous", "ridiculous", - "redmeption", "redemption", - "redneckers", "rednecks", - "redneckese", "rednecks", - "redneckest", "rednecks", - "reduncancy", "redundancy", - "redundency", "redundancy", - "redundnacy", "redundancy", - "redunduncy", "redundancy", - "reenforced", "reinforced", - "reevaulate", "reevaluate", - "refedendum", "referendum", - "refelcting", "reflecting", - "refelction", "reflection", - "refelctive", "reflective", - "referances", "references", - "referandum", "referendum", - "referemces", "references", - "referemdum", "referendum", - "referendim", "referendum", - "referendom", "referendum", - "referenece", "reference", - "referening", "referencing", - "referenses", "referees", - "referentes", "references", - "referneces", "references", - "referrence", "reference", - "referundum", "referendum", - "refference", "reference", - "refleciton", "reflections", - "reflecters", "reflects", - "reflektion", "reflection", - "reflextion", "reflection", - "reformerad", "reformed", - "refrigerar", "refrigerator", - "refurbised", "refurbished", - "regenarate", "regenerate", - "registeres", "registers", - "registrato", "registration", - "regresives", "regressive", - "regressivo", "regression", - "regualting", "regulating", - "regualtion", "regulations", - "regualtors", "regulators", - "regulacion", "regulation", - "regulament", "regulate", - "regulaotrs", "regulators", - "regularily", "regularly", - "regularing", "regulating", - "regularlas", "regulars", - "regularlos", "regulars", - "regulaters", "regulators", - "regulatios", "regulators", - "regulatons", "regulations", - "rehtorical", "rhetorical", - "reinstaled", "reinstalled", - "reitrement", "retirement", - "relagation", "relaxation", - "relatation", "relaxation", - "relativety", "relativity", - "relativily", "relativity", - "relativley", "relatively", - "relavation", "relaxation", - "relaxating", "relaxation", - "relazation", "relaxation", - "releagtion", "relegation", - "relegetion", "relegation", - "relentness", "relentless", - "reletnless", "relentless", - "relevation", "revelation", - "relexation", "relegation", - "relfecting", "reflecting", - "relfection", "reflection", - "relfective", "reflective", - "reliabilty", "reliability", - "reliablely", "reliably", - "religiones", "religions", - "religiosly", "religiously", - "religiousy", "religiously", - "religously", "religiously", - "relitavely", "relatively", - "reluctanct", "reluctant", - "reluctanly", "reluctantly", - "reluctanty", "reluctantly", - "remarcably", "remarkably", - "remarkibly", "remarkably", - "rememberes", "remembers", - "remenicent", "reminiscent", - "reminisent", "reminiscent", - "reminscent", "reminiscent", - "remmebered", "remembered", - "renaissace", "renaissance", - "renderered", "rendered", - "renegerate", "regenerate", - "renewabels", "renewables", - "renewebles", "renewables", - "rennovated", "renovated", - "renweables", "renewables", - "repatition", "repetition", - "repblicans", "republicans", - "repbulican", "republican", - "repeadedly", "repeatedly", - "repeadetly", "repeatedly", - "repearable", "repeatable", - "repearedly", "repealed", - "repeatadly", "repeatedly", - "repeatedlt", "repealed", - "repeatetly", "repeatedly", - "repeatible", "repeatable", - "repeatidly", "repeatedly", - "repectable", "repeatable", - "repentable", "repeatable", - "repentence", "repentance", - "repersents", "represents", - "repetation", "repetition", - "repeteadly", "repeatedly", - "repetetion", "repetition", - "repeticion", "repetition", - "repetitivo", "repetition", - "replacated", "replicated", - "replaceble", "replaceable", - "replacemet", "replacements", - "replacemnt", "replacement", - "replacemtn", "replacements", - "replecated", "replicated", - "repoistory", "repository", - "reponsible", "responsible", - "reportadly", "reportedly", - "reporteros", "reporters", - "reportidly", "reportedly", - "repositary", "repository", - "reposotory", "repository", - "repostiory", "repository", - "representn", "representing", - "repressent", "represents", - "repressivo", "repression", - "repsectful", "respectful", - "repsecting", "respecting", - "repsective", "respective", - "repsonding", "responding", - "repsonsive", "responsive", - "reptuation", "reputation", - "repubicans", "republicans", - "republcian", "republican", - "republians", "republicans", - "republicon", "republican", - "repuglican", "republican", - "repulicans", "republicans", - "reputacion", "reputation", - "requirment", "requirement", - "requrement", "requirement", - "resemblace", "resemble", - "reserached", "researched", - "reseracher", "researchers", - "reserverad", "reserved", - "reservered", "reserved", - "residental", "residential", - "resistable", "resistible", - "resistanes", "resistances", - "resistanse", "resistances", - "resistence", "resistance", - "resistendo", "resisted", - "resistered", "resisted", - "resistnace", "resistances", - "resitsance", "resistances", - "resoltuion", "resolutions", - "resolucion", "resolution", - "resolutino", "resolutions", - "resolutoin", "resolutions", - "resolutons", "resolutions", - "resolvemos", "resolves", - "resolvendo", "resolved", - "resolveres", "resolves", - "resolverse", "resolves", - "resolviste", "resolves", - "resonabelt", "resonate", - "resoultion", "resolution", - "respecitve", "respective", - "respectifs", "respects", - "respection", "respecting", - "respectons", "respects", - "respectuos", "respects", - "respektive", "respective", - "respiratoy", "respiratory", - "responcive", "responsive", - "responisve", "responsive", - "responsibe", "responsive", - "responsiby", "responsibly", - "responsile", "responsive", - "responsing", "responding", - "ressembled", "resembled", - "restarants", "restaurants", - "restaraunt", "restaurant", - "restaruant", "restaurant", - "restatting", "restarting", - "restaurent", "restaurant", - "restauring", "restarting", - "resteraunt", "restaurant", - "restircted", "restricted", - "restorting", "restarting", - "restrainig", "restraining", - "restrcited", "restricted", - "restrcting", "restarting", - "restricing", "restricting", - "restricion", "restriction", - "restricive", "restrictive", - "restrictes", "restricts", - "restrictie", "restrictive", - "restricton", "restriction", - "restructed", "restricted", - "restuarant", "restaurant", - "resturants", "restaurants", - "resturaunt", "restaurant", - "retaliaton", "retaliation", - "rethorical", "rhetorical", - "retierment", "retirement", - "retribuito", "retribution", - "retrosepct", "retrospect", - "retrospekt", "retrospect", - "revaluated", "reevaluated", - "revealtion", "revelations", - "revelaiton", "revelations", - "revelatons", "revelations", - "revelution", "revelation", - "reversable", "reversible", - "reversably", "reversal", - "reviewtrue", "reviewer", - "revisiones", "revisions", - "revisionis", "revisions", - "revoltuion", "revolution", - "revoluiton", "revolutions", - "revolutoin", "revolutions", - "revoultion", "revolution", - "rewarching", "rewatching", - "rewatchibg", "rewatching", - "rewatchign", "rewatching", - "rewatchimg", "rewatching", - "rhapsodomy", "rhapsody", - "rhetorisch", "rhetoric", - "ridicilous", "ridiculous", - "ridicoulus", "ridiculous", - "ridiculise", "ridicule", - "ridiculize", "ridicule", - "ridiculled", "ridicule", - "ridiculose", "ridicule", - "ridiculued", "ridicule", - "rienforced", "reinforced", - "rigthfully", "rightfully", - "roleplaing", "roleplaying", - "romanmania", "romanian", - "roundaboot", "roundabout", - "rucuperate", "recuperate", - "rudimentry", "rudimentary", - "sacarmento", "sacramento", - "sacntioned", "sanctioned", - "sacraficed", "sacrificed", - "sacrafices", "sacrifices", - "sacramenno", "sacramento", - "sacreficed", "sacrificed", - "sacrefices", "sacrifices", - "sacremento", "sacramento", - "sacrifaced", "sacrificed", - "sacrifaces", "sacrifices", - "sacrifical", "sacrificial", - "sacrificas", "sacrifices", - "sacrificie", "sacrificed", - "sacrificng", "sacrificing", - "sacrifises", "sacrifices", - "sacrifized", "sacrificed", - "sacrifizes", "sacrifices", - "sacromento", "sacramento", - "sadistisch", "sadistic", - "sanctionne", "sanctioned", - "sandiwches", "sandwiches", - "sandviches", "sandwiches", - "sandwishes", "sandwiches", - "sanitazion", "sanitation", - "santiation", "sanitation", - "sastifying", "satisfying", - "satellitte", "satellites", - "satifsying", "satisfying", - "satrically", "satirically", - "satsifying", "satisfying", - "sattelites", "satellites", - "saturacion", "saturation", - "scandalosa", "scandals", - "scandalose", "scandals", - "scandalosi", "scandals", - "scandaloso", "scandals", - "scandaniva", "scandinavia", - "scandinava", "scandinavian", - "scandinvia", "scandinavia", - "scaramento", "sacramento", - "scarificed", "sacrificed", - "scarifices", "sacrifices", - "scarmbling", "scrambling", - "scartching", "scratching", - "sceintific", "scientific", - "sceintists", "scientists", - "scenarioes", "scenarios", - "scenarions", "scenarios", - "scenarious", "scenarios", - "scheudling", "scheduling", - "scholarhip", "scholarship", - "scholarley", "scholarly", - "sciencists", "scientists", - "scientests", "scientists", - "scirptures", "scriptures", - "scooterers", "scooters", - "scorebaord", "scoreboard", - "scoreborad", "scoreboard", - "scorebored", "scoreboard", - "scorpiomon", "scorpion", - "scracthing", "scratching", - "scramblies", "scramble", - "screenshat", "screenshot", - "screenshit", "screenshot", - "scriptores", "scriptures", - "scripturae", "scriptures", - "scriputres", "scriptures", - "scritpures", "scriptures", - "scrutinity", "scrutiny", - "seahawkers", "seahawks", - "sebastiaan", "sebastian", - "segegrated", "segregated", - "segragated", "segregated", - "segregaded", "segregated", - "segregatie", "segregated", - "segretated", "segregated", - "segrigated", "segregated", - "selectiose", "selections", - "selectivly", "selectively", - "selectivos", "selections", - "selfishess", "selfishness", - "senitments", "sentiments", - "sensitiviy", "sensitivity", - "sensitivty", "sensitivity", - "sentaments", "sentiments", - "sentancing", "sentencing", - "sentements", "sentiments", - "sentencian", "sentencing", - "sentensing", "sentencing", - "sentimenal", "sentimental", - "sentimetal", "sentimental", - "sentincing", "sentencing", - "sentinents", "sentiments", - "separacion", "separation", - "separaters", "separates", - "separatley", "separately", - "separatron", "separation", - "separetely", "separately", - "seperately", "separately", - "seperating", "separating", - "seperation", "separation", - "seperatism", "separatism", - "seperatist", "separatist", - "seperatley", "seperate", - "sepulchure", "sepulchre", - "serenitary", "serenity", - "serviceble", "serviceable", - "settelment", "settlement", - "settlemens", "settlements", - "settlemets", "settlements", - "settlemnts", "settlements", - "seuxalized", "sexualized", - "seventeeen", "seventeen", - "sexaulized", "sexualized", - "sexualixed", "sexualized", - "sexuallity", "sexually", - "sexualzied", "sexualized", - "sexulaized", "sexualized", - "shakespare", "shakespeare", - "shakespeer", "shakespeare", - "shakespere", "shakespeare", - "shamelesly", "shamelessly", - "shamelessy", "shamelessly", - "shaprening", "sharpening", - "shareholds", "shareholders", - "sharkening", "sharpening", - "sharpining", "sharpening", - "shartening", "sharpening", - "shatnering", "shattering", - "shattening", "shattering", - "shepharded", "shepherd", - "shilouette", "silhouette", - "shitlasses", "shitless", - "shortenend", "shortened", - "shortining", "shortening", - "sidelinien", "sideline", - "sidelinjen", "sideline", - "sidelinked", "sideline", - "sigantures", "signatures", - "sightstine", "sightstone", - "signficant", "significant", - "signifiant", "significant", - "significat", "significant", - "signitures", "signatures", - "sigthstone", "sightstone", - "sihlouette", "silhouette", - "silohuette", "silhouette", - "silouhette", "silhouette", - "similairty", "similarity", - "similarily", "similarly", - "similarlly", "similarly", - "similiarly", "similarly", - "similiarty", "similarity", - "simliarity", "similarity", - "simluation", "simulation", - "simplictic", "simplistic", - "simplifing", "simplifying", - "simplifyed", "simplified", - "simplifyng", "simplifying", - "simplisitc", "simplistic", - "simplisity", "simplicity", - "simplistes", "simplest", - "simplivity", "simplicity", - "simplyfied", "simplified", - "simualtion", "simulation", - "simulacion", "simulation", - "simulaiton", "simulations", - "simulaties", "simulate", - "simulative", "simulate", - "simulatons", "simulations", - "simulatore", "simulate", - "sincereley", "sincerely", - "sincerelly", "sincerely", - "singatures", "signatures", - "singulaire", "singular", - "singulariy", "singularity", - "singularty", "singularity", - "singulator", "singular", - "sitautions", "situations", - "situatinal", "situational", - "skatebaord", "skateboard", - "skateborad", "skateboard", - "skatebored", "skateboard", - "skatebrand", "skateboard", - "skeletones", "skeletons", - "skeptecism", "skepticism", - "skepticals", "skeptics", - "skepticles", "skeptics", - "skepticons", "skeptics", - "skeptisicm", "skepticism", - "skeptisism", "skepticism", - "sketchysex", "sketches", - "sketpicism", "skepticism", - "skillhosts", "skillshots", - "skillshits", "skillshots", - "skillshoot", "skillshots", - "skillslots", "skillshots", - "skillsofts", "skillshots", - "skillsshot", "skillshots", - "skirmiches", "skirmish", - "skpeticism", "skepticism", - "slaughterd", "slaughtered", - "slipperies", "slippers", - "smarpthone", "smartphones", - "smarthpone", "smartphone", - "snadwiches", "sandwiches", - "snowbaling", "snowballing", - "snowballes", "snowballs", - "snowballls", "snowballs", - "socailists", "socialists", - "socailized", "socialized", - "socialisim", "socialism", - "socializng", "socializing", - "socialsits", "socialists", - "sociapaths", "sociopaths", - "socilaists", "socialists", - "socilaized", "socialized", - "sociologia", "sociological", - "sociopatas", "sociopaths", - "sociopatch", "sociopaths", - "sociopatic", "sociopathic", - "socratease", "socrates", - "socreboard", "scoreboard", - "soemthings", "somethings", - "soldiarity", "solidarity", - "solidairty", "solidarity", - "soliditary", "solidarity", - "solitudine", "solitude", - "somehtings", "somethings", - "someonelse", "someones", - "somethibng", "somethin", - "somethigng", "somethin", - "somethigns", "somethings", - "somethihng", "somethin", - "somethiing", "somethin", - "somethijng", "somethin", - "somethikng", "somethin", - "somethimng", "somethin", - "somethinbg", "somethings", - "somethines", "somethings", - "somethinfg", "somethings", - "somethinhg", "somethings", - "somethinig", "somethings", - "somethinkg", "somethings", - "somethinks", "somethings", - "somethinmg", "somethings", - "somethinng", "somethings", - "somethintg", "somethings", - "somethiong", "somethin", - "somethiung", "somethin", - "sophicated", "sophisticated", - "sotrmfront", "stormfront", - "sotrylines", "storylines", - "soudntrack", "soundtrack", - "soundrtack", "soundtracks", - "soundtracs", "soundtracks", - "soundtrakc", "soundtracks", - "soundtrakk", "soundtrack", - "soundtraks", "soundtracks", - "southampon", "southampton", - "southamton", "southampton", - "southerers", "southerners", - "southernes", "southerners", - "southerton", "southern", - "souveniers", "souvenirs", - "sovereigny", "sovereignty", - "sovereinty", "sovereignty", - "soverignty", "sovereignty", - "spartaniis", "spartans", - "spartanops", "spartans", - "specailist", "specialist", - "specailize", "specializes", - "specialice", "specialize", - "specialied", "specialized", - "specialies", "specializes", - "specialits", "specials", - "speciallly", "specially", - "speciallty", "specially", - "specialops", "specials", - "specialsts", "specialists", - "specialtys", "specials", - "specialzed", "specialized", - "specialzes", "specializes", - "specifices", "specifics", - "specifiing", "specifying", - "specifiyng", "specifying", - "speciliast", "specialists", - "specimines", "specimen", - "spectarors", "spectators", - "spectaters", "spectators", - "spectracal", "spectral", - "spectraply", "spectral", - "spectrolab", "spectral", - "speculatie", "speculative", - "speculatin", "speculation", - "speecheasy", "speeches", - "speicalist", "specialist", - "spiritualy", "spiritually", - "sponsorees", "sponsors", - "sponsorhip", "sponsorship", - "sponsorise", "sponsors", - "spontaneos", "spontaneous", - "spontaneus", "spontaneous", - "spontanous", "spontaneous", - "spoonfulls", "spoonfuls", - "spreadshet", "spreadsheet", - "springfeld", "springfield", - "springfied", "springfield", - "spriritual", "spiritual", - "squirrells", "squirrels", - "squirrelus", "squirrels", - "stabelized", "stabilized", - "stabilzied", "stabilized", - "stablility", "stability", - "stablizied", "stabilized", - "staggaring", "staggering", - "stakeboard", "skateboard", - "starighten", "straighten", - "starnation", "starvation", - "startegies", "strategies", - "startupbus", "startups", - "starwberry", "strawberry", - "statememts", "statements", - "statictics", "statistics", - "stationair", "stationary", - "statisitcs", "statistics", - "statistcal", "statistical", - "statistisk", "statistics", - "stauration", "saturation", - "stealthboy", "stealthy", - "stealthely", "stealthy", - "stealthify", "stealthy", - "stealthray", "stealthy", - "steeleries", "steelers", - "stereotipe", "stereotype", - "stereotpye", "stereotypes", - "steriotype", "stereotype", - "steroetype", "stereotype", - "sterotypes", "stereotypes", - "steryotype", "stereotype", - "stimilants", "stimulants", - "stimilated", "stimulated", - "stimualted", "stimulated", - "stimulatie", "stimulated", - "stimulatin", "stimulation", - "stimulaton", "stimulation", - "stimulents", "stimulants", - "stomrfront", "stormfront", - "storelines", "storylines", - "stormfornt", "stormfront", - "stormfromt", "stormfront", - "stornfront", "stormfront", - "stornghold", "stronghold", - "stradegies", "strategies", - "strageties", "strategies", - "straighted", "straightened", - "straightie", "straighten", - "straightin", "straighten", - "straigthen", "straighten", - "stranglove", "strangle", - "strangreal", "strangle", - "stratagies", "strategies", - "strategems", "strategies", - "strategice", "strategies", - "strategisk", "strategies", - "stravation", "starvation", - "strawbarry", "strawberry", - "strawbeary", "strawberry", - "strawbeery", "strawberry", - "strawbrary", "strawberry", - "strawburry", "strawberry", - "streaching", "stretching", - "streamtrue", "streamer", - "strechting", "stretching", - "strecthing", "stretching", - "stregnthen", "strengthen", - "streichung", "stretching", - "strenghten", "strengthen", - "strengsten", "strengthen", - "strengthes", "strengths", - "strengthin", "strengthen", - "stressende", "stressed", - "striaghten", "straighten", - "stromfront", "stormfront", - "stronkhold", "stronghold", - "stroylines", "storylines", - "structered", "structured", - "structrual", "structural", - "structurel", "structural", - "strucutral", "structural", - "strucutred", "structured", - "strucutres", "structures", - "strugglign", "struggling", - "strwaberry", "strawberry", - "sttutering", "stuttering", - "stupidfree", "stupider", - "stupiditiy", "stupidity", - "sturctural", "structural", - "sturctures", "structures", - "sturggling", "struggling", - "subarmines", "submarines", - "subcultuur", "subculture", - "subesquent", "subsequent", - "subisdized", "subsidized", - "subjectief", "subjective", - "subjectifs", "subjects", - "subjectivy", "subjectively", - "subjektive", "subjective", - "submariens", "submarines", - "submarinas", "submarines", - "submergerd", "submerged", - "submerines", "submarines", - "submisison", "submissions", - "submissies", "submissive", - "submissons", "submissions", - "submittion", "submitting", - "subsadized", "subsidized", - "subscirbed", "subscribed", - "subscirber", "subscribers", - "subscribar", "subscriber", - "subscribir", "subscriber", - "subscrible", "subscriber", - "subscriped", "subscribed", - "subscrubed", "subscribed", - "subscryber", "subscriber", - "subsedized", "subsidized", - "subsequant", "subsequent", - "subsidezed", "subsidized", - "subsidiced", "subsidized", - "subsidizng", "subsidizing", - "subsiduary", "subsidiary", - "subsiquent", "subsequent", - "subsittute", "substitutes", - "subsizided", "subsidized", - "subsrcibed", "subscribed", - "substanial", "substantial", - "substansen", "substances", - "substanser", "substances", - "substanses", "substances", - "substantie", "substantive", - "substatial", "substantial", - "substences", "substances", - "substitite", "substitute", - "substittue", "substitutes", - "substitude", "substitute", - "substitued", "substitute", - "substituer", "substitute", - "substitues", "substitutes", - "substiture", "substitute", - "substituto", "substitution", - "substituts", "substitutes", - "substracts", "subtracts", - "substutite", "substitutes", - "subsudized", "subsidized", - "subtitltes", "subtitle", - "succceeded", "succeeded", - "succcesses", "successes", - "succesfuly", "successfully", - "succesions", "succession", - "successing", "succession", - "successivo", "succession", - "sucesfully", "successfully", - "sucessfull", "successful", - "sucessfuly", "successfully", - "sudnerland", "sunderland", - "sufferered", "suffered", - "sufferring", "suffering", - "sufficiant", "sufficient", - "suggestied", "suggestive", - "suggestief", "suggestive", - "suggestons", "suggests", - "sumbarines", "submarines", - "sumbissive", "submissive", - "sumbitting", "submitting", - "summerized", "summarized", - "summorized", "summarized", - "summurized", "summarized", - "sunderlona", "sunderland", - "sunderlund", "sunderland", - "sungalsses", "sunglasses", - "sunglesses", "sunglasses", - "sunglinger", "gunslinger", - "sunscreeen", "sunscreen", - "superfical", "superficial", - "superfluos", "superfluous", - "superioara", "superior", - "superioare", "superior", - "superioris", "superiors", - "superivsor", "supervisors", - "supermaket", "supermarket", - "supermarkt", "supermarket", - "superouman", "superhuman", - "superposer", "superpowers", - "superviors", "supervisors", - "superviosr", "supervisors", - "supervisar", "supervisor", - "superviser", "supervisor", - "supervisin", "supervision", - "supervison", "supervision", - "supervsior", "supervisors", - "supperssor", "suppressor", - "supplament", "supplement", - "supplemant", "supplemental", - "supplemets", "supplements", - "supportare", "supporters", - "supporteur", "supporter", - "supportied", "supported", - "supportors", "supporters", - "supposdely", "supposedly", - "supposebly", "supposedly", - "supposidly", "supposedly", - "suppresion", "suppression", - "suppresors", "suppressor", - "suppressin", "suppression", - "suppressio", "suppressor", - "suppresson", "suppression", - "suprassing", "surpassing", - "supressing", "suppressing", - "supression", "suppression", - "supsension", "suspension", - "supsicions", "suspicions", - "supsicious", "suspicious", - "surounding", "surrounding", - "surplanted", "supplanted", - "surpressed", "suppressed", - "surprizing", "surprising", - "surrenderd", "surrendered", - "surrouding", "surrounding", - "surroundes", "surrounds", - "surroundig", "surroundings", - "survivours", "survivor", - "suseptable", "susceptible", - "suseptible", "susceptible", - "suspecions", "suspicions", - "suspecious", "suspicious", - "suspencion", "suspension", - "suspendeds", "suspense", - "suspention", "suspension", - "suspicians", "suspicions", - "suspiciois", "suspicions", - "suspicioso", "suspicions", - "suspicioun", "suspicion", - "suspicison", "suspicions", - "suspiciuos", "suspicions", - "suspicsion", "suspicions", - "suspisions", "suspicions", - "suspisious", "suspicious", - "suspitions", "suspicions", - "sustainble", "sustainable", - "swaetshirt", "sweatshirt", - "swearengin", "swearing", - "swearshirt", "sweatshirt", - "sweathsirt", "sweatshirt", - "sweatshits", "sweatshirt", - "sweatshort", "sweatshirt", - "sweatshrit", "sweatshirt", - "sweerheart", "sweetheart", - "sweetshart", "sweetheart", - "switcheasy", "switches", - "switzerand", "switzerland", - "symapthize", "sympathize", - "symbolisch", "symbolic", - "symbolisim", "symbolism", - "symetrical", "symmetrical", - "sympatheic", "sympathetic", - "sympathiek", "sympathize", - "sympathien", "sympathize", - "sympathtic", "sympathetic", - "sympathyze", "sympathize", - "sympethize", "sympathize", - "symphatize", "sympathize", - "symphonity", "symphony", - "sympothize", "sympathize", - "syncronous", "synchronous", - "synomymous", "synonymous", - "synomynous", "synonymous", - "synonamous", "synonymous", - "synonimous", "synonymous", - "synonmyous", "synonymous", - "synonomous", "synonymous", - "synonumous", "synonymous", - "synonynous", "synonymous", - "sypmathize", "sympathize", - "systamatic", "systematic", - "systemetic", "systematic", - "systemisch", "systemic", - "systimatic", "systematic", - "tabelspoon", "tablespoon", - "tablespons", "tablespoons", - "tablesppon", "tablespoon", - "tacitcally", "tactically", - "taiwanesse", "taiwanese", - "taligating", "tailgating", - "tantrumers", "tantrums", - "targetting", "targeting", - "teamfigths", "teamfights", - "teamifghts", "teamfights", - "teamspeack", "teamspeak", - "techicians", "technicians", - "techincian", "technician", - "techinican", "technician", - "techinques", "techniques", - "technicain", "technician", - "technicaly", "technically", - "technicans", "technicians", - "technichan", "technician", - "technicien", "technician", - "technicion", "technician", - "technitian", "technician", - "technqiues", "techniques", - "techtician", "technician", - "tehnically", "ethnically", - "telegrapgh", "telegraph", - "teleporing", "teleporting", - "televesion", "television", - "televisivo", "television", - "temafights", "teamfights", - "temerature", "temperature", - "temperatue", "temperature", - "temperment", "temperament", - "temperture", "temperature", - "templarios", "templars", - "templarius", "templars", - "temporaily", "temporarily", - "temporarly", "temporary", - "temptating", "temptation", - "temptetion", "temptation", - "tendancies", "tendencies", - "tendencias", "tendencies", - "tendencije", "tendencies", - "tendensies", "tendencies", - "tendincies", "tendencies", - "tensionors", "tensions", - "tentacreul", "tentacle", - "termanator", "terminator", - "termendous", "tremendous", - "termiantor", "terminator", - "termigator", "terminator", - "terminales", "terminals", - "terminalis", "terminals", - "terminarla", "terminal", - "terminarlo", "terminal", - "terminaron", "terminator", - "terminater", "terminator", - "terminolgy", "terminology", - "terorrists", "terrorists", - "terrerists", "terrorists", - "terrestial", "terrestrial", - "terriblely", "terribly", - "terriories", "territories", - "territoral", "territorial", - "territores", "territories", - "territoris", "territories", - "territorry", "territory", - "terrorisim", "terrorism", - "terrorsits", "terrorists", - "terrurists", "terrorists", - "testiclees", "testicles", - "testiclies", "testicle", - "testimoney", "testimony", - "thankyooou", "thankyou", - "themselfes", "themselves", - "themsevles", "themselves", - "themsleves", "themselves", - "theocracry", "theocracy", - "theologial", "theological", - "therapetic", "therapeutic", - "therepists", "therapists", - "theripists", "therapists", - "thermastat", "thermostat", - "thermistat", "thermostat", - "thermomter", "thermometer", - "theromstat", "thermostat", - "thorttling", "throttling", - "thorughout", "throughout", - "thouroghly", "thoroughly", - "threadened", "threaded", - "threatenes", "threatens", - "threatning", "threatening", - "threshhold", "threshold", - "throthling", "throttling", - "throtlling", "throttling", - "throughiut", "throughput", - "thubmnails", "thumbnails", - "thumbmails", "thumbnails", - "thunderbot", "thunderbolt", - "thunderolt", "thunderbolt", - "tighetning", "tightening", - "tightining", "tightening", - "tigthening", "tightening", - "tjpanishad", "upanishad", - "toothbruch", "toothbrush", - "toothbruth", "toothbrush", - "toothbursh", "toothbrush", - "toothrbush", "toothbrush", - "toppingest", "toppings", - "torchilght", "torchlight", - "torchlgiht", "torchlight", - "torchligth", "torchlight", - "torhclight", "torchlight", - "torrentbig", "torrenting", - "torrenters", "torrents", - "torrentors", "torrents", - "tortillera", "tortilla", - "tortillias", "tortilla", - "tortillita", "tortilla", - "tortilllas", "tortilla", - "torunament", "tournament", - "totalitara", "totalitarian", - "touchsceen", "touchscreen", - "touchscren", "touchscreen", - "touranment", "tournaments", - "tourmanent", "tournaments", - "tournamets", "tournaments", - "tournamnet", "tournament", - "tournemant", "tournament", - "tournement", "tournament", - "toxicitity", "toxicity", - "trafficing", "trafficking", - "trainwreak", "trainwreck", - "traitorise", "traitors", - "tramboline", "trampoline", - "tramploine", "trampoline", - "trampolene", "trampoline", - "tranformed", "transformed", - "tranistion", "transition", - "tranlsated", "translated", - "transalted", "translated", - "transaltes", "translates", - "transaltor", "translator", - "transation", "transition", - "transciprt", "transcripts", - "transcirpt", "transcripts", - "transcrips", "transcripts", - "transcrito", "transcript", - "transcrits", "transcripts", - "transcrpit", "transcript", - "transfered", "transferred", - "transferer", "transferred", - "transferes", "transfers", - "transferrs", "transfers", - "transferts", "transfers", - "transfomed", "transformed", - "transfored", "transformed", - "transforme", "transfer", - "transfroms", "transforms", - "transgeder", "transgender", - "transgener", "transgender", - "transicion", "transition", - "transision", "transition", - "transister", "transistor", - "transitons", "transitions", - "transitors", "transistor", - "transkript", "transcript", - "translater", "translator", - "translatin", "translations", - "translatio", "translator", - "translpant", "transplants", - "transluent", "translucent", - "transmited", "transmitted", - "transmiter", "transmitter", - "transmitor", "transistor", - "transmorgs", "transforms", - "transpalnt", "transplants", - "transphoic", "transphobic", - "transplain", "transplant", - "transplate", "transplant", - "transplats", "transplants", - "transpoder", "transported", - "transportr", "transporter", - "transsexal", "transsexual", - "transtator", "translator", - "tranzistor", "transistor", - "trasncript", "transcript", - "trasnforms", "transforms", - "trasnlated", "translated", - "trasnlator", "translator", - "trasnplant", "transplant", - "traveleres", "travelers", - "travelodge", "traveled", - "traverlers", "traverse", - "traversare", "traverse", - "traversier", "traverse", - "treasurery", "treasury", - "trememdous", "tremendous", - "tremondous", "tremendous", - "trespasing", "trespassing", - "trianwreck", "trainwreck", - "trochlight", "torchlight", - "trustworhy", "trustworthy", - "trustworty", "trustworthy", - "trustwothy", "trustworthy", - "tryannical", "tyrannical", - "tunraround", "turnaround", - "tupparware", "tupperware", - "turnapound", "turnaround", - "turthfully", "truthfully", - "tutoriales", "tutorials", - "tyrantical", "tyrannical", - "ubiqituous", "ubiquitous", - "ubiquotous", "ubiquitous", - "ubiqutious", "ubiquitous", - "ukrainains", "ukrainians", - "ukraineans", "ukrainians", - "ukrainiens", "ukrainians", - "ukraininas", "ukrainians", - "ukrianians", "ukrainians", - "ulitmately", "ultimately", - "ulterioara", "ulterior", - "ulterioare", "ulterior", - "ultimative", "ultimate", - "ultimatley", "ultimately", - "ultimatuum", "ultimatum", - "unanwsered", "unanswered", - "unasnwered", "unanswered", - "unattanded", "unattended", - "unattented", "unattended", - "unavailabe", "unavailable", - "unavailble", "unavailable", - "unavoidble", "unavoidable", - "unawnsered", "unanswered", - "unbalenced", "unbalanced", - "unballance", "unbalance", - "unbalnaced", "unbalanced", - "unbareable", "unbearable", - "unbeakable", "unbeatable", - "unbeareble", "unbearable", - "unbeatbale", "unbeatable", - "unbeateble", "unbeatable", - "unbeerable", "unbearable", - "unbeetable", "unbeatable", - "unbeknowst", "unbeknownst", - "unbreakble", "unbreakable", - "uncencored", "uncensored", - "uncensered", "uncensored", - "uncersored", "uncensored", - "uncertainy", "uncertainty", - "uncertanty", "uncertainty", - "uncesnored", "uncensored", - "uncomitted", "uncommitted", - "uncommited", "uncommitted", - "unconcious", "unconscious", - "unconscous", "unconscious", - "undebiably", "undeniably", - "undeinable", "undeniable", - "undeinably", "undeniably", - "undenaible", "undeniable", - "undenaibly", "undeniably", - "undenyable", "undeniable", - "undenyably", "undeniably", - "underbaker", "undertaker", - "undercling", "underlying", - "underfaker", "undertaker", - "undergated", "underrated", - "undergrand", "undergrad", - "undergroud", "underground", - "undergrund", "underground", - "undermimes", "undermines", - "underminde", "undermines", - "underminig", "undermining", - "underneeth", "underneath", - "underneith", "underneath", - "undernieth", "underneath", - "underpowed", "underpowered", - "underraged", "underrated", - "underraker", "undertaker", - "underrater", "undertaker", - "undersatnd", "understands", - "understadn", "understands", - "understans", "understands", - "understnad", "understands", - "understoon", "understood", - "understsnd", "understands", - "undertoker", "undertaker", - "undertsand", "understands", - "undertunes", "undertones", - "underwager", "underwater", - "underwares", "underwater", - "underwolrd", "underworld", - "underwoord", "underworld", - "underwrold", "underworld", - "underyling", "underlying", - "undesrtand", "understands", - "undoubtedy", "undoubtedly", - "undoubtely", "undoubtedly", - "undoubtley", "undoubtedly", - "uneccesary", "unnecessary", - "unecessary", "unnecessary", - "unedcuated", "uneducated", - "unedicated", "uneducated", - "unempolyed", "unemployed", - "unexplaind", "unexplained", - "unexplaned", "unexplained", - "unfamilair", "unfamiliar", - "unfamilier", "unfamiliar", - "unfinsihed", "unfinished", - "unfirendly", "unfriendly", - "unfortuate", "unfortunate", - "unfreindly", "unfriendly", - "unfriednly", "unfriendly", - "unfriently", "unfriendly", - "ungrapeful", "ungrateful", - "ungreatful", "ungrateful", - "unhealthly", "unhealthy", - "unicornios", "unicorns", - "unifnished", "unfinished", - "unihabited", "uninhabited", - "unilatreal", "unilateral", - "unimporant", "unimportant", - "unimpresed", "unimpressed", - "unimpressd", "unimpressed", - "uninsipred", "uninspired", - "uninspried", "uninspired", - "uninstaled", "uninstalled", - "uniquiness", "uniqueness", - "univercity", "university", - "univeristy", "university", - "universale", "universe", - "universaly", "universally", - "universels", "universes", - "universets", "universes", - "universite", "universities", - "universtiy", "university", - "unjustifed", "unjustified", - "unknowingy", "unknowingly", - "unknowinly", "unknowingly", - "unnecesary", "unnecessary", - "unofficail", "unofficial", - "unoffocial", "unofficial", - "unorginial", "unoriginal", - "unorignial", "unoriginal", - "unorigonal", "unoriginal", - "unplacable", "unplayable", - "unplaybale", "unplayable", - "unplayeble", "unplayable", - "unpleasent", "unpleasant", - "unpopulair", "unpopular", - "unproteced", "unprotected", - "unqiueness", "uniqueness", - "unqualifed", "unqualified", - "unrealesed", "unreleased", - "unrealible", "unreliable", - "unrealistc", "unrealistic", - "unrealitic", "unrealistic", - "unreasonal", "unreasonably", - "unrelaible", "unreliable", - "unreleated", "unreleased", - "unrelyable", "unreliable", - "unrepetant", "unrepentant", - "unrepetent", "unrepentant", - "unresponse", "unresponsive", - "unsencored", "uncensored", - "unsetlling", "unsettling", - "unsolicted", "unsolicited", - "unsubscibe", "unsubscribe", - "unsubscrbe", "unsubscribe", - "unsucesful", "unsuccessful", - "unsuprised", "unsurprised", - "unsuprized", "unsurprised", - "unviersity", "university", - "unwrittern", "unwritten", - "urkainians", "ukrainians", - "utlimately", "ultimately", - "utlrasound", "ultrasound", - "vaccinatie", "vaccinated", - "vaccineras", "vaccines", - "valentians", "valentines", - "valentiens", "valentines", - "valentimes", "valentines", - "valentinas", "valentines", - "valentinos", "valentines", - "valentones", "valentines", - "validitity", "validity", - "valnetines", "valentines", - "vandalisim", "vandalism", - "vasectomey", "vasectomy", - "vegatarian", "vegetarian", - "vegaterian", "vegetarian", - "vegeratian", "vegetarians", - "vegetairan", "vegetarians", - "vegetarain", "vegetarians", - "vegetarien", "vegetarian", - "vegetarion", "vegetarian", - "vegetatian", "vegetarian", - "vegeterian", "vegetarian", - "vegitables", "vegetables", - "vehemantly", "vehemently", - "vehemontly", "vehemently", - "veitnamese", "vietnamese", - "veiwership", "viewership", - "veiwpoints", "viewpoints", - "venezuella", "venezuela", - "verificato", "verification", - "verifyable", "verifiable", - "veritcally", "vertically", - "veritiable", "verifiable", - "vernecular", "vernacular", - "vernicular", "vernacular", - "versatiliy", "versatility", - "versatille", "versatile", - "versatilty", "versatility", - "versitlity", "versatility", - "vewiership", "viewership", - "vibratoare", "vibrator", - "vicitmized", "victimized", - "vicotrious", "victorious", - "victemized", "victimized", - "victomized", "victimized", - "victorinos", "victorious", - "victorinus", "victorious", - "victoriosa", "victorious", - "victorioso", "victorious", - "victoriuos", "victorious", - "victumized", "victimized", - "videogaems", "videogames", - "videojames", "videogames", - "vidoegames", "videogames", - "vientamese", "vietnamese", - "vietmanese", "vietnamese", - "vietnamees", "vietnamese", - "vietnamise", "vietnamese", - "viewpionts", "viewpoints", - "vigilantie", "vigilante", - "vigoruosly", "vigorously", - "vigourosly", "vigorously", - "villageois", "villages", - "vindicitve", "vindictive", - "vindictave", "vindictive", - "visibiltiy", "visibility", - "vitenamese", "vietnamese", - "vocabluary", "vocabulary", - "volatiltiy", "volatility", - "volativity", "volatility", - "volitality", "volatility", - "volleyboll", "volleyball", - "vollyeball", "volleyball", - "volonteers", "volunteers", - "volounteer", "volunteer", - "voluntairy", "voluntarily", - "voluntarly", "voluntary", - "voluntears", "volunteers", - "volunteeer", "volunteers", - "volunteerd", "volunteered", - "voluntered", "volunteered", - "vulernable", "vulnerable", - "vulnarable", "vulnerable", - "vulnerabil", "vulnerable", - "vulnurable", "vulnerable", - "vunlerable", "vulnerable", - "warrandyte", "warranty", - "warrantles", "warranties", - "warrenties", "warranties", - "washignton", "washington", - "waterlemon", "watermelon", - "watermalon", "watermelon", - "waterproff", "waterproof", - "wavelegnth", "wavelength", - "wavelenghs", "wavelength", - "wavelenght", "wavelength", - "weakensses", "weaknesses", - "weaknesess", "weaknesses", - "weathliest", "wealthiest", - "wedensdays", "wednesdays", - "wednesdsay", "wednesdays", - "wednessday", "wednesdays", - "wednsedays", "wednesdays", - "weightened", "weighted", - "welathiest", "wealthiest", - "wellignton", "wellington", - "wellingotn", "wellington", - "wendesdays", "wednesdays", - "wereabouts", "whereabouts", - "westbroook", "westbrook", - "westernese", "westerners", - "westerness", "westerners", - "westminser", "westminster", - "westminter", "westminster", - "whatosever", "whatsoever", - "whatseover", "whatsoever", - "whipsering", "whispering", - "whsipering", "whispering", - "widepsread", "widespread", - "wikileakes", "wikileaks", - "wilderniss", "wilderness", - "wildreness", "wilderness", - "willfullly", "willfully", - "winchestor", "winchester", - "windhsield", "windshield", - "windsheild", "windshield", - "windshiled", "windshield", - "wisconsion", "wisconsin", - "wishpering", "whispering", - "withdrawan", "withdrawn", - "withdrawel", "withdrawal", - "withdrawin", "withdrawn", - "withholdng", "withholding", - "withrdawal", "withdrawals", - "witnissing", "witnessing", - "wonderfull", "wonderful", - "wonderfuly", "wonderfully", - "wonderwand", "wonderland", - "worhsiping", "worshiping", - "workingest", "workings", - "workstaion", "workstation", - "workstaton", "workstation", - "worshippig", "worshipping", - "worshoping", "worshiping", - "wrestlewar", "wrestler", - "xenohpobic", "xenophobic", - "xenophibia", "xenophobia", - "xenophibic", "xenophobic", - "xenophonic", "xenophobic", - "xenophopia", "xenophobia", - "xenophopic", "xenophobic", - "xeonphobia", "xenophobia", - "xeonphobic", "xenophobic", - "yourselfes", "yourselves", - "yoursleves", "yourselves", - "zimbabwaen", "zimbabwe", - "zionistisk", "zionists", - "abandonig", "abandoning", - "abandonne", "abandonment", - "abanonded", "abandoned", - "abdomnial", "abdominal", - "abdonimal", "abdominal", - "aberation", "aberration", - "abnormaly", "abnormally", - "abodminal", "abdominal", - "abondoned", "abandoned", - "aborigene", "aborigine", - "aboslutes", "absolutes", - "abosrbing", "absorbing", - "abreviate", "abbreviate", - "abritrary", "arbitrary", - "abruptley", "abruptly", - "absailing", "abseiling", - "absloutes", "absolutes", - "absolutey", "absolutely", - "absolutly", "absolutely", - "absoultes", "absolutes", - "abstracto", "abstraction", - "absurdley", "absurdly", - "absuridty", "absurdity", - "abusrdity", "absurdity", - "academica", "academia", - "accademic", "academic", - "accalimed", "acclaimed", - "accelerar", "accelerator", - "accending", "ascending", - "accension", "accession", - "accidenty", "accidently", - "acclamied", "acclaimed", - "accliamed", "acclaimed", - "accomdate", "accommodate", - "accordeon", "accordion", - "accordian", "accordion", - "accoridng", "according", - "accountas", "accountants", - "accountat", "accountants", - "accoustic", "acoustic", - "accroding", "according", - "accuraccy", "accuracy", - "acftually", "factually", - "acheiving", "achieving", - "achieveds", "achieves", - "achillees", "achilles", - "achilleos", "achilles", - "achilleus", "achilles", - "achiveing", "achieving", - "acitvates", "activates", - "aclhemist", "alchemist", - "acomplish", "accomplish", - "acquisito", "acquisition", - "acronymes", "acronyms", - "acronymns", "acronyms", - "acsending", "ascending", - "acsension", "ascension", - "activaste", "activates", - "activatin", "activation", - "activelly", "actively", - "activisim", "activism", - "activisit", "activist", - "activites", "activities", - "actresess", "actresses", - "acusation", "causation", - "acutality", "actuality", - "adavanced", "advanced", - "adbominal", "abdominal", - "additonal", "additional", - "addoptive", "adoptive", - "addresing", "addressing", - "addtional", "additional", - "adhearing", "adhering", - "adherance", "adherence", - "adjectivs", "adjectives", - "adjustabe", "adjustable", - "administr", "administer", - "admitedly", "admittedly", - "adolecent", "adolescent", - "adovcated", "advocated", - "adovcates", "advocates", - "adquiring", "acquiring", - "adresable", "addressable", - "adressing", "addressing", - "aduiobook", "audiobook", - "advatange", "advantage", - "adventurs", "adventures", - "adveristy", "adversity", - "advertisy", "adversity", - "advisorys", "advisors", - "aeorspace", "aerospace", - "aeropsace", "aerospace", - "aerosapce", "aerospace", - "aersopace", "aerospace", - "aestethic", "aesthetic", - "aethistic", "atheistic", - "affiliato", "affiliation", - "affinitiy", "affinity", - "affirmate", "affirmative", - "affliated", "affiliated", - "africanas", "africans", - "africanos", "africans", - "aggegrate", "aggregate", - "aggresive", "aggressive", - "agnosticm", "agnosticism", - "agregates", "aggregates", - "agreggate", "aggregate", - "agrentina", "argentina", - "agression", "aggression", - "agressive", "aggressive", - "agressvie", "agressive", - "agruement", "arguement", - "agruments", "arguments", - "agurement", "arguement", - "ailenated", "alienated", - "airbourne", "airborne", - "aircrafts", "aircraft", - "airplance", "airplane", - "airrcraft", "aircraft", - "aksreddit", "askreddit", - "alcehmist", "alchemist", - "alchemsit", "alchemist", - "alchimest", "alchemist", - "alchmeist", "alchemist", - "alchoolic", "alcoholic", - "alcoholis", "alcoholics", - "alechmist", "alchemist", - "alegience", "allegiance", - "aleinated", "alienated", - "algoriths", "algorithms", - "algoritms", "algorithms", - "algorthim", "algorithm", - "algortihm", "algorithm", - "alignemnt", "alignment", - "alimunium", "aluminium", - "alingment", "alignment", - "allainces", "alliances", - "alledgely", "allegedly", - "allegence", "allegiance", - "alleivate", "alleviate", - "allievate", "alleviate", - "alliviate", "alleviate", - "allopones", "allophones", - "allthough", "although", - "almightly", "almighty", - "alocholic", "alcoholic", - "alogrithm", "algorithm", - "alphabeat", "alphabet", - "alrightey", "alrighty", - "alrightly", "alrighty", - "alrightty", "alrighty", - "alrington", "arlington", - "alrorythm", "algorithm", - "alterante", "alternate", - "alternatr", "alternator", - "althetics", "athletics", - "althought", "although", - "altruisim", "altruism", - "amateures", "amateurs", - "ambluance", "ambulance", - "ambuigity", "ambiguity", - "amendmant", "amendment", - "amercians", "americans", - "americain", "american", - "americams", "americas", - "americaps", "americas", - "americats", "americas", - "amibguity", "ambiguity", - "aminosity", "animosity", - "amrstrong", "armstrong", - "amublance", "ambulance", - "amunition", "ammunition", - "anachrist", "anarchist", - "analagous", "analogous", - "analitycs", "analytics", - "analtyics", "analytics", - "analyitcs", "analytics", - "analyseas", "analyses", - "analysees", "analyses", - "analysens", "analyses", - "analysise", "analyses", - "analystes", "analysts", - "analzying", "analyzing", - "anarchsim", "anarchism", - "anayltics", "analytics", - "anaylzing", "analyzing", - "ancedotal", "anecdotal", - "ancedotes", "anecdotes", - "ancestory", "ancestry", - "androgeny", "androgyny", - "androides", "androids", - "androidos", "androids", - "anecdotle", "anecdote", - "anecodtal", "anecdotal", - "anecodtes", "anecdotes", - "anectodal", "anecdotal", - "anectodes", "anecdotes", - "anedoctal", "anecdotal", - "anedoctes", "anecdotes", - "animostiy", "animosity", - "anitvirus", "antivirus", - "anlaytics", "analytics", - "anniversy", "anniversary", - "annointed", "anointed", - "annoucnes", "announces", - "annoyingy", "annoyingly", - "annoymous", "anonymous", - "annoynace", "annoyance", - "annyoance", "annoyance", - "anomisity", "animosity", - "anomolies", "anomalies", - "anomolous", "anomalous", - "anomynity", "anonymity", - "anomynous", "anonymous", - "anonimity", "anonymity", - "anonmyous", "anonymous", - "anonymoys", "anonymously", - "anorexiac", "anorexic", - "anorexica", "anorexia", - "anrachist", "anarchist", - "ansestors", "ancestors", - "antarctia", "antarctica", - "antennaes", "antennas", - "antiviurs", "antivirus", - "antivrius", "antivirus", - "antivuris", "antivirus", - "anwsering", "answering", - "anynomity", "anonymity", - "anynomous", "anonymous", - "aparthide", "apartheid", - "aparthied", "apartheid", - "apartmens", "apartments", - "apocalype", "apocalypse", - "apostrope", "apostrophe", - "apparenty", "apparently", - "appearane", "appearances", - "appenines", "apennines", - "apperance", "appearance", - "appetitie", "appetite", - "applaudes", "applause", - "applicato", "application", - "appreciae", "appreciates", - "apprentie", "apprentice", - "approachs", "approaches", - "apratheid", "apartheid", - "apsaragus", "asparagus", - "apsergers", "aspergers", - "aquainted", "acquainted", - "arbirtary", "arbitrary", - "arbritary", "arbitrary", - "arcehtype", "archetype", - "archetect", "architect", - "archetpye", "archetype", - "archetyps", "archetypes", - "architecs", "architects", - "archtypes", "archetypes", - "aregument", "arguement", - "areospace", "aerospace", - "argessive", "agressive", - "argeument", "arguement", - "arguabley", "arguably", - "arguablly", "arguably", - "arguement", "argument", - "arguemnet", "arguement", - "arguemnts", "arguments", - "argumeent", "arguement", - "arhtritis", "arthritis", - "aribtrary", "arbitrary", - "ariplanes", "airplanes", - "aristolte", "aristotle", - "aristotel", "aristotle", - "aritfacts", "artifacts", - "arlignton", "arlington", - "arlingotn", "arlington", - "armistace", "armistice", - "armstorng", "armstrong", - "arpatheid", "apartheid", - "arthirtis", "arthritis", - "artifcats", "artifacts", - "artifical", "artificial", - "artillary", "artillery", - "arugement", "arguement", - "arugments", "arguments", - "asapragus", "asparagus", - "asbestoes", "asbestos", - "asborbing", "absorbing", - "asburdity", "absurdity", - "ascendend", "ascended", - "ascneding", "ascending", - "ascnesion", "ascension", - "asethetic", "aesthetic", - "asnwering", "answering", - "asociated", "associated", - "assasined", "assassinated", - "assassian", "assassin", - "assassine", "assassinate", - "assasssin", "assassins", - "assaultes", "assaults", - "assembeld", "assembled", - "assembley", "assembly", - "assemblie", "assemble", - "assisnate", "assassinate", - "assistans", "assistants", - "assistsnt", "assistants", - "assmebled", "assembled", - "associato", "association", - "assoicate", "associate", - "asssasins", "assassins", - "assualted", "assaulted", - "assulated", "assaulted", - "asteorids", "asteroids", - "astericks", "asterisk", - "asteriods", "asteroids", - "astroanut", "astronaut", - "astronuat", "astronaut", - "astrounat", "astronaut", - "asuterity", "austerity", - "atempting", "attempting", - "atheltics", "athletics", - "atheneans", "athenians", - "athesitic", "atheistic", - "athetlics", "athletics", - "athiestic", "atheistic", - "athleticm", "athleticism", - "atmosphir", "atmospheric", - "atributed", "attributed", - "atributes", "attributes", - "atrifacts", "artifacts", - "atrillery", "artillery", - "atrittion", "attrition", - "attachmet", "attachments", - "attaindre", "attainder", - "attemting", "attempting", - "attemtped", "attempted", - "attendent", "attendant", - "attension", "attention", - "attirbute", "attribute", - "attirtion", "attrition", - "attmepted", "attempted", - "attractes", "attracts", - "attractin", "attraction", - "attributo", "attribution", - "attributs", "attributes", - "attritube", "attribute", - "auctionrs", "auctions", - "auidobook", "audiobook", - "auromated", "automated", - "australin", "australians", - "authroity", "authority", - "autoattak", "autoattack", - "autogrpah", "autograph", - "autonomos", "autonomous", - "auxillary", "auxiliary", - "avaialble", "available", - "availible", "available", - "avalaible", "available", - "avaliable", "available", - "averageed", "averaged", - "avialable", "available", - "awakenend", "awakened", - "awesomley", "awesomely", - "awkawrdly", "awkwardly", - "awnsering", "answering", - "bacehlors", "bachelors", - "bachelour", "bachelor", - "bachleors", "bachelors", - "bacholers", "bachelors", - "backdooor", "backdoor", - "backfeild", "backfield", - "backfiled", "backfield", - "backgroud", "background", - "backpakcs", "backpacks", - "badnwagon", "bandwagon", - "badnwidth", "bandwidth", - "balckjack", "blackjack", - "balcklist", "blacklist", - "balitmore", "baltimore", - "ballisitc", "ballistic", - "ballsitic", "ballistic", - "balsphemy", "blasphemy", - "bandiwdth", "bandwidth", - "bandwdith", "bandwidth", - "bandwidht", "bandwidth", - "bandwitdh", "bandwidth", - "bankrupcy", "bankruptcy", - "bankrupty", "bankruptcy", - "banruptcy", "bankruptcy", - "baordwalk", "boardwalk", - "barabrian", "barbarian", - "barbarain", "barbarian", - "barbarina", "barbarian", - "barcelets", "bracelets", - "barcleona", "barcelona", - "bareclona", "barcelona", - "barrackus", "barracks", - "bascially", "basically", - "bastardes", "bastards", - "bastardos", "bastards", - "bastardus", "bastards", - "bathrooom", "bathroom", - "batlimore", "baltimore", - "battailon", "battalion", - "battlaion", "battalion", - "beahviour", "behaviour", - "beauitful", "beautiful", - "beautifyl", "beautifully", - "becnhmark", "benchmark", - "becomeing", "becoming", - "becomming", "becoming", - "beehtoven", "beethoven", - "begginers", "beginners", - "beggining", "beginning", - "begininng", "beginning", - "beginnins", "beginnings", - "behaivors", "behaviors", - "behaivour", "behaviour", - "behavoirs", "behaviors", - "behavoiur", "behaviour", - "behvaiour", "behaviour", - "beleiving", "believing", - "beliveing", "believing", - "belssings", "blessings", - "bemusemnt", "bemusement", - "benchamrk", "benchmark", - "benchmars", "benchmarks", - "benedicat", "benedict", - "benedickt", "benedict", - "benghazhi", "benghazi", - "benghazzi", "benghazi", - "bergamont", "bergamot", - "berkelely", "berkeley", - "bersekrer", "berserker", - "berskerer", "berserker", - "beseiging", "besieging", - "bestialiy", "bestiality", - "beuatiful", "beautiful", - "biginning", "beginning", - "bigrading", "brigading", - "billbaord", "billboard", - "billboars", "billboards", - "binominal", "binomial", - "birgading", "brigading", - "birghtest", "brightest", - "birhtdays", "birthdays", - "bitcoints", "bitcoins", - "blackbery", "blackberry", - "blackhaws", "blackhawks", - "blackshit", "blacksmith", - "blanketts", "blankets", - "blapshemy", "blasphemy", - "blashpemy", "blasphemy", - "blaspehmy", "blasphemy", - "blasphmey", "blasphemy", - "blatanlty", "blatantly", - "blatimore", "baltimore", - "bleuberry", "blueberry", - "bleutooth", "bluetooth", - "blisteres", "blisters", - "blizzcoin", "blizzcon", - "blockchan", "blockchain", - "blockeras", "blockers", - "bloodbore", "bloodborne", - "boardband", "broadband", - "boardcast", "broadcast", - "bodyweigt", "bodyweight", - "bookamrks", "bookmarks", - "bookmakrs", "bookmarks", - "bookmarkd", "bookmarked", - "boradband", "broadband", - "boradcast", "broadcast", - "boradwalk", "boardwalk", - "bouregois", "bourgeois", - "bourgeios", "bourgeois", - "bourgoeis", "bourgeois", - "boyfirend", "boyfriend", - "boyfreind", "boyfriend", - "boyfriens", "boyfriends", - "brabarian", "barbarian", - "bracelona", "barcelona", - "braodband", "broadband", - "braodcast", "broadcast", - "brazilias", "brazilians", - "breakdows", "breakdowns", - "breserker", "berserker", - "bretheren", "brethren", - "bridaging", "brigading", - "brightern", "brighten", - "brigthest", "brightest", - "brilliany", "brilliantly", - "brithdays", "birthdays", - "broadwalk", "boardwalk", - "bruiseres", "bruisers", - "brunettte", "brunette", - "brusseles", "brussels", - "brussells", "brussels", - "brutailty", "brutality", - "brutallly", "brutally", - "buddhisim", "buddhism", - "buddihsts", "buddhists", - "buddishts", "buddhists", - "buhddists", "buddhists", - "buidlings", "buildings", - "bulidings", "buildings", - "burgunday", "burgundy", - "burgundry", "burgundy", - "burritoes", "burritos", - "burtality", "brutality", - "busineses", "business", - "businessa", "businessman", - "businesse", "businessmen", - "businesss", "businesses", - "bussiness", "business", - "buthcered", "butchered", - "butterlfy", "butterfly", - "cacausian", "caucasian", - "caclulate", "calculate", - "cacuasian", "caucasian", - "caculater", "calculator", - "cafeteira", "cafeteria", - "cafetiera", "cafeteria", - "caffeinne", "caffeine", - "calcualte", "calculate", - "californa", "california", - "caluclate", "calculate", - "calulated", "calculated", - "calulater", "calculator", - "cambirdge", "cambridge", - "cambrdige", "cambridge", - "cambrigde", "cambridge", - "camoflage", "camouflage", - "campagins", "campaigns", - "campaings", "campaigns", - "campiagns", "campaigns", - "campusers", "campuses", - "camrbidge", "cambridge", - "canadains", "canadians", - "candadate", "candidate", - "candidats", "candidates", - "cannister", "canister", - "cannoical", "canonical", - "canoncial", "canonical", - "capactior", "capacitor", - "capicator", "capacitor", - "capitalis", "capitals", - "caprenter", "carpenter", - "capsulers", "capsules", - "capsulets", "capsules", - "carachter", "character", - "cardbaord", "cardboard", - "cardborad", "cardboard", - "cardianls", "cardinals", - "cardnials", "cardinals", - "caridnals", "cardinals", - "carmalite", "carmelite", - "carnberry", "cranberry", - "carolinia", "carolina", - "carpetner", "carpenter", - "carptener", "carpenter", - "carribean", "caribbean", - "cartdrige", "cartridge", - "cartilege", "cartilage", - "cartirdge", "cartridge", - "cartrdige", "cartridge", - "cartrigde", "cartridge", - "casaulity", "causality", - "cashieres", "cashiers", - "cassawory", "cassowary", - "cassettte", "cassette", - "casuation", "causation", - "cataclsym", "cataclysm", - "cataclyms", "cataclysm", - "catacylsm", "cataclysm", - "catacyslm", "cataclysm", - "catalcysm", "cataclysm", - "catalgoue", "catalogue", - "cathderal", "cathedral", - "catherdal", "cathedral", - "cathloics", "catholics", - "cathredal", "cathedral", - "caucaisan", "caucasian", - "caucasain", "caucasian", - "causacian", "caucasian", - "causailty", "causality", - "celebirty", "celebrity", - "celebrato", "celebration", - "celebrite", "celebrities", - "celesital", "celestial", - "celestail", "celestial", - "cementary", "cemetery", - "cemetarey", "cemetery", - "cenitpede", "centipede", - "centepide", "centipede", - "centipeed", "centipede", - "centruies", "centuries", - "centuties", "centuries", - "cerebrawl", "cerebral", - "certanity", "certainty", - "certianty", "certainty", - "cesspoool", "cesspool", - "chairmain", "chairman", - "challange", "challenge", - "challengr", "challenger", - "challengs", "challenges", - "chameloen", "chameleon", - "champagen", "champagne", - "champange", "champagne", - "chandlure", "chandler", - "changable", "changeable", - "charactor", "character", - "chatedral", "cathedral", - "chatolics", "catholics", - "checkmeat", "checkmate", - "checkpoit", "checkpoints", - "chekcmate", "checkmate", - "chemestry", "chemistry", - "chemicaly", "chemically", - "chemsitry", "chemistry", - "chernboyl", "chernobyl", - "chernobly", "chernobyl", - "chernoybl", "chernobyl", - "chernyobl", "chernobyl", - "cheronbyl", "chernobyl", - "chidlfree", "childfree", - "chidlrens", "childrens", - "chihauhua", "chihuahua", - "chihuahau", "chihuahua", - "childbird", "childbirth", - "childerns", "childrens", - "childisch", "childish", - "childresn", "childrens", - "chirstian", "christian", - "chirstmas", "christmas", - "chiuhahua", "chihuahua", - "chlidfree", "childfree", - "chlidrens", "childrens", - "chocloate", "chocolate", - "chocoalte", "chocolate", - "chocolats", "chocolates", - "chocolste", "chocolates", - "cholocate", "chocolate", - "chrenobyl", "chernobyl", - "chrisitan", "christian", - "christain", "christian", - "christams", "christmas", - "chrsitian", "christian", - "chrsitmas", "christmas", - "churchers", "churches", - "cigaretts", "cigarettes", - "cigeratte", "cigarette", - "cilivians", "civilians", - "cilpboard", "clipboard", - "cilynders", "cylinders", - "circuitos", "circuits", - "ciriculum", "curriculum", - "cirticise", "criticise", - "civilains", "civilians", - "civillian", "civilian", - "classicos", "classics", - "classicus", "classics", - "classifiy", "classify", - "cleanisng", "cleansing", - "cleasning", "cleansing", - "clikcbait", "clickbait", - "clinicaly", "clinically", - "clipbaord", "clipboard", - "clitories", "clitoris", - "clitorios", "clitoris", - "clitorius", "clitoris", - "clucthing", "clutching", - "clutchign", "clutching", - "cluthcing", "clutching", - "coca cola", "coca-cola", - "cockatils", "cocktails", - "cocktials", "cocktails", - "cognizent", "cognizant", - "colateral", "collateral", - "collabore", "collaborate", - "collasped", "collapsed", - "collaspes", "collapses", - "colleauge", "colleague", - "collectes", "collects", - "collectie", "collective", - "collecton", "collection", - "collectos", "collectors", - "collegaue", "colleague", - "collegues", "colleagues", - "collisson", "collisions", - "collonade", "colonnade", - "collonies", "colonies", - "collpased", "collapsed", - "collpases", "collapses", - "colombina", "colombia", - "columbina", "columbia", - "comapnies", "companies", - "combatans", "combatants", - "combinato", "combination", - "combusion", "combustion", - "comestics", "cosmetics", - "comisions", "commissions", - "comission", "commission", - "comitting", "committing", - "commandes", "commands", - "commentar", "commentator", - "commentes", "commenters", - "commercie", "commerce", - "commision", "commission", - "commiteed", "commited", - "commiting", "committing", - "commitmet", "commitments", - "commongly", "commonly", - "communiss", "communists", - "communite", "communities", - "communits", "communist", - "communsim", "communism", - "compaines", "companies", - "compalins", "complains", - "compalint", "compliant", - "comparisn", "comparisons", - "compeltes", "completes", - "competant", "competent", - "competend", "competed", - "competion", "competition", - "competive", "competitive", - "compilant", "compliant", - "compilare", "compiler", - "compilato", "compilation", - "compitent", "competent", - "complaind", "complained", - "complaing", "complaining", - "completen", "complement", - "completey", "completely", - "completin", "completion", - "complians", "complains", - "componant", "component", - "comprable", "comparable", - "compresas", "compress", - "compreses", "compress", - "compteurs", "computers", - "comptuers", "computers", - "computato", "computation", - "comradets", "comrades", - "comsetics", "cosmetics", - "conanical", "canonical", - "conatiner", "container", - "concelaed", "concealed", - "concelaer", "concealer", - "concelear", "concealer", - "concensus", "consensus", - "conceptos", "concepts", - "conceptul", "conceptual", - "concernig", "concerning", - "concertas", "concerts", - "concevied", "conceived", - "conciders", "considers", - "concieted", "conceited", - "concieved", "conceived", - "conclusie", "conclusive", - "concsious", "conscious", - "concurret", "concurrent", - "condamned", "condemned", - "condemend", "condemned", - "condemmed", "condemned", - "condemnig", "condemning", - "condenmed", "condemned", - "condesend", "condensed", - "condesned", "condensed", - "condmened", "condemned", - "conection", "connection", - "conenctor", "connector", - "conferene", "conferences", - "confessin", "confession", - "confideny", "confidently", - "confilcts", "conflicts", - "confimred", "confirmed", - "confirmas", "confirms", - "conflcits", "conflicts", - "confrimed", "confirmed", - "congitive", "cognitive", - "conlcuded", "concluded", - "connectes", "connects", - "connectit", "connecticut", - "connectos", "connectors", - "conquerer", "conqueror", - "consdider", "consider", - "consensul", "consensual", - "conserned", "concerned", - "consicous", "conscious", - "considerd", "considered", - "considert", "considerate", - "consisent", "consistent", - "consistes", "consists", - "consolato", "consolation", - "consolide", "consolidate", - "consonent", "consonant", - "constanly", "constantly", - "constanst", "constants", - "constanty", "constantly", - "constasnt", "constants", - "constitue", "constitutes", - "constrait", "constraints", - "construcs", "constructs", - "construde", "construed", - "construst", "constructs", - "constured", "construed", - "consulant", "consultant", - "consultat", "consultant", - "consumate", "consummate", - "contactes", "contacts", - "contactos", "contacts", - "contagios", "contagious", - "containes", "contains", - "containig", "containing", - "containts", "contains", - "contemple", "contemplate", - "contendor", "contender", - "contentas", "contents", - "contentes", "contents", - "contentos", "contents", - "contestas", "contests", - "contestat", "contestants", - "contestes", "contests", - "contextes", "contexts", - "contextos", "contexts", - "contianer", "container", - "contibute", "contribute", - "contigent", "contingent", - "continant", "continental", - "continens", "continents", - "continous", "continuous", - "continuos", "continuous", - "continute", "continue", - "contiunal", "continual", - "contracto", "contraction", - "contribue", "contribute", - "contribuo", "contributor", - "controlas", "controls", - "controled", "controlled", - "controles", "controls", - "controlls", "controls", - "convenant", "covenant", - "convencen", "convenience", - "conveniet", "convenient", - "conversie", "converse", - "conversin", "conversions", - "convertie", "convertible", - "convertis", "converts", - "cooldwons", "cooldowns", - "coordinar", "coordinator", - "copenhagn", "copenhagen", - "coprorate", "corporate", - "copywrite", "copyright", - "corcodile", "crocodile", - "corparate", "corporate", - "corproate", "corporate", - "correclty", "correctly", - "correctin", "correction", - "correlato", "correlation", - "corridoor", "corridor", - "corruptin", "corruption", - "corssfire", "crossfire", - "corsshair", "crosshair", - "corsspost", "crosspost", - "coruching", "crouching", - "cosemtics", "cosmetics", - "costumise", "costumes", - "counciles", "councils", - "councills", "councils", - "councilos", "councils", - "countains", "contains", - "counteres", "counters", - "countires", "countries", - "courching", "crouching", - "courtesey", "courtesy", - "courtesty", "courtesy", - "coururier", "courier", - "coutnered", "countered", - "crapenter", "carpenter", - "creativey", "creatively", - "creedence", "credence", - "crhistmas", "christmas", - "cricketts", "crickets", - "criminaly", "criminally", - "critereon", "criterion", - "criterias", "criteria", - "criticaly", "critically", - "criticies", "criticise", - "criticisn", "criticising", - "critisice", "criticise", - "critisicm", "criticism", - "critising", "criticising", - "critisism", "criticism", - "critisize", "criticise", - "critizing", "criticizing", - "crosshiar", "crosshair", - "crossifre", "crossfire", - "crticised", "criticised", - "crusdaers", "crusaders", - "crutchers", "crutches", - "crystalls", "crystals", - "crystalus", "crystals", - "crystalys", "crystals", - "cuacasian", "caucasian", - "cuasality", "causality", - "culitvate", "cultivate", - "culturaly", "culturally", - "culturels", "cultures", - "curiostiy", "curiosity", - "curisoity", "curiosity", - "currenlty", "currently", - "curriculm", "curriculum", - "cursaders", "crusaders", - "custcenes", "cutscenes", - "cutsceens", "cutscenes", - "cutscence", "cutscene", - "cutsences", "cutscenes", - "cyclinder", "cylinder", - "cyclistes", "cyclists", - "cylindres", "cylinders", - "cynicisim", "cynicism", - "dahsboard", "dashboard", - "dalmation", "dalmatian", - "dangeroys", "dangerously", - "dashbaord", "dashboard", - "daugthers", "daughters", - "davantage", "advantage", - "deadlfits", "deadlifts", - "deadpoool", "deadpool", - "dealershp", "dealerships", - "deathmath", "deathmatch", - "decalring", "declaring", - "decendant", "descendant", - "decendent", "descendant", - "decipting", "depicting", - "deciption", "depiction", - "decisivie", "decisive", - "declarase", "declares", - "declarees", "declares", - "decoratie", "decorative", - "decoratin", "decorations", - "decpetion", "deception", - "decpetive", "deceptive", - "decribing", "describing", - "decsended", "descended", - "deductibe", "deductible", - "defaintly", "defiantly", - "defaltion", "deflation", - "defanitly", "defiantly", - "defeintly", "definetly", - "defendent", "defendant", - "defensese", "defenseless", - "defianlty", "defiantly", - "deficeint", "deficient", - "deficieny", "deficiency", - "deficites", "deficits", - "definance", "defiance", - "definatey", "definately", - "definatly", "definitely", - "definetly", "definitely", - "definetyl", "definetly", - "definilty", "definitly", - "definitie", "definitive", - "definitin", "definitions", - "definitly", "definitely", - "definiton", "definition", - "definitve", "definite", - "definityl", "definitly", - "definltey", "definetly", - "defintaly", "defiantly", - "defintily", "definitly", - "defintion", "definition", - "defintley", "definetly", - "defitenly", "definetly", - "defitinly", "definitly", - "defitnaly", "defiantly", - "defitnely", "definetly", - "deflectin", "deflection", - "defnietly", "definetly", - "degeneret", "degenerate", - "degradato", "degradation", - "degradead", "degraded", - "degrassie", "degrasse", - "degrassse", "degrasse", - "deifnetly", "definetly", - "deifnitly", "definitly", - "deisgners", "designers", - "delagates", "delegates", - "delcaring", "declaring", - "delcining", "declining", - "delegatie", "delegate", - "delerious", "delirious", - "delfation", "deflation", - "deliveres", "delivers", - "deliverys", "delivers", - "delpoying", "deploying", - "demcorats", "democrats", - "deminsion", "dimension", - "democarcy", "democracy", - "democract", "democrat", - "demonstre", "demonstrate", - "denominar", "denominator", - "dentistas", "dentists", - "dentistes", "dentists", - "deomcrats", "democrats", - "deopsited", "deposited", - "deparment", "department", - "departmet", "departments", - "depciting", "depicting", - "depcition", "depiction", - "depection", "deception", - "depedency", "dependency", - "depicitng", "depicting", - "depiciton", "depiction", - "deplyoing", "deploying", - "depoisted", "deposited", - "depolying", "deploying", - "depositas", "deposits", - "deposites", "deposits", - "depositis", "deposits", - "depositos", "deposits", - "depostied", "deposited", - "depressie", "depressive", - "depressin", "depression", - "depserate", "desperate", - "depsoited", "deposited", - "descirbes", "describes", - "descision", "decision", - "desginers", "designers", - "desgining", "designing", - "desicions", "decisions", - "designade", "designated", - "designato", "designation", - "desingage", "disengage", - "desingers", "designers", - "desinging", "designing", - "desktopos", "desktops", - "desparate", "desperate", - "desperato", "desperation", - "despoited", "deposited", - "desriable", "desirable", - "dessigned", "designed", - "destinato", "destination", - "destoryed", "destroyed", - "destoryer", "destroyer", - "destroyes", "destroys", - "destructo", "destruction", - "destryoed", "destroyed", - "destryoer", "destroyer", - "desuction", "seduction", - "detailled", "detailed", - "detatched", "detached", - "detectivs", "detectives", - "deteriate", "deteriorate", - "determing", "determining", - "determins", "determines", - "developrs", "develops", - "diabetees", "diabetes", - "diablical", "diabolical", - "diagonaal", "diagonal", - "diagonsed", "diagnosed", - "diagonsis", "diagnosis", - "diagramas", "diagrams", - "diagramms", "diagrams", - "dialectes", "dialects", - "dialectos", "dialects", - "diarrheoa", "diarrhea", - "diasbling", "disabling", - "dichomoty", "dichotomy", - "dicovered", "discovered", - "dictaters", "dictates", - "dictionay", "dictionary", - "difenitly", "definitly", - "diferrent", "different", - "differene", "differences", - "differens", "differences", - "differeny", "differently", - "difficuly", "difficulty", - "diffucult", "difficult", - "dificulty", "difficulty", - "diganosed", "diagnosed", - "diganosis", "diagnosis", - "dimenions", "dimensions", - "dimention", "dimension", - "dimesnion", "dimension", - "diminishs", "diminishes", - "dinasours", "dinosaurs", - "dinosuars", "dinosaurs", - "dinsoaurs", "dinosaurs", - "dionsaurs", "dinosaurs", - "diphtongs", "diphthongs", - "dipthongs", "diphthongs", - "direcotry", "directory", - "directoty", "directory", - "directroy", "directory", - "disaprity", "disparity", - "disastros", "disastrous", - "disatrous", "disastrous", - "disbaling", "disabling", - "disbeleif", "disbelief", - "disbelife", "disbelief", - "disciplen", "disciplines", - "disclamer", "disclaimer", - "disclosue", "disclosure", - "disconnet", "disconnect", - "discosure", "discourse", - "discoverd", "discovered", - "discovere", "discoveries", - "discredid", "discredited", - "discribed", "described", - "discribes", "describes", - "discussin", "discussion", - "diserable", "desirable", - "disgarees", "disagrees", - "disgiused", "disguised", - "disgusied", "disguised", - "disgustes", "disgusts", - "disgustos", "disgusts", - "disgustus", "disgusts", - "dishonesy", "dishonesty", - "dishonord", "dishonored", - "disicples", "disciples", - "dismantel", "dismantle", - "dismisals", "dismissal", - "disnegage", "disengage", - "dispairty", "disparity", - "dispalyed", "displayed", - "dispartiy", "disparity", - "dispenced", "dispensed", - "dispeners", "dispenser", - "displayes", "displays", - "disruptin", "disruption", - "dissapear", "disappear", - "dissarray", "disarray", - "dissmisal", "dismissal", - "disspiate", "dissipate", - "distincte", "distinctive", - "distrcits", "districts", - "distribue", "distributed", - "distrubed", "disturbed", - "distrupts", "distrust", - "disturben", "disturbance", - "diverisfy", "diversify", - "diveristy", "diversity", - "diverstiy", "diversity", - "dividened", "dividend", - "divinitiy", "divinity", - "doccument", "document", - "docrtines", "doctrines", - "docuhebag", "douchebag", - "dogdammit", "goddammit", - "dogfather", "godfather", - "dolphines", "dolphins", - "domecracy", "democracy", - "domecrats", "democrats", - "domiantes", "dominates", - "dominatin", "domination", - "dominaton", "domination", - "dominiant", "dominant", - "donwgrade", "downgrade", - "donwloads", "downloads", - "donwsides", "downsides", - "donwvoted", "downvoted", - "donwvotes", "downvotes", - "doublelit", "doublelift", - "doucehbag", "douchebag", - "downgarde", "downgrade", - "downlaods", "downloads", - "downloaad", "download", - "downovted", "downvoted", - "dravadian", "dravidian", - "drummless", "drumless", - "dsyphoria", "dysphoria", - "dsytopian", "dystopian", - "duaghters", "daughters", - "duplicats", "duplicates", - "durabiliy", "durability", - "dynamicus", "dynamics", - "dypshoria", "dysphoria", - "dyshporia", "dysphoria", - "dysoptian", "dystopian", - "dysphoira", "dysphoria", - "dysphroia", "dysphoria", - "dyspohria", "dysphoria", - "dyspotian", "dystopian", - "dystopain", "dystopian", - "dystpoian", "dystopian", - "eachohter", "eachother", - "eachotehr", "eachother", - "eachtoher", "eachother", - "earpluggs", "earplugs", - "earthboud", "earthbound", - "eastwoood", "eastwood", - "eastwoord", "eastwood", - "ecclectic", "eclectic", - "ecomonics", "economics", - "edficient", "deficient", - "effecient", "efficient", - "efficeint", "efficient", - "efficency", "efficiency", - "efficieny", "efficiency", - "effulence", "effluence", - "egalitara", "egalitarian", - "egpytians", "egyptians", - "egyptains", "egyptians", - "egytpians", "egyptians", - "ehtically", "ethically", - "ehtnicity", "ethnicity", - "eighteeen", "eighteen", - "eitquette", "etiquette", - "ejacualte", "ejaculate", - "electivre", "elective", - "electorns", "electrons", - "electrial", "electrical", - "electricy", "electricity", - "electroal", "electoral", - "elementay", "elementary", - "elepahnts", "elephants", - "eliminase", "eliminates", - "eliminato", "elimination", - "ellignton", "ellington", - "ellingotn", "ellington", - "eloquenty", "eloquently", - "elsehwere", "elsewhere", - "emapthize", "empathize", - "embarress", "embarrassed", - "emmisarry", "emissary", - "emmisions", "emissions", - "emmitting", "emitting", - "empahsize", "emphasize", - "emperical", "empirical", - "emphaised", "emphasised", - "emphatize", "empathize", - "emphazise", "emphasize", - "emphysyma", "emphysema", - "empitness", "emptiness", - "employeer", "employer", - "employeur", "employer", - "empolyees", "employees", - "emtpiness", "emptiness", - "emualtion", "emulation", - "enahncing", "enhancing", - "enchantig", "enchanting", - "enclousre", "enclosure", - "enclsoure", "enclosure", - "encolsure", "enclosure", - "encompase", "encompass", - "encounted", "encountered", - "encrpyted", "encrypted", - "encrytped", "encrypted", - "encyrpted", "encrypted", - "endangerd", "endangered", - "enevlopes", "envelopes", - "enforcees", "enforces", - "engagemet", "engagements", - "engagment", "engagement", - "engieneer", "engineer", - "engineeer", "engineer", - "engineerd", "engineered", - "enhacning", "enhancing", - "enhanceds", "enhances", - "enligthen", "enlighten", - "enourmous", "enormous", - "ensconsed", "ensconced", - "enthicity", "ethnicity", - "enthusiam", "enthusiasm", - "enthusiat", "enthusiast", - "entirelly", "entirely", - "entitlied", "entitled", - "enveloppe", "envelope", - "epidsodes", "episodes", - "epilepsey", "epilepsy", - "epiphanny", "epiphany", - "episonage", "espionage", - "epscially", "specially", - "epsionage", "espionage", - "eqautions", "equations", - "equialent", "equivalent", - "equivalet", "equivalents", - "ermington", "remington", - "erroenous", "erroneous", - "escalatie", "escalate", - "escalatin", "escalation", - "esitmated", "estimated", - "esitmates", "estimates", - "eslewhere", "elsewhere", - "especialy", "especially", - "espianoge", "espionage", - "espinoage", "espionage", - "espoinage", "espionage", - "esponiage", "espionage", - "espressso", "espresso", - "essencial", "essential", - "essentail", "essential", - "essentias", "essentials", - "essentual", "essential", - "essesital", "essential", - "estiamted", "estimated", - "estiamtes", "estimates", - "estimatin", "estimation", - "ethcially", "ethically", - "ethincity", "ethnicity", - "ethnicaly", "ethnically", - "ethniticy", "ethnicity", - "etmyology", "etymology", - "euclidian", "euclidean", - "euorpeans", "europeans", - "euphoriac", "euphoric", - "euphorica", "euphoria", - "europenas", "europeans", - "europians", "europeans", - "eurpoeans", "europeans", - "evangelia", "evangelical", - "evelation", "elevation", - "evenlopes", "envelopes", - "eventally", "eventually", - "eventualy", "eventually", - "everthing", "everything", - "evertyime", "everytime", - "everwhere", "everywhere", - "everyoens", "everyones", - "everyteim", "everytime", - "everytiem", "everytime", - "everyting", "everything", - "eveyrones", "everyones", - "evreyones", "everyones", - "evreytime", "everytime", - "exagerate", "exaggerate", - "exahusted", "exhausted", - "exapnsive", "expansive", - "exauhsted", "exhausted", - "excahnges", "exchanges", - "excecuted", "executed", - "excecutes", "executes", - "excellant", "excellent", - "excercise", "exercise", - "excerised", "exercised", - "excerises", "exercises", - "exceuting", "executing", - "exchnages", "exchanges", - "exclsuive", "exclusive", - "excludeds", "excludes", - "exclusivs", "exclusives", - "exclusivy", "exclusivity", - "excpetion", "exception", - "exculding", "excluding", - "exculsion", "exclusion", - "exculsive", "exclusive", - "execising", "exercising", - "execption", "exception", - "exectuing", "executing", - "exectuion", "execution", - "exectuive", "executive", - "executabe", "executable", - "exepmtion", "exemption", - "exerbated", "exacerbated", - "exercices", "exercise", - "exerciese", "exercises", - "exercizes", "exercise", - "exersices", "exercises", - "exhasuted", "exhausted", - "exhaustin", "exhaustion", - "exhibites", "exhibits", - "exhibitin", "exhibition", - "exhibtion", "exhibition", - "exhuasted", "exhausted", - "exibition", "exhibition", - "existance", "existence", - "existenta", "existential", - "existince", "existence", - "existnace", "existance", - "exlcuding", "excluding", - "exlcusion", "exclusion", - "exlcusive", "exclusive", - "exlpoding", "exploding", - "exlporers", "explorers", - "exlposion", "explosion", - "exonorate", "exonerate", - "expalined", "explained", - "expanisve", "expansive", - "expatriot", "expatriate", - "expectany", "expectancy", - "expection", "exception", - "expemtion", "exemption", - "experimet", "experiments", - "explaines", "explains", - "explainig", "explaining", - "explaning", "explaining", - "expliciet", "explicit", - "explicity", "explicitly", - "explictly", "explicitly", - "explioted", "exploited", - "explodeds", "explodes", - "exploites", "exploits", - "explorare", "explorer", - "explotied", "exploited", - "expolding", "exploding", - "expolited", "exploited", - "expolsion", "explosion", - "expolsive", "explosive", - "expressie", "expressive", - "expressin", "expression", - "exsitance", "existance", - "extention", "extension", - "exteriour", "exterior", - "extermely", "extremely", - "extermism", "extremism", - "extermist", "extremist", - "externaly", "externally", - "extractin", "extraction", - "extrapole", "extrapolate", - "extreemly", "extremely", - "extremers", "extremes", - "extremley", "extremely", - "extrotion", "extortion", - "eyeballls", "eyeballs", - "eyebrowes", "eyebrows", - "eyebrowns", "eyebrows", - "eyesahdow", "eyeshadow", - "eyeshdaow", "eyeshadow", - "eygptians", "egyptians", - "eytmology", "etymology", - "faceboook", "facebook", - "faciliate", "facilitate", - "facilites", "facilities", - "facilitiy", "facility", - "facinated", "fascinated", - "facutally", "factually", - "familiair", "familiar", - "familiare", "familiarize", - "familiary", "familiarity", - "familliar", "familiar", - "fanaticas", "fanatics", - "fanaticos", "fanatics", - "fanaticus", "fanatics", - "fanatsies", "fantasies", - "fanatsize", "fantasize", - "fandation", "foundation", - "fanservie", "fanservice", - "fantazise", "fantasize", - "farenheit", "fahrenheit", - "fascistes", "fascists", - "fashoined", "fashioned", - "favorties", "favorites", - "favoruite", "favourite", - "favourits", "favourites", - "favourtie", "favourite", - "fedreally", "federally", - "feminisim", "feminism", - "feminsits", "feminists", - "femminist", "feminist", - "fesitvals", "festivals", - "fetishers", "fetishes", - "fightings", "fighting", - "filetimes", "lifetimes", - "filiament", "filament", - "filmmakes", "filmmakers", - "fingernal", "fingernails", - "flashligt", "flashlight", - "flavorade", "flavored", - "flavoures", "flavours", - "flavourus", "flavours", - "flawlessy", "flawlessly", - "flexibily", "flexibility", - "fluctaute", "fluctuate", - "flucutate", "fluctuate", - "fluttersy", "fluttershy", - "follwoing", "following", - "foootball", "football", - "forcefuly", "forcefully", - "forcibley", "forcibly", - "forciblly", "forcibly", - "forearmes", "forearms", - "foreginer", "foreigner", - "foregroud", "foreground", - "foreinger", "foreigner", - "forgeiner", "foreigner", - "forgiener", "foreigner", - "forgivens", "forgiveness", - "foriegner", "foreigner", - "forigener", "foreigner", - "formerlly", "formerly", - "formualte", "formulate", - "formulaes", "formulas", - "formulars", "formulas", - "forntline", "frontline", - "forntpage", "frontpage", - "fortuante", "fortunate", - "forumlate", "formulate", - "foundatin", "foundations", - "fourteeen", "fourteen", - "fractales", "fractals", - "fractalis", "fractals", - "fractalus", "fractals", - "fragement", "fragment", - "fragmenot", "fragment", - "franchies", "franchise", - "francsico", "francisco", - "franscico", "francisco", - "frecklers", "freckles", - "freedomes", "freedoms", - "freestlye", "freestyle", - "freesytle", "freestyle", - "fremented", "fermented", - "freqeuncy", "frequency", - "frequence", "frequencies", - "friendlis", "friendlies", - "frightend", "frightened", - "fromation", "formation", - "frontapge", "frontpage", - "frontilne", "frontline", - "frustrato", "frustration", - "frustrats", "frustrates", - "fucntions", "functions", - "fullscren", "fullscreen", - "funcitons", "functions", - "functiong", "functioning", - "functtion", "function", - "furiosuly", "furiously", - "furiuosly", "furiously", - "futuristc", "futuristic", - "gagnsters", "gangsters", - "galations", "galatians", - "galdiator", "gladiator", - "gallaxies", "galaxies", - "garanteed", "guaranteed", - "garantees", "guarantees", - "garuantee", "guarantee", - "gatherins", "gatherings", - "gauntelts", "gauntlets", - "gauntlent", "gauntlet", - "gaurantee", "guarantee", - "gaurentee", "guarantee", - "genatilia", "genitalia", - "geneology", "genealogy", - "generalbs", "generals", - "generalis", "generals", - "generaste", "generates", - "generatie", "generate", - "generatin", "generations", - "generatos", "generators", - "genitaila", "genitalia", - "genitales", "genitals", - "genitalis", "genitals", - "geniunely", "genuinely", - "gentailia", "genitalia", - "gentelmen", "gentlemen", - "gentialia", "genitalia", - "genuienly", "genuinely", - "genuinley", "genuinely", - "geogrpahy", "geography", - "germaniac", "germanic", - "geurrilla", "guerrilla", - "gimmickey", "gimmicky", - "gimmickly", "gimmicky", - "girlfried", "girlfriend", - "goalkeepr", "goalkeeper", - "godafther", "godfather", - "godspeeed", "godspeed", - "goegraphy", "geography", - "goldfisch", "goldfish", - "goosebums", "goosebumps", - "gorvement", "goverment", - "govemrent", "goverment", - "govenment", "government", - "goverance", "governance", - "goveremnt", "goverment", - "goverment", "government", - "govermetn", "goverment", - "govermnet", "goverment", - "governmet", "governments", - "govorment", "government", - "govrement", "goverment", - "gracefull", "graceful", - "gracefuly", "gracefully", - "graduaste", "graduates", - "graduatin", "graduation", - "grahpical", "graphical", - "grativate", "gravitate", - "graudally", "gradually", - "graudates", "graduates", - "greenalnd", "greenland", - "grenaders", "grenades", - "grpahical", "graphical", - "guadulupe", "guadalupe", - "guaranted", "guaranteed", - "guarantes", "guarantees", - "guardains", "guardians", - "guarentee", "guarantee", - "guaridans", "guardians", - "guatamala", "guatemala", - "guerrilas", "guerrillas", - "guradians", "guardians", - "guranteed", "guaranteed", - "gurantees", "guarantees", - "gutiarist", "guitarist", - "habsbourg", "habsburg", - "hairstlye", "hairstyle", - "hairsytle", "hairstyle", - "halarious", "hilarious", - "hambruger", "hamburger", - "hamburges", "hamburgers", - "hamphsire", "hampshire", - "hamsphire", "hampshire", - "handboook", "handbook", - "handedley", "handedly", - "handedlly", "handedly", - "handicape", "handicapped", - "hapmshire", "hampshire", - "happended", "happened", - "happenend", "happened", - "happenned", "happened", - "harasment", "harassment", - "hardenend", "hardened", - "hardwoord", "hardwood", - "haristyle", "hairstyle", - "harrasing", "harassing", - "harrassed", "harassed", - "harrasses", "harassed", - "hdinsight", "hindsight", - "headahces", "headaches", - "headhpone", "headphone", - "headshoot", "headshot", - "healither", "healthier", - "healtheir", "healthier", - "healthiet", "healthiest", - "healthire", "healthier", - "heapdhone", "headphone", - "hedgehoog", "hedgehog", - "hedgehorg", "hedgehog", - "heightend", "heightened", - "heirarchy", "hierarchy", - "herculase", "hercules", - "herculeas", "hercules", - "herculees", "hercules", - "herculeus", "hercules", - "heriarchy", "hierarchy", - "hesistant", "hesitant", - "hesistate", "hesitate", - "hesitatin", "hesitation", - "hieroglph", "hieroglyph", - "highschol", "highschool", - "hindisght", "hindsight", - "hindrence", "hindrance", - "hinduisim", "hinduism", - "hinduisum", "hinduism", - "hipsanics", "hispanics", - "hirearchy", "hierarchy", - "hirsohima", "hiroshima", - "hispancis", "hispanics", - "hitboxers", "hitboxes", - "hoepfully", "hopefully", - "holocasut", "holocaust", - "holocuast", "holocaust", - "homeonwer", "homeowner", - "homeopaty", "homeopathy", - "homewolrd", "homeworld", - "homewoner", "homeowner", - "homewrold", "homeworld", - "homogenes", "homogeneous", - "homosexul", "homosexuals", - "hopelessy", "hopelessly", - "hopsitals", "hospitals", - "horishima", "hiroshima", - "horizones", "horizons", - "horizonts", "horizons", - "horrendos", "horrendous", - "horribley", "horribly", - "horriblly", "horribly", - "horrifing", "horrifying", - "hositlity", "hostility", - "hospitaly", "hospitality", - "hosptials", "hospitals", - "hourgalss", "hourglass", - "hourlgass", "hourglass", - "househols", "households", - "humanitis", "humanities", - "humanoind", "humanoid", - "humiditiy", "humidity", - "hunagrian", "hungarian", - "hurriance", "hurricane", - "hurricans", "hurricanes", - "husbandos", "husbands", - "hydraluic", "hydraulic", - "hydropile", "hydrophile", - "hydropobe", "hydrophobe", - "hydrualic", "hydraulic", - "hyopcrite", "hypocrite", - "hypcorite", "hypocrite", - "hyperoble", "hyperbole", - "hypocracy", "hypocrisy", - "hypocrasy", "hypocrisy", - "hypocricy", "hypocrisy", - "hypocriet", "hypocrite", - "hypocrits", "hypocrites", - "hyporcite", "hypocrite", - "hypothess", "hypotheses", - "hyprocisy", "hypocrisy", - "hyprocite", "hypocrite", - "hyrdation", "hydration", - "hyrdaulic", "hydraulic", - "hysterica", "hysteria", - "hysteriia", "hysteria", - "iburpofen", "ibuprofen", - "icleandic", "icelandic", - "icongnito", "incognito", - "idealisim", "idealism", - "idealistc", "idealistic", - "identifiy", "identify", - "ideologis", "ideologies", - "ignornace", "ignorance", - "illegales", "illegals", - "illegalis", "illegals", - "illegalls", "illegals", - "illnesess", "illnesses", - "illsuions", "illusions", - "illuminai", "illuminati", - "imagenary", "imaginary", - "imaginery", "imaginary", - "imaptient", "impatient", - "imigrated", "emigrated", - "immensley", "immensely", - "immerisve", "immersive", - "immesnely", "immensely", - "immidiate", "immediate", - "immigrato", "immigration", - "immitated", "imitated", - "immitator", "imitator", - "immobilie", "immobile", - "immobille", "immobile", - "immobilze", "immobile", - "immortaly", "immortality", - "immserive", "immersive", - "impaitent", "impatient", - "imparital", "impartial", - "impedence", "impedance", - "implantes", "implants", - "implicati", "implicit", - "impliciet", "implicit", - "implicity", "implicitly", - "impliment", "implement", - "implusive", "impulsive", - "importamt", "important", - "importend", "imported", - "imporving", "improving", - "impossibe", "impossible", - "imprefect", "imperfect", - "impressin", "impressions", - "imprioned", "imprisoned", - "improbabe", "improbable", - "impulisve", "impulsive", - "impuslive", "impulsive", - "imrpoving", "improving", - "inadequet", "inadequate", - "inadquate", "inadequate", - "inaugures", "inaugurates", - "inbalance", "imbalance", - "inbeetwen", "inbetween", - "inbetween", "between", - "inbewteen", "inbetween", - "incarnato", "incarnation", - "incgonito", "incognito", - "inclinato", "inclination", - "includeds", "includes", - "incoginto", "incognito", - "incongito", "incognito", - "incorpore", "incorporate", - "incpetion", "inception", - "incredibe", "incredible", - "incrediby", "incredibly", - "inculding", "including", - "incunabla", "incunabula", - "indicaste", "indicates", - "indicatie", "indicative", - "indicence", "incidence", - "indicents", "incidents", - "indigenos", "indigenous", - "indirecty", "indirectly", - "indisious", "insidious", - "individul", "individual", - "individus", "individuals", - "indoensia", "indonesia", - "indoneisa", "indonesia", - "indutrial", "industrial", - "inersting", "inserting", - "inexpense", "inexpensive", - "infallibe", "infallible", - "inferioir", "inferior", - "inferiour", "inferior", - "infestato", "infestation", - "infiltrar", "infiltrator", - "infinitey", "infinity", - "infinitie", "infinite", - "infinitiy", "infinity", - "infinitly", "infinity", - "inflatabe", "inflatable", - "influense", "influences", - "influenta", "influential", - "informate", "informative", - "infraread", "infrared", - "ingeniuty", "ingenuity", - "ingeunity", "ingenuity", - "ingocnito", "incognito", - "ingorance", "ignorance", - "inguenity", "ingenuity", - "inhabitat", "inhabitants", - "inheirted", "inherited", - "inhertied", "inherited", - "initailly", "initially", - "initalese", "initialese", - "initaling", "initialing", - "initalise", "initialise", - "initalism", "initialism", - "initalize", "initialize", - "initalled", "initialled", - "initation", "initiation", - "initiales", "initials", - "initiatie", "initiatives", - "initiatin", "initiation", - "initiatve", "initiate", - "injustics", "injustices", - "inlcuding", "including", - "inmigrant", "immigrant", - "innoucous", "innocuous", - "innovatin", "innovations", - "innovatve", "innovate", - "inpection", "inception", - "inpending", "impending", - "inproving", "improving", - "inpsector", "inspector", - "inpsiring", "inspiring", - "inquisito", "inquisition", - "inquisitr", "inquisitor", - "inresting", "inserting", - "insanelly", "insanely", - "insepctor", "inspector", - "insidiuos", "insidious", - "insipring", "inspiring", - "insluated", "insulated", - "inspectin", "inspection", - "instabilt", "instability", - "installes", "installs", - "installus", "installs", - "instering", "inserting", - "insticnts", "instincts", - "institude", "instituted", - "instituto", "institution", - "insualted", "insulated", - "insurence", "insurance", - "insurgeny", "insurgency", - "integirty", "integrity", - "integraal", "integral", - "integrade", "integrated", - "integrato", "integration", - "intenisty", "intensity", - "intensley", "intensely", - "interacte", "interactive", - "interents", "internets", - "interesat", "interest", - "interesst", "interests", - "interewbs", "interwebs", - "interfase", "interfaces", - "interfeer", "interfere", - "interfers", "interferes", - "intergate", "integrate", - "intergity", "integrity", - "interiour", "interior", - "internest", "internets", - "interpert", "interpret", - "interprut", "interrupt", - "interrups", "interrupts", - "interstae", "interstate", - "interveen", "intervene", - "intervied", "interviewed", - "intervier", "interviewer", - "intervies", "interviews", - "intesnely", "intensely", - "intesnity", "intensity", - "intestins", "intestines", - "inticrate", "intricate", - "intimidad", "intimidated", - "intircate", "intricate", - "intiution", "intuition", - "intiutive", "intuitive", - "intorduce", "introduce", - "intorvert", "introvert", - "intracite", "intricate", - "intrduced", "introduced", - "intregity", "integrity", - "intrenets", "internets", - "intrepret", "interpret", - "intrerupt", "interrupt", - "intrewebs", "interwebs", - "intrinisc", "intrinsic", - "intrisinc", "intrinsic", - "intrisnic", "intrinsic", - "intriuged", "intrigued", - "introdued", "introduced", - "introduse", "introduces", - "introvers", "introverts", - "intruiged", "intrigued", - "intrument", "instrument", - "inutition", "intuition", - "inutitive", "intuitive", - "invaderas", "invaders", - "invalidas", "invalidates", - "inventios", "inventions", - "investige", "investigate", - "investmet", "investments", - "invincibe", "invincible", - "invloving", "involving", - "invovling", "involving", - "ipubrofen", "ibuprofen", - "iranianos", "iranians", - "irelevent", "irrelevant", - "ironicaly", "ironically", - "irritatie", "irritate", - "irritatin", "irritation", - "isalmists", "islamists", - "isalnders", "islanders", - "islamiskt", "islamist", - "islamsits", "islamists", - "islmaists", "islamists", - "isntaller", "installer", - "isntances", "instances", - "isntantly", "instantly", - "israelies", "israelis", - "israelits", "israelis", - "italianas", "italians", - "italianos", "italians", - "jailbrake", "jailbreak", - "jalibreak", "jailbreak", - "jamaicain", "jamaican", - "jersualem", "jerusalem", - "jeruselam", "jerusalem", - "jeruslaem", "jerusalem", - "journalis", "journals", - "judegment", "judgement", - "judgemant", "judgemental", - "judisuary", "judiciary", - "jugdement", "judgement", - "juggernat", "juggernaut", - "juvenille", "juvenile", - "keneysian", "keynesian", - "kentuckey", "kentucky", - "kenyesian", "keynesian", - "keybaords", "keyboards", - "keyensian", "keynesian", - "keyesnian", "keynesian", - "keynseian", "keynesian", - "keysenian", "keynesian", - "kilometes", "kilometers", - "kindapped", "kidnapped", - "kncokback", "knockback", - "knoweldge", "knowledge", - "knowlegde", "knowledge", - "konckback", "knockback", - "kryptonie", "kryptonite", - "labirynth", "labyrinth", - "laboratoy", "laboratory", - "laboreres", "laborers", - "labratory", "laboratory", - "labriynth", "labyrinth", - "labryinth", "labyrinth", - "labyrnith", "labyrinth", - "landscaps", "landscapes", - "landscspe", "landscapes", - "langauges", "languages", - "languague", "language", - "lanuchers", "launchers", - "lanugages", "languages", - "larington", "arlington", - "latitudie", "latitude", - "lattitude", "latitude", - "laucnhers", "launchers", - "laucnhing", "launching", - "launchign", "launching", - "laybrinth", "labyrinth", - "lebanesse", "lebanese", - "leceister", "leicester", - "leciester", "leicester", - "legitmate", "legitimate", - "legnedary", "legendary", - "lesbianas", "lesbians", - "lesbianus", "lesbians", - "letivicus", "leviticus", - "leutenant", "lieutenant", - "levaithan", "leviathan", - "levellign", "levelling", - "levetated", "levitated", - "levetates", "levitates", - "levicitus", "leviticus", - "levleling", "levelling", - "lfiesteal", "lifesteal", - "liberales", "liberals", - "liberalim", "liberalism", - "liberalis", "liberals", - "liberatin", "liberation", - "libraires", "libraries", - "liecester", "leicester", - "lieuenant", "lieutenant", - "lieutenat", "lieutenant", - "lifespawn", "lifespan", - "lifestlye", "lifestyle", - "lighnting", "lightning", - "lightnign", "lightning", - "ligthning", "lightning", - "ligthroom", "lightroom", - "lingerine", "lingerie", - "lispticks", "lipsticks", - "listenend", "listened", - "literarly", "literary", - "literarry", "literary", - "literatre", "literate", - "literatue", "literate", - "literture", "literature", - "lithaunia", "lithuania", - "lithuaina", "lithuania", - "lithuiana", "lithuania", - "lithunaia", "lithuania", - "litigatin", "litigation", - "lituhania", "lithuania", - "liveprool", "liverpool", - "livestrem", "livestream", - "lobbysits", "lobbyists", - "lockscren", "lockscreen", - "logisitcs", "logistics", - "logsitics", "logistics", - "loiusiana", "louisiana", - "lollipoop", "lollipop", - "louisvile", "louisville", - "luanchers", "launchers", - "luanching", "launching", - "lubicrant", "lubricant", - "lubircant", "lubricant", - "ludcrious", "ludicrous", - "ludricous", "ludicrous", - "lunaticos", "lunatics", - "lunaticus", "lunatics", - "macaronni", "macaroni", - "maestries", "masteries", - "magainzes", "magazines", - "magensium", "magnesium", - "magincian", "magician", - "magintude", "magnitude", - "magneisum", "magnesium", - "magnesuim", "magnesium", - "magnifine", "magnificent", - "mainfesto", "manifesto", - "mainfests", "manifests", - "mainstrem", "mainstream", - "maintaing", "maintaining", - "maintance", "maintenance", - "maintians", "maintains", - "mairjuana", "marijuana", - "malasyian", "malaysian", - "malayisan", "malaysian", - "malaysain", "malaysian", - "maletonin", "melatonin", - "maltesian", "maltese", - "malyasian", "malaysian", - "managable", "manageable", - "managment", "management", - "mandarian", "mandarin", - "mandarijn", "mandarin", - "mandarion", "mandarin", - "maneouvre", "manoeuvre", - "maneuveur", "maneuver", - "maneveurs", "maneuvers", - "manfiesto", "manifesto", - "manfiests", "manifests", - "mangesium", "magnesium", - "mangitude", "magnitude", - "manouvers", "maneuvers", - "mantained", "maintained", - "manuevers", "maneuvers", - "maraudeur", "marauder", - "marevlous", "marvelous", - "margarent", "margaret", - "margarite", "margaret", - "marginaal", "marginal", - "marginaly", "marginally", - "marijauna", "marijuana", - "marineras", "mariners", - "marineris", "mariners", - "marineros", "mariners", - "marjiuana", "marijuana", - "marjority", "majority", - "marmelade", "marmalade", - "marrtyred", "martyred", - "massagens", "massages", - "massivley", "massively", - "masteires", "masteries", - "mastereis", "masteries", - "masterise", "masteries", - "mastermid", "mastermind", - "mastieres", "masteries", - "masturbae", "masturbated", - "materiaal", "material", - "matierals", "materials", - "mattreses", "mattress", - "mayalsian", "malaysian", - "maylasian", "malaysian", - "mccarthey", "mccarthy", - "mecahnics", "mechanics", - "mecernary", "mercenary", - "mechancis", "mechanics", - "mechanims", "mechanism", - "mechaninc", "mechanic", - "mechansim", "mechanism", - "medicince", "medicine", - "mediciney", "mediciny", - "meditatie", "meditate", - "meditatin", "meditation", - "megathred", "megathread", - "melanotin", "melatonin", - "melborune", "melbourne", - "melbounre", "melbourne", - "membrance", "membrane", - "menstraul", "menstrual", - "menstural", "menstrual", - "mensutral", "menstrual", - "mentiones", "mentions", - "mercanery", "mercenary", - "merhcants", "merchants", - "messagers", "messages", - "messanger", "messenger", - "metabloic", "metabolic", - "metalurgy", "metallurgy", - "methaphor", "metaphor", - "methapors", "metaphors", - "methodoly", "methodology", - "metropols", "metropolis", - "mexicanas", "mexicans", - "mexicants", "mexicans", - "mexicanus", "mexicans", - "michellle", "michelle", - "micorwave", "microwave", - "micoscopy", "microscopy", - "microphen", "microphone", - "migrantes", "migrants", - "migrianes", "migraines", - "milawukee", "milwaukee", - "milennium", "millennium", - "milestons", "milestones", - "militians", "militias", - "millenial", "millennial", - "millenian", "millennia", - "millenium", "millennium", - "millionar", "millionaire", - "millitary", "military", - "miluwakee", "milwaukee", - "milwakuee", "milwaukee", - "milwuakee", "milwaukee", - "mindcarck", "mindcrack", - "mindlessy", "mindlessly", - "minerales", "minerals", - "minisclue", "miniscule", - "miniscuel", "miniscule", - "ministery", "ministry", - "minisucle", "miniscule", - "minitaure", "miniature", - "minituare", "miniature", - "minneosta", "minnesota", - "minnestoa", "minnesota", - "minsicule", "miniscule", - "minsiters", "ministers", - "minstries", "ministries", - "miraculos", "miraculous", - "mircowave", "microwave", - "mirrorred", "mirrored", - "miserabel", "miserable", - "mispelled", "misspelled", - "misreable", "miserable", - "misreably", "miserably", - "missisipi", "mississippi", - "missonary", "missionary", - "missourri", "missouri", - "misspelld", "misspelled", - "mobilitiy", "mobility", - "moderatey", "moderately", - "moderatin", "moderation", - "modifires", "modifiers", - "moelcules", "molecules", - "moleclues", "molecules", - "molestare", "molester", - "molestato", "molestation", - "molesterd", "molested", - "monestary", "monastery", - "monitores", "monitors", - "monolgoue", "monologue", - "monolight", "moonlight", - "monolouge", "monologue", - "monopolis", "monopolies", - "monopolly", "monopoly", - "monopoloy", "monopoly", - "monserrat", "montserrat", - "monstorus", "monstrous", - "monstruos", "monstrous", - "montanous", "mountainous", - "monumnets", "monuments", - "moratlity", "mortality", - "morbidley", "morbidly", - "morgatges", "mortgages", - "morgtages", "mortgages", - "morisette", "morissette", - "mormonsim", "mormonism", - "morroccan", "moroccan", - "mortailty", "mortality", - "mosquitto", "mosquito", - "motivatie", "motivate", - "motivatin", "motivations", - "motorcyce", "motorcycles", - "motorolja", "motorola", - "motoroloa", "motorola", - "moustahce", "moustache", - "movepseed", "movespeed", - "mozzarela", "mozzarella", - "mucisians", "musicians", - "mulitated", "mutilated", - "mulitples", "multiples", - "multipled", "multiplied", - "multplies", "multiples", - "murdererd", "murdered", - "muscially", "musically", - "muscician", "musician", - "musculair", "muscular", - "mushrooom", "mushroom", - "musicains", "musicians", - "mutatiohn", "mutation", - "mutialted", "mutilated", - "mutilatin", "mutilation", - "mutliated", "mutilated", - "mutliples", "multiples", - "mutlitude", "multitude", - "mysterise", "mysteries", - "mysterous", "mysterious", - "nacrotics", "narcotics", - "naferious", "nefarious", - "nahsville", "nashville", - "narcissim", "narcissism", - "narcissit", "narcissist", - "narcissts", "narcissist", - "narctoics", "narcotics", - "nasvhille", "nashville", - "nationaal", "national", - "nationaly", "nationally", - "nativelly", "natively", - "natrually", "naturally", - "navigatie", "navigate", - "navigatin", "navigation", - "neccesary", "necessary", - "necessite", "necessities", - "neckbears", "neckbeards", - "neckbread", "neckbeard", - "nedlessly", "endlessly", - "needlessy", "needlessly", - "negiotate", "negotiate", - "negociate", "negotiate", - "negoitate", "negotiate", - "neigbhour", "neighbour", - "neigbours", "neighbours", - "neighboor", "neighbor", - "nessecary", "necessary", - "newcaslte", "newcastle", - "newcastel", "newcastle", - "nieghbour", "neighbour", - "nightfa;;", "nightfall", - "nightlcub", "nightclub", - "nigthclub", "nightclub", - "nigthlife", "nightlife", - "nigthmare", "nightmare", - "nihilisim", "nihilism", - "ninteenth", "nineteenth", - "nominatie", "nominate", - "nominatin", "nomination", - "noninital", "noninitial", - "norhteast", "northeast", - "norhtwest", "northwest", - "normanday", "normandy", - "northeren", "northern", - "norwegain", "norwegian", - "norwiegan", "norwegian", - "nostaglia", "nostalgia", - "nostaglic", "nostalgic", - "nostaliga", "nostalgia", - "nostaligc", "nostalgic", - "nostlagia", "nostalgia", - "nostlagic", "nostalgic", - "nostriles", "nostrils", - "nostrills", "nostrils", - "notacible", "noticable", - "notciable", "noticable", - "noteboook", "notebook", - "noteriety", "notoriety", - "noteworty", "noteworthy", - "noticable", "noticeable", - "noticably", "noticeably", - "noticalbe", "noticable", - "noticeing", "noticing", - "noticible", "noticeable", - "notoroius", "notorious", - "novermber", "november", - "nullabour", "nullarbor", - "numberous", "numerous", - "numercial", "numerical", - "numerious", "numerous", - "nuremburg", "nuremberg", - "nurtients", "nutrients", - "nutirents", "nutrients", - "nutreints", "nutrients", - "nutritent", "nutrient", - "nutritian", "nutritional", - "nutritios", "nutritious", - "obediance", "obedience", - "obeidence", "obedience", - "obersvant", "observant", - "obersvers", "observers", - "obesssion", "obsession", - "obiedence", "obedience", - "obivously", "obviously", - "objectivs", "objectives", - "objectivy", "objectivity", - "obscruity", "obscurity", - "obscuirty", "obscurity", - "observare", "observer", - "observerd", "observed", - "obssesion", "obsession", - "obssesive", "obsessive", - "obssessed", "obsessed", - "obstruced", "obstructed", - "obsucrity", "obscurity", - "obtainabe", "obtainable", - "obviosuly", "obviously", - "obvioulsy", "obviously", - "obvisouly", "obviously", - "obvoiusly", "obviously", - "ocasional", "occasional", - "ocasioned", "occasioned", - "ocassions", "occasions", - "occaisons", "occasions", - "occassion", "occasion", - "occurance", "occurrence", - "occurence", "occurrence", - "octohedra", "octahedra", - "ocuntries", "countries", - "ocurrance", "occurrence", - "ocurrence", "occurrence", - "offcially", "officially", - "offically", "officially", - "officialy", "officially", - "offpsring", "offspring", - "offspirng", "offspring", - "offsrping", "offspring", - "ogliarchy", "oligarchy", - "oilgarchy", "oligarchy", - "oligrachy", "oligarchy", - "ommitting", "omitting", - "onlsaught", "onslaught", - "onsalught", "onslaught", - "onslaugth", "onslaught", - "onsluaght", "onslaught", - "onwership", "ownership", - "opiniones", "opinions", - "oposition", "opposition", - "opponenet", "opponent", - "opposiste", "opposites", - "opposties", "opposites", - "oppressin", "oppression", - "opression", "oppression", - "opressive", "oppressive", - "opthalmic", "ophthalmic", - "optimisim", "optimism", - "optimistc", "optimistic", - "optinally", "optimally", - "oragnered", "orangered", - "oragnised", "organised", - "oragnizer", "organizer", - "orcehstra", "orchestra", - "ordinarly", "ordinary", - "orgainsed", "organised", - "orgainzer", "organizer", - "organered", "orangered", - "organices", "organise", - "organisim", "organism", - "organiske", "organise", - "organiste", "organise", - "organites", "organise", - "organizms", "organism", - "organsied", "organised", - "organsims", "organisms", - "organzier", "organizer", - "orginally", "originally", - "orgnaised", "organised", - "orhcestra", "orchestra", - "orientato", "orientation", - "origanaly", "originally", - "originall", "original", - "originalt", "originality", - "originaly", "originally", - "origintea", "originate", - "origional", "original", - "orignally", "originally", - "orignials", "originals", - "oublisher", "publisher", - "oursleves", "ourselves", - "oustiders", "outsiders", - "oustpoken", "outspoken", - "outisders", "outsiders", - "outnumbed", "outnumbered", - "outpalyed", "outplayed", - "outperfom", "outperform", - "outpsoken", "outspoken", - "outrageos", "outrageous", - "outskirst", "outskirts", - "outskrits", "outskirts", - "outwieghs", "outweighs", - "overbaord", "overboard", - "overclcok", "overclock", - "overdirve", "overdrive", - "overhpyed", "overhyped", - "overhwelm", "overwhelm", - "overlcock", "overclock", - "overloard", "overload", - "overpaied", "overpaid", - "overpowed", "overpowered", - "overriden", "overridden", - "overwhlem", "overwhelm", - "overwirte", "overwrite", - "overwtach", "overwatch", - "overyhped", "overhyped", - "owernship", "ownership", - "pacificts", "pacifist", - "packageid", "packaged", - "pactivity", "captivity", - "painkills", "painkillers", - "paitently", "patiently", - "paitience", "patience", - "pakistain", "pakistani", - "pakistian", "pakistani", - "pakistnai", "pakistani", - "paksitani", "pakistani", - "paladines", "paladins", - "paladinos", "paladins", - "palestein", "palestine", - "palestina", "palestinian", - "palistian", "palestinian", - "paltforms", "platforms", - "palystyle", "playstyle", - "pancakers", "pancakes", - "pantomine", "pantomime", - "paradimes", "paradise", - "paragraps", "paragraphs", - "paragrpah", "paragraph", - "paralells", "parallels", - "paralelly", "parallelly", - "paralisys", "paralysis", - "parallely", "parallelly", - "paralzyed", "paralyzed", - "paramedis", "paramedics", - "paramters", "parameters", - "paranoica", "paranoia", - "paranoida", "paranoia", - "parasties", "parasites", - "paraylsis", "paralysis", - "paraylzed", "paralyzed", - "parellels", "parallels", - "paricular", "particular", - "parisitic", "parasitic", - "paritally", "partially", - "parliment", "parliament", - "parmesaen", "parmesan", - "parntered", "partnered", - "parrallel", "parallel", - "partchett", "pratchett", - "parterned", "partnered", - "participe", "participate", - "partiotic", "patriotic", - "partisain", "partisan", - "pasengers", "passengers", - "passagens", "passages", - "passagers", "passages", - "passerbys", "passersby", - "passiones", "passions", - "passivley", "passively", - "passowrds", "passwords", - "pateintly", "patiently", - "paticular", "particular", - "patinetly", "patiently", - "patriarca", "patriarchal", - "patriarcy", "patriarchy", - "patriotas", "patriots", - "patriotes", "patriots", - "patroitic", "patriotic", - "pattented", "patented", - "pavillion", "pavilion", - "pbulisher", "publisher", - "peacefuly", "peacefully", - "pedohpile", "pedophile", - "pedophila", "pedophilia", - "pedophils", "pedophiles", - "peircings", "piercings", - "penalites", "penalties", - "penatlies", "penalties", - "penduluum", "pendulum", - "penerator", "penetrator", - "penguines", "penguins", - "penguings", "penguins", - "penguinos", "penguins", - "peninsual", "peninsula", - "peninusla", "peninsula", - "penisnula", "peninsula", - "penisular", "peninsular", - "pennisula", "peninsula", - "pensinula", "peninsula", - "pentagoon", "pentagon", - "peodphile", "pedophile", - "pepperino", "pepperoni", - "peppermit", "peppermint", - "percepted", "perceived", - "percevied", "perceived", - "percieved", "perceived", - "percisely", "precisely", - "percision", "precision", - "percursor", "precursor", - "perdators", "predators", - "peremiter", "perimeter", - "perfeclty", "perfectly", - "perfomers", "performers", - "performas", "performs", - "perfromer", "performer", - "pericings", "piercings", - "perimetre", "perimeter", - "peristent", "persistent", - "periwinke", "periwinkle", - "permanant", "permanent", - "permature", "premature", - "permenant", "permanent", - "permieter", "perimeter", - "permissie", "permissible", - "permissin", "permissions", - "permisson", "permission", - "pernament", "permanent", - "perorders", "preorders", - "perpetrar", "perpetrator", - "perpetuae", "perpetuate", - "perpetuas", "perpetuates", - "persauded", "persuaded", - "perscribe", "prescribe", - "perserved", "preserved", - "persistes", "persists", - "personaes", "personas", - "personaly", "personally", - "personell", "personnel", - "personhod", "personhood", - "persuated", "persuade", - "pertended", "pretended", - "pertoleum", "petroleum", - "perusaded", "persuaded", - "pervertes", "perverse", - "pesticids", "pesticides", - "petroluem", "petroleum", - "phemonena", "phenomena", - "phenemona", "phenomena", - "phenonema", "phenomena", - "phillipse", "phillies", - "philosopy", "philosophy", - "philosphy", "philosophy", - "phonecian", "phoenecian", - "phonemena", "phenomena", - "phongraph", "phonograph", - "photograh", "photograph", - "phsyician", "physician", - "phsyicist", "physicist", - "phycisian", "physician", - "phycisist", "physicist", - "physicaly", "physically", - "physicits", "physicist", - "physisict", "physicist", - "piblisher", "publisher", - "picthfork", "pitchfork", - "pinetrest", "pinterest", - "placeheld", "placeholder", - "placemens", "placements", - "plaestine", "palestine", - "plagarism", "plagiarism", - "planatery", "planetary", - "planation", "plantation", - "planteary", "planetary", - "plasticas", "plastics", - "plasticos", "plastics", - "plasticus", "plastics", - "platfroms", "platforms", - "platofrms", "platforms", - "plausable", "plausible", - "plausbile", "plausible", - "plausibel", "plausible", - "playgroud", "playground", - "playright", "playwright", - "playstlye", "playstyle", - "playwrite", "playwright", - "plebicite", "plebiscite", - "plethoria", "plethora", - "ploarized", "polarized", - "pointeres", "pointers", - "polinator", "pollinator", - "polishees", "polishes", - "politelly", "politely", - "politican", "politician", - "politicas", "politics", - "politicin", "politician", - "politicus", "politics", - "polygammy", "polygamy", - "populatin", "populations", - "poralized", "polarized", - "porcelian", "porcelain", - "porcelina", "porcelain", - "poreclain", "porcelain", - "porftolio", "portfolio", - "porgramme", "programme", - "portfoilo", "portfolio", - "portoflio", "portfolio", - "portraing", "portraying", - "portrayes", "portrays", - "portrayls", "portrays", - "portriats", "portraits", - "portugese", "portuguese", - "portugues", "portuguese", - "posessing", "possessing", - "posession", "possession", - "positiond", "positioned", - "positiong", "positioning", - "positionl", "positional", - "positiviy", "positivity", - "possesess", "possesses", - "possesing", "possessing", - "possesion", "possession", - "possessin", "possessions", - "possibile", "possible", - "possibily", "possibility", - "possibley", "possibly", - "possiblly", "possibly", - "possition", "position", - "powderade", "powdered", - "powerfull", "powerful", - "pracitcal", "practical", - "practhett", "pratchett", - "practicly", "practically", - "practives", "practise", - "pragamtic", "pragmatic", - "preadtors", "predators", - "precedeed", "preceded", - "preceeded", "preceded", - "preceived", "perceived", - "preciesly", "precisely", - "precisley", "precisely", - "precurors", "precursor", - "precurosr", "precursor", - "precurser", "precursor", - "predatobr", "predator", - "predictie", "predictive", - "predictin", "prediction", - "predjuice", "prejudice", - "predujice", "prejudice", - "prefectly", "perfectly", - "preferens", "preferences", - "prefering", "preferring", - "preformer", "performer", - "pregnance", "pregnancies", - "preimeter", "perimeter", - "prejiduce", "prejudice", - "prejucide", "prejudice", - "premanent", "permanent", - "premeired", "premiered", - "preorderd", "preordered", - "preparato", "preparation", - "prepatory", "preparatory", - "presentas", "presents", - "presentes", "presents", - "presicely", "precisely", - "presicion", "precision", - "presideny", "presidency", - "prestigiu", "prestigious", - "prestigue", "prestige", - "presuaded", "persuaded", - "pretendas", "pretends", - "pretensje", "pretense", - "pretinent", "pertinent", - "prevelant", "prevalent", - "preventin", "prevention", - "previvous", "previous", - "priesthod", "priesthood", - "priestood", "priesthood", - "primaires", "primaries", - "primairly", "primarily", - "primarliy", "primarily", - "primative", "primitive", - "primordal", "primordial", - "princesas", "princess", - "princeses", "princess", - "princesss", "princesses", - "principas", "principals", - "principly", "principally", - "prinicple", "principle", - "prioritie", "prioritize", - "prioritse", "priorities", - "privalege", "privilege", - "privelege", "privilege", - "privelige", "privilege", - "privilage", "privilege", - "privilegs", "privileges", - "privledge", "privilege", - "probabily", "probability", - "probablly", "probably", - "problemas", "problems", - "procative", "proactive", - "procedger", "procedure", - "proceding", "proceeding", - "proceedes", "proceeds", - "procelain", "porcelain", - "procesess", "processes", - "processer", "processor", - "processos", "processors", - "proclamed", "proclaimed", - "procotols", "protocols", - "prodecure", "procedure", - "productie", "productive", - "productin", "productions", - "productos", "products", - "profesion", "profusion", - "professer", "professor", - "professin", "professions", - "proffesed", "professed", - "proffesor", "professor", - "progessed", "progressed", - "programas", "programs", - "programem", "programme", - "programes", "programs", - "programms", "programs", - "progresso", "progression", - "progresss", "progresses", - "projectie", "projectile", - "projectin", "projection", - "prominant", "prominent", - "promiscus", "promiscuous", - "promotted", "promoted", - "pronomial", "pronominal", - "pronouced", "pronounced", - "pronounds", "pronouns", - "pronounes", "pronouns", - "propagana", "propaganda", - "properies", "properties", - "propertly", "property", - "propeties", "properties", - "prophesie", "prophecies", - "prophetes", "prophets", - "propogate", "propagate", - "proposels", "proposes", - "proposito", "proposition", - "propperly", "properly", - "propsects", "prospects", - "prosperos", "prosperous", - "prostitue", "prostitute", - "protectes", "protects", - "protectie", "protective", - "protectos", "protectors", - "proteinas", "proteins", - "proteines", "proteins", - "protestas", "protests", - "protestat", "protestant", - "protestes", "protests", - "protestos", "protests", - "protfolio", "portfolio", - "protocool", "protocol", - "prototpye", "prototype", - "prototyps", "prototypes", - "protraits", "portraits", - "protrayal", "portrayal", - "protrayed", "portrayed", - "provicial", "provincial", - "provincie", "province", - "provisios", "provisions", - "pruchased", "purchased", - "pruchases", "purchases", - "prugatory", "purgatory", - "pruposely", "purposely", - "pscyhotic", "psychotic", - "pseudonyn", "pseudonym", - "pshycosis", "psychosis", - "pshycotic", "psychotic", - "psycology", "psychology", - "psycothic", "psychotic", - "ptichfork", "pitchfork", - "pubilsher", "publisher", - "publiaher", "publisher", - "publicaly", "publicly", - "publicani", "publication", - "publicher", "publisher", - "publiclly", "publicly", - "publihser", "publisher", - "publisehr", "publisher", - "publisger", "publisher", - "publishor", "publisher", - "publishre", "publisher", - "publsiher", "publisher", - "publusher", "publisher", - "puchasing", "purchasing", - "punishmet", "punishments", - "puplisher", "publisher", - "puragtory", "purgatory", - "purcahsed", "purchased", - "purcahses", "purchases", - "purhcased", "purchased", - "purposley", "purposely", - "pursuaded", "persuaded", - "pursuades", "persuades", - "pyramidas", "pyramids", - "pyramides", "pyramids", - "pyschosis", "psychosis", - "pyschotic", "psychotic", - "qaulifies", "qualifies", - "quantifiy", "quantify", - "quantitiy", "quantity", - "quantitty", "quantity", - "quartlery", "quarterly", - "queations", "equations", - "queenland", "queensland", - "questiond", "questioned", - "questiong", "questioning", - "questionn", "questioning", - "radicalis", "radicals", - "rapsberry", "raspberry", - "rasbperry", "raspberry", - "rationaly", "rationally", - "reactiony", "reactionary", - "realisitc", "realistic", - "realoding", "reloading", - "realsitic", "realistic", - "realtable", "relatable", - "realtions", "relations", - "realtives", "relatives", - "reamining", "remaining", - "reaplying", "replaying", - "reasearch", "research", - "reaveling", "revealing", - "rebellios", "rebellious", - "rebllions", "rebellions", - "recations", "creations", - "reccomend", "recommend", - "reccuring", "recurring", - "receeding", "receding", - "recepient", "recipient", - "recgonise", "recognise", - "recgonize", "recognize", - "recidents", "residents", - "recievers", "receivers", - "recieving", "receiving", - "recipiant", "recipient", - "reciproce", "reciprocate", - "reclutant", "reluctant", - "recoginse", "recognise", - "recoginze", "recognize", - "recomends", "recommends", - "recommens", "recommends", - "reconenct", "reconnect", - "recongise", "recognise", - "recongize", "recognize", - "reconicle", "reconcile", - "reconized", "recognized", - "recordare", "recorder", - "recoveres", "recovers", - "recoverys", "recovers", - "recpetive", "receptive", - "recpetors", "receptors", - "recquired", "required", - "recreatie", "recreate", - "recruitcs", "recruits", - "recruites", "recruits", - "recrusion", "recursion", - "recrutied", "recruited", - "recrutier", "recruiter", - "rectangel", "rectangle", - "rectanlge", "rectangle", - "recuiting", "recruiting", - "recurison", "recursion", - "recurited", "recruited", - "recuriter", "recruiter", - "recusrion", "recursion", - "redeemeed", "redeemed", - "redundany", "redundancy", - "redundent", "redundant", - "reedeming", "redeeming", - "refelcted", "reflected", - "refereces", "references", - "refereees", "referees", - "refereers", "referees", - "referemce", "reference", - "referencs", "references", - "referense", "references", - "referiang", "referring", - "referinng", "refering", - "refernces", "references", - "refernece", "reference", - "refershed", "refreshed", - "refersher", "refresher", - "reffering", "referring", - "reflectie", "reflective", - "refrehser", "refresher", - "refrences", "references", - "refromist", "reformist", - "regionaal", "regional", - "registerd", "registered", - "registery", "registry", - "regualrly", "regularly", - "regualtor", "regulator", - "regulaion", "regulation", - "regulalry", "regularly", - "regulares", "regulars", - "regularis", "regulars", - "regulatin", "regulations", - "regurally", "regularly", - "reigining", "reigning", - "reinstale", "reinstalled", - "reisntall", "reinstall", - "reknowned", "renowned", - "relaoding", "reloading", - "relatiate", "retaliate", - "relativiy", "relativity", - "relativly", "relatively", - "relativno", "relation", - "relavence", "relevance", - "relcutant", "reluctant", - "relevence", "relevance", - "relfected", "reflected", - "reliabily", "reliability", - "reliabley", "reliably", - "religeous", "religious", - "remasterd", "remastered", - "rememberd", "remembered", - "rememebrs", "remembers", - "remianing", "remaining", - "remignton", "remington", - "remingotn", "remington", - "remmebers", "remembers", - "remotelly", "remotely", - "rendevous", "rendezvous", - "rendezous", "rendezvous", - "renedered", "rende", - "renegated", "renegade", - "rennovate", "renovate", - "repalying", "replaying", - "repblican", "republican", - "repeatedy", "repeatedly", - "repective", "receptive", - "repeition", "repetition", - "repentent", "repentant", - "rephrasse", "rephrase", - "replusive", "repulsive", - "reportedy", "reportedly", - "represend", "represented", - "repressin", "repression", - "reprtoire", "repertoire", - "repsonded", "responded", - "reptition", "repetition", - "reptuable", "reputable", - "repubican", "republican", - "republian", "republican", - "repulican", "republican", - "repulisve", "repulsive", - "repuslive", "repulsive", - "resaurant", "restaurant", - "researchs", "researchers", - "resembels", "resembles", - "reserverd", "reserved", - "resintall", "reinstall", - "resistane", "resistances", - "resistans", "resistances", - "resistend", "resisted", - "resistent", "resistant", - "resmebles", "resembles", - "resolutin", "resolutions", - "resoruces", "resources", - "respectes", "respects", - "respectos", "respects", - "responces", "response", - "respondas", "responds", - "respondis", "responds", - "respondus", "responds", - "respoting", "reposting", - "ressemble", "resemble", - "ressurect", "resurrect", - "restarant", "restaurant", - "resticted", "restricted", - "restircts", "restricts", - "restorani", "restoration", - "restraind", "restrained", - "restraing", "restraining", - "restraunt", "restraint", - "restriant", "restraint", - "restricte", "restrictive", - "resturant", "restaurant", - "retailate", "retaliate", - "retalaite", "retaliate", - "retaliers", "retailers", - "reteriver", "retriever", - "retirever", "retriever", - "retrevier", "retriever", - "reuptable", "reputable", - "reveiwers", "reviewers", - "revelaing", "revealing", - "revelance", "relevance", - "revolutin", "revolutions", - "rewachted", "rewatched", - "rewatchig", "rewatching", - "rferences", "references", - "ridiculos", "ridiculous", - "ridiculue", "ridicule", - "ridiculus", "ridiculous", - "righetous", "righteous", - "rightfuly", "rightfully", - "rightoues", "righteous", - "rigourous", "rigorous", - "rigtheous", "righteous", - "rilvaries", "rivalries", - "rininging", "ringing", - "rivarlies", "rivalries", - "rivlaries", "rivalries", - "roaylties", "royalties", - "roboticus", "robotics", - "roganisms", "organisms", - "royalites", "royalties", - "roylaties", "royalties", - "ruleboook", "rulebook", - "sacarstic", "sarcastic", - "sacntuary", "sanctuary", - "sacrafice", "sacrifice", - "sacrastic", "sarcastic", - "sacrifise", "sacrifices", - "salughter", "slaughter", - "samckdown", "smackdown", - "sanctiond", "sanctioned", - "sancturay", "sanctuary", - "sancutary", "sanctuary", - "sandstrom", "sandstorm", - "sandwhich", "sandwich", - "sanhedrim", "sanhedrin", - "santcuary", "sanctuary", - "santioned", "sanctioned", - "sapphirre", "sapphire", - "sastified", "satisfied", - "sastifies", "satisfies", - "satelites", "satellites", - "saterdays", "saturdays", - "satisifed", "satisfied", - "satisifes", "satisfies", - "satrudays", "saturdays", - "satsified", "satisfied", - "satsifies", "satisfies", - "sattelite", "satellite", - "saxaphone", "saxophone", - "scaepgoat", "scapegoat", - "scaleable", "scalable", - "scandales", "scandals", - "scandalos", "scandals", - "scantuary", "sanctuary", - "scaricity", "scarcity", - "scarifice", "sacrifice", - "scarmbled", "scrambled", - "scartched", "scratched", - "scartches", "scratches", - "scavanged", "scavenged", - "sceintist", "scientist", - "scholalry", "scholarly", - "sciencers", "sciences", - "scientfic", "scientific", - "scientifc", "scientific", - "scientits", "scientist", - "sclupture", "sculpture", - "scnearios", "scenarios", - "scoreboad", "scoreboard", - "scottisch", "scottish", - "scracthed", "scratched", - "scracthes", "scratches", - "scrambeld", "scrambled", - "scrathces", "scratches", - "scrollade", "scrolled", - "scrutiney", "scrutiny", - "scrutinty", "scrutiny", - "sculpteur", "sculpture", - "sculputre", "sculpture", - "scultpure", "sculpture", - "scuplture", "sculpture", - "scuptures", "sculptures", - "seamlessy", "seamlessly", - "searchign", "searching", - "sebasitan", "sebastian", - "sebastain", "sebastian", - "sebsatian", "sebastian", - "secceeded", "seceded", - "secertary", "secretary", - "secratary", "secretary", - "secratery", "secretary", - "secretery", "secretary", - "secretley", "secretly", - "sednetary", "sedentary", - "seduciton", "seduction", - "semanitcs", "semantics", - "semestres", "semesters", - "semnatics", "semantics", - "semseters", "semesters", - "senatores", "senators", - "sendetary", "sedentary", - "sensitivy", "sensitivity", - "sentimant", "sentimental", - "sepcially", "specially", - "seperated", "separated", - "seperates", "separates", - "seperator", "separator", - "septmeber", "september", - "seraching", "searching", - "seriosuly", "seriously", - "serioulsy", "seriously", - "seriuosly", "seriously", - "servantes", "servants", - "settlment", "settlement", - "sexualizd", "sexualized", - "sexuallly", "sexually", - "shadasloo", "shadaloo", - "shaprness", "sharpness", - "sharpenss", "sharpness", - "shawhsank", "shawshank", - "sheilding", "shielding", - "shephered", "shepherd", - "shileding", "shielding", - "shitstrom", "shitstorm", - "shletered", "sheltered", - "shoudlers", "shoulders", - "shouldnot", "shouldnt", - "shperical", "spherical", - "shwashank", "shawshank", - "sidebaord", "sideboard", - "siganture", "signature", - "signapore", "singapore", - "signitory", "signatory", - "silhouete", "silhouette", - "similiair", "similiar", - "simliarly", "similarly", - "simluated", "simulated", - "simluator", "simulator", - "simplifiy", "simplify", - "simualted", "simulated", - "simualtor", "simulator", - "simulatie", "simulate", - "simulatin", "simulation", - "sinagpore", "singapore", - "sincerley", "sincerely", - "singature", "signature", - "singpaore", "singapore", - "singulair", "singular", - "singulary", "singularity", - "skateboad", "skateboard", - "skeletaal", "skeletal", - "skepitcal", "skeptical", - "skepticim", "skepticism", - "sketpical", "skeptical", - "slaughted", "slaughtered", - "slaugther", "slaughter", - "slipperly", "slippery", - "sluaghter", "slaughter", - "smackdwon", "smackdown", - "smealting", "smelting", - "smeesters", "semesters", - "snadstorm", "sandstorm", - "snippetts", "snippets", - "snowfalke", "snowflake", - "snowflaek", "snowflake", - "snowlfake", "snowflake", - "snwoballs", "snowballs", - "snythesis", "synthesis", - "snythetic", "synthetic", - "socailism", "socialism", - "socailist", "socialist", - "socailize", "socialize", - "soceities", "societies", - "socialini", "socializing", - "socialiss", "socialists", - "socialsim", "socialism", - "socieites", "societies", - "socilaism", "socialism", - "socilaist", "socialist", - "sociopati", "sociopathic", - "sociopats", "sociopaths", - "socratees", "socrates", - "socrateks", "socrates", - "soemthing", "something", - "sohpomore", "sophomore", - "soliliquy", "soliloquy", - "somehting", "something", - "someoneis", "someones", - "somethign", "something", - "somethins", "somethings", - "sopohmore", "sophomore", - "sotryline", "storyline", - "soundtrak", "soundtrack", - "sountrack", "soundtrack", - "sourthern", "southern", - "souvenier", "souvenir", - "soveregin", "sovereign", - "sovereing", "sovereign", - "soveriegn", "sovereign", - "spacegoat", "scapegoat", - "spagehtti", "spaghetti", - "spahgetti", "spaghetti", - "sparlking", "sparkling", - "spartants", "spartans", - "specailly", "specially", - "specailty", "specialty", - "specality", "specialty", - "speciales", "specials", - "specialis", "specials", - "speciatly", "specialty", - "specifing", "specifying", - "specimine", "specimen", - "spectrail", "spectral", - "specualte", "speculate", - "speechers", "speeches", - "spehrical", "spherical", - "speically", "specially", - "spetember", "september", - "sphagetti", "spaghetti", - "splatooon", "splatoon", - "sponosred", "sponsored", - "sponsered", "sponsored", - "sponsores", "sponsors", - "spontanes", "spontaneous", - "sponzored", "sponsored", - "sprakling", "sparkling", - "sprinkeld", "sprinkled", - "squadroon", "squadron", - "squirrles", "squirrels", - "squirrtle", "squirrel", - "squrriels", "squirrels", - "srirachia", "sriracha", - "srirachra", "sriracha", - "stabliize", "stabilize", - "stainlees", "stainless", - "startegic", "strategic", - "startlxde", "startled", - "statisitc", "statistic", - "staurdays", "saturdays", - "steadilly", "steadily", - "stealthly", "stealthy", - "stichting", "stitching", - "sticthing", "stitching", - "stimulans", "stimulants", - "stockplie", "stockpile", - "stornegst", "strongest", - "stragetic", "strategic", - "straightn", "straighten", - "strangets", "strangest", - "strategis", "strategies", - "strawbery", "strawberry", - "streamade", "streamed", - "streamare", "streamer", - "streamear", "streamer", - "strechted", "stretched", - "strechtes", "stretches", - "strecthed", "stretched", - "strecthes", "stretches", - "stregnths", "strengths", - "strenghen", "strengthen", - "strengthn", "strengthen", - "strentghs", "strengths", - "stressade", "stressed", - "stressers", "stresses", - "strictist", "strictest", - "stringnet", "stringent", - "stroyline", "storyline", - "structual", "structural", - "structurs", "structures", - "strucutre", "structure", - "struggeld", "struggled", - "struggels", "struggles", - "stryofoam", "styrofoam", - "stuctured", "structured", - "stuggling", "struggling", - "stupitidy", "stupidity", - "sturcture", "structure", - "sturggled", "struggled", - "sturggles", "struggles", - "styrofaom", "styrofoam", - "subarmine", "submarine", - "subculter", "subculture", - "submachne", "submachine", - "subpecies", "subspecies", - "subscirbe", "subscribe", - "subsidary", "subsidiary", - "subsizide", "subsidize", - "subsquent", "subsequent", - "subsrcibe", "subscribe", - "substanse", "substances", - "substanta", "substantial", - "substante", "substantive", - "substarte", "substrate", - "substitue", "substitute", - "substract", "subtract", - "subtances", "substances", - "subtiltes", "subtitles", - "subtitels", "subtitles", - "subtletly", "subtlety", - "subtlties", "subtitles", - "succedded", "succeeded", - "succeedes", "succeeds", - "succesful", "successful", - "succesion", "succession", - "succesive", "successive", - "suceeding", "succeeding", - "sucesfuly", "successfully", - "sucessful", "successful", - "sucession", "succession", - "sucessive", "successive", - "sufferage", "suffrage", - "sufferred", "suffered", - "sufficent", "sufficient", - "suggestes", "suggests", - "suggestie", "suggestive", - "sumbarine", "submarine", - "sumberged", "submerged", - "summenors", "summoners", - "summoenrs", "summoners", - "sunderlad", "sunderland", - "sunglases", "sunglasses", - "superfluu", "superfluous", - "superiour", "superior", - "superisor", "superiors", - "supermare", "supermarket", - "superviso", "supervision", - "suposedly", "supposedly", - "supportes", "supports", - "suppreses", "suppress", - "supressed", "suppressed", - "supresses", "suppresses", - "suprising", "surprising", - "suprizing", "surprising", - "supsicion", "suspicion", - "surounded", "surrounded", - "surprized", "surprised", - "surronded", "surrounded", - "surrouded", "surrounded", - "surrouned", "surround", - "survivers", "survivors", - "survivied", "survived", - "survivour", "survivor", - "susbcribe", "subscribe", - "susbtrate", "substrate", - "susncreen", "sunscreen", - "suspectes", "suspects", - "suspendes", "suspense", - "suspensie", "suspense", - "swastikka", "swastika", - "sweatshit", "sweatshirt", - "sweetheat", "sweetheart", - "switchign", "switching", - "swithcing", "switching", - "swtiching", "switching", - "sydnicate", "syndicate", - "sykwalker", "skywalker", - "sylablles", "syllables", - "syllabels", "syllables", - "symbolsim", "symbolism", - "symettric", "symmetric", - "symmetral", "symmetric", - "symmetria", "symmetrical", - "symoblism", "symbolism", - "sympathie", "sympathize", - "symphoney", "symphony", - "symptomes", "symptoms", - "symptomps", "symptoms", - "synagouge", "synagogue", - "syndacite", "syndicate", - "syndiacte", "syndicate", - "synidcate", "syndicate", - "synonymes", "synonyms", - "synonymis", "synonyms", - "synonymns", "synonyms", - "synonymos", "synonymous", - "synonymus", "synonyms", - "synopsies", "synopsis", - "syntehsis", "synthesis", - "syntehtic", "synthetic", - "syntethic", "synthetic", - "syphyllis", "syphilis", - "syracusae", "syracuse", - "sytrofoam", "styrofoam", - "tablespon", "tablespoon", - "tacticaly", "tactically", - "tanenhill", "tannehill", - "tannheill", "tannehill", - "targetted", "targeted", - "tawainese", "taiwanese", - "tawianese", "taiwanese", - "taxanomic", "taxonomic", - "teamfighs", "teamfights", - "teamfigth", "teamfight", - "teamifght", "teamfight", - "teampseak", "teamspeak", - "teaspooon", "teaspoon", - "techician", "technician", - "techinque", "technique", - "technolgy", "technology", - "teeangers", "teenagers", - "tehtering", "tethering", - "telegrpah", "telegraph", - "televsion", "television", - "temafight", "teamfight", - "tempaltes", "templates", - "temparate", "temperate", - "templaras", "templars", - "templares", "templars", - "temporali", "temporarily", - "tenacitiy", "tenacity", - "tensiones", "tensions", - "tentacels", "tentacles", - "tentacuel", "tentacle", - "tentalces", "tentacles", - "termianls", "terminals", - "terminato", "termination", - "terorrism", "terrorism", - "terorrist", "terrorist", - "terrabyte", "terabyte", - "terribley", "terribly", - "terriblly", "terribly", - "terriroty", "territory", - "terrorits", "terrorist", - "terrorsim", "terrorism", - "tesitcles", "testicles", - "tesitmony", "testimony", - "testicels", "testicles", - "testomony", "testimony", - "texturers", "textures", - "thankfuly", "thankfully", - "thankyoou", "thankyou", - "themselfs", "themselves", - "themselvs", "themselves", - "themslves", "themselves", - "theologia", "theological", - "therafter", "thereafter", - "therefoer", "therefor", - "therefour", "therefor", - "theroists", "theorists", - "thetering", "tethering", - "thirlling", "thrilling", - "thirteeen", "thirteen", - "thoecracy", "theocracy", - "thoerists", "theorists", - "thoroughy", "thoroughly", - "thoughout", "throughout", - "threatend", "threatened", - "throrough", "thorough", - "throughly", "thoroughly", - "througout", "throughout", - "thrusdays", "thursdays", - "thurdsays", "thursdays", - "thursdsay", "thursdays", - "thursters", "thrusters", - "tiawanese", "taiwanese", - "timestmap", "timestamp", - "tirangles", "triangles", - "tocuhdown", "touchdown", - "toghether", "together", - "tolerence", "tolerance", - "tommorrow", "tomorrow", - "torandoes", "tornadoes", - "torchligt", "torchlight", - "torelable", "tolerable", - "toritllas", "tortillas", - "tornaodes", "tornadoes", - "torpeados", "torpedoes", - "torrentas", "torrents", - "torrentes", "torrents", - "tortialls", "tortillas", - "tortillia", "tortilla", - "tortillla", "tortilla", - "tottehnam", "tottenham", - "tottenahm", "tottenham", - "tottneham", "tottenham", - "toturials", "tutorials", - "touchdwon", "touchdown", - "touristas", "tourists", - "touristes", "tourists", - "touristey", "touristy", - "touristly", "touristy", - "touristsy", "touristy", - "tournamet", "tournament", - "toxicitiy", "toxicity", - "trafficed", "trafficked", - "tragicaly", "tragically", - "traileras", "trailers", - "traingles", "triangles", - "trainwrek", "trainwreck", - "traitoris", "traitors", - "traitorus", "traitors", - "tramautic", "traumatic", - "tranlsate", "translate", - "transalte", "translate", - "transcris", "transcripts", - "transcrit", "transcript", - "transferd", "transferred", - "transfere", "transferred", - "transfors", "transforms", - "transfrom", "transform", - "transiten", "transient", - "transitin", "transitions", - "transofrm", "transform", - "transplat", "transplant", - "trasnfers", "transfers", - "trasnform", "transform", - "trasnport", "transport", - "traversie", "traverse", - "travestry", "travesty", - "treasuers", "treasures", - "treasurey", "treasury", - "treatmens", "treatments", - "treausres", "treasures", - "tremendos", "tremendous", - "trhilling", "thrilling", - "trhusters", "thrusters", - "triangels", "triangles", - "trianlges", "triangles", - "tribunaal", "tribunal", - "triguered", "triggered", - "trinagles", "triangles", - "truamatic", "traumatic", - "truthfuly", "truthfully", - "tunrtable", "turntable", - "turnaroud", "turnaround", - "turntabel", "turntable", - "typcially", "typically", - "tyrranies", "tyrannies", - "ubiquitos", "ubiquitous", - "ugprading", "upgrading", - "ukrainain", "ukrainian", - "ukrainias", "ukrainians", - "ukrainina", "ukrainian", - "ukrainisn", "ukrainians", - "ukrianian", "ukrainian", - "ulitmatum", "ultimatum", - "ulteriour", "ulterior", - "umbrellla", "umbrella", - "unaminous", "unanimous", - "unanmious", "unanimous", - "unanswerd", "unanswered", - "unanymous", "unanimous", - "unbannend", "unbanned", - "uncensord", "uncensored", - "uncomited", "uncommitted", - "undercunt", "undercut", - "underdong", "underdog", - "undergard", "undergrad", - "underming", "undermining", - "understad", "understands", - "underwaer", "underwear", - "underware", "underwear", - "undescore", "underscore", - "unforseen", "unforeseen", - "unfortune", "unfortunate", - "unfriendy", "unfriendly", - "unhealhty", "unhealthy", - "unheathly", "unhealthy", - "unhelathy", "unhealthy", - "unicornis", "unicorns", - "unicornus", "unicorns", - "uniformes", "uniforms", - "uninamous", "unanimous", - "unintuive", "unintuitive", - "uniquelly", "uniquely", - "unisntall", "uninstall", - "univerity", "university", - "universse", "universes", - "univesity", "university", - "unnistall", "uninstall", - "unoffical", "unofficial", - "unopenend", "unopened", - "unplayabe", "unplayable", - "unplesant", "unpleasant", - "unpopluar", "unpopular", - "unrankend", "unranked", - "unreliabe", "unreliable", - "unrwitten", "unwritten", - "untrianed", "untrained", - "unusaully", "unusually", - "unuseable", "unusable", - "unusuable", "unusable", - "unvierses", "universes", - "unweildly", "unwieldy", - "unwieldly", "unwieldy", - "unwirtten", "unwritten", - "unworthly", "unworthy", - "upcomming", "upcoming", - "upgarding", "upgrading", - "upgradded", "upgraded", - "uplfiting", "uplifting", - "uplifitng", "uplifting", - "urkainian", "ukrainian", - "utlimatum", "ultimatum", - "vacciante", "vaccinate", - "vaccinato", "vaccination", - "vacciners", "vaccines", - "vacestomy", "vasectomy", - "vaguaries", "vagaries", - "vaibility", "viability", - "vaildated", "validated", - "vairables", "variables", - "valdiated", "validated", - "valentein", "valentine", - "valentien", "valentine", - "valentins", "valentines", - "validitiy", "validity", - "valueable", "valuable", - "vanadlism", "vandalism", - "vandalsim", "vandalism", - "varaibles", "variables", - "varations", "variations", - "variantes", "variants", - "vascetomy", "vasectomy", - "vastecomy", "vasectomy", - "veganisim", "veganism", - "vegetarin", "vegetarians", - "vegitable", "vegetable", - "vehementy", "vehemently", - "veiwpoint", "viewpoint", - "velantine", "valentine", - "vendettta", "vendetta", - "venegance", "vengeance", - "veneuzela", "venezuela", - "venezeula", "venezuela", - "venezulea", "venezuela", - "vengaence", "vengeance", - "vengenace", "vengeance", - "ventilato", "ventilation", - "verbatium", "verbatim", - "verfiying", "verifying", - "verifiyng", "verifying", - "verisions", "revisions", - "versalite", "versatile", - "versatily", "versatility", - "versiones", "versions", - "versitale", "versatile", - "verstaile", "versatile", - "verticaly", "vertically", - "veryifing", "verifying", - "vicotrian", "victorian", - "vicotries", "victories", - "victoires", "victories", - "victorain", "victorian", - "victorina", "victorian", - "victorios", "victorious", - "videogaem", "videogame", - "videogams", "videogames", - "vidoegame", "videogame", - "viewpiont", "viewpoint", - "vigilence", "vigilance", - "vigliante", "vigilante", - "vigourous", "vigorous", - "viligante", "vigilante", - "viloently", "violently", - "vincinity", "vicinity", - "vioalting", "violating", - "violentce", "violence", - "virbation", "vibration", - "virgintiy", "virginity", - "virignity", "virginity", - "virutally", "virtually", - "visibiliy", "visibility", - "vitaminas", "vitamins", - "vitamines", "vitamins", - "vitrually", "virtually", - "vociemail", "voicemail", - "voilating", "violating", - "voilation", "violation", - "voilently", "violently", - "volatiliy", "volatility", - "voleyball", "volleyball", - "volontary", "voluntary", - "volonteer", "volunteer", - "volunatry", "voluntary", - "volunteed", "volunteered", - "vriginity", "virginity", - "wallpapes", "wallpapers", - "warrantly", "warranty", - "warrriors", "warriors", - "wavelengh", "wavelength", - "weakenend", "weakened", - "weakneses", "weakness", - "weaknesss", "weaknesses", - "wealtheir", "wealthier", - "weaponary", "weaponry", - "wedensday", "wednesday", - "wednesdsy", "wednesdays", - "wednessay", "wednesdays", - "wednseday", "wednesday", - "welathier", "wealthier", - "wendesday", "wednesday", - "wesbtrook", "westbrook", - "westernes", "westerners", - "westrbook", "westbrook", - "whereever", "wherever", - "whietlist", "whitelist", - "whilrwind", "whirlwind", - "whilsting", "whistling", - "whipsered", "whispered", - "whislting", "whistling", - "whisperes", "whispers", - "whitelsit", "whitelist", - "whitleist", "whitelist", - "whitsling", "whistling", - "whrilwind", "whirlwind", - "whsipered", "whispered", - "whtielist", "whitelist", - "widespred", "widespread", - "widesread", "widespread", - "windshied", "windshield", - "wintesses", "witnesses", - "wisconisn", "wisconsin", - "wishlisht", "wishlist", - "wishpered", "whispered", - "withdrawl", "withdrawal", - "withelist", "whitelist", - "witnesess", "witnesses", - "wolrdview", "worldview", - "wolrdwide", "worldwide", - "wonderlad", "wonderland", - "wordlview", "worldview", - "wordlwide", "worldwide", - "worhtless", "worthless", - "workfroce", "workforce", - "worldivew", "worldview", - "worldveiw", "worldview", - "worstened", "worsened", - "worthelss", "worthless", - "xenbolade", "xenoblade", - "xenobalde", "xenoblade", - "xenophoby", "xenophobia", - "xeonblade", "xenoblade", - "yementite", "yemenite", - "yorkshrie", "yorkshire", - "yorskhire", "yorkshire", - "yosemitie", "yosemite", - "youngents", "youngest", - "yourselvs", "yourselves", - "zimbabwae", "zimbabwe", - "zionistas", "zionists", - "zionistes", "zionists", - "abandond", "abandoned", - "abdomine", "abdomen", - "abilitiy", "ability", - "abilties", "abilities", - "abondons", "abandons", - "aboslute", "absolute", - "abosrbed", "absorbed", - "abruplty", "abruptly", - "abrutply", "abruptly", - "abscence", "absence", - "absestos", "asbestos", - "absoluts", "absolutes", - "absolvte", "absolve", - "absorbes", "absorbs", - "absoulte", "absolute", - "abstante", "bastante", - "abudance", "abundance", - "abudcted", "abducted", - "abundunt", "abundant", - "aburptly", "abruptly", - "abuseres", "abusers", - "abusrdly", "absurdly", - "academis", "academics", - "accademy", "academy", - "acccused", "accused", - "acceptes", "accepts", - "accidens", "accidents", - "accideny", "accidently", - "accoring", "according", - "accountt", "accountant", - "accpeted", "accepted", - "accuarcy", "accuracy", - "accumule", "accumulate", - "accusato", "accusation", - "accussed", "accused", - "acedamia", "academia", - "acedemic", "academic", - "acheived", "achieved", - "acheives", "achieves", - "achieval", "achievable", - "acnedote", "anecdote", - "acording", "according", - "acornyms", "acronyms", - "acousitc", "acoustic", - "acoutsic", "acoustic", - "acovados", "avocados", - "acquifer", "acquire", - "acquited", "acquitted", - "acquried", "acquired", - "acronmys", "acronyms", - "acronysm", "acronyms", - "acroynms", "acronyms", - "acrynoms", "acronyms", - "acsended", "ascended", - "actaully", "actually", - "activite", "activities", - "activits", "activities", - "activley", "actively", - "actresss", "actresses", - "actualey", "actualy", - "actualiy", "actuality", - "actualky", "actualy", - "actualmy", "actualy", - "actualoy", "actualy", - "actualpy", "actualy", - "actualty", "actualy", - "acutally", "actually", - "acutions", "auctions", - "adaptare", "adapter", - "adbandon", "abandon", - "adbucted", "abducted", - "addictes", "addicts", - "addictin", "addictions", - "addictis", "addictions", - "addional", "additional", - "addopted", "adopted", - "addresed", "addressed", - "adealide", "adelaide", - "adecuate", "adequate", - "adeilade", "adelaide", - "adeladie", "adelaide", - "adeliade", "adelaide", - "adeqaute", "adequate", - "adheisve", "adhesive", - "adhevise", "adhesive", - "adivsors", "advisors", - "admiraal", "admiral", - "adolence", "adolescent", - "adorbale", "adorable", - "adovcacy", "advocacy", - "adpaters", "adapters", - "adquired", "acquired", - "adquires", "acquires", - "adresing", "addressing", - "adressed", "addressed", - "adroable", "adorable", - "adultrey", "adultery", - "adventue", "adventures", - "adventus", "adventures", - "advertis", "adverts", - "advesary", "adversary", - "adviseer", "adviser", - "adviseur", "adviser", - "advocade", "advocated", - "advocats", "advocates", - "advsiors", "advisors", - "aethists", "atheists", - "affaires", "affairs", - "affilate", "affiliate", - "affintiy", "affinity", - "affleunt", "affluent", - "affulent", "affluent", - "afircans", "africans", - "africain", "african", - "afternon", "afternoon", - "againnst", "against", - "agnositc", "agnostic", - "agonstic", "agnostic", - "agravate", "aggravate", - "agreemnt", "agreement", - "agregate", "aggregate", - "agressie", "agressive", - "agressor", "aggressor", - "agrieved", "aggrieved", - "agruable", "arguable", - "agruably", "arguably", - "agrument", "argument", - "ahtletes", "athletes", - "aincents", "ancients", - "airboner", "airborne", - "airbrone", "airborne", - "aircarft", "aircraft", - "airplans", "airplanes", - "airporta", "airports", - "airpsace", "airspace", - "airscape", "airspace", - "akransas", "arkansas", - "alchemey", "alchemy", - "alchohol", "alcohol", - "alcholic", "alcoholic", - "alcoholc", "alcoholics", - "aldutery", "adultery", - "aleniate", "alienate", - "algoritm", "algorithm", - "alimoney", "alimony", - "alirghty", "alrighty", - "allaince", "alliance", - "alledged", "alleged", - "alledges", "alleges", - "allegedy", "allegedly", - "allegely", "allegedly", - "allegric", "allergic", - "allergey", "allergy", - "allianse", "alliances", - "alligned", "aligned", - "allinace", "alliance", - "allopone", "allophone", - "allready", "already", - "almigthy", "almighty", - "alpahbet", "alphabet", - "alrigthy", "alrighty", - "altantic", "atlantic", - "alterato", "alteration", - "alternar", "alternator", - "althetes", "athletes", - "althetic", "athletic", - "altriusm", "altruism", - "altrusim", "altruism", - "alturism", "altruism", - "aluminim", "aluminium", - "alumnium", "aluminum", - "alunimum", "aluminum", - "amatersu", "amateurs", - "amaterus", "amateurs", - "amendmet", "amendments", - "amercian", "american", - "amercias", "americas", - "amernian", "armenian", - "amethsyt", "amethyst", - "ameythst", "amethyst", - "ammended", "amended", - "amnestry", "amnesty", - "amoungst", "amongst", - "amplifiy", "amplify", - "amplifly", "amplify", - "amrchair", "armchair", - "amrenian", "armenian", - "amtheyst", "amethyst", - "analgoue", "analogue", - "analisys", "analysis", - "analitic", "analytic", - "analouge", "analogue", - "analysie", "analyse", - "analysit", "analyst", - "analyste", "analyse", - "analysze", "analyse", - "analzyed", "analyzed", - "anaolgue", "analogue", - "anarchim", "anarchism", - "anaylses", "analyses", - "anaylsis", "analysis", - "anaylsts", "analysts", - "anaylzed", "analyzed", - "ancedote", "anecdote", - "anceints", "ancients", - "ancinets", "ancients", - "andoirds", "androids", - "andorids", "androids", - "andriods", "androids", - "anecdots", "anecdotes", - "anectode", "anecdote", - "anedocte", "anecdote", - "aneroxia", "anorexia", - "aneroxic", "anorexic", - "angostic", "agnostic", - "angrilly", "angrily", - "anicents", "ancients", - "animatie", "animate", - "animatte", "animate", - "anlayses", "analyses", - "annoints", "anoints", - "annouced", "announced", - "annoucne", "announce", - "anntenas", "antennas", - "anoerxia", "anorexia", - "anoerxic", "anorexic", - "anonymos", "anonymous", - "anoreixa", "anorexia", - "anounced", "announced", - "anoxeria", "anorexia", - "anoxeric", "anorexic", - "answeres", "answers", - "antartic", "antarctic", - "antennea", "antenna", - "antennna", "antenna", - "anticipe", "anticipate", - "antiquae", "antique", - "antivirs", "antivirus", - "anwsered", "answered", - "anyhting", "anything", - "anyhwere", "anywhere", - "anyoneis", "anyones", - "anythign", "anything", - "anytying", "anything", - "aparment", "apartment", - "apartmet", "apartments", - "apenines", "apennines", - "aperutre", "aperture", - "aplhabet", "alphabet", - "apologes", "apologise", - "aposltes", "apostles", - "apostels", "apostles", - "appaluse", "applause", - "apparant", "apparent", - "appareal", "apparel", - "appareil", "apparel", - "apperead", "appeared", - "applaued", "applaud", - "appluase", "applause", - "appology", "apology", - "apporach", "approach", - "appraoch", "approach", - "apreture", "aperture", - "apsotles", "apostles", - "aqaurium", "aquarium", - "aqcuired", "acquired", - "aquaduct", "aqueduct", - "aquairum", "aquarium", - "aquaruim", "aquarium", - "aquiring", "acquiring", - "aquitted", "acquitted", - "arbitary", "arbitrary", - "arbitray", "arbitrary", - "arbiture", "arbiter", - "architet", "architect", - "archtype", "archetype", - "aremnian", "armenian", - "argentia", "argentina", - "argubaly", "arguably", - "arguemet", "arguement", - "arguemtn", "arguement", - "ariborne", "airborne", - "aricraft", "aircraft", - "ariplane", "airplane", - "ariports", "airports", - "arispace", "airspace", - "aristote", "aristotle", - "aritfact", "artifact", - "arizonia", "arizona", - "arkasnas", "arkansas", - "arlighty", "alrighty", - "armamant", "armament", - "armenain", "armenian", - "armenina", "armenian", - "armpitts", "armpits", - "armstrog", "armstrong", - "arpanoid", "paranoid", - "arpeture", "aperture", - "arragned", "arranged", - "arrestes", "arrests", - "arrestos", "arrests", - "arsenaal", "arsenal", - "artemios", "artemis", - "artemius", "artemis", - "arthrits", "arthritis", - "articule", "articulate", - "artifacs", "artifacts", - "artifcat", "artifact", - "artilley", "artillery", - "artisitc", "artistic", - "artistas", "artists", - "arugable", "arguable", - "arugably", "arguably", - "arugment", "argument", - "asborbed", "absorbed", - "asburdly", "absurdly", - "ascneded", "ascended", - "asissted", "assisted", - "askreddt", "askreddit", - "asnwered", "answered", - "aspectos", "aspects", - "asperges", "aspergers", - "assasins", "assassins", - "assemple", "assemble", - "assertin", "assertions", - "asshates", "asshats", - "asshatts", "asshats", - "assimile", "assimilate", - "assistat", "assistants", - "assitant", "assistant", - "assmeble", "assemble", - "assmebly", "assembly", - "asssasin", "assassin", - "assualts", "assaults", - "asteorid", "asteroid", - "asteriks", "asterisk", - "asteriod", "asteroid", - "asterois", "asteroids", - "astersik", "asterisk", - "asthetic", "aesthetic", - "astronat", "astronaut", - "asutrian", "austrian", - "atheisim", "atheism", - "atheistc", "atheistic", - "atheltes", "athletes", - "atheltic", "athletic", - "athenean", "athenian", - "athesits", "atheists", - "athetlic", "athletic", - "athients", "athiest", - "atittude", "attitude", - "atlantia", "atlanta", - "atmoizer", "atomizer", - "atomzier", "atomizer", - "atribute", "attribute", - "atrifact", "artifact", - "attackes", "attackers", - "attemped", "attempted", - "attemted", "attempted", - "attemtps", "attempts", - "attidute", "attitude", - "attitide", "attitude", - "attribue", "attribute", - "aucitons", "auctions", - "audactiy", "audacity", - "audcaity", "audacity", - "audeince", "audience", - "audiobok", "audiobook", - "austeriy", "austerity", - "austiran", "austrian", - "austitic", "autistic", - "austrain", "austrian", - "australa", "australian", - "austrija", "austria", - "austrila", "austria", - "autisitc", "autistic", - "autoattk", "autoattack", - "autograh", "autograph", - "automato", "automation", - "automony", "autonomy", - "autority", "authority", - "autsitic", "autistic", - "auxilary", "auxiliary", - "avacodos", "avocados", - "avaiable", "available", - "availabe", "available", - "availble", "available", - "avaition", "aviation", - "avalable", "available", - "avalance", "avalanche", - "avataras", "avatars", - "avatards", "avatars", - "avatares", "avatars", - "averadge", "averaged", - "avergaed", "averaged", - "avergaes", "averages", - "aviaiton", "aviation", - "avilable", "available", - "avnegers", "avengers", - "avodacos", "avocados", - "awekened", "weakened", - "awesomey", "awesomely", - "awfullly", "awfully", - "awkwardy", "awkwardly", - "awnsered", "answered", - "babysite", "babysitter", - "baceause", "because", - "bacehlor", "bachelor", - "bachleor", "bachelor", - "bacholer", "bachelor", - "backeast", "backseat", - "backerds", "backers", - "backfied", "backfield", - "backpacs", "backpacks", - "balcanes", "balances", - "balconey", "balcony", - "balconny", "balcony", - "ballistc", "ballistic", - "balnaced", "balanced", - "banannas", "bananas", - "banditas", "bandits", - "bandwith", "bandwidth", - "bangkock", "bangkok", - "baptisim", "baptism", - "barabric", "barbaric", - "barbarin", "barbarian", - "barbaris", "barbarians", - "bardford", "bradford", - "bargaing", "bargaining", - "baristia", "barista", - "barrakcs", "barracks", - "barrells", "barrels", - "basicaly", "basically", - "basiclay", "basicly", - "basicley", "basicly", - "basicliy", "basicly", - "batistia", "batista", - "battalin", "battalion", - "bayonent", "bayonet", - "beachead", "beachhead", - "beacuoup", "beaucoup", - "beardude", "bearded", - "beastley", "beastly", - "beatiful", "beautiful", - "beccause", "because", - "becuasse", "becuase", - "befirend", "befriend", - "befreind", "befriend", - "begginer", "beginner", - "begginig", "begging", - "begginng", "begging", - "begining", "beginning", - "beginnig", "beginning", - "behaivor", "behavior", - "behavios", "behaviours", - "behavoir", "behavior", - "behavour", "behavior", - "behngazi", "benghazi", - "behtesda", "bethesda", - "beleived", "believed", - "beleiver", "believer", - "beleives", "believes", - "beliefes", "beliefs", - "benefica", "beneficial", - "bengahzi", "benghazi", - "bengalas", "bengals", - "bengalos", "bengals", - "bengazhi", "benghazi", - "benghzai", "benghazi", - "bengzhai", "benghazi", - "benhgazi", "benghazi", - "benidect", "benedict", - "benifits", "benefits", - "berekley", "berkeley", - "berserkr", "berserker", - "beseiged", "besieged", - "betehsda", "bethesda", - "beteshda", "bethesda", - "bethdesa", "bethesda", - "bethedsa", "bethesda", - "bethseda", "bethesda", - "beyoncye", "beyonce", - "bibilcal", "biblical", - "bicylces", "bicycles", - "bigfooot", "bigfoot", - "bigining", "beginning", - "bilbical", "biblical", - "billboad", "billboard", - "bilsters", "blisters", - "bilzzard", "blizzard", - "bilzzcon", "blizzcon", - "biologia", "biological", - "birhtday", "birthday", - "birsbane", "brisbane", - "birthdsy", "birthdays", - "biseuxal", "bisexual", - "bisexaul", "bisexual", - "bitcions", "bitcoins", - "bitocins", "bitcoins", - "blackade", "blacked", - "blackend", "blacked", - "blackjak", "blackjack", - "blacklit", "blacklist", - "blatanty", "blatantly", - "blessins", "blessings", - "blessure", "blessing", - "bloggare", "blogger", - "bloggeur", "blogger", - "bluebery", "blueberry", - "bluetooh", "bluetooth", - "blugaria", "bulgaria", - "boardway", "broadway", - "bollcoks", "bollocks", - "bomberos", "bombers", - "bookmars", "bookmarks", - "boradway", "broadway", - "boredoom", "boredom", - "bouldore", "boulder", - "bounites", "bounties", - "boutnies", "bounties", - "boutqiue", "boutique", - "bouyancy", "buoyancy", - "boyfried", "boyfriend", - "bradcast", "broadcast", - "bradfrod", "bradford", - "brakeout", "breakout", - "braodway", "broadway", - "braverly", "bravery", - "breathis", "breaths", - "breathos", "breaths", - "brekaout", "breakout", - "brendamn", "brendan", - "breweres", "brewers", - "brewerey", "brewery", - "brewerks", "brewers", - "brewerys", "brewers", - "brigaged", "brigade", - "brigated", "brigade", - "brigthen", "brighten", - "briliant", "brilliant", - "brillant", "brilliant", - "bristool", "bristol", - "brithday", "birthday", - "brittish", "british", - "briusers", "bruisers", - "broadbad", "broadband", - "broadcat", "broadcasts", - "broadley", "broadly", - "brocolli", "broccoli", - "brodaway", "broadway", - "broncoes", "broncos", - "broswing", "browsing", - "browines", "brownies", - "browisng", "browsing", - "brtually", "brutally", - "brugundy", "burgundy", - "bruisend", "bruised", - "brussles", "brussels", - "brusting", "bursting", - "bubblews", "bubbles", - "buddhits", "buddhist", - "buddhsim", "buddhism", - "buddishm", "buddhism", - "buddisht", "buddhist", - "buglaria", "bulgaria", - "buhddism", "buddhism", - "buhddist", "buddhist", - "buidlers", "builders", - "buidling", "building", - "buildins", "buildings", - "buisness", "business", - "bulagria", "bulgaria", - "bulgaira", "bulgaria", - "buliders", "builders", - "buliding", "building", - "bulletts", "bullets", - "burisers", "bruisers", - "burriots", "burritos", - "burritio", "burrito", - "burritto", "burrito", - "burrtios", "burritos", - "burssels", "brussels", - "burtally", "brutally", - "burtsing", "bursting", - "busrting", "bursting", - "butcherd", "butchered", - "butterey", "buttery", - "butterfy", "butterfly", - "butterry", "buttery", - "butthoel", "butthole", - "bycicles", "bicycles", - "cabbagge", "cabbage", - "cabients", "cabinets", - "cabinate", "cabinet", - "cabinent", "cabinet", - "cabniets", "cabinets", - "caclulus", "calculus", - "cafetera", "cafeteria", - "caffinee", "caffeine", - "cahsiers", "cashiers", - "cainster", "canister", - "calander", "calendar", - "calcular", "calculator", - "calgarry", "calgary", - "calibler", "calibre", - "caloires", "calories", - "calrkson", "clarkson", - "calroies", "calories", - "calssify", "classify", - "calulate", "calculate", - "calymore", "claymore", - "camapign", "campaign", - "cambodai", "cambodia", - "camboida", "cambodia", - "cambpell", "campbell", - "cambride", "cambridge", - "cambrige", "cambridge", - "camoufle", "camouflage", - "campagin", "campaign", - "campaing", "campaign", - "campains", "campaigns", - "camperas", "campers", - "camperos", "campers", - "canadias", "canadians", - "cananbis", "cannabis", - "cancelas", "cancels", - "canceles", "cancels", - "cancells", "cancels", - "canceres", "cancers", - "cancerns", "cancers", - "cancerus", "cancers", - "candiate", "candidate", - "candiens", "candies", - "canistre", "canister", - "cannabil", "cannibal", - "cannbial", "cannibal", - "cannibas", "cannabis", - "cansiter", "canister", - "capitans", "captains", - "capitola", "capital", - "capitulo", "capitol", - "capmbell", "campbell", - "capsuels", "capsules", - "capsulse", "capsules", - "capsumel", "capsule", - "capteurs", "captures", - "captials", "capitals", - "captians", "captains", - "capusles", "capsules", - "caputres", "captures", - "cardboad", "cardboard", - "cardianl", "cardinal", - "cardnial", "cardinal", - "careflly", "carefully", - "carefull", "careful", - "carefuly", "carefully", - "caricate", "caricature", - "caridgan", "cardigan", - "caridnal", "cardinal", - "carinval", "carnival", - "carloina", "carolina", - "carnagie", "carnegie", - "carnigie", "carnegie", - "carnvial", "carnival", - "carrotts", "carrots", - "carrotus", "carrots", - "cartells", "cartels", - "cartmaan", "cartman", - "cartride", "cartridge", - "cartrige", "cartridge", - "carvinal", "carnival", - "casaulty", "casualty", - "casheirs", "cashiers", - "cashieer", "cashier", - "cashires", "cashiers", - "castleos", "castles", - "castlers", "castles", - "casulaty", "casualty", - "cataclym", "cataclysm", - "catagory", "category", - "cataline", "catiline", - "cataloge", "catalogue", - "catalsyt", "catalyst", - "cataylst", "catalyst", - "cathloic", "catholic", - "catlayst", "catalyst", - "caucasin", "caucasian", - "causalty", "casualty", - "cellural", "cellular", - "celullar", "cellular", - "celverly", "cleverly", - "cemetary", "cemetery", - "centeres", "centers", - "centerns", "centers", - "centrase", "centres", - "centrers", "centres", - "ceratine", "creatine", - "cerberal", "cerebral", - "cerbreus", "cerberus", - "cerbures", "cerberus", - "ceremone", "ceremonies", - "cerimony", "ceremony", - "ceromony", "ceremony", - "certainy", "certainty", - "challege", "challenge", - "chambear", "chamber", - "chambres", "chambers", - "champage", "champagne", - "chanisaw", "chainsaw", - "chanlder", "chandler", - "charcaol", "charcoal", - "chargehr", "charger", - "chargeur", "charger", - "chariman", "chairman", - "charimsa", "charisma", - "charmisa", "charisma", - "charocal", "charcoal", - "charsima", "charisma", - "chasiers", "cashiers", - "chassids", "chassis", - "chassies", "chassis", - "chatolic", "catholic", - "chcukles", "chuckles", - "checkare", "checker", - "checkear", "checker", - "cheesees", "cheeses", - "cheeseus", "cheeses", - "cheetoos", "cheetos", - "chemcial", "chemical", - "chemisty", "chemistry", - "chernobl", "chernobyl", - "chiansaw", "chainsaw", - "chidlish", "childish", - "chihuaha", "chihuahua", - "childres", "childrens", - "chillade", "chilled", - "chillead", "chilled", - "chillend", "chilled", - "chilvary", "chivalry", - "chinesse", "chinese", - "chivarly", "chivalry", - "chivlary", "chivalry", - "chlidish", "childish", - "chlroine", "chlorine", - "chmabers", "chambers", - "chocolae", "chocolates", - "chocolet", "chocolates", - "choesive", "cohesive", - "choicers", "choices", - "cholrine", "chlorine", - "chorline", "chlorine", - "chracter", "character", - "christin", "christian", - "chroline", "chlorine", - "chromose", "chromosome", - "chronice", "chronicles", - "chruches", "churches", - "chuckels", "chuckles", - "cielings", "ceilings", - "cigarete", "cigarettes", - "cigarets", "cigarettes", - "cilmbers", "climbers", - "cilnatro", "cilantro", - "ciltoris", "clitoris", - "circiuts", "circuits", - "circkets", "crickets", - "circlebs", "circles", - "circluar", "circular", - "ciricuit", "circuit", - "cirlcing", "circling", - "ciruclar", "circular", - "clannand", "clannad", - "clarifiy", "clarify", - "clarskon", "clarkson", - "clasical", "classical", - "classrom", "classroom", - "classsic", "classics", - "clausens", "clauses", - "cleanies", "cleanse", - "cleasner", "cleanser", - "clenaser", "cleanser", - "clevelry", "cleverly", - "clhorine", "chlorine", - "cliamtes", "climates", - "cliantro", "cilantro", - "clickare", "clicker", - "clickbat", "clickbait", - "clickear", "clicker", - "clientes", "clients", - "clincial", "clinical", - "clinicas", "clinics", - "clinicos", "clinics", - "clipboad", "clipboard", - "clitiros", "clitoris", - "closeing", "closing", - "closeley", "closely", - "clyamore", "claymore", - "clyinder", "cylinder", - "cmoputer", "computer", - "coindice", "coincide", - "collapes", "collapse", - "collares", "collars", - "collaris", "collars", - "collaros", "collars", - "collaspe", "collapse", - "colleage", "colleagues", - "collecte", "collective", - "collegue", "colleague", - "collisin", "collisions", - "collosal", "colossal", - "collpase", "collapse", - "coloardo", "colorado", - "colordao", "colorado", - "colubmia", "columbia", - "columnas", "columns", - "comadres", "comrades", - "comander", "commander", - "comandos", "commandos", - "comapany", "company", - "comapres", "compares", - "combiens", "combines", - "combinig", "combining", - "comediac", "comedic", - "comedias", "comedians", - "comestic", "cosmetic", - "comision", "commission", - "comiting", "committing", - "comitted", "committed", - "comittee", "committee", - "commandd", "commanded", - "commecen", "commence", - "commedic", "comedic", - "commense", "commenters", - "commenty", "commentary", - "commiest", "commits", - "commited", "committed", - "commitee", "committee", - "commites", "commits", - "committe", "committee", - "committs", "commits", - "commitus", "commits", - "commmand", "command", - "communit", "communist", - "companis", "companions", - "comparse", "compares", - "comparte", "compare", - "compasso", "compassion", - "compelte", "complete", - "compense", "compensate", - "complais", "complains", - "complane", "complacent", - "complate", "complacent", - "compleet", "complete", - "completi", "complexity", - "complets", "completes", - "complety", "completely", - "complexs", "complexes", - "complext", "complexity", - "complexy", "complexity", - "complict", "complicit", - "complier", "compiler", - "compones", "compose", - "componet", "components", - "componts", "compost", - "composet", "compost", - "composit", "compost", - "composte", "compose", - "comprese", "compressed", - "compreso", "compressor", - "compsers", "compress", - "comptown", "compton", - "compunet", "compute", - "computre", "compute", - "comradre", "comrade", - "comsetic", "cosmetic", - "conatins", "contains", - "conceald", "concealed", - "conceide", "conceived", - "conceled", "concede", - "concened", "concede", - "concepta", "conceptual", - "concered", "concede", - "concernt", "concert", - "concerte", "concrete", - "concesso", "concession", - "conceted", "concede", - "conceved", "concede", - "concibes", "concise", - "concider", "consider", - "concides", "concise", - "concious", "conscious", - "conclued", "conclude", - "concluse", "conclusive", - "concluso", "conclusion", - "concreet", "concrete", - "concrets", "concerts", - "condemnd", "condemned", - "conditon", "condition", - "condomes", "condoms", - "condomns", "condoms", - "conduict", "conduit", - "conected", "connected", - "conencts", "connects", - "confeses", "confess", - "confesos", "confess", - "confesso", "confession", - "configue", "configure", - "confilct", "conflict", - "confirmd", "confirmed", - "conflcit", "conflict", - "conflics", "conflicts", - "confrims", "confirms", - "conicide", "coincide", - "conlcude", "conclude", - "conqueor", "conquer", - "conquerd", "conquered", - "conqured", "conquered", - "conscent", "consent", - "consious", "conscious", - "constans", "constants", - "constast", "constants", - "constatn", "constant", - "constrat", "constraint", - "construt", "constructs", - "containd", "contained", - "containg", "containing", - "contaire", "containers", - "contanti", "contacting", - "contense", "contenders", - "contenst", "contents", - "contexta", "contextual", - "contextl", "contextual", - "contians", "contains", - "contined", "continued", - "contines", "continents", - "continum", "continuum", - "continus", "continues", - "continut", "continuity", - "continuu", "continuous", - "contracr", "contractor", - "contracs", "contracts", - "controll", "control", - "convenit", "convenient", - "convento", "convention", - "converst", "converts", - "convertr", "converter", - "conviced", "convinced", - "convicto", "conviction", - "convingi", "convincing", - "convinse", "convinces", - "cooldows", "cooldowns", - "coordine", "coordinate", - "coralina", "carolina", - "corollla", "corolla", - "corolloa", "corolla", - "corosion", "corrosion", - "corpsers", "corpses", - "corrdior", "corridor", - "correcty", "correctly", - "correnti", "correcting", - "corretly", "correctly", - "corrupto", "corruption", - "cosemtic", "cosmetic", - "cosutmes", "costumes", - "couldnot", "couldnt", - "coulored", "coloured", - "counries", "countries", - "counseil", "counsel", - "counsole", "counsel", - "counterd", "countered", - "countert", "counteract", - "countres", "counters", - "courtrom", "courtroom", - "courtsey", "courtesy", - "cousines", "cousins", - "cousings", "cousins", - "coutners", "counters", - "covanent", "covenant", - "coverted", "converted", - "coyotees", "coyotes", - "cpatains", "captains", - "cranbery", "cranberry", - "crayones", "crayons", - "creaeted", "created", - "createin", "creatine", - "createur", "creature", - "creatien", "creatine", - "creepgin", "creeping", - "cricling", "circling", - "cringely", "cringey", - "cringery", "cringey", - "criticas", "critics", - "critices", "critics", - "criticie", "criticise", - "criticim", "criticisms", - "criticis", "critics", - "criticms", "critics", - "criticos", "critics", - "criticts", "critics", - "criticus", "critics", - "critiera", "criteria", - "critized", "criticized", - "croatioa", "croatia", - "crossfie", "crossfire", - "crosshar", "crosshair", - "crosspot", "crosspost", - "crowbahr", "crowbar", - "cruasder", "crusader", - "cruciaal", "crucial", - "crucibel", "crucible", - "cruicble", "crucible", - "crusdaer", "crusader", - "crusiers", "cruisers", - "crusiing", "cruising", - "cruthces", "crutches", - "cthulhlu", "cthulhu", - "cthulluh", "cthulhu", - "cubpoard", "cupboard", - "cuddleys", "cuddles", - "culprint", "culprit", - "cultrual", "cultural", - "culutral", "cultural", - "cupbaord", "cupboard", - "cupborad", "cupboard", - "curcible", "crucible", - "curisers", "cruisers", - "curising", "cruising", - "currecny", "currency", - "currence", "currencies", - "currenly", "currently", - "currenty", "currently", - "cursader", "crusader", - "custcene", "cutscene", - "cutsceen", "cutscene", - "cutscens", "cutscenes", - "cutsence", "cutscene", - "cylcists", "cyclists", - "cylidner", "cylinder", - "cylindre", "cylinder", - "cynisicm", "cynicism", - "cyrstals", "crystals", - "dacquiri", "daiquiri", - "daimonds", "diamonds", - "dangeros", "dangers", - "dangerus", "dangers", - "darkenss", "darkness", - "darnkess", "darkness", - "dashboad", "dashboard", - "daugther", "daughter", - "deadlfit", "deadlift", - "deadlifs", "deadlifts", - "deafeted", "defeated", - "deafults", "defaults", - "dealying", "delaying", - "deamenor", "demeanor", - "deathcat", "deathmatch", - "debuffes", "debuffs", - "debufffs", "debuffs", - "decalred", "declared", - "decalres", "declares", - "decembre", "december", - "decidely", "decidedly", - "decieved", "deceived", - "decifits", "deficits", - "decipted", "depicted", - "declears", "declares", - "declinig", "declining", - "decmeber", "december", - "decribed", "described", - "decribes", "describes", - "dedicato", "dedication", - "deductie", "deductible", - "defautls", "defaults", - "defectos", "defects", - "defectus", "defects", - "defendas", "defends", - "defendes", "defenders", - "defendis", "defends", - "defendre", "defender", - "defendrs", "defends", - "defensea", "defenseman", - "defensen", "defenseman", - "defensie", "defensive", - "defetead", "defeated", - "deffined", "defined", - "deficiet", "deficient", - "definate", "definite", - "definaty", "definately", - "definety", "definetly", - "definito", "definition", - "definitv", "definitive", - "deflatin", "deflation", - "deflecto", "deflection", - "defualts", "defaults", - "degarded", "degraded", - "degenere", "degenerate", - "degraged", "degrade", - "degrated", "degrade", - "deisgned", "designed", - "deisgner", "designer", - "dekstops", "desktops", - "delcared", "declared", - "delcares", "declares", - "delepted", "depleted", - "delivere", "deliveries", - "delpeted", "depleted", - "delpoyed", "deployed", - "delyaing", "delaying", - "demandas", "demands", - "demandes", "demands", - "demenaor", "demeanor", - "democray", "democracy", - "demolito", "demolition", - "denseley", "densely", - "densitiy", "density", - "deomcrat", "democrat", - "deovtion", "devotion", - "departer", "departure", - "departue", "departure", - "depcited", "depicted", - "depelted", "depleted", - "dependat", "dependant", - "depictes", "depicts", - "depictin", "depictions", - "depolyed", "deployed", - "depositd", "deposited", - "depostis", "deposits", - "depresse", "depressive", - "depresso", "depression", - "derivate", "derivative", - "descened", "descend", - "descibed", "described", - "descirbe", "describe", - "descrise", "describes", - "desgined", "designed", - "desginer", "designer", - "desicive", "decisive", - "designad", "designated", - "designes", "designs", - "designet", "designated", - "desinged", "designed", - "desinger", "designer", - "desitned", "destined", - "desktiop", "desktop", - "desorder", "disorder", - "despides", "despised", - "despiste", "despise", - "destiney", "destiny", - "destinty", "destiny", - "destkops", "desktops", - "destorys", "destroys", - "destrose", "destroyers", - "destroyd", "destroyed", - "destroyr", "destroyers", - "detalied", "detailed", - "detectas", "detects", - "detectes", "detects", - "detectie", "detectives", - "determen", "determines", - "devasted", "devastated", - "develope", "develop", - "devialet", "deviate", - "deviatie", "deviate", - "devilers", "delivers", - "devloved", "devolved", - "devovled", "devolved", - "diaganol", "diagonal", - "diagnoal", "diagonal", - "diagnoes", "diagnose", - "diagnosi", "diagnostic", - "diagonse", "diagnose", - "diahrrea", "diarrhea", - "dialetcs", "dialects", - "dialgoue", "dialogue", - "dialouge", "dialogue", - "diarreah", "diarrhea", - "diarreha", "diarrhea", - "dichtomy", "dichotomy", - "dickisch", "dickish", - "dicovers", "discovers", - "dicovery", "discovery", - "dicussed", "discussed", - "diferent", "different", - "differnt", "different", - "difficut", "difficulty", - "diffrent", "different", - "diganose", "diagnose", - "dignitiy", "dignity", - "dimaonds", "diamonds", - "dinasour", "dinosaur", - "dinosaus", "dinosaurs", - "dinosuar", "dinosaur", - "dinsoaur", "dinosaur", - "dionsaur", "dinosaur", - "diphtong", "diphthong", - "diplomma", "diploma", - "dipthong", "diphthong", - "direclty", "directly", - "directin", "directions", - "directix", "directx", - "directos", "directors", - "directoy", "directory", - "directrx", "directx", - "dirfting", "drifting", - "disabeld", "disabled", - "disabels", "disables", - "disagred", "disagreed", - "disagres", "disagrees", - "disbaled", "disabled", - "disbales", "disables", - "disbelif", "disbelief", - "dischard", "discharged", - "dischare", "discharged", - "discound", "discounted", - "discoure", "discourse", - "discoved", "discovered", - "discreto", "discretion", - "discribe", "describe", - "disentry", "dysentery", - "disgiuse", "disguise", - "dishoner", "dishonored", - "dishonet", "dishonesty", - "dislikse", "dislikes", - "dismante", "dismantle", - "dismisse", "dismissive", - "disolved", "dissolved", - "dispacth", "dispatch", - "dispalys", "displays", - "dispence", "dispense", - "dispersa", "dispensary", - "displayd", "displayed", - "disposle", "dispose", - "disposte", "dispose", - "dispoves", "dispose", - "disptach", "dispatch", - "disricts", "districts", - "dissovle", "dissolve", - "distates", "distaste", - "distatse", "distaste", - "disticnt", "distinct", - "distorto", "distortion", - "distrcit", "district", - "districs", "districts", - "disturbd", "disturbed", - "disupted", "disputed", - "disuptes", "disputes", - "diversed", "diverse", - "diversiy", "diversify", - "dividens", "dividends", - "divintiy", "divinity", - "divisons", "divisions", - "doapmine", "dopamine", - "docrines", "doctrines", - "docrtine", "doctrine", - "doctines", "doctrines", - "doctirne", "doctrine", - "doctrins", "doctrines", - "dogamtic", "dogmatic", - "dolhpins", "dolphins", - "domapine", "dopamine", - "domecrat", "democrat", - "domiante", "dominate", - "dominato", "domination", - "dominats", "dominates", - "dominent", "dominant", - "dominoin", "dominion", - "donwload", "download", - "donwvote", "downvote", - "doomdsay", "doomsday", - "doosmday", "doomsday", - "doplhins", "dolphins", - "dopmaine", "dopamine", - "dormtund", "dortmund", - "dortumnd", "dortmund", - "dotrmund", "dortmund", - "douchely", "douchey", - "doucheus", "douches", - "dowloads", "downloads", - "downlaod", "download", - "downloas", "downloads", - "downstar", "downstairs", - "downvore", "downvoters", - "downvotr", "downvoters", - "downvots", "downvotes", - "draculea", "dracula", - "draculla", "dracula", - "dragones", "dragons", - "dragonus", "dragons", - "drfiting", "drifting", - "driectly", "directly", - "drifitng", "drifting", - "driveris", "drivers", - "drotmund", "dortmund", - "duaghter", "daughter", - "dumbbels", "dumbbells", - "dumptser", "dumpster", - "dumspter", "dumpster", - "dunegons", "dungeons", - "dungeoun", "dungeon", - "dungoens", "dungeons", - "dupicate", "duplicate", - "duplicas", "duplicates", - "dwarvens", "dwarves", - "dyanmics", "dynamics", - "dyanmite", "dynamite", - "dymanics", "dynamics", - "dymanite", "dynamite", - "dynastry", "dynasty", - "dysentry", "dysentery", - "dysphora", "dysphoria", - "earilest", "earliest", - "eatswood", "eastwood", - "eceonomy", "economy", - "ecidious", "deciduous", - "ecologia", "ecological", - "ecomonic", "economic", - "ecstacys", "ecstasy", - "ecstascy", "ecstasy", - "ecstasty", "ecstasy", - "ectastic", "ecstatic", - "editoras", "editors", - "editores", "editors", - "efficent", "efficient", - "egpytian", "egyptian", - "egyptain", "egyptian", - "egytpian", "egyptian", - "ehtereal", "ethereal", - "ehternet", "ethernet", - "eigtheen", "eighteen", - "electhor", "electro", - "electorn", "electron", - "elementy", "elementary", - "elephans", "elephants", - "elevatin", "elevation", - "elicided", "elicited", - "eligable", "eligible", - "elimiate", "eliminate", - "eliminas", "eliminates", - "elitisim", "elitism", - "elitistm", "elitism", - "ellected", "elected", - "embarass", "embarrass", - "embargos", "embargoes", - "embarras", "embarrass", - "embassay", "embassy", - "embassey", "embassy", - "embasssy", "embassy", - "emergend", "emerged", - "emergerd", "emerged", - "eminated", "emanated", - "emminent", "eminent", - "emmisary", "emissary", - "emmision", "emission", - "emmiting", "emitting", - "emmitted", "emitted", - "empathie", "empathize", - "empirial", "empirical", - "emulatin", "emulation", - "enahnces", "enhances", - "enchanct", "enchant", - "encolsed", "enclosed", - "endanged", "endangered", - "endevors", "endeavors", - "endevour", "endeavour", - "endlessy", "endlessly", - "endorces", "endorse", - "engeneer", "engineer", - "engeries", "energies", - "engineed", "engineered", - "engrames", "engrams", - "engramms", "engrams", - "enigneer", "engineer", - "enitrely", "entirely", - "enlcosed", "enclosed", - "enlsaved", "enslaved", - "ensalved", "enslaved", - "enterity", "entirety", - "entierly", "entirely", - "entierty", "entirety", - "entilted", "entitled", - "entirley", "entirely", - "entiteld", "entitled", - "entitity", "entity", - "entropay", "entropy", - "entrophy", "entropy", - "ephipany", "epiphany", - "epihpany", "epiphany", - "epilespy", "epilepsy", - "epilgoue", "epilogue", - "episdoes", "episodes", - "epitomie", "epitome", - "epliepsy", "epilepsy", - "epliogue", "epilogue", - "epsiodes", "episodes", - "epsresso", "espresso", - "eqaulity", "equality", - "eqaution", "equation", - "equailty", "equality", - "eraticly", "erratically", - "erroneos", "erroneous", - "errupted", "erupted", - "escalato", "escalation", - "esctatic", "ecstatic", - "esential", "essential", - "esitmate", "estimate", - "esperate", "seperate", - "esportes", "esports", - "estiamte", "estimate", - "estoeric", "esoteric", - "estonija", "estonia", - "estoniya", "estonia", - "etherael", "ethereal", - "etherent", "ethernet", - "ethicaly", "ethically", - "etiquete", "etiquette", - "etrailer", "retailer", - "eugencis", "eugenics", - "eugneics", "eugenics", - "euhporia", "euphoria", - "euhporic", "euphoric", - "euorpean", "european", - "euphoira", "euphoria", - "euphroia", "euphoria", - "euphroic", "euphoric", - "europian", "european", - "eurpoean", "european", - "evangers", "avengers", - "everyons", "everyones", - "evidencd", "evidenced", - "evidende", "evidenced", - "evloving", "evolving", - "evolveds", "evolves", - "evolveos", "evolves", - "evovling", "evolving", - "excecute", "execute", - "excedded", "exceeded", - "excelent", "excellent", - "exceptin", "exceptions", - "excerise", "exercise", - "excisted", "existed", - "exclusie", "exclusives", - "exculded", "excluded", - "exculdes", "excludes", - "exection", "execution", - "exectued", "executed", - "executie", "executive", - "executin", "execution", - "exellent", "excellent", - "exerbate", "exacerbate", - "exercide", "exercised", - "exercies", "exercise", - "exersice", "exercise", - "exersize", "exercise", - "exhalted", "exalted", - "exhaustn", "exhaustion", - "exhausto", "exhaustion", - "exicting", "exciting", - "exisitng", "existing", - "existane", "existance", - "existant", "existent", - "existend", "existed", - "exlcuded", "excluded", - "exlcudes", "excludes", - "exlporer", "explorer", - "exoticas", "exotics", - "exoticos", "exotics", - "expalins", "explains", - "expandas", "expands", - "expandes", "expands", - "expansie", "expansive", - "expectes", "expects", - "expectus", "expects", - "expedito", "expedition", - "expences", "expense", - "expensie", "expense", - "expensve", "expense", - "expertas", "experts", - "expertis", "experts", - "expertos", "experts", - "expireds", "expires", - "explaind", "explained", - "explaing", "explaining", - "expliots", "exploits", - "explodie", "explode", - "exploint", "exploit", - "explosie", "explosive", - "explosin", "explosions", - "exploted", "explode", - "expoldes", "explodes", - "expolits", "exploits", - "exportas", "exports", - "exportes", "exports", - "exportfs", "exports", - "exposees", "exposes", - "exposito", "exposition", - "expresse", "expressive", - "expresss", "expresses", - "expressy", "expressly", - "exressed", "expressed", - "exsitent", "existent", - "exsiting", "existing", - "extactly", "exactly", - "extemely", "extremely", - "extendes", "extends", - "extendos", "extends", - "extenion", "extension", - "extensie", "extensive", - "extensis", "extensions", - "extortin", "extortion", - "extracto", "extraction", - "extreems", "extremes", - "extremly", "extremely", - "eygptian", "egyptian", - "faboulus", "fabulous", - "fabricas", "fabrics", - "fabrices", "fabrics", - "fabricus", "fabrics", - "faceplam", "facepalm", - "facilisi", "facilities", - "faciltiy", "facility", - "facsists", "fascists", - "factores", "factors", - "factorys", "factors", - "factualy", "factually", - "faggotts", "faggots", - "faggotus", "faggots", - "falcones", "falcons", - "falgship", "flagship", - "faliures", "failures", - "falseley", "falsely", - "falshing", "flashing", - "falvored", "flavored", - "falvours", "flavours", - "familair", "familiar", - "famoulsy", "famously", - "fanatism", "fanaticism", - "fanatsic", "fanatics", - "fanserve", "fanservice", - "fantasty", "fantasy", - "farcking", "fracking", - "fascisim", "fascism", - "fashiond", "fashioned", - "fasicsts", "fascists", - "fatigure", "fatigue", - "favorits", "favorites", - "favourie", "favourites", - "feasable", "feasible", - "feasbile", "feasible", - "febraury", "february", - "februray", "february", - "feburary", "february", - "fedility", "fidelity", - "fedorahs", "fedoras", - "fedorans", "fedoras", - "feilding", "fielding", - "feisable", "feasible", - "feitshes", "fetishes", - "feltcher", "fletcher", - "felxible", "flexible", - "feminint", "femininity", - "feminsim", "feminism", - "feromone", "pheromone", - "fesiable", "feasible", - "festivas", "festivals", - "festivle", "festive", - "fictious", "fictitious", - "fideling", "fielding", - "fideltiy", "fidelity", - "fiedling", "fielding", - "fiedlity", "fidelity", - "fighitng", "fighting", - "figthing", "fighting", - "fileding", "fielding", - "fimilies", "families", - "finacial", "financial", - "fineshes", "finesse", - "fingersi", "fingertips", - "finnisch", "finnish", - "finsihes", "finishes", - "firebals", "fireballs", - "firendly", "friendly", - "firmwear", "firmware", - "firwmare", "firmware", - "flaghsip", "flagship", - "flamable", "flammable", - "flasghip", "flagship", - "flatterd", "flattered", - "flatteur", "flatter", - "flattire", "flatter", - "flavores", "flavors", - "flechter", "fletcher", - "flecther", "fletcher", - "flemmish", "flemish", - "flethcer", "fletcher", - "flexbile", "flexible", - "flexibel", "flexible", - "flippade", "flipped", - "flitered", "filtered", - "florecen", "florence", - "floridia", "florida", - "floruide", "fluoride", - "floruish", "flourish", - "flourine", "fluorine", - "floursih", "flourish", - "fluorish", "flourish", - "fluroide", "fluoride", - "folowing", "following", - "fontrier", "fontier", - "forasken", "forsaken", - "forbiden", "forbidden", - "foreamrs", "forearms", - "foreksin", "foreskin", - "forenics", "forensic", - "forenisc", "forensic", - "foresnic", "forensic", - "foreward", "foreword", - "foricbly", "forcibly", - "forigven", "forgiven", - "formatin", "formation", - "formelly", "formerly", - "formuals", "formulas", - "fornesic", "forensic", - "forresst", "forrest", - "forsekan", "forsaken", - "forsekin", "foreskin", - "forsenic", "forensic", - "forskaen", "forsaken", - "forsting", "frosting", - "fortitue", "fortitude", - "fortunae", "fortune", - "fortunte", "fortune", - "forumlas", "formulas", - "forunner", "forerunner", - "fossiles", "fossils", - "fossilis", "fossils", - "foundary", "foundry", - "fountian", "fountain", - "fourties", "forties", - "fowrards", "forwards", - "frackign", "fracking", - "framgent", "fragment", - "franches", "franchise", - "franchie", "franchises", - "franciso", "francisco", - "frankiln", "franklin", - "franlkin", "franklin", - "freckels", "freckles", - "freindly", "friendly", - "frequeny", "frequency", - "friendle", "friendlies", - "friendsi", "friendlies", - "frimware", "firmware", - "frogiven", "forgiven", - "frointer", "frontier", - "fromerly", "formerly", - "froniter", "frontier", - "fronteir", "frontier", - "frosaken", "forsaken", - "frutcose", "fructose", - "fucntion", "function", - "fufilled", "fulfilled", - "fulfiled", "fulfilled", - "fullfill", "fulfill", - "funciton", "function", - "fundirse", "fundies", - "funniliy", "funnily", - "funnilly", "funnily", - "furctose", "fructose", - "furition", "fruition", - "furuther", "further", - "futurers", "futures", - "futureus", "futures", - "gamemdoe", "gamemode", - "gamepaly", "gameplay", - "gamergat", "gamertag", - "gammeode", "gamemode", - "ganerate", "generate", - "garantee", "guarantee", - "gardient", "gradient", - "garfeild", "garfield", - "garfiled", "garfield", - "garflied", "garfield", - "garnison", "garrison", - "garrions", "garrison", - "garriosn", "garrison", - "garrsion", "garrison", - "gatherig", "gatherings", - "gauarana", "guaraná", - "gauntelt", "gauntlet", - "gauntles", "gauntlets", - "gaurdian", "guardian", - "gaurding", "guarding", - "gautnlet", "gauntlet", - "gemoetry", "geometry", - "generaly", "generally", - "generase", "generates", - "generats", "generates", - "genialia", "genitalia", - "genisues", "geniuses", - "genitala", "genitalia", - "genrates", "generates", - "gentials", "genitals", - "gentlemn", "gentlemen", - "genuises", "geniuses", - "geograpy", "geography", - "geomerty", "geometry", - "geomtery", "geometry", - "germanos", "germans", - "germanus", "germans", - "gernades", "grenades", - "giagbyte", "gigabyte", - "gigabtye", "gigabyte", - "gigaybte", "gigabyte", - "gigbayte", "gigabyte", - "gignatic", "gigantic", - "giltched", "glitched", - "giltches", "glitches", - "girafffe", "giraffe", - "girefing", "griefing", - "girlling", "grilling", - "gladiatr", "gladiator", - "glichted", "glitched", - "glichtes", "glitches", - "glicthed", "glitched", - "glicthes", "glitches", - "glitchey", "glitchy", - "glitchly", "glitchy", - "glitchty", "glitchy", - "glithced", "glitched", - "glithces", "glitches", - "gloablly", "globally", - "glodberg", "goldberg", - "glodfish", "goldfish", - "gloriuos", "glorious", - "gltiched", "glitched", - "gltiches", "glitches", - "gmaertag", "gamertag", - "goblings", "goblins", - "goddammn", "goddamn", - "goddammt", "goddammit", - "godesses", "goddesses", - "godlberg", "goldberg", - "godlfish", "goldfish", - "godounov", "godunov", - "godpseed", "godspeed", - "godspede", "godspeed", - "goldifsh", "goldfish", - "gonewidl", "gonewild", - "goodlcuk", "goodluck", - "goregous", "gorgeous", - "gorgoeus", "gorgeous", - "gorillia", "gorilla", - "gorillla", "gorilla", - "gospells", "gospels", - "gottleib", "gottlieb", - "gourmelt", "gourmet", - "gourment", "gourmet", - "gouvener", "governor", - "govement", "government", - "goverend", "governed", - "govermet", "goverment", - "governer", "governor", - "gradualy", "gradually", - "grafield", "garfield", - "grafitti", "graffiti", - "grahpics", "graphics", - "grahpite", "graphite", - "graident", "gradient", - "granolla", "granola", - "graphcis", "graphics", - "grapichs", "graphics", - "grappnel", "grapple", - "greandes", "grenades", - "greatful", "grateful", - "greeneer", "greener", - "greenhoe", "greenhouse", - "greenlad", "greenland", - "greenore", "greener", - "greusome", "gruesome", - "grieifng", "griefing", - "grifeing", "griefing", - "grizzlay", "grizzly", - "grizzley", "grizzly", - "grpahics", "graphics", - "grpahite", "graphite", - "gruseome", "gruesome", - "guantano", "guantanamo", - "guardain", "guardian", - "guardias", "guardians", - "guaridan", "guardian", - "guerrila", "guerrilla", - "guidence", "guidance", - "guiseppe", "giuseppe", - "guitards", "guitars", - "guitares", "guitars", - "guitarit", "guitarist", - "gullbile", "gullible", - "gunanine", "guanine", - "guniness", "guinness", - "gunniess", "guinness", - "guradian", "guardian", - "gurading", "guarding", - "gurantee", "guarantee", - "guresome", "gruesome", - "guttaral", "guttural", - "gutteral", "guttural", - "hacthing", "hatching", - "hafltime", "halftime", - "haircuit", "haircut", - "halfitme", "halftime", - "hallowen", "halloween", - "hamburgr", "hamburgers", - "hamitlon", "hamilton", - "hamliton", "hamilton", - "handcufs", "handcuffs", - "handeldy", "handedly", - "handlade", "handled", - "handlare", "handler", - "handledy", "handedly", - "hannbial", "hannibal", - "haording", "hoarding", - "hapening", "happening", - "happends", "happens", - "happenes", "happens", - "happilly", "happily", - "harldine", "hardline", - "harrased", "harassed", - "harrases", "harasses", - "hatchign", "hatching", - "hatesink", "heatsink", - "hathcing", "hatching", - "headachs", "headaches", - "headests", "headsets", - "headhsot", "headshot", - "headseat", "headset", - "healthit", "healthiest", - "heastink", "heatsink", - "heathern", "heathen", - "heatskin", "heatsink", - "heaviliy", "heavily", - "heavilly", "heavily", - "heavnely", "heavenly", - "hedeghog", "hedgehog", - "hegdehog", "hedgehog", - "heighest", "heights", - "heighted", "heightened", - "heirachy", "hierarchy", - "heistant", "hesitant", - "heistate", "hesitate", - "hellifre", "hellfire", - "helluvva", "helluva", - "helpfull", "helpful", - "heratige", "heritage", - "herclues", "hercules", - "heridity", "heredity", - "heroicas", "heroics", - "heroices", "heroics", - "heroicos", "heroics", - "heroicus", "heroics", - "hertiage", "heritage", - "herucles", "hercules", - "hestiant", "hesitant", - "hestiate", "hesitate", - "heveanly", "heavenly", - "hierachy", "hierarchy", - "hierarcy", "hierarchy", - "highlane", "highlander", - "hindiusm", "hinduism", - "hindusim", "hinduism", - "hinudism", "hinduism", - "hiptsers", "hipsters", - "hispanis", "hispanics", - "hispters", "hipsters", - "histroic", "historic", - "hodlings", "holdings", - "hoenstly", "honestly", - "hoildays", "holidays", - "holdiays", "holidays", - "hollywod", "hollywood", - "homeword", "homeworld", - "homineim", "hominem", - "homineum", "hominem", - "honeslty", "honestly", - "honeymon", "honeymoon", - "honsetly", "honestly", - "hopefuly", "hopefully", - "hopkings", "hopkins", - "hopsital", "hospital", - "horading", "hoarding", - "horzions", "horizons", - "hosptial", "hospital", - "hosteles", "hostels", - "hostiliy", "hostility", - "hotshoot", "hotshot", - "hotsport", "hotspot", - "hsyteria", "hysteria", - "htaching", "hatching", - "htiboxes", "hitboxes", - "huanting", "haunting", - "humaniod", "humanoid", - "humanite", "humanities", - "humantiy", "humanity", - "humerous", "humorous", - "huminoid", "humanoid", - "humitidy", "humidity", - "humoural", "humoral", - "humouros", "humorous", - "humurous", "humorous", - "hunderds", "hundreds", - "hundread", "hundred", - "hungarin", "hungarian", - "huntmsan", "huntsman", - "hutnsman", "huntsman", - "hybrides", "hybrids", - "hybridus", "hybrids", - "hydorgen", "hydrogen", - "hydratin", "hydration", - "hydregon", "hydrogen", - "hygience", "hygiene", - "hygienne", "hygiene", - "hyperbel", "hyperbole", - "hypocrit", "hypocrite", - "hyponsis", "hypnosis", - "hyrdogen", "hydrogen", - "icefrong", "icefrog", - "icelings", "ceilings", - "idaeidae", "idea", - "idealogy", "ideology", - "idealsim", "idealism", - "idenfity", "identify", - "idenitfy", "identify", - "identite", "identities", - "ideologe", "ideologies", - "illiegal", "illegal", - "illinios", "illinois", - "illionis", "illinois", - "illnesss", "illnesses", - "illumini", "illuminati", - "illustre", "illustrate", - "illution", "illusion", - "ilogical", "illogical", - "ilterate", "literate", - "imapired", "impaired", - "imgrants", "migrants", - "imigrant", "emigrant", - "immboile", "immobile", - "immenint", "imminent", - "immersie", "immerse", - "immersve", "immerse", - "immitate", "imitate", - "immoblie", "immobile", - "immortas", "immortals", - "impactes", "impacts", - "impactos", "impacts", - "imparied", "impaired", - "imperavi", "imperative", - "imperfet", "imperfect", - "implemet", "implements", - "implosed", "implode", - "impluses", "impulses", - "imporper", "improper", - "importas", "imports", - "importen", "importance", - "importes", "imports", - "imporved", "improved", - "imporves", "improves", - "impropre", "improper", - "improted", "imported", - "improvie", "improvised", - "impusles", "impulses", - "imrpoved", "improved", - "imrpoves", "improves", - "inbetwen", "inbetween", - "inclince", "incline", - "inclinde", "incline", - "includng", "including", - "incorect", "incorrect", - "incuding", "including", - "inculded", "included", - "indianas", "indians", - "indiands", "indians", - "indiania", "indiana", - "indianna", "indiana", - "indianos", "indians", - "indicato", "indication", - "indicats", "indicators", - "indonesa", "indonesia", - "indulgue", "indulge", - "infantis", "infants", - "infantus", "infants", - "infarred", "infrared", - "infectin", "infections", - "infermon", "inferno", - "infiltre", "infiltrate", - "infintie", "infinite", - "infintiy", "infinity", - "inflatie", "inflate", - "influens", "influences", - "informas", "informs", - "informis", "informs", - "infromal", "informal", - "infromed", "informed", - "ingenius", "ingenious", - "ingition", "ignition", - "ingorant", "ignorant", - "inheriet", "inherit", - "inherint", "inherit", - "inhumaan", "inhuman", - "inhumain", "inhuman", - "inifnite", "infinite", - "inifnity", "infinity", - "inisghts", "insights", - "initails", "initials", - "initaite", "initiate", - "initaled", "initialed", - "initally", "initially", - "initialy", "initially", - "initmacy", "intimacy", - "initmate", "intimate", - "injustie", "injustices", - "inlcuded", "included", - "inlcudes", "includes", - "innocens", "innocents", - "innocuos", "innocuous", - "innvoate", "innovate", - "inocence", "innocence", - "inpolite", "impolite", - "inpsired", "inspired", - "inquirey", "inquiry", - "inquirie", "inquire", - "inquiriy", "inquiry", - "inrested", "inserted", - "insanley", "insanely", - "insectes", "insects", - "insectos", "insects", - "insertas", "inserts", - "insertes", "inserts", - "insertos", "inserts", - "insidios", "insidious", - "insigths", "insights", - "insipred", "inspired", - "insipres", "inspires", - "insistas", "insists", - "insistes", "insists", - "insistis", "insists", - "insmonia", "insomnia", - "insomina", "insomnia", - "insonmia", "insomnia", - "inspried", "inspired", - "inspries", "inspires", - "instanse", "instances", - "instanty", "instantly", - "instered", "inserted", - "insticnt", "instinct", - "instincs", "instincts", - "institue", "institute", - "insultas", "insults", - "insultes", "insults", - "insultos", "insults", - "intamicy", "intimacy", - "intamite", "intimate", - "intendes", "intends", - "intendos", "intends", - "intentas", "intents", - "intented", "intended", - "interace", "interacted", - "interacs", "interacts", - "interect", "interacted", - "interent", "internet", - "interese", "interested", - "interfce", "interface", - "intergal", "integral", - "internts", "interns", - "internus", "interns", - "interpet", "interpret", - "interrim", "interim", - "interste", "interstate", - "interupt", "interrupt", - "intevene", "intervene", - "intially", "initially", - "intiials", "initials", - "intimaty", "intimately", - "intimide", "intimidate", - "intregal", "integral", - "intriuge", "intrigue", - "introdue", "introduces", - "introdus", "introduces", - "introvet", "introvert", - "intruige", "intrigue", - "intutive", "intuitive", - "inudstry", "industry", - "inventer", "inventor", - "invertes", "inverse", - "invincil", "invincible", - "invitato", "invitation", - "invloved", "involved", - "invloves", "involves", - "invovled", "involved", - "invovles", "involves", - "iranains", "iranians", - "iraninas", "iranians", - "iritable", "irritable", - "iritated", "irritated", - "ironicly", "ironically", - "irritato", "irritation", - "isalmist", "islamist", - "isarelis", "israelis", - "islamits", "islamist", - "islamsit", "islamist", - "islandes", "islanders", - "ismalist", "islamist", - "isntalls", "installs", - "isolatie", "isolate", - "israelli", "israeli", - "israleis", "israelis", - "isralies", "israelis", - "isrealis", "israelis", - "issueing", "issuing", - "italains", "italians", - "jaguards", "jaguars", - "jaguares", "jaguars", - "jailbrek", "jailbreak", - "jaimacan", "jamaican", - "jamacain", "jamaican", - "jamaicia", "jamaica", - "jamiacan", "jamaican", - "januaray", "january", - "janurary", "january", - "jeapardy", "jeopardy", - "jefferry", "jeffery", - "jefferty", "jeffery", - "jennigns", "jennings", - "jeoprady", "jeopardy", - "jepoardy", "jeopardy", - "jerusalm", "jerusalem", - "jewelrey", "jewelry", - "jewllery", "jewellery", - "joanthan", "jonathan", - "joepardy", "jeopardy", - "johanine", "johannine", - "jonatahn", "jonathan", - "journaal", "journal", - "journied", "journeyed", - "journies", "journeys", - "joysitck", "joystick", - "juadaism", "judaism", - "judaisim", "judaism", - "judgemet", "judgements", - "juducial", "judicial", - "jugnling", "jungling", - "junglign", "jungling", - "junlging", "jungling", - "justifiy", "justify", - "juveline", "juvenile", - "juvenlie", "juvenile", - "katemine", "ketamine", - "kennedey", "kennedy", - "ketmaine", "ketamine", - "keybaord", "keyboard", - "keyboars", "keyboards", - "keyborad", "keyboard", - "keychian", "keychain", - "kicthens", "kitchens", - "kindgoms", "kingdoms", - "kittiens", "kitties", - "knockbak", "knockback", - "knowlege", "knowledge", - "knuckels", "knuckles", - "koreanos", "koreans", - "kunckles", "knuckles", - "kurdisch", "kurdish", - "labatory", "lavatory", - "labenese", "lebanese", - "laboraty", "laboratory", - "laguages", "languages", - "landscae", "landscapes", - "langauge", "language", - "lanucher", "launcher", - "lanuches", "launches", - "laodouts", "loadouts", - "larwence", "lawrence", - "lasagnea", "lasagna", - "lasagnia", "lasagna", - "laucnhed", "launched", - "laucnher", "launcher", - "laucnhes", "launches", - "laundrey", "laundry", - "lawernce", "lawrence", - "lazyness", "laziness", - "leaglize", "legalize", - "lecteurs", "lectures", - "lecutres", "lectures", - "lefitsts", "leftists", - "leftsits", "leftists", - "legenday", "legendary", - "legionis", "legions", - "legitimt", "legitimate", - "lengthes", "lengths", - "lengthly", "lengthy", - "lentiles", "lentils", - "lentills", "lentils", - "lesbains", "lesbians", - "lesibans", "lesbians", - "levander", "lavender", - "levelign", "leveling", - "levetate", "levitate", - "leviathn", "leviathan", - "levleing", "leveling", - "liberato", "liberation", - "libertae", "liberate", - "libertea", "liberate", - "librarse", "libraries", - "licencie", "licence", - "licencse", "licence", - "liebrals", "liberals", - "liekable", "likeable", - "lifepsan", "lifespan", - "lifestel", "lifesteal", - "lifestye", "lifestyle", - "lighitng", "lighting", - "lightnig", "lightning", - "lightres", "lighters", - "lightrom", "lightroom", - "ligthers", "lighters", - "ligthing", "lighting", - "likebale", "likeable", - "limitant", "militant", - "limitato", "limitation", - "lincolin", "lincoln", - "lincolon", "lincoln", - "lineupes", "lineups", - "lingeire", "lingerie", - "lingiere", "lingerie", - "linnaena", "linnaean", - "lipstics", "lipsticks", - "liquidas", "liquids", - "liquides", "liquids", - "liquidos", "liquids", - "liscense", "license", - "lisenced", "silenced", - "listenes", "listens", - "listents", "listens", - "listners", "listeners", - "litature", "literature", - "litecion", "litecoin", - "liteicon", "litecoin", - "literaly", "literally", - "lithuana", "lithuania", - "litigato", "litigation", - "liverpol", "liverpool", - "logtiech", "logitech", - "longitme", "longtime", - "longtiem", "longtime", - "looseley", "loosely", - "loreplay", "roleplay", - "luanched", "launched", - "luancher", "launcher", - "luanches", "launches", - "lubricat", "lubricant", - "lucifear", "lucifer", - "luckilly", "luckily", - "macarino", "macaroni", - "machiens", "machines", - "mackeral", "mackerel", - "macthups", "matchups", - "magasine", "magazine", - "magazins", "magazines", - "magentic", "magnetic", - "magicain", "magician", - "magisine", "magazine", - "magizine", "magazine", - "magnetis", "magnets", - "magnited", "magnitude", - "magnitue", "magnitude", - "mainfest", "manifest", - "maintian", "maintain", - "majoroty", "majority", - "makrsman", "marksman", - "malariya", "malaria", - "malasiya", "malaysia", - "malasyia", "malaysia", - "malayisa", "malaysia", - "malyasia", "malaysia", - "mamalian", "mammalian", - "manadrin", "mandarin", - "manaully", "manually", - "mandaste", "mandates", - "mandrain", "mandarin", - "mandrian", "mandarin", - "maneveur", "maneuver", - "manevuer", "maneuver", - "manfiest", "manifest", - "mangetic", "magnetic", - "manglade", "mangled", - "manifeso", "manifesto", - "manipule", "manipulate", - "manouver", "maneuver", - "manuales", "manuals", - "manuever", "maneuver", - "maraconi", "macaroni", - "maradeur", "marauder", - "maraduer", "marauder", - "maragret", "margaret", - "marbleds", "marbles", - "margerat", "margaret", - "margines", "margins", - "margings", "margins", - "marginis", "margins", - "marignal", "marginal", - "marilyin", "marilyn", - "marinens", "marines", - "markedet", "marketed", - "markeras", "markers", - "markerts", "markers", - "marniers", "mariners", - "marraige", "marriage", - "marryied", "married", - "marskman", "marksman", - "maruader", "marauder", - "marvelos", "marvelous", - "marxisim", "marxism", - "mascarra", "mascara", - "massacer", "massacre", - "massarce", "massacre", - "massasge", "massages", - "masscare", "massacre", - "masteris", "masteries", - "masturbe", "masturbate", - "materias", "materials", - "mathcups", "matchups", - "mathewes", "mathews", - "matieral", "material", - "matterss", "mattress", - "mauarder", "marauder", - "maximini", "maximizing", - "mayalsia", "malaysia", - "maybelle", "maybelline", - "maylasia", "malaysia", - "mccarhty", "mccarthy", - "mcgergor", "mcgregor", - "mchanics", "mechanics", - "mclarean", "mclaren", - "mcreggor", "mcgregor", - "meagtron", "megatron", - "meancing", "menacing", - "meaninng", "meaning", - "meatbals", "meatballs", - "mecahnic", "mechanic", - "mechanim", "mechanism", - "mechanis", "mechanics", - "medacine", "medicine", - "medatite", "meditate", - "medeival", "medieval", - "medevial", "medieval", - "mediavel", "medieval", - "medicaly", "medically", - "mediciad", "medicaid", - "medicins", "medicines", - "medicore", "mediocre", - "medievel", "medieval", - "mediocer", "mediocre", - "mediocry", "mediocrity", - "mediorce", "mediocre", - "meditato", "meditation", - "mediveal", "medieval", - "medoicre", "mediocre", - "meerkrat", "meerkat", - "megatorn", "megatron", - "meidcare", "medicare", - "meixcans", "mexicans", - "melboure", "melbourne", - "meltodwn", "meltdown", - "memoriez", "memorize", - "mencaing", "menacing", - "menstrul", "menstrual", - "mentiong", "mentioning", - "meoldies", "melodies", - "merchans", "merchants", - "mercurcy", "mercury", - "mercurey", "mercury", - "merficul", "merciful", - "merhcant", "merchant", - "mericful", "merciful", - "messgaed", "messaged", - "messiach", "messiah", - "metagaem", "metagame", - "metahpor", "metaphor", - "metamage", "metagame", - "methapor", "metaphor", - "metldown", "meltdown", - "metricas", "metrics", - "metrices", "metrics", - "metropos", "metropolis", - "mexcians", "mexicans", - "mexicain", "mexican", - "mhytical", "mythical", - "michagan", "michigan", - "michgian", "michigan", - "microtax", "microatx", - "microwae", "microwaves", - "midfeild", "midfield", - "midfiled", "midfield", - "midifeld", "midfield", - "migrains", "migraines", - "migriane", "migraine", - "milennia", "millennia", - "miligram", "milligram", - "miliitas", "militias", - "miliraty", "military", - "militais", "militias", - "millenia", "millennia", - "millenna", "millennia", - "miltiant", "militant", - "minature", "miniature", - "mindcrak", "mindcrack", - "minerial", "mineral", - "mingiame", "minigame", - "minimage", "minigame", - "minimals", "minimalist", - "minimalt", "minimalist", - "minimini", "minimizing", - "minimium", "minimum", - "miniscue", "miniscule", - "minsiter", "minister", - "minsitry", "ministry", - "miraculu", "miraculous", - "miralces", "miracles", - "mircales", "miracles", - "mircoatx", "microatx", - "mirgaine", "migraine", - "mirorred", "mirrored", - "misnadry", "misandry", - "misogynt", "misogynist", - "missigno", "mission", - "missiony", "missionary", - "misslies", "missiles", - "missorui", "missouri", - "misspeld", "misspelled", - "mistakey", "mistakenly", - "mistread", "mistreated", - "mobiltiy", "mobility", - "moderats", "moderates", - "modulair", "modular", - "moleculs", "molecules", - "momentos", "moments", - "momentus", "moments", - "monagomy", "monogamy", - "mongoles", "mongols", - "mongolos", "mongols", - "monitord", "monitored", - "monogmay", "monogamy", - "monolite", "monolithic", - "monologe", "monologue", - "monolopy", "monopoly", - "monoploy", "monopoly", - "monopols", "monopolies", - "monrachy", "monarchy", - "monstros", "monstrous", - "montaban", "montana", - "montains", "mountains", - "montanha", "montana", - "montania", "montana", - "montanna", "montana", - "montanta", "montana", - "montanya", "montana", - "montaran", "montana", - "monteize", "monetize", - "monteral", "montreal", - "montiors", "monitors", - "montnana", "montana", - "montypic", "monotypic", - "monumnet", "monument", - "moonligt", "moonlight", - "moprhine", "morphine", - "morbildy", "morbidly", - "mordibly", "morbidly", - "morevoer", "moreover", - "morhpine", "morphine", - "moribdly", "morbidly", - "mormones", "mormons", - "mormonts", "mormons", - "moroever", "moreover", - "morotola", "motorola", - "morphein", "morphine", - "morriosn", "morrison", - "morrocco", "morocco", - "morrsion", "morrison", - "mortards", "mortars", - "mortarts", "mortars", - "moruning", "mourning", - "mosnters", "monsters", - "mosqueto", "mosquitoes", - "mosquite", "mosquitoes", - "mosqutio", "mosquito", - "motoroal", "motorola", - "mounment", "monument", - "mounring", "mourning", - "mountian", "mountain", - "moustace", "moustache", - "movesped", "movespeed", - "mozillia", "mozilla", - "mozillla", "mozilla", - "msytical", "mystical", - "mucnhies", "munchies", - "mudering", "murdering", - "muffings", "muffins", - "muffinus", "muffins", - "mulitple", "multiple", - "mulitply", "multiply", - "multiplr", "multiplier", - "multipls", "multiples", - "mundance", "mundane", - "mundande", "mundane", - "muniches", "munchies", - "murderes", "murders", - "murderus", "murders", - "muscluar", "muscular", - "muscualr", "muscular", - "musicaly", "musically", - "musuclar", "muscular", - "mutliple", "multiple", - "mutliply", "multiply", - "myhtical", "mythical", - "mysitcal", "mystical", - "mysogyny", "misogyny", - "mysteris", "mysteries", - "mythraic", "mithraic", - "nagivate", "navigate", - "naopleon", "napoleon", - "napcakes", "pancakes", - "naploeon", "napoleon", - "napoelon", "napoleon", - "napolean", "napoleon", - "napoloen", "napoleon", - "narcissm", "narcissism", - "narcisst", "narcissist", - "narcotis", "narcotics", - "narwharl", "narwhal", - "naseuous", "nauseous", - "nashvile", "nashville", - "nasueous", "nauseous", - "natievly", "natively", - "nationas", "nationals", - "nationsl", "nationals", - "nativley", "natively", - "natuilus", "nautilus", - "naturaly", "naturally", - "naturels", "natures", - "naturely", "naturally", - "naturens", "natures", - "naturual", "natural", - "nauesous", "nauseous", - "naughtly", "naughty", - "nauitlus", "nautilus", - "nauseuos", "nauseous", - "nautiuls", "nautilus", - "nautlius", "nautilus", - "nautulis", "nautilus", - "naviagte", "navigate", - "navigato", "navigation", - "nazereth", "nazareth", - "necesary", "necessary", - "neckbead", "neckbeard", - "needlees", "needles", - "nefarios", "nefarious", - "negativy", "negativity", - "neglectn", "neglecting", - "neglible", "negligible", - "neigbour", "neighbour", - "neolitic", "neolithic", - "netboook", "netbook", - "neuronas", "neurons", - "neutraal", "neutral", - "neutralt", "neutrality", - "neutraly", "neutrality", - "newcaste", "newcastle", - "nickanme", "nickname", - "nickmane", "nickname", - "nieghbor", "neighbor", - "nightime", "nighttime", - "nightley", "nightly", - "nightlie", "nightlife", - "nihilsim", "nihilism", - "nilihism", "nihilism", - "nirtogen", "nitrogen", - "nirvanna", "nirvana", - "nitorgen", "nitrogen", - "niusance", "nuisance", - "noctrune", "nocturne", - "noctunre", "nocturne", - "nocturen", "nocturne", - "nominato", "nomination", - "nonsence", "nonsense", - "nonsesne", "nonsense", - "noramlly", "normally", - "norhtern", "northern", - "normalis", "normals", - "normalls", "normals", - "normalos", "normals", - "northeat", "northeast", - "northren", "northern", - "northwet", "northwest", - "norwegin", "norwegian", - "nostalga", "nostalgia", - "nostirls", "nostrils", - "notabley", "notably", - "notablly", "notably", - "noteable", "notable", - "noteably", "notably", - "noticabe", "noticable", - "notorios", "notorious", - "novmeber", "november", - "nromandy", "normandy", - "nuatilus", "nautilus", - "nuculear", "nuclear", - "nuetered", "neutered", - "nuisanse", "nuisance", - "nullifiy", "nullify", - "nurtient", "nutrient", - "nusaince", "nuisance", - "nusiance", "nuisance", - "nutirent", "nutrient", - "nutriens", "nutrients", - "nuturing", "nurturing", - "obdisian", "obsidian", - "obediant", "obedient", - "obession", "obsession", - "obilvion", "oblivion", - "obisdian", "obsidian", - "obsessie", "obsessive", - "obsessin", "obsession", - "obsidain", "obsidian", - "obstacal", "obstacle", - "obvilion", "oblivion", - "ocasions", "occasions", - "ocassion", "occasion", - "occaison", "occasion", - "occupato", "occupation", - "occuring", "occurring", - "octobear", "october", - "octopuns", "octopus", - "ofcoruse", "ofcourse", - "ofcoures", "ofcourse", - "ofcousre", "ofcourse", - "ofcrouse", "ofcourse", - "officals", "officials", - "officaly", "officially", - "offsited", "offside", - "ofocurse", "ofcourse", - "oligarcy", "oligarchy", - "olmypics", "olympics", - "olymipcs", "olympics", - "olypmics", "olympics", - "ommision", "omission", - "ommiting", "omitting", - "ommitted", "omitted", - "ongewild", "gonewild", - "onslaugt", "onslaught", - "operatie", "operative", - "opinoins", "opinions", - "oppinion", "opinion", - "opponant", "opponent", - "opposits", "opposites", - "oppossed", "opposed", - "oppresso", "oppression", - "optimaal", "optimal", - "optomism", "optimism", - "oragnise", "organise", - "orangerd", "orangered", - "orangers", "oranges", - "orangism", "organism", - "orchesta", "orchestra", - "ordianry", "ordinary", - "oreintal", "oriental", - "orgainse", "organise", - "orgainze", "organize", - "organims", "organism", - "organsie", "organise", - "organsim", "organism", - "organzie", "organize", - "orgasmes", "orgasms", - "orgasmos", "orgasms", - "orgasmus", "orgasms", - "orginize", "organise", - "orhtodox", "orthodox", - "oridnary", "ordinary", - "originas", "origins", - "origines", "origins", - "originsl", "originals", - "orphanes", "orphans", - "osbidian", "obsidian", - "othrodox", "orthodox", - "ourselvs", "ourselves", - "oustider", "outsider", - "outfeild", "outfield", - "outfidel", "outfield", - "outfiled", "outfield", - "outisder", "outsider", - "outplayd", "outplayed", - "outputed", "outputted", - "outsoure", "outsourced", - "overboad", "overboard", - "overclok", "overclock", - "overdrev", "overdrive", - "overhual", "overhaul", - "overlaod", "overload", - "overpiad", "overpaid", - "overules", "overuse", - "overwath", "overwatch", - "overwhem", "overwhelm", - "oximoron", "oxymoron", - "oylmpics", "olympics", - "pacakged", "packaged", - "packadge", "packaged", - "paficist", "pacifist", - "painfuly", "painfully", - "paitence", "patience", - "paitents", "patients", - "palidans", "paladins", - "palstics", "plastics", - "paltform", "platform", - "paltinum", "platinum", - "palyable", "playable", - "palyoffs", "playoffs", - "pancaeks", "pancakes", - "panckaes", "pancakes", - "pandoria", "pandora", - "pandorra", "pandora", - "panedmic", "pandemic", - "panethon", "pantheon", - "pankaces", "pancakes", - "panmedic", "pandemic", - "pantehon", "pantheon", - "panthoen", "pantheon", - "paradies", "paradise", - "paradyse", "parades", - "paragrah", "paragraph", - "paraiste", "parasite", - "paralell", "parallel", - "paralely", "parallelly", - "paralles", "parallels", - "parameds", "paramedics", - "paramter", "parameter", - "paranioa", "paranoia", - "paraniod", "paranoid", - "paraside", "paradise", - "parasits", "parasites", - "parastie", "parasite", - "parctise", "practise", - "paremsan", "parmesan", - "paristan", "partisan", - "parmasen", "parmesan", - "parmenas", "parmesan", - "parmsean", "parmesan", - "parnters", "partners", - "parralel", "parallel", - "parterns", "partners", - "partialy", "partially", - "partians", "partisan", - "partical", "particular", - "particel", "particle", - "partiets", "parties", - "partiots", "patriots", - "partnerd", "partnered", - "partsian", "partisan", - "passabel", "passable", - "passione", "passionate", - "passisve", "passives", - "passpost", "passports", - "passvies", "passives", - "passwors", "passwords", - "pasttime", "pastime", - "pastural", "pastoral", - "pateince", "patience", - "pateints", "patients", - "patethic", "pathetic", - "patheitc", "pathetic", - "patienty", "patiently", - "patirots", "patriots", - "patriarh", "patriarchy", - "patroits", "patriots", - "patrolls", "patrols", - "patronas", "patrons", - "patrones", "patrons", - "patronis", "patrons", - "patronos", "patrons", - "pattened", "patented", - "patterno", "patterson", - "pattersn", "patterson", - "pblisher", "publisher", - "peageant", "pageant", - "pebbleos", "pebbles", - "pebblers", "pebbles", - "pebblets", "pebbles", - "peciluar", "peculiar", - "pecuilar", "peculiar", - "peculair", "peculiar", - "peculure", "peculiar", - "peformed", "performed", - "peircing", "piercing", - "penaltis", "penalties", - "penatgon", "pentagon", - "penciles", "pencils", - "pendatic", "pedantic", - "pengiuns", "penguins", - "penisula", "peninsula", - "pensioen", "pension", - "pepperin", "pepperoni", - "perceded", "preceded", - "percente", "percentile", - "percieve", "perceive", - "percious", "precious", - "perclude", "preclude", - "perfecty", "perfectly", - "perfroms", "performs", - "perheaps", "perhaps", - "pericing", "piercing", - "peridoic", "periodic", - "perimetr", "perimeter", - "periodes", "periods", - "periodos", "periods", - "permanet", "permanent", - "permiere", "premiere", - "permises", "premises", - "permitas", "permits", - "permites", "permits", - "permitis", "permits", - "permitts", "permits", - "permiums", "premiums", - "peroidic", "periodic", - "perosnas", "personas", - "perpetue", "perpetuate", - "persaude", "persuade", - "perserve", "preserve", - "persisit", "persist", - "personel", "personnel", - "persones", "persons", - "personis", "persons", - "personsa", "personas", - "perstige", "prestige", - "persuaso", "persuasion", - "persuded", "persuaded", - "persuing", "pursuing", - "persuits", "pursuits", - "persumed", "presumed", - "pertaing", "pertaining", - "pertians", "pertains", - "pertinet", "pertinent", - "pervents", "prevents", - "perverst", "pervert", - "perviews", "previews", - "pervious", "previous", - "perxoide", "peroxide", - "pessiary", "pessary", - "petetion", "petition", - "petrolem", "petroleum", - "phantoom", "phantom", - "pharamcy", "pharmacy", - "pharmacs", "pharmacist", - "pharmsci", "pharmacist", - "phenomon", "phenomenon", - "phramacy", "pharmacy", - "phsyical", "physical", - "phsyique", "physique", - "phyiscal", "physical", - "phyisque", "physique", - "physcial", "physical", - "physicis", "physicians", - "physicks", "physics", - "physicts", "physicist", - "physqiue", "physique", - "picthers", "pitchers", - "pillards", "pillars", - "pillaris", "pillars", - "pinancle", "pinnacle", - "pinapple", "pineapple", - "pinnalce", "pinnacle", - "pinnaple", "pineapple", - "pinncale", "pinnacle", - "pinpiont", "pinpoint", - "pinteret", "pinterest", - "piolting", "piloting", - "pioneeer", "pioneer", - "pithcers", "pitchers", - "placebro", "placebo", - "placemet", "placements", - "planetas", "planets", - "planetos", "planets", - "plantiff", "plaintiff", - "plantium", "platinum", - "plasitcs", "plastics", - "platfrom", "platform", - "platimun", "platinum", - "platnium", "platinum", - "platnuim", "platinum", - "plausibe", "plausible", - "playbody", "playboy", - "playstye", "playstyle", - "pleasent", "pleasant", - "plehtora", "plethora", - "pleothra", "plethora", - "plethroa", "plethora", - "ploygamy", "polygamy", - "pnatheon", "pantheon", - "poeoples", "peoples", - "poingant", "poignant", - "pointeur", "pointer", - "pointure", "pointer", - "poisones", "poisons", - "poisonis", "poisons", - "poisonos", "poisons", - "poisonus", "poisons", - "polgyamy", "polygamy", - "polietly", "politely", - "politing", "piloting", - "politley", "politely", - "poltical", "political", - "poluting", "polluting", - "polution", "pollution", - "polygoon", "polygon", - "polymore", "polymer", - "pomotion", "promotion", - "popoulus", "populous", - "populair", "popular", - "populare", "popular", - "populary", "popularity", - "porcelan", "porcelain", - "porposes", "proposes", - "portabel", "portable", - "portalis", "portals", - "portalus", "portals", - "portayed", "portrayed", - "portgual", "portugal", - "portrais", "portraits", - "portrary", "portray", - "portrayl", "portrayal", - "portriat", "portrait", - "posessed", "possessed", - "posesses", "possesses", - "posioned", "poisoned", - "positivs", "positives", - "positivy", "positivity", - "possable", "possible", - "possably", "possibly", - "possbily", "possibly", - "posseses", "possesses", - "possesse", "possessive", - "possesss", "possesses", - "potrayed", "portrayed", - "poverful", "powerful", - "powerded", "powdered", - "powerpot", "powerpoint", - "pracitse", "practise", - "practial", "practical", - "practies", "practise", - "pratcise", "practise", - "praticle", "particle", - "prceeded", "preceded", - "preadtor", "predator", - "preample", "preamble", - "preceeds", "precedes", - "precisie", "precise", - "precisly", "precisely", - "precisou", "precious", - "preculde", "preclude", - "predicat", "predict", - "predicte", "predictive", - "preferas", "prefers", - "prefered", "preferred", - "preferes", "prefers", - "preferis", "prefers", - "preferrs", "prefers", - "preimere", "premiere", - "preimums", "premiums", - "preiodic", "periodic", - "preivews", "previews", - "prejudis", "prejudices", - "prelayed", "replayed", - "premeire", "premiere", - "premesis", "premises", - "premiare", "premier", - "premines", "premise", - "premuims", "premiums", - "preorded", "preordered", - "preordes", "preorders", - "preoxide", "peroxide", - "prepaird", "prepaid", - "preqeuls", "prequels", - "prequles", "prequels", - "prescrie", "prescribed", - "presense", "presence", - "presenst", "presets", - "presidet", "presidents", - "presists", "persists", - "presitge", "prestige", - "presonas", "personas", - "presuade", "persuade", - "pretador", "predator", - "pretains", "pertains", - "preveiws", "previews", - "preverse", "perverse", - "previwes", "previews", - "pricipal", "principal", - "priciple", "principle", - "priemere", "premiere", - "priestes", "priests", - "primaris", "primaries", - "primarly", "primarily", - "princila", "principals", - "principl", "principals", - "prisitne", "pristine", - "probelms", "problems", - "probleem", "problem", - "procalim", "proclaim", - "proccess", "process", - "proceded", "proceeded", - "proceder", "procedure", - "procedes", "proceeds", - "procedue", "procedure", - "proceeed", "proceed", - "procesed", "proceeds", - "processs", "processes", - "proclami", "proclaim", - "procliam", "proclaim", - "procotol", "protocol", - "prodcuts", "products", - "producto", "production", - "profesor", "professor", - "proficit", "proficient", - "profilic", "prolific", - "progroms", "pogroms", - "prohibis", "prohibits", - "prohpecy", "prophecy", - "prohpets", "prophets", - "projecte", "projectile", - "projecto", "projection", - "prolouge", "prologue", - "promplty", "promptly", - "promptes", "prompts", - "promptus", "prompts", - "promtply", "promptly", - "pronoune", "pronounced", - "propechy", "prophecy", - "propehcy", "prophecy", - "propehts", "prophets", - "prophacy", "prophecy", - "propmted", "prompted", - "propmtly", "promptly", - "proponet", "proponents", - "proposse", "proposes", - "proposte", "propose", - "proprety", "property", - "propsect", "prospect", - "prosepct", "prospect", - "prostite", "prostitute", - "protable", "portable", - "protecte", "protective", - "protiens", "proteins", - "protines", "proteins", - "protocal", "protocol", - "prototye", "prototype", - "protrait", "portrait", - "protrays", "portrays", - "protugal", "portugal", - "proverai", "proverbial", - "providee", "providence", - "proximty", "proximity", - "pruchase", "purchase", - "pryamids", "pyramids", - "ptichers", "pitchers", - "pubisher", "publisher", - "publiser", "publisher", - "puinsher", "punisher", - "pulisher", "publisher", - "pumkpins", "pumpkins", - "pumpinks", "pumpkins", - "pumpknis", "pumpkins", - "punshier", "punisher", - "punsiher", "punisher", - "punsihes", "punishes", - "purcahse", "purchase", - "pyramind", "pyramid", - "pyrimads", "pyramids", - "pyrmaids", "pyramids", - "qauntity", "quantity", - "qualifiy", "qualify", - "quanitfy", "quantify", - "quantaty", "quantity", - "quantite", "quantities", - "quantuum", "quantum", - "quarante", "quarantine", - "quartery", "quarterly", - "qucikest", "quickest", - "queation", "equation", - "quention", "quentin", - "quickets", "quickest", - "quicklyu", "quickly", - "rabbitos", "rabbits", - "rabbitts", "rabbits", - "racistas", "racists", - "racistes", "racists", - "radaince", "radiance", - "rahpsody", "rhapsody", - "raidance", "radiance", - "railraod", "railroad", - "randomes", "randoms", - "randomez", "randomized", - "randomns", "randoms", - "randomrs", "randoms", - "randomus", "randoms", - "raosting", "roasting", - "raphsody", "rhapsody", - "raptores", "raptors", - "raspbery", "raspberry", - "rationel", "rationale", - "realible", "reliable", - "realibly", "reliably", - "realiest", "earliest", - "realisim", "realism", - "realisme", "realise", - "realistc", "realistic", - "realiste", "realise", - "realoded", "reloaded", - "realsied", "realised", - "realtion", "relation", - "realtive", "relative", - "reamined", "remained", - "reapired", "repaired", - "reaplugs", "earplugs", - "reaserch", "research", - "reasonal", "reasonably", - "reatiler", "retailer", - "reaveled", "revealed", - "rebellis", "rebellious", - "reboudns", "rebounds", - "rebounce", "rebound", - "rebuildt", "rebuilt", - "rebuplic", "republic", - "receeded", "receded", - "recepits", "receipts", - "receptie", "receptive", - "receptos", "receptors", - "receving", "receiving", - "recident", "resident", - "reciding", "residing", - "recieved", "received", - "reciever", "receiver", - "recieves", "receives", - "recipees", "recipes", - "recipets", "recipes", - "recogise", "recognise", - "recogize", "recognize", - "recognie", "recognizes", - "recomend", "recommend", - "recommed", "recommend", - "reconnet", "reconnect", - "rectange", "rectangle", - "rectifiy", "rectify", - "recuring", "recurring", - "recurits", "recruits", - "redeisgn", "redesign", - "redemeed", "redeemed", - "redesgin", "redesign", - "redesing", "redesign", - "reedemed", "redeemed", - "refeeres", "referees", - "refelcts", "reflects", - "refelxes", "reflexes", - "referede", "referee", - "referene", "referee", - "referens", "references", - "referere", "referee", - "referign", "refering", - "refering", "referring", - "refernce", "references", - "reffered", "referred", - "refilles", "refills", - "refillls", "refills", - "reflecte", "reflective", - "reflecto", "reflection", - "reformes", "reforms", - "refreing", "refering", - "refrence", "reference", - "refreshd", "refreshed", - "refreshr", "refresher", - "refromed", "reformed", - "regardes", "regards", - "regenade", "renegade", - "regenere", "regenerate", - "regiones", "regions", - "regisrty", "registry", - "registed", "registered", - "regresas", "regress", - "regreses", "regress", - "regresos", "regress", - "regresse", "regressive", - "regresso", "regression", - "regrests", "regress", - "regretts", "regrets", - "regsitry", "registry", - "regualrs", "regulars", - "regualte", "regulate", - "reguarly", "regularly", - "regulary", "regularly", - "regulatr", "regulator", - "regulats", "regulators", - "rehersal", "rehearsal", - "rehtoric", "rhetoric", - "reiceved", "recieved", - "reigment", "regiment", - "reigonal", "regional", - "rekenton", "renekton", - "relaible", "reliable", - "relaibly", "reliably", - "relaised", "realised", - "relaoded", "reloaded", - "relasped", "relapsed", - "relatabe", "relatable", - "relateds", "relates", - "relativy", "relativity", - "relavent", "relevant", - "relected", "reelected", - "relegato", "relegation", - "releived", "relieved", - "releiver", "reliever", - "relevent", "relevant", - "relfects", "reflects", - "relfexes", "reflexes", - "reliased", "realised", - "religous", "religious", - "relpased", "relapsed", - "remainds", "remains", - "remainig", "remaining", - "remannts", "remnants", - "remarkes", "remarks", - "remembed", "remembered", - "remembee", "remembered", - "rememebr", "remember", - "remenant", "remnant", - "reminent", "remnant", - "remmeber", "remember", - "remotley", "remotely", - "renderes", "renders", - "reneagde", "renegade", - "renetkon", "renekton", - "renewabe", "renewables", - "renketon", "renekton", - "renmants", "remnants", - "renoylds", "reynolds", - "renteris", "renters", - "renyolds", "reynolds", - "reowrked", "reworked", - "repaires", "repairs", - "repalces", "replaces", - "reparied", "repaired", - "repblics", "republics", - "repbulic", "republic", - "repeatae", "repeatable", - "repeates", "repeats", - "repetion", "repetition", - "repharse", "rephrase", - "repitles", "reptiles", - "replased", "relapsed", - "replayes", "replays", - "replicae", "replicated", - "replubic", "republic", - "reportes", "reporters", - "reposity", "repository", - "repostas", "reposts", - "repostes", "reposts", - "repostig", "reposting", - "repostus", "reposts", - "represet", "represents", - "represso", "repression", - "reprhase", "rephrase", - "repsects", "respects", - "repsonds", "responds", - "repsonse", "response", - "repsoted", "reposted", - "repubics", "republics", - "republis", "republics", - "repulics", "republics", - "repulsie", "repulsive", - "requiers", "requires", - "requieum", "requiem", - "requilme", "requiem", - "requried", "required", - "requries", "requires", - "rescuecd", "rescued", - "researce", "researcher", - "resembes", "resembles", - "reserach", "research", - "resevoir", "reservoir", - "resgined", "resigned", - "residude", "residue", - "residule", "residue", - "resinged", "resigned", - "resistas", "resists", - "resisten", "resistance", - "resistes", "resists", - "resloved", "resolved", - "resloves", "resolves", - "resmeble", "resemble", - "resotred", "restored", - "resourse", "resources", - "resovled", "resolved", - "resovles", "resolves", - "respecte", "respective", - "respesct", "respects", - "responce", "response", - "responed", "respond", - "respones", "response", - "responsd", "responds", - "respoted", "reposted", - "restanti", "restarting", - "restrait", "restraint", - "restrics", "restricts", - "resuable", "reusable", - "retailes", "retailers", - "retalier", "retailer", - "rethoric", "rhetoric", - "retirase", "retires", - "retireds", "retires", - "retireus", "retires", - "retireve", "retrieve", - "retreive", "retrieve", - "retrived", "retrieved", - "retunred", "returned", - "reuasble", "reusable", - "reveales", "reveals", - "reveiwed", "reviewed", - "reveiwer", "reviewer", - "revelaed", "revealed", - "revelant", "relevant", - "revelead", "revealed", - "reverals", "reversal", - "reviewes", "reviewers", - "revlover", "revolver", - "revloves", "revolves", - "revovler", "revolver", - "revovles", "revolves", - "rewatchd", "rewatched", - "rewitten", "rewritten", - "rewritte", "rewrite", - "rewtched", "wretched", - "reynlods", "reynolds", - "reyonlds", "reynolds", - "rhaposdy", "rhapsody", - "rhaspody", "rhapsody", - "rheotric", "rhetoric", - "righteos", "righteous", - "rigntone", "ringtone", - "ringotne", "ringtone", - "ritalian", "ritalin", - "rivalrly", "rivalry", - "roachers", "roaches", - "robberts", "robbers", - "robberys", "robbers", - "robocoop", "robocop", - "robocorp", "robocop", - "robocoup", "robocop", - "roelplay", "roleplay", - "roganism", "organism", - "rolepaly", "roleplay", - "romaanin", "romanian", - "romainan", "romanian", - "romanain", "romanian", - "romanica", "romania", - "rosettta", "rosetta", - "rostaing", "roasting", - "routeros", "routers", - "rutgerus", "rutgers", - "ryenolds", "reynolds", - "sacrifie", "sacrifice", - "saddends", "saddens", - "saddenes", "saddens", - "sadisitc", "sadistic", - "salaires", "salaries", - "sandales", "sandals", - "sandalls", "sandals", - "sandstom", "sandstorm", - "sanotrum", "santorum", - "santourm", "santorum", - "santroum", "santorum", - "santurom", "santorum", - "sapcebar", "spacebar", - "sapphrie", "sapphire", - "sarcasam", "sarcasm", - "sarcasim", "sarcasm", - "sarcastc", "sarcastic", - "sargeant", "sergeant", - "sasauges", "sausages", - "sasuages", "sausages", - "satelite", "satellite", - "satellie", "satellites", - "saterday", "saturday", - "satifies", "satisfies", - "satisfiy", "satisfy", - "satrical", "satirical", - "satruday", "saturday", - "saturdsy", "saturdays", - "sawstika", "swastika", - "scandlas", "scandals", - "scannign", "scanning", - "scarmble", "scramble", - "scepture", "scepter", - "schedual", "schedule", - "schoalrs", "scholars", - "scholary", "scholarly", - "schoodle", "schooled", - "scientic", "scientific", - "scientis", "scientist", - "scoprion", "scorpion", - "scorates", "socrates", - "scoripon", "scorpion", - "scorpoin", "scorpion", - "scostman", "scotsman", - "scratchs", "scratches", - "scriptue", "scriptures", - "scriptus", "scripts", - "scritped", "scripted", - "scroates", "socrates", - "scropion", "scorpion", - "scrpited", "scripted", - "scruitny", "scrutiny", - "scrunity", "scrutiny", - "sctosman", "scotsman", - "sculpter", "sculpture", - "scurtiny", "scrutiny", - "seahakws", "seahawks", - "seahwaks", "seahawks", - "seantors", "senators", - "sebastin", "sebastian", - "seceeded", "succeeded", - "secertly", "secretly", - "secrelty", "secretly", - "secretas", "secrets", - "secretos", "secrets", - "secruity", "security", - "secuirty", "security", - "sedereal", "sidereal", - "seldomly", "seldom", - "selectie", "selective", - "selfiers", "selfies", - "semestre", "semester", - "semseter", "semester", - "senarios", "scenarios", - "senerity", "serenity", - "seniores", "seniors", - "senisble", "sensible", - "sensibel", "sensible", - "sensores", "sensors", - "senstive", "sensitive", - "sentaors", "senators", - "sentiers", "sentries", - "sentinet", "sentient", - "sentinte", "sentient", - "sentires", "sentries", - "sentreis", "sentries", - "separato", "separation", - "separete", "seperate", - "sepearte", "seperate", - "seperate", "separate", - "seplling", "spelling", - "sepreate", "seperate", - "sepulcre", "sepulchre", - "serached", "searched", - "seraches", "searches", - "serentiy", "serenity", - "sergaent", "sergeant", - "settigns", "settings", - "seventen", "seventeen", - "severeal", "several", - "severeid", "severed", - "severide", "severed", - "severley", "severely", - "sexaully", "sexually", - "seziures", "seizures", - "sezuires", "seizures", - "shadoloo", "shadaloo", - "shangahi", "shanghai", - "shanghia", "shanghai", - "sharplay", "sharply", - "sharpley", "sharply", - "shawshak", "shawshank", - "shcolars", "scholars", - "shcooled", "schooled", - "sheilded", "shielded", - "shelterd", "sheltered", - "shelvers", "shelves", - "shelveys", "shelves", - "sherlcok", "sherlock", - "shetlers", "shelters", - "shfiting", "shifting", - "shifitng", "shifting", - "shifteer", "shifter", - "shileded", "shielded", - "shineing", "shining", - "shitstom", "shitstorm", - "shittoon", "shitton", - "shittown", "shitton", - "shleters", "shelters", - "shnaghai", "shanghai", - "shortend", "shortened", - "shotuout", "shoutout", - "shoudlnt", "shouldnt", - "shouldes", "shoulders", - "shoulndt", "shouldnt", - "shrapenl", "shrapnel", - "shrelock", "sherlock", - "shrinked", "shrunk", - "shrpanel", "shrapnel", - "shtiless", "shitless", - "shuoldnt", "shouldnt", - "sideboad", "sideboard", - "sidleine", "sideline", - "siezable", "sizeable", - "siezures", "seizures", - "signatue", "signatures", - "signfies", "signifies", - "signifiy", "signify", - "signigns", "signings", - "signular", "singular", - "silbings", "siblings", - "silicoln", "silicon", - "silicoon", "silicon", - "silimiar", "similiar", - "simialir", "similiar", - "simiilar", "similiar", - "similair", "similar", - "similari", "similiar", - "similart", "similarity", - "similary", "similarly", - "similiar", "similar", - "simliiar", "similiar", - "simluate", "simulate", - "simmilar", "similar", - "simpelst", "simplest", - "simplets", "simplest", - "simplicy", "simplicity", - "simplier", "simpler", - "simulato", "simulation", - "singlers", "singles", - "singluar", "singular", - "sinistre", "sinister", - "sinsiter", "sinister", - "sitckers", "stickers", - "sitrring", "stirring", - "sizebale", "sizeable", - "skateing", "skating", - "skecthes", "sketches", - "skelatel", "skeletal", - "skeletos", "skeletons", - "sketchey", "sketchy", - "sketpics", "skeptics", - "skillsto", "skillshots", - "skimrish", "skirmish", - "skpetics", "skeptics", - "skrimish", "skirmish", - "skteches", "sketches", - "skywalkr", "skywalker", - "slaptoon", "splatoon", - "slaverly", "slavery", - "slienced", "silenced", - "sliently", "silently", - "slighlty", "slightly", - "sligthly", "slightly", - "smartare", "smarter", - "snetries", "sentries", - "snippent", "snippet", - "snippert", "snippet", - "snowbals", "snowballs", - "snugglie", "snuggle", - "snydrome", "syndrome", - "snyopsis", "synopsis", - "soberity", "sobriety", - "sobreity", "sobriety", - "socailly", "socially", - "socalism", "socialism", - "socartes", "socrates", - "socialim", "socialism", - "socities", "societies", - "socttish", "scottish", - "soemthin", "somethin", - "soilders", "soldiers", - "solatary", "solitary", - "soldeirs", "soldiers", - "soliders", "soldiers", - "soluable", "soluble", - "solutide", "solitude", - "somalija", "somalia", - "somehtin", "somethin", - "someoens", "someones", - "somethis", "somethings", - "sometihn", "somethin", - "sometinh", "somethin", - "somoenes", "someones", - "somtimes", "sometimes", - "somwhere", "somewhere", - "soparnos", "sopranos", - "sophmore", "sophomore", - "sorcercy", "sorcery", - "sorcerey", "sorcery", - "sorceror", "sorcerer", - "sorcerry", "sorcery", - "sorpanos", "sopranos", - "southren", "southern", - "soverein", "sovereign", - "soverign", "sovereign", - "sovietes", "soviets", - "spagheti", "spaghetti", - "spainish", "spanish", - "spaltoon", "splatoon", - "spammade", "spammed", - "spammare", "spammer", - "spammear", "spammer", - "spammend", "spammed", - "spammeur", "spammer", - "spanisch", "spanish", - "sparklie", "sparkle", - "spawnign", "spawning", - "specemin", "specimen", - "speciaal", "special", - "specialt", "specialist", - "specialy", "specially", - "specialz", "specialize", - "specifed", "specified", - "specifiy", "specify", - "speciman", "specimen", - "specrtal", "spectral", - "speicals", "specials", - "spellign", "spelling", - "spendour", "splendour", - "sphereos", "spheres", - "spilnter", "splinter", - "spiltter", "splitter", - "spindrel", "spindle", - "spirites", "spirits", - "spiritis", "spirits", - "spiritus", "spirits", - "spirtied", "spirited", - "spleling", "spelling", - "splitner", "splinter", - "spoilerd", "spoiled", - "spoliers", "spoilers", - "sponsord", "sponsored", - "sporanos", "sopranos", - "spotifiy", "spotify", - "spotifty", "spotify", - "sppeches", "speeches", - "sprayade", "sprayed", - "spreaded", "spread", - "springst", "sprints", - "sprinkel", "sprinkle", - "sprintas", "sprints", - "spritual", "spiritual", - "sproutes", "sprouts", - "spwaning", "spawning", - "sqaudron", "squadron", - "sqaurely", "squarely", - "sqiurtle", "squirtle", - "squardon", "squadron", - "squareds", "squares", - "squarley", "squarely", - "squeakey", "squeaky", - "squeakly", "squeaky", - "squirlte", "squirtle", - "squirrle", "squirrel", - "squirtel", "squirtle", - "squishey", "squishy", - "squishly", "squishy", - "squritle", "squirtle", - "squrriel", "squirrel", - "squrtile", "squirtle", - "sriarcha", "sriracha", - "srriacha", "sriracha", - "sryacuse", "syracuse", - "staduims", "stadiums", - "staidums", "stadiums", - "staklers", "stalkers", - "stalekrs", "stalkers", - "stalkear", "stalker", - "staminia", "stamina", - "stampade", "stamped", - "stampeed", "stamped", - "stancels", "stances", - "stancers", "stances", - "standars", "standards", - "standbay", "standby", - "standbuy", "standby", - "stangant", "stagnant", - "staright", "straight", - "starined", "strained", - "starlted", "startled", - "startegy", "strategy", - "starteld", "startled", - "startsup", "startups", - "stateman", "statesman", - "staticts", "statist", - "stationd", "stationed", - "stationy", "stationary", - "statiskt", "statist", - "statistc", "statistic", - "statment", "statement", - "stattues", "statutes", - "statuets", "statutes", - "statuser", "stature", - "staurday", "saturday", - "steadliy", "steadily", - "stealhty", "stealthy", - "steathly", "stealthy", - "stelathy", "stealthy", - "sterilze", "sterile", - "steriods", "steroids", - "stichted", "stitched", - "sticthed", "stitched", - "sticthes", "stitches", - "stimulai", "stimuli", - "stimulas", "stimulants", - "stimulat", "stimulants", - "stimulli", "stimuli", - "stingent", "stringent", - "stirkers", "strikers", - "stlakers", "stalkers", - "stomache", "stomach", - "stormade", "stormed", - "stormend", "stormed", - "stradegy", "strategy", - "stragety", "strategy", - "straignt", "straighten", - "straigth", "straight", - "straings", "strains", - "strangel", "strangle", - "stranget", "strangest", - "stratgey", "strategy", - "stratled", "startled", - "streames", "streams", - "streamos", "streams", - "streamus", "streams", - "streamys", "streams", - "stregnth", "strength", - "stremear", "streamer", - "strenght", "strength", - "strengts", "strengths", - "strenous", "strenuous", - "strentgh", "strength", - "stretchs", "stretches", - "striaght", "straight", - "striclty", "strictly", - "striekrs", "strikers", - "strikely", "strikingly", - "stringet", "stringent", - "stubbron", "stubborn", - "stubmled", "stumbled", - "stucture", "structure", - "studioes", "studios", - "stuipder", "stupider", - "stumbeld", "stumbled", - "stupdily", "stupidly", - "stupidiy", "stupidity", - "stylisch", "stylish", - "styrofom", "styrofoam", - "suasages", "sausages", - "subltety", "subtlety", - "submarie", "submarines", - "subruban", "suburban", - "subscrie", "subscriber", - "subsidie", "subsidized", - "subsidiy", "subsidy", - "substace", "substance", - "substans", "substances", - "substite", "substitute", - "subtelty", "subtlety", - "subtetly", "subtlety", - "subtilte", "subtitle", - "subtitel", "subtitle", - "subtitls", "subtitles", - "subtltey", "subtlety", - "succeded", "succeeded", - "succedes", "succeeds", - "succeeed", "succeed", - "succesed", "succeeds", - "successs", "successes", - "succsess", "success", - "suceeded", "succeeded", - "sucesful", "successful", - "sucesion", "succession", - "sucesses", "successes", - "sucessor", "successor", - "sucessot", "successor", - "sucidial", "suicidal", - "suddnely", "suddenly", - "sufficit", "sufficient", - "suggesst", "suggests", - "suggeste", "suggestive", - "summenor", "summoner", - "summones", "summoners", - "sunfiber", "sunfire", - "sunscren", "sunscreen", - "superham", "superhuman", - "superheo", "superhero", - "superios", "superiors", - "supirsed", "suprised", - "suposing", "supposing", - "supporre", "supporters", - "suprised", "surprised", - "suprized", "surprised", - "suprsied", "suprised", - "supsects", "suspects", - "supsense", "suspense", - "surbuban", "suburban", - "surounds", "surrounds", - "surpases", "surpass", - "surpress", "suppress", - "surprize", "surprise", - "surrouns", "surrounds", - "surveill", "surveil", - "surveyer", "surveyor", - "surviver", "survivor", - "suspened", "suspend", - "suspenso", "suspension", - "swaering", "swearing", - "swansoon", "swanson", - "swasitka", "swastika", - "swaskita", "swastika", - "swatiska", "swastika", - "swatsika", "swastika", - "swedisch", "swedish", - "swiftley", "swiftly", - "swithced", "switched", - "swithces", "switches", - "swtiched", "switched", - "swtiches", "switches", - "syarcuse", "syracuse", - "sydnrome", "syndrome", - "sylablle", "syllable", - "syllabel", "syllable", - "symapthy", "sympathy", - "symboles", "symbols", - "symhpony", "symphony", - "symmerty", "symmetry", - "symmtery", "symmetry", - "symoblic", "symbolic", - "symphaty", "sympathy", - "symptoom", "symptom", - "symtpoms", "symptoms", - "synomyns", "synonyms", - "synonmys", "synonyms", - "synonomy", "synonym", - "synoynms", "synonyms", - "synphony", "symphony", - "synposis", "synopsis", - "sypmathy", "sympathy", - "sypmtoms", "symptoms", - "sypnosis", "synopsis", - "syraucse", "syracuse", - "syrcause", "syracuse", - "syringae", "syringe", - "syringue", "syringe", - "sysamdin", "sysadmin", - "sysdamin", "sysadmin", - "tacticas", "tactics", - "tacticts", "tactics", - "tacticus", "tactics", - "tagliate", "tailgate", - "tahnkyou", "thankyou", - "tailsman", "talisman", - "taiwanee", "taiwanese", - "taligate", "tailgate", - "taliored", "tailored", - "tallents", "tallest", - "talsiman", "talisman", - "tanturms", "tantrums", - "tapitude", "aptitude", - "tasliman", "talisman", - "tattooes", "tattoos", - "tattooos", "tattoos", - "taxanomy", "taxonomy", - "teamfigt", "teamfight", - "teamspek", "teamspeak", - "teancity", "tenacity", - "teapsoon", "teaspoon", - "techniqe", "technique", - "teenages", "teenagers", - "telegrah", "telegraph", - "telphony", "telephony", - "tempalrs", "templars", - "tempalte", "template", - "templats", "templates", - "templeos", "temples", - "templers", "temples", - "temporay", "temporary", - "temprary", "temporary", - "tenacles", "tentacles", - "tenactiy", "tenacity", - "tencaity", "tenacity", - "tendancy", "tendency", - "tendence", "tendencies", - "tentacel", "tentacle", - "tentacls", "tentacles", - "tentalce", "tentacle", - "tequilia", "tequila", - "terriory", "territory", - "territoy", "territory", - "terroist", "terrorist", - "tesitcle", "testicle", - "testicel", "testicle", - "testifiy", "testify", - "teusdays", "tuesdays", - "texutres", "textures", - "thaliand", "thailand", - "theather", "theater", - "theathre", "theater", - "theature", "theater", - "theisitc", "theistic", - "themslef", "themself", - "theorits", "theorist", - "theraphy", "therapy", - "thereian", "therein", - "theroies", "theories", - "theroist", "theorist", - "thesitic", "theistic", - "thialand", "thailand", - "thiestic", "theistic", - "thikning", "thinking", - "thirites", "thirties", - "thirstay", "thirsty", - "thnakyou", "thankyou", - "thoeries", "theories", - "thoerist", "theorist", - "thomspon", "thompson", - "thopmson", "thompson", - "thougths", "thoughts", - "thourogh", "thorough", - "threates", "threatens", - "threefor", "therefor", - "thriteen", "thirteen", - "thrities", "thirties", - "throaths", "throats", - "throners", "thrones", - "throough", "thorough", - "throught", "thought", - "thrusday", "thursday", - "thumbnal", "thumbnails", - "thurdsay", "thursday", - "thursdsy", "thursdays", - "tightare", "tighter", - "timestap", "timestamp", - "tirangle", "triangle", - "tirbunal", "tribunal", - "titainum", "titanium", - "titanuim", "titanium", - "tocuhpad", "touchpad", - "togehter", "together", - "togheter", "together", - "toiletts", "toilets", - "tolerabe", "tolerable", - "tommorow", "tomorrow", - "tonguers", "tongues", - "toriodal", "toroidal", - "toritlla", "tortilla", - "tornadoe", "tornado", - "torotise", "tortoise", - "torpedeo", "torpedo", - "torphies", "trophies", - "tortiose", "tortoise", - "toruisty", "touristy", - "toruneys", "tourneys", - "touchapd", "touchpad", - "tounreys", "tourneys", - "tourisim", "tourism", - "touritsy", "touristy", - "tournyes", "tourneys", - "toursits", "tourists", - "toursity", "touristy", - "toxiticy", "toxicity", - "trabajao", "trabajo", - "trabajdo", "trabajo", - "trackres", "trackers", - "trageted", "targeted", - "traingle", "triangle", - "traitour", "traitor", - "trakcers", "trackers", - "traliers", "trailers", - "tranform", "transform", - "transeat", "translates", - "transfom", "transform", - "transfos", "transforms", - "transiet", "transient", - "transito", "transition", - "transpot", "transport", - "trasnfer", "transfer", - "tratiors", "traitors", - "traveles", "travels", - "traveres", "traverse", - "treasurs", "treasures", - "treatmet", "treatments", - "treatsie", "treaties", - "treausre", "treasure", - "tredning", "trending", - "tremelos", "tremolos", - "tresuary", "treasury", - "trialers", "trailers", - "trianers", "trainers", - "triangel", "triangle", - "triangls", "triangles", - "trianing", "training", - "trianlge", "triangle", - "triators", "traitors", - "tribuanl", "tribunal", - "trickyer", "trickery", - "triggern", "triggering", - "trilogoy", "trilogy", - "trinagle", "triangle", - "trinekts", "trinkets", - "tringale", "triangle", - "trinitiy", "trinity", - "triology", "trilogy", - "triumpth", "triumph", - "trohpies", "trophies", - "trollade", "trolled", - "tropcial", "tropical", - "trotilla", "tortilla", - "trpoical", "tropical", - "trubinal", "tribunal", - "trubines", "turbines", - "tsunamai", "tsunami", - "tuesdsay", "tuesdays", - "tunnells", "tunnels", - "turkisch", "turkish", - "turntabe", "turntable", - "turretts", "turrets", - "tusedays", "tuesdays", - "tutorual", "tutorial", - "twilgiht", "twilight", - "tylenool", "tylenol", - "typicaly", "typically", - "tyranies", "tyrannies", - "tyrannia", "tyrannical", - "ublisher", "publisher", - "udnercut", "undercut", - "udnerdog", "underdog", - "ugpraded", "upgraded", - "ugprades", "upgrades", - "ukrainie", "ukraine", - "ukrainin", "ukrainian", - "ukranian", "ukrainian", - "ulitmate", "ultimate", - "ultamite", "ultimate", - "ultiamte", "ultimate", - "ultimely", "ultimately", - "ultrason", "ultrasound", - "umberlla", "umbrella", - "unabnned", "unbanned", - "unbanend", "unbanned", - "uncanney", "uncanny", - "uncannny", "uncanny", - "underbog", "undergo", - "underglo", "undergo", - "undersog", "undergo", - "undertoe", "undertones", - "underwar", "underwater", - "unfailry", "unfairly", - "unfarily", "unfairly", - "ungodley", "ungodly", - "unhapppy", "unhappy", - "unhealty", "unhealthy", - "unicrons", "unicorns", - "unifroms", "uniforms", - "uniquley", "uniquely", - "univeral", "universal", - "unlikley", "unlikely", - "unlockes", "unlocks", - "unluckly", "unlucky", - "unpoened", "unopened", - "unqiuely", "uniquely", - "unrakned", "unranked", - "unrnaked", "unranked", - "unrpoven", "unproven", - "unsuable", "unusable", - "untraind", "untrained", - "unusualy", "unusually", - "unvierse", "universe", - "unworhty", "unworthy", - "upgarded", "upgraded", - "upgardes", "upgrades", - "uploades", "uploads", - "upstaris", "upstairs", - "upstiars", "upstairs", - "urethrea", "urethra", - "uruguary", "uruguay", - "ususally", "usually", - "utilitiy", "utility", - "utlimate", "ultimate", - "vaccinae", "vaccinated", - "vaccinet", "vaccinated", - "vacinity", "vicinity", - "vaguelly", "vaguely", - "vaiation", "aviation", - "vaieties", "varieties", - "vailidty", "validity", - "vairable", "variable", - "vaklyrie", "valkyrie", - "valenica", "valencia", - "valentie", "valentines", - "valentis", "valentines", - "validade", "validated", - "valkirye", "valkyrie", - "valkiyre", "valkyrie", - "valkriye", "valkyrie", - "valkryie", "valkyrie", - "valkyire", "valkyrie", - "valnecia", "valencia", - "valubale", "valuable", - "valykrie", "valkyrie", - "vamipres", "vampires", - "vampiers", "vampires", - "vampries", "vampires", - "vangurad", "vanguard", - "vanillia", "vanilla", - "vanillla", "vanilla", - "vanugard", "vanguard", - "varaible", "variable", - "varaints", "variants", - "variabel", "variable", - "varibale", "variable", - "varities", "varieties", - "vassales", "vassals", - "vassalls", "vassals", - "vassalos", "vassals", - "vaticaan", "vatican", - "vaticina", "vatican", - "vaulable", "valuable", - "vaylkrie", "valkyrie", - "vechiles", "vehicles", - "vectores", "vectors", - "vegansim", "veganism", - "vegtable", "vegetable", - "vehciles", "vehicles", - "vehicels", "vehicles", - "vehicule", "vehicle", - "veichles", "vehicles", - "venelope", "envelope", - "venemous", "venomous", - "vengance", "vengeance", - "vengence", "vengeance", - "verablly", "verbally", - "verbaitm", "verbatim", - "verisons", "versions", - "versatel", "versatile", - "vertabim", "verbatim", - "vertigro", "vertigo", - "vesseles", "vessels", - "vessells", "vessels", - "viabiliy", "viability", - "viatmins", "vitamins", - "vibratie", "vibrate", - "vibratin", "vibration", - "vicintiy", "vicinity", - "vicseral", "visceral", - "victimas", "victims", - "victimes", "victims", - "victorin", "victorian", - "victoris", "victories", - "vieweres", "viewers", - "viewpoit", "viewpoints", - "vigilane", "vigilante", - "vigliant", "vigilant", - "vikingos", "vikings", - "viligant", "vigilant", - "villegas", "villages", - "vindicte", "vindictive", - "vinicity", "vicinity", - "violatin", "violation", - "violenty", "violently", - "violetas", "violates", - "virament", "vraiment", - "virbator", "vibrator", - "virginas", "virgins", - "virgines", "virgins", - "virgings", "virgins", - "virginis", "virgins", - "virginus", "virgins", - "virtualy", "virtually", - "virtuels", "virtues", - "virtuose", "virtues", - "viscreal", "visceral", - "visercal", "visceral", - "visibily", "visibility", - "visibley", "visibly", - "visiblly", "visibly", - "vitailty", "vitality", - "vitimans", "vitamins", - "vitmains", "vitamins", - "vitories", "victories", - "voicemal", "voicemail", - "voilates", "violates", - "volatily", "volatility", - "volcando", "volcano", - "volcanoe", "volcano", - "volcaron", "volcano", - "vriament", "vraiment", - "wahtever", "whatever", - "wallpapr", "wallpapers", - "warantee", "warranty", - "warcarft", "warcraft", - "warrante", "warranties", - "warriros", "warriors", - "watchemn", "watchmen", - "watchign", "watching", - "wathcing", "watching", - "wathcmen", "watchmen", - "wathever", "whatever", - "watkings", "watkins", - "wealthly", "wealthy", - "webistes", "websites", - "websties", "websites", - "wednesdy", "wednesdays", - "weigthed", "weighted", - "weridest", "weirdest", - "werstler", "wrestler", - "wesbites", "websites", - "westbrok", "westbrook", - "westerse", "westerners", - "wherease", "whereas", - "whipsers", "whispers", - "whislist", "wishlist", - "whisltes", "whistles", - "whisperd", "whispered", - "whistels", "whistles", - "whitsles", "whistles", - "whsipers", "whispers", - "widgetas", "widgets", - "wieghted", "weighted", - "willaims", "williams", - "willfuly", "willfully", - "willimas", "williams", - "windsoar", "windsor", - "wininpeg", "winnipeg", - "winnigns", "winnings", - "winnpieg", "winnipeg", - "wiredest", "weirdest", - "wishlsit", "wishlist", - "wishpers", "whispers", - "withdral", "withdrawal", - "witnesss", "witnesses", - "wonderes", "wonders", - "wonderus", "wonders", - "workfore", "workforce", - "wouldnot", "wouldnt", - "wranlger", "wrangler", - "wreckign", "wrecking", - "wrecthed", "wretched", - "wrekcing", "wrecking", - "wreslter", "wrestler", - "wresters", "wrestlers", - "writting", "writing", - "wrnagler", "wrangler", - "wrteched", "wretched", - "yeilding", "yielding", - "yoesmite", "yosemite", - "yorksher", "yorkshire", - "yorkshie", "yorkshire", - "yosemeti", "yosemite", - "yosimete", "yosemite", - "zealotes", "zealots", - "zealoths", "zealots", - "zealotus", "zealots", - "zealouts", "zealous", - "zepplein", "zeppelin", - "zepplien", "zeppelin", - "zimbabew", "zimbabwe", - "zimbawbe", "zimbabwe", - "zinoists", "zionists", - "zionisim", "zionism", - "zionistm", "zionism", - "zionsits", "zionists", - "zoinists", "zionists", - "abiltiy", "ability", - "abodmen", "abdomen", - "abondon", "abandon", - "aboslve", "absolve", - "abosrbs", "absorbs", - "abriter", "arbiter", - "abrupty", "abruptly", - "absense", "absence", - "absolue", "absolute", - "absovle", "absolve", - "absrobs", "absorbs", - "absuers", "abusers", - "absurdy", "absurdly", - "absymal", "abysmal", - "abymsal", "abysmal", - "acadamy", "academy", - "acadmic", "academic", - "accesss", "access", - "accpets", "accepts", - "accross", "across", - "accuray", "accuracy", - "acheive", "achieve", - "achived", "achieved", - "acident", "accident", - "ackward", "awkward", - "acrlyic", "acrylic", - "actauly", "actualy", - "activit", "activist", - "activly", "actively", - "actualy", "actually", - "actulay", "actualy", - "acuracy", "accuracy", - "acusing", "causing", - "acustom", "accustom", - "acutaly", "actualy", - "acyrlic", "acrylic", - "adaptes", "adapters", - "adatper", "adapter", - "adbomen", "abdomen", - "addcits", "addicts", - "adderss", "address", - "addtion", "addition", - "adequet", "adequate", - "adequit", "adequate", - "adivser", "adviser", - "adivsor", "advisor", - "admited", "admitted", - "admrial", "admiral", - "adpater", "adapter", - "adquire", "acquire", - "adultey", "adultery", - "adverst", "adverts", - "adviced", "advised", - "advocay", "advocacy", - "advsior", "advisor", - "aeriels", "aerials", - "affaris", "affairs", - "affiars", "affairs", - "afircan", "african", - "africas", "africans", - "afwully", "awfully", - "againts", "against", - "agaisnt", "against", - "aganist", "against", - "aggreed", "agreed", - "agianst", "against", - "agreing", "agreeing", - "agruing", "arguing", - "ahtiest", "athiest", - "aicraft", "aircraft", - "ailmony", "alimony", - "airbore", "airborne", - "aircaft", "aircraft", - "airlfow", "airflow", - "airosft", "airsoft", - "airpost", "airports", - "airsfot", "airsoft", - "airzona", "arizona", - "alchmey", "alchemy", - "alchool", "alcohol", - "alcohal", "alcohol", - "aledged", "alleged", - "aledges", "alleges", - "alegbra", "algebra", - "algerba", "algebra", - "alienet", "alienate", - "alledge", "allege", - "allegry", "allergy", - "alltime", "all-time", - "almighy", "almighty", - "alochol", "alcohol", - "alotted", "allotted", - "alowing", "allowing", - "alphabt", "alphabet", - "alreayd", "already", - "alrighy", "alrighty", - "altanta", "atlanta", - "alteast", "atleast", - "altough", "although", - "alusion", "allusion", - "amateus", "amateurs", - "amatuer", "amateur", - "amature", "armature", - "amensia", "amnesia", - "amensty", "amnesty", - "amercia", "america", - "americs", "americas", - "ammount", "amount", - "ammused", "amused", - "amneisa", "amnesia", - "amnsety", "amnesty", - "amognst", "amongst", - "amongts", "amongst", - "amonsgt", "amongst", - "ampilfy", "amplify", - "amrpits", "armpits", - "analoge", "analogue", - "analsyt", "analyst", - "analyes", "analyse", - "analyts", "analyst", - "analzye", "analyze", - "anaylse", "analyse", - "anaylst", "analyst", - "anaylze", "analyze", - "anceint", "ancient", - "andorid", "android", - "andriod", "android", - "androis", "androids", - "angirly", "angrily", - "angluar", "angular", - "angualr", "angular", - "anicent", "ancient", - "anitque", "antique", - "anixety", "anxiety", - "anmesia", "amnesia", - "anmesty", "amnesty", - "annoint", "anoint", - "annualy", "annually", - "annuled", "annulled", - "anohter", "another", - "anomoly", "anomaly", - "answerd", "answered", - "anuglar", "angular", - "anulled", "annulled", - "anwsers", "answers", - "anwyays", "anyways", - "anxeity", "anxiety", - "anyoens", "anyones", - "anyonse", "anyones", - "anywyas", "anyways", - "aparent", "apparent", - "appeard", "appeared", - "appluad", "applaud", - "aproval", "approval", - "apsects", "aspects", - "apshalt", "asphalt", - "apsirin", "aspirin", - "aqcuire", "acquire", - "aquarim", "aquarium", - "aquired", "acquired", - "aranged", "arranged", - "arbitre", "arbiter", - "arcahic", "archaic", - "archiac", "archaic", - "arcylic", "acrylic", - "aresnal", "arsenal", - "aretmis", "artemis", - "argubly", "arguably", - "aribter", "arbiter", - "ariflow", "airflow", - "arisoft", "airsoft", - "aritsts", "artists", - "armchar", "armchair", - "arogant", "arrogant", - "arogent", "arrogant", - "arresst", "arrests", - "arround", "around", - "arsneal", "arsenal", - "artcile", "article", - "artical", "article", - "articel", "article", - "artistc", "artistic", - "artmeis", "artemis", - "artsits", "artists", - "aruging", "arguing", - "aseuxal", "asexual", - "asexaul", "asexual", - "ashpalt", "asphalt", - "asiprin", "aspirin", - "asissts", "assists", - "asnwers", "answers", - "asorbed", "absorbed", - "aspahlt", "asphalt", - "asphlat", "asphalt", - "aspriin", "aspirin", - "assagne", "assange", - "assasin", "assassin", - "assembe", "assemble", - "assemby", "assembly", - "assisst", "assists", - "assnage", "assange", - "asssits", "assists", - "assualt", "assault", - "asterik", "asterisk", - "asutria", "austria", - "atcualy", "actualy", - "atelast", "atleast", - "athesim", "atheism", - "athiesm", "atheism", - "athiest", "atheist", - "athiets", "athiest", - "athlets", "athletes", - "atlantc", "atlantic", - "atleats", "atleast", - "atlesat", "atleast", - "atorney", "attorney", - "atremis", "artemis", - "attemps", "attempts", - "attemts", "attempts", - "attened", "attended", - "attracs", "attracts", - "audbile", "audible", - "audibel", "audible", - "austira", "austria", - "austrai", "austria", - "autistc", "autistic", - "avation", "aviation", - "avtaars", "avatars", - "awakend", "awakened", - "bablyon", "babylon", - "backdor", "backdoor", - "backsta", "backseat", - "baclony", "balcony", - "badnits", "bandits", - "baiscly", "basicly", - "bakcers", "backers", - "balanse", "balances", - "balcked", "blacked", - "banhsee", "banshee", - "bankgok", "bangkok", - "baoynet", "bayonet", - "baptims", "baptism", - "baptsim", "baptism", - "baragin", "bargain", - "bargani", "bargain", - "bargian", "bargain", - "bariner", "brainer", - "barlkey", "barkley", - "barracs", "barracks", - "barrles", "barrels", - "barsita", "barista", - "barvery", "bravery", - "bascily", "basicly", - "basicly", "basically", - "basilcy", "basicly", - "basiton", "bastion", - "basnhee", "banshee", - "bastane", "bastante", - "bastars", "bastards", - "bastino", "bastion", - "bathrom", "bathroom", - "batitsa", "batista", - "batsita", "batista", - "bayblon", "babylon", - "baynoet", "bayonet", - "bayoent", "bayonet", - "bceuase", "becuase", - "beacuse", "because", - "bealtes", "beatles", - "beaslty", "beastly", - "beatels", "beatles", - "beaucop", "beaucoup", - "becamae", "became", - "becames", "becomes", - "becasue", "because", - "becouse", "because", - "becuaes", "becuase", - "becuase", "because", - "becusae", "becuase", - "befried", "befriend", - "beggins", "begins", - "beglian", "belgian", - "beglium", "belgium", - "begnals", "bengals", - "bejiing", "beijing", - "beleifs", "beliefs", - "beleive", "believe", - "belgain", "belgian", - "belguim", "belgium", - "believr", "believer", - "believs", "believes", - "belifes", "beliefs", - "beligan", "belgian", - "beligum", "belgium", - "belived", "believed", - "belives", "believes", - "benagls", "bengals", - "benedit", "benedict", - "benghai", "benghazi", - "benglas", "bengals", - "benifit", "benefit", - "beoynce", "beyonce", - "beraded", "bearded", - "bersekr", "berserk", - "beseige", "besiege", - "betales", "beatles", - "bethesa", "bethesda", - "betrayd", "betrayed", - "beucase", "becuase", - "bewteen", "between", - "bicthes", "bitches", - "bidrman", "birdman", - "biejing", "beijing", - "bifgoot", "bigfoot", - "bigorty", "bigotry", - "bigtoed", "bigoted", - "bigtory", "bigotry", - "biogted", "bigoted", - "biogtry", "bigotry", - "bioplar", "bipolar", - "biploar", "bipolar", - "birdamn", "birdman", - "birdges", "bridges", - "birgade", "brigade", - "bitcion", "bitcoin", - "bithced", "bitched", - "bithces", "bitches", - "bitocin", "bitcoin", - "bizzare", "bizarre", - "blacony", "balcony", - "blaimed", "blamed", - "blankes", "blankets", - "blegian", "belgian", - "blegium", "belgium", - "blizzad", "blizzard", - "blockes", "blockers", - "bloster", "bolster", - "blulets", "bullets", - "bobmers", "bombers", - "bollocs", "bollocks", - "bondary", "boundary", - "bonnano", "bonanno", - "bonsues", "bonuses", - "boraden", "broaden", - "borader", "broader", - "boradly", "broadly", - "bordeom", "boredom", - "boslter", "bolster", - "boudler", "boulder", - "boundry", "boundary", - "bounses", "bonuses", - "boutiqe", "boutique", - "bouyant", "buoyant", - "braevry", "bravery", - "braista", "barista", - "brakley", "barkley", - "branier", "brainer", - "braoden", "broaden", - "braoder", "broader", - "braodly", "broadly", - "brednan", "brendan", - "breifly", "briefly", - "breserk", "berserk", - "brethen", "brethren", - "brewrey", "brewery", - "briagde", "brigade", - "brianer", "brainer", - "bridman", "birdman", - "brielfy", "briefly", - "brigdes", "bridges", - "brightn", "brighten", - "brisben", "brisbane", - "britian", "britain", - "britsol", "bristol", - "briused", "bruised", - "briuser", "bruiser", - "briuses", "bruises", - "brocoli", "broccoli", - "bronocs", "broncos", - "browine", "brownie", - "brownei", "brownie", - "brownis", "brownies", - "bruglar", "burglar", - "brunete", "brunette", - "bruning", "burning", - "brusied", "bruised", - "brusies", "bruises", - "brusses", "brussels", - "brutaly", "brutally", - "btiched", "bitched", - "btiches", "bitches", - "bubbels", "bubbles", - "buddhim", "buddhism", - "buddhit", "buddhist", - "buddist", "buddhist", - "budgest", "budgets", - "bugdets", "budgets", - "buildes", "builders", - "bulgara", "bulgaria", - "bullest", "bullets", - "buoancy", "buoyancy", - "burguny", "burgundy", - "buriser", "bruiser", - "burlgar", "burglar", - "burnign", "burning", - "burried", "buried", - "burrtio", "burrito", - "busines", "business", - "busness", "business", - "butthoe", "butthole", - "buttrey", "buttery", - "cababge", "cabbage", - "cabines", "cabinets", - "cabniet", "cabinet", - "caclium", "calcium", - "cacuses", "caucuses", - "caffeen", "caffeine", - "cahched", "cached", - "cahotic", "chaotic", - "cahsier", "cashier", - "cailbre", "calibre", - "calaber", "caliber", - "calagry", "calgary", - "calback", "callback", - "calbire", "calibre", - "calcuim", "calcium", - "calculs", "calculus", - "calicum", "calcium", - "calrify", "clarify", - "calrity", "clarity", - "caluses", "clauses", - "camboda", "cambodia", - "campain", "campaign", - "campuss", "campuses", - "cancles", "cancels", - "cancres", "cancers", - "cancuks", "canucks", - "canides", "candies", - "cannnot", "cannot", - "canrage", "carnage", - "capible", "capable", - "capitas", "capitals", - "capsuls", "capsules", - "captais", "captains", - "captial", "capital", - "captiol", "capitol", - "captued", "captured", - "capturd", "captured", - "capusle", "capsule", - "carange", "carnage", - "carbien", "carbine", - "cardaic", "cardiac", - "cardina", "cardigan", - "careing", "caring", - "caridac", "cardiac", - "carmtan", "cartman", - "carnege", "carnage", - "carnige", "carnage", - "carolan", "carolina", - "carreer", "career", - "carrers", "careers", - "cartles", "cartels", - "caryons", "crayons", - "casette", "cassette", - "casheir", "cashier", - "cashies", "cashiers", - "cashire", "cashier", - "casltes", "castles", - "caspule", "capsule", - "cassete", "cassette", - "castels", "castles", - "casuing", "causing", - "cathlic", "catholic", - "cauncks", "canucks", - "cavarly", "cavalry", - "cavlary", "cavalry", - "celcius", "celsius", - "celisus", "celsius", - "celitcs", "celtics", - "celsuis", "celsius", - "centruy", "century", - "centuty", "century", - "ceratin", "certain", - "cermaic", "ceramic", - "certian", "certain", - "cervial", "cervical", - "cesspol", "cesspool", - "cetlics", "celtics", - "chambre", "chamber", - "charcol", "charcoal", - "charisa", "charisma", - "chasiss", "chassis", - "chatoic", "chaotic", - "cheeots", "cheetos", - "cheesse", "cheeses", - "chekcer", "checker", - "chelsae", "chelsea", - "cheslea", "chelsea", - "chiense", "chinese", - "childen", "children", - "chimeny", "chimney", - "chinees", "chinese", - "chinmey", "chimney", - "chipest", "chipset", - "chispet", "chipset", - "chivaly", "chivalry", - "chlesea", "chelsea", - "choatic", "chaotic", - "chocies", "choices", - "choosen", "chosen", - "chtulhu", "cthulhu", - "churchs", "churches", - "cilanto", "cilantro", - "cilents", "clients", - "circels", "circles", - "circuis", "circuits", - "cirlces", "circles", - "clacium", "calcium", - "claerer", "clearer", - "claerly", "clearly", - "clagary", "calgary", - "claibre", "calibre", - "claimes", "claims", - "clairfy", "clarify", - "clairty", "clarity", - "clanand", "clannad", - "clarfiy", "clarify", - "classis", "classics", - "clasues", "clauses", - "claymer", "claymore", - "claymoe", "claymore", - "cleanes", "cleanse", - "cleasne", "cleanse", - "cleints", "clients", - "clenase", "cleanse", - "clesius", "celsius", - "cletics", "celtics", - "clevery", "cleverly", - "climats", "climates", - "climbes", "climbers", - "clincis", "clinics", - "clitors", "clitoris", - "cloesly", "closely", - "closley", "closely", - "cluases", "clauses", - "cluprit", "culprit", - "coalese", "coalesce", - "coctail", "cocktail", - "cohesie", "cohesive", - "colgone", "cologne", - "collape", "collapse", - "collest", "collects", - "collony", "colony", - "collumn", "column", - "cologen", "cologne", - "colomba", "colombia", - "colonge", "cologne", - "colorao", "colorado", - "colourd", "coloured", - "columsn", "columns", - "comando", "commando", - "comapny", "company", - "comapre", "compare", - "comarde", "comrade", - "comback", "comeback", - "combins", "combines", - "comdeic", "comedic", - "comited", "committed", - "commano", "commando", - "commans", "commands", - "commere", "commerce", - "comming", "coming", - "commitd", "commited", - "compase", "compares", - "compede", "competed", - "compilr", "compiler", - "compnay", "company", - "compots", "compost", - "comrads", "comrades", - "comtpon", "compton", - "conceed", "concede", - "conceps", "concepts", - "conclue", "conclude", - "concret", "concert", - "condenm", "condemn", - "condiut", "conduit", - "condmen", "condemn", - "confids", "confides", - "confins", "confines", - "confise", "confines", - "conflit", "conflict", - "conived", "connived", - "connecs", "connects", - "conqeur", "conquer", - "conqure", "conquer", - "consept", "concept", - "consern", "concern", - "consums", "consumes", - "contacs", "contacts", - "contais", "contains", - "contast", "contacts", - "contemt", "contempt", - "contens", "contents", - "contess", "contests", - "contian", "contain", - "contine", "continue", - "convers", "converts", - "conveyd", "conveyed", - "convine", "convince", - "coprses", "corpses", - "coputer", "computer", - "corasir", "corsair", - "coratia", "croatia", - "coridal", "cordial", - "corsari", "corsair", - "corsiar", "corsair", - "corspes", "corpses", - "corwbar", "crowbar", - "costums", "costumes", - "coudlnt", "couldnt", - "coulmns", "columns", - "coulndt", "couldnt", - "counsle", "counsel", - "countes", "counters", - "courtey", "courtesy", - "covenat", "covenant", - "coytoes", "coyotes", - "crabine", "carbine", - "cralwed", "crawled", - "craotia", "croatia", - "craweld", "crawled", - "creamic", "ceramic", - "createn", "creatine", - "creater", "creature", - "creatie", "creatine", - "creatue", "creature", - "creepes", "creepers", - "creepig", "creeping", - "creulty", "cruelty", - "cricles", "circles", - "critera", "criteria", - "cropses", "corpses", - "crosair", "corsair", - "crpytic", "cryptic", - "crsytal", "crystal", - "crtical", "critical", - "crucibe", "crucible", - "cruetly", "cruelty", - "cruical", "crucial", - "crulety", "cruelty", - "crusdae", "crusade", - "crusier", "cruiser", - "crusies", "cruises", - "crusive", "cursive", - "crutchs", "crutches", - "crypitc", "cryptic", - "crystas", "crystals", - "crystsl", "crystals", - "crytpic", "cryptic", - "crytsal", "crystal", - "cthluhu", "cthulhu", - "cthuhlu", "cthulhu", - "cthuluh", "cthulhu", - "ctuhlhu", "cthulhu", - "cuasing", "causing", - "cubcile", "cubicle", - "cubilce", "cubicle", - "cuddels", "cuddles", - "culrpit", "culprit", - "culturs", "cultures", - "cupboad", "cupboard", - "cuplrit", "culprit", - "curatin", "curtain", - "curcial", "crucial", - "curcuit", "circuit", - "curelty", "cruelty", - "curiser", "cruiser", - "curisve", "cursive", - "currate", "curate", - "currens", "currents", - "curreny", "currency", - "currest", "currents", - "cursade", "crusade", - "curtian", "curtain", - "cyandie", "cyanide", - "cyclits", "cyclist", - "cycloen", "cyclone", - "cycolps", "cyclops", - "cylcist", "cyclist", - "cylcone", "cyclone", - "cylcops", "cyclops", - "cynaide", "cyanide", - "cyrptic", "cryptic", - "cyrstal", "crystal", - "dagners", "dangers", - "daimond", "diamond", - "damenor", "demeanor", - "dammage", "damage", - "darcula", "dracula", - "dargons", "dragons", - "darkets", "darkest", - "datbase", "database", - "daulity", "duality", - "dawrves", "dwarves", - "ddogers", "dodgers", - "ddoging", "dodging", - "deadlit", "deadlift", - "deadpol", "deadpool", - "deafult", "default", - "deahtly", "deathly", - "deatils", "details", - "deatlhy", "deathly", - "decalre", "declare", - "decison", "decision", - "declars", "declares", - "declase", "declares", - "decress", "decrees", - "decribe", "describe", - "decsend", "descend", - "dectect", "detect", - "defaint", "defiant", - "defauls", "defaults", - "defelct", "deflect", - "defensd", "defends", - "deffine", "define", - "definat", "defiant", - "definet", "definite", - "definie", "definite", - "definig", "defining", - "definit", "definite", - "defualt", "default", - "degarde", "degrade", - "degrase", "degrasse", - "degrate", "degrade", - "deiners", "deniers", - "deisgns", "designs", - "deivant", "deviant", - "dekstop", "desktop", - "delcare", "declare", - "delfect", "deflect", - "demenor", "demeanor", - "dementa", "dementia", - "demsond", "desmond", - "deneirs", "deniers", - "denisty", "density", - "densley", "densely", - "depcits", "depicts", - "dependd", "depended", - "depitcs", "depicts", - "deployd", "deployed", - "depsise", "despise", - "descrie", "describe", - "descuss", "discuss", - "desgins", "designs", - "desings", "designs", - "desitny", "destiny", - "desnely", "densely", - "desnity", "density", - "desomnd", "desmond", - "despict", "depict", - "despide", "despised", - "despies", "despise", - "destkop", "desktop", - "destory", "destroy", - "destros", "destroys", - "detaild", "detailed", - "detials", "details", - "detorit", "detroit", - "detriot", "detroit", - "deuling", "dueling", - "devaint", "deviant", - "devaite", "deviate", - "devided", "divided", - "devlove", "devolve", - "devotin", "devotion", - "devovle", "devolve", - "diabets", "diabetes", - "dialecs", "dialects", - "dialoge", "dialogue", - "diamons", "diamonds", - "diasble", "disable", - "dicksih", "dickish", - "dicover", "discover", - "dictats", "dictates", - "dieties", "deities", - "dilpoma", "diploma", - "dimaond", "diamond", - "dingity", "dignity", - "dinosar", "dinosaur", - "diosese", "diocese", - "dipolma", "diploma", - "dirbble", "dribble", - "directy", "directly", - "diretcx", "directx", - "dirived", "derived", - "dirvers", "drivers", - "disbale", "disable", - "disguss", "disgusts", - "disliks", "dislikes", - "disover", "discover", - "dispair", "despair", - "dispath", "dispatch", - "dispite", "despite", - "dispuse", "disputes", - "disputs", "disputes", - "dissole", "dissolve", - "distase", "distaste", - "distint", "distinct", - "divison", "division", - "docuhes", "douches", - "docuhey", "douchey", - "dogders", "dodgers", - "dogding", "dodging", - "dolhpin", "dolphin", - "dolphis", "dolphins", - "dominae", "dominate", - "dominno", "dominion", - "doplhin", "dolphin", - "dortmud", "dortmund", - "draclua", "dracula", - "dracual", "dracula", - "drakest", "darkest", - "dramtic", "dramatic", - "dribbel", "dribble", - "driectx", "directx", - "driftig", "drifting", - "drinkes", "drinkers", - "druming", "drumming", - "duailty", "duality", - "dualtiy", "duality", - "dubsetp", "dubstep", - "dulaity", "duality", - "duleing", "dueling", - "dunegon", "dungeon", - "dungeos", "dungeons", - "dungoen", "dungeon", - "durring", "during", - "dusbtep", "dubstep", - "dyansty", "dynasty", - "dynamis", "dynamics", - "dynsaty", "dynasty", - "earlies", "earliest", - "earliet", "earliest", - "earplus", "earplugs", - "eastwod", "eastwood", - "ebcuase", "becuase", - "ecilpse", "eclipse", - "eclipes", "eclipse", - "eclispe", "eclipse", - "eclpise", "eclipse", - "ectsasy", "ecstasy", - "edbiles", "edibles", - "edibels", "edibles", - "effords", "efforts", - "ehtanol", "ethanol", - "eifnach", "einfach", - "eighten", "eighteen", - "einfahc", "einfach", - "elasped", "elapsed", - "elcipse", "eclipse", - "elction", "election", - "elecrto", "electro", - "electic", "electric", - "electon", "election", - "ellitot", "elliott", - "elloitt", "elliott", - "elphant", "elephant", - "emabrgo", "embargo", - "emabssy", "embassy", - "emapthy", "empathy", - "embeded", "embedded", - "embrago", "embargo", - "eminate", "emanate", - "emipres", "empires", - "emision", "emission", - "emiting", "emitting", - "emition", "emission", - "emmited", "emitted", - "empahty", "empathy", - "emphsis", "emphasis", - "empiers", "empires", - "empited", "emptied", - "emplore", "employer", - "emporer", "emperor", - "empries", "empires", - "emtpied", "emptied", - "enameld", "enameled", - "encahnt", "enchant", - "encalve", "enclave", - "encrpyt", "encrypt", - "encyrpt", "encrypt", - "endores", "endorse", - "endrose", "endorse", - "energis", "energies", - "enforse", "enforces", - "enginer", "engineer", - "englsih", "english", - "enhanse", "enhances", - "enlcave", "enclave", - "enlgish", "english", - "enlsave", "enslave", - "ensalve", "enslave", - "entbook", "netbook", - "entirey", "entirety", - "entorpy", "entropy", - "epiloge", "epilogue", - "episdoe", "episode", - "epsiode", "episode", - "epsorts", "esports", - "eptiome", "epitome", - "equiped", "equipped", - "erested", "arrested", - "escapse", "escapes", - "escpaes", "escapes", - "esctasy", "ecstasy", - "esporst", "esports", - "espreso", "espresso", - "esprots", "esports", - "essense", "essence", - "etherel", "ethereal", - "ethnaol", "ethanol", - "euphora", "euphoria", - "europen", "european", - "eurpean", "european", - "everets", "everest", - "everset", "everest", - "evloved", "evolved", - "evloves", "evolves", - "evovled", "evolved", - "evovles", "evolves", - "exaclty", "exactly", - "exahust", "exhaust", - "examind", "examined", - "exapnds", "expands", - "exatled", "exalted", - "excange", "exchange", - "excatly", "exactly", - "excells", "excels", - "exceprt", "excerpt", - "excluse", "excludes", - "excrept", "excerpt", - "exculde", "exclude", - "exelent", "excellent", - "exemple", "example", - "exerpts", "excerpts", - "exhasut", "exhaust", - "exhuast", "exhaust", - "exising", "existing", - "existet", "existent", - "exlated", "exalted", - "exlcude", "exclude", - "exliled", "exiled", - "exludes", "excludes", - "exmaple", "example", - "exoitcs", "exotics", - "expalin", "explain", - "expeced", "expected", - "expells", "expels", - "expiers", "expires", - "explict", "explicit", - "expliot", "exploit", - "explods", "explodes", - "explose", "explodes", - "expolde", "explode", - "expolit", "exploit", - "exposse", "exposes", - "expries", "expires", - "exsited", "existed", - "extered", "exerted", - "exterme", "extreme", - "extoics", "exotics", - "extreem", "extreme", - "extrems", "extremes", - "eyebals", "eyeballs", - "eyebros", "eyebrows", - "fabulos", "fabulous", - "facebok", "facebook", - "facepam", "facepalm", - "faclons", "falcons", - "facsism", "fascism", - "facsist", "fascist", - "failurs", "failures", - "faincee", "fiancee", - "falesly", "falsely", - "falired", "flaired", - "falshed", "flashed", - "falshes", "flashes", - "falsley", "falsely", - "falvors", "flavors", - "familes", "families", - "famoust", "famous", - "famousy", "famously", - "fanatsy", "fantasy", - "fantaic", "fanatic", - "faoming", "foaming", - "fascits", "fascist", - "fasicsm", "fascism", - "fasicst", "fascist", - "faslely", "falsely", - "fatiuge", "fatigue", - "febuary", "february", - "fecthed", "fetched", - "fecthes", "fetches", - "feminen", "feminine", - "feminie", "feminine", - "feminim", "feminism", - "feodras", "fedoras", - "fertily", "fertility", - "fesitve", "festive", - "fethced", "fetched", - "fethces", "fetches", - "fetishs", "fetishes", - "fianite", "finite", - "fianlly", "finally", - "fiercly", "fiercely", - "filcker", "flicker", - "filpped", "flipped", - "filterd", "filtered", - "finacee", "fiancee", - "fineses", "finesse", - "fininsh", "finnish", - "finishs", "finishes", - "finisse", "finishes", - "finnsih", "finnish", - "firends", "friends", - "firggin", "friggin", - "firsbee", "frisbee", - "firslty", "firstly", - "firtsly", "firstly", - "fitlers", "filters", - "flacons", "falcons", - "flahsed", "flashed", - "flahses", "flashes", - "flaried", "flaired", - "flasely", "falsely", - "flashig", "flashing", - "flavord", "flavored", - "flavous", "flavours", - "flawess", "flawless", - "flciker", "flicker", - "fliters", "filters", - "flordia", "florida", - "florene", "florence", - "fnaatic", "fanatic", - "fomaing", "foaming", - "fonetic", "phonetic", - "forefit", "forfeit", - "foregin", "foreign", - "foreing", "foreign", - "forfiet", "forfeit", - "forhead", "forehead", - "foriegn", "foreign", - "formaly", "formally", - "formery", "formerly", - "formost", "foremost", - "formual", "formula", - "formuls", "formulas", - "forrset", "forrest", - "forsakn", "forsaken", - "forsane", "forsaken", - "forumla", "formula", - "fountan", "fountain", - "fourten", "fourteen", - "fracter", "fracture", - "fragmet", "fragment", - "freedos", "freedoms", - "freinds", "friends", - "frigign", "friggin", - "fristly", "firstly", - "frostig", "frosting", - "frsibee", "frisbee", - "fruitin", "fruition", - "fullets", "fullest", - "fullset", "fullest", - "funides", "fundies", - "funtion", "function", - "furance", "furnace", - "furncae", "furnace", - "futhroc", "futhark", - "gadgest", "gadgets", - "gagdets", "gadgets", - "galatic", "galactic", - "galcier", "glacier", - "galsgow", "glasgow", - "gameply", "gameplay", - "gamerga", "gamertag", - "gankign", "ganking", - "ganster", "gangster", - "garabge", "garbage", - "garfied", "garfield", - "garnola", "granola", - "generas", "generals", - "genersl", "generals", - "geniuss", "geniuses", - "geogria", "georgia", - "geomety", "geometry", - "georiga", "georgia", - "gernade", "grenade", - "gerogia", "georgia", - "gigabye", "gigabyte", - "giltchy", "glitchy", - "gimmics", "gimmicks", - "gimmicy", "gimmicky", - "girzzly", "grizzly", - "glagsow", "glasgow", - "glaicer", "glacier", - "glicthy", "glitchy", - "glimpes", "glimpse", - "glimspe", "glimpse", - "glipmse", "glimpse", - "glitchd", "glitched", - "glitchs", "glitches", - "glithcy", "glitchy", - "globaly", "globally", - "gloiath", "goliath", - "glorios", "glorious", - "gltichy", "glitchy", - "gnaking", "ganking", - "gnawwed", "gnawed", - "goddanm", "goddamn", - "goddman", "goddamn", - "godliek", "godlike", - "godlman", "goldman", - "godsped", "godspeed", - "goergia", "georgia", - "goilath", "goliath", - "golaith", "goliath", - "golbins", "goblins", - "goldamn", "goldman", - "goldbeg", "goldberg", - "goldike", "godlike", - "golitah", "goliath", - "goodluk", "goodluck", - "gorumet", "gourmet", - "gosepls", "gospels", - "gosples", "gospels", - "gpysies", "gypsies", - "grabage", "garbage", - "grahpic", "graphic", - "grainte", "granite", - "grammer", "grammar", - "graniet", "granite", - "grantie", "granite", - "graphie", "graphite", - "graphis", "graphics", - "grappel", "grapple", - "greande", "grenade", - "grenads", "grenades", - "greneer", "greener", - "griaffe", "giraffe", - "gridles", "griddles", - "grillig", "grilling", - "grpahic", "graphic", - "guardin", "guardian", - "guiness", "guinness", - "gullibe", "gullible", - "gutiars", "guitars", - "gypises", "gypsies", - "gyspies", "gypsies", - "habaeus", "habeas", - "haethen", "heathen", - "hailfax", "halifax", - "halfiax", "halifax", - "handbok", "handbook", - "handedy", "handedly", - "handeld", "handled", - "hanlder", "handler", - "hannibl", "hannibal", - "hanuted", "haunted", - "haorder", "hoarder", - "hapened", "happened", - "happend", "happened", - "happliy", "happily", - "harased", "harassed", - "harases", "harasses", - "hardend", "hardened", - "hardwod", "hardwood", - "haricut", "haircut", - "hatchig", "hatching", - "hauntig", "haunting", - "haviest", "heaviest", - "headest", "headset", - "headses", "headsets", - "heaveny", "heavenly", - "heigher", "higher", - "heigths", "heights", - "helemts", "helmets", - "hellfie", "hellfire", - "hellvua", "helluva", - "helment", "helmet", - "helpped", "helped", - "hemlets", "helmets", - "henious", "heinous", - "heorics", "heroics", - "heorine", "heroine", - "heriocs", "heroics", - "herione", "heroine", - "herocis", "heroics", - "heronie", "heroine", - "hesiman", "heisman", - "hieghts", "heights", - "hienous", "heinous", - "hiesman", "heisman", - "himselv", "himself", - "hiptser", "hipster", - "hismelf", "himself", - "hispter", "hipster", - "hitboxs", "hitboxes", - "hoilday", "holiday", - "hokpins", "hopkins", - "holdiay", "holiday", - "holdins", "holdings", - "homniem", "hominem", - "horader", "hoarder", - "hosited", "hoisted", - "hosthot", "hotshot", - "hostles", "hostels", - "hostpot", "hotspot", - "hothsot", "hotshot", - "hotpsot", "hotspot", - "hotsopt", "hotspot", - "hounour", "honour", - "hseldon", "sheldon", - "huanted", "haunted", - "humanit", "humanist", - "humants", "humanist", - "humidiy", "humidity", - "humoros", "humorous", - "hunagry", "hungary", - "hunderd", "hundred", - "hundres", "hundreds", - "hungray", "hungary", - "hurdels", "hurdles", - "hurldes", "hurdles", - "husbans", "husbands", - "hweaton", "wheaton", - "hybirds", "hybrids", - "hydogen", "hydrogen", - "hygeine", "hygiene", - "hypnoss", "hypnosis", - "hyrbids", "hybrids", - "hystera", "hysteria", - "iceforg", "icefrog", - "ierland", "ireland", - "ignitin", "ignition", - "ignorat", "ignorant", - "illegas", "illegals", - "illegsl", "illegals", - "illinos", "illinois", - "imanent", "eminent", - "imapcts", "impacts", - "iminent", "eminent", - "imminet", "imminent", - "implict", "implicit", - "imploed", "implode", - "imploys", "employs", - "impluse", "impulse", - "impolde", "implode", - "importd", "imported", - "imporve", "improve", - "impules", "impulse", - "impusle", "impulse", - "imrpove", "improve", - "incldue", "include", - "incluse", "includes", - "indains", "indians", - "indiaan", "indiana", - "indluge", "indulge", - "indugle", "indulge", - "infalte", "inflate", - "infenro", "inferno", - "infered", "inferred", - "inferir", "inferior", - "infinet", "infinite", - "infinie", "infinite", - "infinit", "infinite", - "infornt", "infront", - "infroms", "informs", - "infrotn", "infront", - "inheirt", "inherit", - "inidans", "indians", - "initals", "initials", - "initisl", "initials", - "inlcine", "incline", - "inovker", "invoker", - "inpeach", "impeach", - "inpsect", "inspect", - "inpsire", "inspire", - "inquier", "inquire", - "inquriy", "inquiry", - "insaney", "insanely", - "inscets", "insects", - "insepct", "inspect", - "insipre", "inspire", - "insluts", "insults", - "instade", "instead", - "instint", "instinct", - "intenst", "intents", - "intered", "interred", - "interet", "interest", - "internt", "internet", - "interro", "interior", - "intrest", "interest", - "intrige", "intrigue", - "invlove", "involve", - "invoekr", "invoker", - "invovle", "involve", - "iornman", "ironman", - "iranain", "iranian", - "iranias", "iranians", - "iranina", "iranian", - "irleand", "ireland", - "ironamn", "ironman", - "isalmic", "islamic", - "isareli", "israeli", - "islamit", "islamist", - "islmaic", "islamic", - "isloate", "isolate", - "isralei", "israeli", - "isreali", "israeli", - "italias", "italians", - "jagaurs", "jaguars", - "jaguras", "jaguars", - "jamacia", "jamaica", - "jamaina", "jamaican", - "jamiaca", "jamaica", - "jamsine", "jasmine", - "janaury", "january", - "januray", "january", - "japanes", "japanese", - "jasmien", "jasmine", - "jaugars", "jaguars", - "jaunary", "january", - "jeircho", "jericho", - "jennins", "jennings", - "jeopary", "jeopardy", - "jeresys", "jerseys", - "jericoh", "jericho", - "jersyes", "jerseys", - "jewerly", "jewelry", - "jorunal", "journal", - "jounral", "journal", - "joystik", "joystick", - "juadism", "judaism", - "judasim", "judaism", - "judical", "judicial", - "juipter", "jupiter", - "junglig", "jungling", - "juptier", "jupiter", - "jusitfy", "justify", - "justfiy", "justify", - "karakoe", "karaoke", - "karoake", "karaoke", - "kenendy", "kennedy", - "kenndey", "kennedy", - "kentucy", "kentucky", - "keyboad", "keyboard", - "keychan", "keychain", - "keynode", "keynote", - "kicthen", "kitchen", - "killins", "killings", - "kineitc", "kinetic", - "kinghts", "knights", - "kinteic", "kinetic", - "kitches", "kitchens", - "kitites", "kitties", - "knietic", "kinetic", - "knigths", "knights", - "knuckel", "knuckle", - "kroeans", "koreans", - "krudish", "kurdish", - "ktichen", "kitchen", - "kubirck", "kubrick", - "kunckle", "knuckle", - "kurbick", "kubrick", - "kuridsh", "kurdish", - "laguage", "language", - "landins", "landings", - "lantren", "lantern", - "laready", "already", - "laregly", "largely", - "largley", "largely", - "lasanga", "lasagna", - "lasgana", "lasagna", - "latitue", "latitude", - "latnern", "lantern", - "launhed", "launched", - "lavendr", "lavender", - "leathal", "lethal", - "lefitst", "leftist", - "leftits", "leftist", - "legnths", "lengths", - "legnthy", "lengthy", - "legoins", "legions", - "leigons", "legions", - "lenghts", "lengths", - "lenoard", "leonard", - "lepoard", "leopard", - "lesbain", "lesbian", - "lesiban", "lesbian", - "lesiure", "leisure", - "liasion", "liaison", - "liasons", "liaisons", - "liberae", "liberate", - "liberas", "liberals", - "lienups", "lineups", - "liesure", "leisure", - "liftime", "lifetime", - "lighlty", "lightly", - "lightes", "lighters", - "ligthly", "lightly", - "linclon", "lincoln", - "linueps", "lineups", - "liqiuds", "liquids", - "lisence", "license", - "lisense", "license", - "listend", "listened", - "litecon", "litecoin", - "literae", "literate", - "lithuim", "lithium", - "litihum", "lithium", - "loadous", "loadouts", - "loenard", "leonard", - "loepard", "leopard", - "logiteh", "logitech", - "loosley", "loosely", - "luandry", "laundry", - "luckliy", "luckily", - "luicfer", "lucifer", - "lunatis", "lunatics", - "maching", "machine", - "machins", "machines", - "maclolm", "malcolm", - "macthup", "matchup", - "madsion", "madison", - "magents", "magnets", - "magicin", "magician", - "magolia", "magnolia", - "maidson", "madison", - "maintan", "maintain", - "mairlyn", "marilyn", - "malaira", "malaria", - "malaysa", "malaysia", - "malclom", "malcolm", - "manauls", "manuals", - "mandase", "mandates", - "mandats", "mandates", - "mangeld", "mangled", - "mangets", "magnets", - "manualy", "manually", - "manuver", "maneuver", - "marbels", "marbles", - "margart", "margaret", - "mariage", "marriage", - "mariens", "marines", - "maritan", "martian", - "marixsm", "marxism", - "mariyln", "marilyn", - "markede", "marketed", - "marlbes", "marbles", - "marliyn", "marilyn", - "marnies", "marines", - "marrage", "marriage", - "martail", "martial", - "martain", "martian", - "masacra", "mascara", - "massace", "massacre", - "mathcup", "matchup", - "mathwes", "mathews", - "matrial", "martial", - "maunals", "manuals", - "mcalren", "mclaren", - "meanins", "meanings", - "medicad", "medicaid", - "medicae", "medicare", - "medioce", "mediocre", - "meixcan", "mexican", - "meldoic", "melodic", - "melieux", "milieux", - "melodis", "melodies", - "memeber", "member", - "memoery", "memory", - "memorie", "memory", - "menally", "mentally", - "mentaly", "mentally", - "meoldic", "melodic", - "meranda", "veranda", - "merchat", "merchant", - "merucry", "mercury", - "messagd", "messaged", - "messaih", "messiah", - "metagem", "metagame", - "metalic", "metallic", - "mexcian", "mexican", - "michina", "michigan", - "midfied", "midfield", - "midotwn", "midtown", - "midtwon", "midtown", - "migrans", "migrants", - "militat", "militant", - "militis", "militias", - "miltary", "military", - "mimimum", "minimum", - "mineras", "minerals", - "mininos", "minions", - "ministr", "minister", - "ministy", "ministry", - "minoins", "minions", - "minstry", "ministry", - "minumum", "minimum", - "mirrord", "mirrored", - "misandy", "misandry", - "misison", "mission", - "misouri", "missouri", - "mispell", "misspell", - "missils", "missiles", - "mistery", "mystery", - "mobiliy", "mobility", - "modualr", "modular", - "momento", "memento", - "momment", "moment", - "monarcy", "monarchy", - "monatge", "montage", - "monglos", "mongols", - "monitos", "monitors", - "monstre", "monster", - "montaeg", "montage", - "montrel", "montreal", - "monumet", "monument", - "morbidy", "morbidly", - "morgage", "mortgage", - "morphen", "morphine", - "morphie", "morphine", - "morroco", "morocco", - "mortage", "mortgage", - "mosnter", "monster", - "mosture", "moisture", - "motivet", "motivate", - "motnage", "montage", - "motoral", "motorola", - "mountan", "mountain", - "movment", "movement", - "mucuous", "mucous", - "muesums", "museums", - "muliple", "multiple", - "mulsims", "muslims", - "multipe", "multiple", - "multipy", "multiply", - "munbers", "numbers", - "munchis", "munchies", - "murderd", "murdered", - "muscial", "musical", - "mushrom", "mushroom", - "musilms", "muslims", - "muslces", "muscles", - "musuems", "museums", - "mutatin", "mutation", - "mypsace", "myspace", - "mysapce", "myspace", - "napolen", "napoleon", - "narhwal", "narwhal", - "natique", "antique", - "nativey", "natively", - "natrual", "natural", - "naugthy", "naughty", - "nauseos", "nauseous", - "nautils", "nautilus", - "nautral", "natural", - "nautres", "natures", - "nectode", "netcode", - "needels", "needles", - "neruons", "neurons", - "neslave", "enslave", - "netocde", "netcode", - "netowrk", "network", - "netural", "neutral", - "neturon", "neutron", - "netwrok", "network", - "neurton", "neutron", - "neuterd", "neutered", - "nighlty", "nightly", - "nigthly", "nightly", - "nihilim", "nihilism", - "ninties", "1990s", - "niverse", "inverse", - "nocture", "nocturne", - "nominae", "nominate", - "nominet", "nominate", - "nonsene", "nonsense", - "noramls", "normals", - "norhern", "northern", - "normaly", "normally", - "normany", "normandy", - "northen", "northern", - "nostris", "nostrils", - "notario", "ontario", - "notebok", "notebook", - "nothern", "northern", - "nowdays", "nowadays", - "nrivana", "nirvana", - "nuaghty", "naughty", - "nubmers", "numbers", - "nucelar", "nuclear", - "nucelus", "nucleus", - "nuclean", "unclean", - "nuclues", "nucleus", - "nucular", "nuclear", - "nuerons", "neurons", - "nuetral", "neutral", - "nuetron", "neutron", - "nulcear", "nuclear", - "nullfiy", "nullify", - "nusance", "nuisance", - "nutriet", "nutrient", - "oarcles", "oracles", - "obivous", "obvious", - "obvoius", "obvious", - "ocarnia", "ocarina", - "ocasion", "occasion", - "occured", "occurred", - "ocotber", "october", - "ocotpus", "octopus", - "ocraina", "ocarina", - "ocuntry", "country", - "ocurred", "occurred", - "ofcoure", "ofcourse", - "offcers", "officers", - "offical", "official", - "offisde", "offside", - "oftenly", "often", - "ogrilla", "gorilla", - "olmypic", "olympic", - "olreans", "orleans", - "olympis", "olympics", - "olypmic", "olympic", - "omision", "omission", - "omiting", "omitting", - "omlette", "omelette", - "ommited", "omitted", - "onatrio", "ontario", - "onbaord", "onboard", - "onborad", "onboard", - "ontairo", "ontario", - "ontraio", "ontario", - "opartor", "operator", - "openess", "openness", - "opitcal", "optical", - "opitmal", "optimal", - "oponent", "opponent", - "oposite", "opposite", - "oppenly", "openly", - "opponet", "opponent", - "oprhans", "orphans", - "optimim", "optimism", - "oracels", "oracles", - "oragnes", "oranges", - "oragsms", "orgasms", - "oralces", "oracles", - "orbtial", "orbital", - "orcales", "oracles", - "orelans", "orleans", - "organes", "organise", - "organie", "organise", - "organim", "organism", - "orginal", "original", - "orhpans", "orphans", - "oribtal", "orbital", - "orlenas", "orleans", - "orpahns", "orphans", - "orthodx", "orthodox", - "outfied", "outfield", - "outsidr", "outsider", - "overhal", "overhaul", - "overpad", "overpaid", - "oversue", "overuse", - "overtun", "overturn", - "ownders", "wonders", - "owuldve", "wouldve", - "oylmpic", "olympic", - "pacakge", "package", - "pacifit", "pacifist", - "packade", "packaged", - "pacthes", "patches", - "pahntom", "phantom", - "paitent", "patient", - "palcebo", "placebo", - "pallete", "palette", - "palster", "plaster", - "palyboy", "playboy", - "pamflet", "pamphlet", - "pamplet", "pamphlet", - "pancaks", "pancakes", - "pandroa", "pandora", - "panthen", "pantheon", - "paradim", "paradigm", - "paradse", "parades", - "paralel", "parallel", - "paranoa", "paranoia", - "parises", "praises", - "parites", "parties", - "partice", "particle", - "partick", "patrick", - "partiel", "particle", - "partiot", "patriot", - "partols", "patrols", - "passabe", "passable", - "passivs", "passives", - "pasuing", "pausing", - "pateint", "patient", - "pathces", "patches", - "patiens", "patients", - "patirot", "patriot", - "patrcik", "patrick", - "patrios", "patriots", - "patroit", "patriot", - "peaples", "peoples", - "pebbels", "pebbles", - "peirced", "pierced", - "penatly", "penalty", - "pendulm", "pendulum", - "penguis", "penguins", - "penicls", "pencils", - "penison", "pension", - "penisse", "penises", - "penitum", "pentium", - "pensies", "penises", - "pensino", "pension", - "pentuim", "pentium", - "peopels", "peoples", - "percise", "precise", - "perdict", "predict", - "perfers", "prefers", - "perhasp", "perhaps", - "perhpas", "perhaps", - "perisan", "persian", - "perjery", "perjury", - "permade", "premade", - "permier", "premier", - "permise", "premise", - "permium", "premium", - "peroids", "periods", - "peronal", "personal", - "perpaid", "prepaid", - "perphas", "perhaps", - "persain", "persian", - "persets", "presets", - "persits", "persist", - "persued", "pursued", - "persuit", "pursuit", - "pervail", "prevail", - "perview", "preview", - "pharoah", "pharaoh", - "phatnom", "phantom", - "phsyics", "physics", - "phyiscs", "physics", - "physcis", "physics", - "physiqe", "physique", - "picthed", "pitched", - "picther", "pitcher", - "picthes", "pitches", - "piegons", "pigeons", - "piglrim", "pilgrim", - "pigoens", "pigeons", - "pilgirm", "pilgrim", - "pilrgim", "pilgrim", - "pinoeer", "pioneer", - "pinpoit", "pinpoint", - "pionere", "pioneer", - "pireced", "pierced", - "pithces", "pitches", - "plantes", "planets", - "plastis", "plastics", - "plastre", "plaster", - "plataeu", "plateau", - "plateua", "plateau", - "playabe", "playable", - "playofs", "playoffs", - "plesant", "pleasant", - "pligrim", "pilgrim", - "ploygon", "polygon", - "ploymer", "polymer", - "podemso", "podemos", - "podmeos", "podemos", - "poeples", "peoples", - "poignat", "poignant", - "poineer", "pioneer", - "pointes", "pointers", - "poisond", "poisoned", - "polgyon", "polygon", - "polical", "political", - "polishs", "polishes", - "polisse", "polishes", - "politey", "politely", - "poluted", "polluted", - "polutes", "pollutes", - "popluar", "popular", - "populer", "popular", - "populos", "populous", - "porpose", "propose", - "porshan", "portion", - "porshon", "portion", - "portait", "portrait", - "portary", "portray", - "portras", "portrays", - "portrat", "portrait", - "posions", "poisons", - "positon", "position", - "positve", "positive", - "possiby", "possibly", - "postdam", "potsdam", - "postion", "position", - "postive", "positive", - "potatos", "potatoes", - "potical", "optical", - "potrait", "portrait", - "powderd", "powdered", - "poweful", "powerful", - "poylgon", "polygon", - "poylmer", "polymer", - "practie", "practise", - "praisse", "praises", - "praries", "prairies", - "prasied", "praised", - "prasies", "praises", - "pratice", "practice", - "preamde", "premade", - "preceed", "precede", - "precice", "precise", - "preests", "presets", - "prehaps", "perhaps", - "preimer", "premier", - "preimum", "premium", - "preists", "priests", - "preivew", "preview", - "premeir", "premier", - "premiee", "premiere", - "premire", "premier", - "premits", "permits", - "premius", "premiums", - "premuim", "premium", - "prepair", "prepare", - "preriod", "period", - "presens", "presents", - "presest", "presets", - "presist", "persist", - "prestes", "presets", - "presude", "presumed", - "pretene", "pretense", - "pretens", "pretends", - "preveiw", "preview", - "prevert", "pervert", - "previal", "prevail", - "previes", "previews", - "previos", "previous", - "priased", "praised", - "priases", "praises", - "printes", "printers", - "pristen", "pristine", - "probabe", "probable", - "probaly", "probably", - "probelm", "problem", - "procede", "proceed", - "procees", "proceeds", - "procesd", "proceeds", - "proclam", "proclaim", - "produly", "proudly", - "produse", "produces", - "progidy", "prodigy", - "progrom", "pogrom", - "prohibt", "prohibit", - "prohpet", "prophet", - "prologe", "prologue", - "promose", "promotes", - "promots", "promotes", - "prompty", "promptly", - "promtps", "prompts", - "pronous", "pronouns", - "prooved", "proved", - "propeht", "prophet", - "prophey", "prophecy", - "propper", "proper", - "protals", "portals", - "protecs", "protects", - "protess", "protests", - "protocl", "protocol", - "protray", "portray", - "prouldy", "proudly", - "provded", "provided", - "provine", "province", - "prusuit", "pursuit", - "pryamid", "pyramid", - "pscyhed", "psyched", - "ptiched", "pitched", - "pticher", "pitcher", - "puasing", "pausing", - "publicy", "publicly", - "publsih", "publish", - "puhsups", "pushups", - "punishs", "punishes", - "punisse", "punishes", - "pursiut", "pursuit", - "pursude", "pursued", - "purused", "pursued", - "pushpus", "pushups", - "pyarmid", "pyramid", - "pyramis", "pyramids", - "pyrmaid", "pyramid", - "pysched", "psyched", - "qaulify", "qualify", - "qaulity", "quality", - "qauntum", "quantum", - "quailfy", "qualify", - "quailty", "quality", - "queires", "queries", - "queitly", "quietly", - "quereis", "queries", - "quicket", "quickest", - "quielty", "quietly", - "quitely", "quietly", - "qunatum", "quantum", - "qunetin", "quentin", - "racisst", "racists", - "racthet", "ratchet", - "radaint", "radiant", - "radiane", "radiance", - "radicas", "radicals", - "radiers", "raiders", - "raelism", "realism", - "raidant", "radiant", - "railrod", "railroad", - "rainbos", "rainbows", - "raoches", "roaches", - "raoming", "roaming", - "raptros", "raptors", - "raputre", "rapture", - "rathcet", "ratchet", - "ratpure", "rapture", - "reacing", "reaching", - "reagrds", "regards", - "realies", "realise", - "realsie", "realise", - "realsim", "realism", - "realtes", "relates", - "reamins", "remains", - "reapirs", "repairs", - "rebouns", "rebounds", - "rebulit", "rebuilt", - "recalim", "reclaim", - "receips", "receipts", - "recided", "resided", - "reciept", "receipt", - "recievd", "recieved", - "recieve", "receive", - "recitfy", "rectify", - "recived", "received", - "reclami", "reclaim", - "recliam", "reclaim", - "recorre", "recorder", - "recoves", "recovers", - "recpies", "recipes", - "redeemd", "redeemed", - "redners", "renders", - "refelct", "reflect", - "referal", "referral", - "refered", "referred", - "referig", "refering", - "referrs", "refers", - "reflexs", "reflexes", - "refrers", "refers", - "refroms", "reforms", - "refusla", "refusal", - "regerts", "regrets", - "regiems", "regimes", - "regimet", "regiment", - "registy", "registry", - "regluar", "regular", - "regrest", "regrets", - "regulae", "regulate", - "regulas", "regulars", - "regulsr", "regulars", - "reigmes", "regimes", - "reigons", "regions", - "reitres", "retires", - "reivews", "reviews", - "reknown", "renown", - "relaise", "realise", - "relapes", "relapse", - "relaspe", "relapse", - "relatie", "relative", - "relatin", "relation", - "relcaim", "reclaim", - "releive", "relieve", - "releses", "releases", - "relfect", "reflect", - "reliabe", "reliable", - "relient", "reliant", - "relized", "realised", - "relpase", "relapse", - "remaind", "remained", - "remaing", "remaining", - "remakrs", "remarks", - "remannt", "remnant", - "remeber", "remember", - "remians", "remains", - "remnans", "remnants", - "renderd", "rendered", - "renegae", "renegade", - "renmant", "remnant", - "rentors", "renters", - "rentres", "renters", - "renuion", "reunion", - "repaird", "repaired", - "repalys", "replays", - "repblic", "republic", - "repeast", "repeats", - "repitle", "reptile", - "replase", "replaces", - "replayd", "replayed", - "reponse", "response", - "repostd", "reposted", - "repsawn", "respawn", - "repsond", "respond", - "repsots", "reposts", - "reptiel", "reptile", - "reptils", "reptiles", - "repubic", "republic", - "republi", "republic", - "repulic", "republic", - "reqiuem", "requiem", - "requeim", "requiem", - "requime", "requiem", - "requred", "required", - "resapwn", "respawn", - "rescuse", "rescues", - "resembe", "resemble", - "reslove", "resolve", - "resolvs", "resolves", - "resonet", "resonate", - "resovle", "resolve", - "respest", "respects", - "respone", "response", - "respwan", "respawn", - "ressits", "resists", - "restord", "restored", - "resuced", "rescued", - "resuces", "rescues", - "returnd", "returned", - "reuinon", "reunion", - "reveald", "revealed", - "reveiws", "reviews", - "revelas", "reveals", - "reveral", "reversal", - "reviere", "reviewer", - "reviewd", "reviewed", - "reviewr", "reviewer", - "revolvr", "revolver", - "revolvs", "revolves", - "rewirte", "rewrite", - "reworkd", "reworked", - "rewriet", "rewrite", - "reynols", "reynolds", - "rhapsoy", "rhapsody", - "rhythem", "rhythm", - "rhythim", "rhythm", - "rhytmic", "rhythmic", - "riaders", "raiders", - "ritlain", "ritalin", - "ritoers", "rioters", - "rivarly", "rivalry", - "rivlary", "rivalry", - "roahces", "roaches", - "robotis", "robotics", - "rococco", "rococo", - "roestta", "rosetta", - "roiters", "rioters", - "roleply", "roleplay", - "romaina", "romania", - "romaing", "roaming", - "romanin", "romanian", - "romanna", "romanian", - "roomate", "roommate", - "rotuers", "routers", - "rugters", "rutgers", - "rulebok", "rulebook", - "rumorus", "rumours", - "rumuors", "rumours", - "runnung", "running", - "ruslted", "rustled", - "russina", "russian", - "russion", "russian", - "rusteld", "rustled", - "rythmic", "rhythmic", - "rythyms", "rhythms", - "sacrasm", "sarcasm", - "saddnes", "saddens", - "sadistc", "sadistic", - "sadning", "sanding", - "salaris", "salaries", - "salavge", "salvage", - "salvery", "slavery", - "salying", "slaying", - "sampels", "samples", - "samruai", "samurai", - "samuari", "samurai", - "samuria", "samurai", - "sandlas", "sandals", - "sandnig", "sanding", - "sanlder", "sandler", - "santorm", "santorum", - "sapphie", "sapphire", - "sarcams", "sarcasm", - "sargant", "sergeant", - "sasuage", "sausage", - "satifsy", "satisfy", - "satsify", "satisfy", - "satsohi", "satoshi", - "savanha", "savannah", - "savannh", "savannah", - "saveing", "saving", - "sawnsea", "swansea", - "sawnson", "swanson", - "scandas", "scandals", - "scannig", "scanning", - "scartch", "scratch", - "scheems", "schemes", - "schoold", "schooled", - "sciense", "sciences", - "scinece", "science", - "scootes", "scooters", - "scorpin", "scorpion", - "scpeter", "scepter", - "scracth", "scratch", - "scrambe", "scramble", - "scritps", "scripts", - "scrolld", "scrolled", - "scrpits", "scripts", - "scyhter", "scyther", - "seached", "searched", - "seaches", "searches", - "seahaws", "seahawks", - "seantor", "senator", - "searchd", "searched", - "searchs", "searches", - "sebrian", "serbian", - "secerts", "secrets", - "secpter", "scepter", - "secrest", "secrets", - "secrety", "secretly", - "seflies", "selfies", - "seguoys", "segues", - "seinors", "seniors", - "selifes", "selfies", - "senoirs", "seniors", - "sensure", "censure", - "sentaor", "senator", - "sentris", "sentries", - "serbain", "serbian", - "sergeat", "sergeant", - "sergent", "sergeant", - "seriban", "serbian", - "servans", "servants", - "sesnors", "sensors", - "settins", "settings", - "severly", "severely", - "sexualy", "sexually", - "seziure", "seizure", - "shaddow", "shadow", - "shanghi", "shanghai", - "shaprie", "sharpie", - "shaprly", "sharply", - "sharipe", "sharpie", - "shcemes", "schemes", - "sheelpe", "sheeple", - "sheepel", "sheeple", - "shephed", "shepherd", - "sherlok", "sherlock", - "shetler", "shelter", - "shevles", "shelves", - "shfiter", "shifter", - "shieldd", "shielded", - "shiping", "shipping", - "shirely", "shirley", - "shitfer", "shifter", - "shledon", "sheldon", - "shleter", "shelter", - "shoudln", "should", - "shouldt", "shouldnt", - "shoutot", "shoutout", - "showede", "showered", - "showerd", "showered", - "shperes", "spheres", - "shriley", "shirley", - "siblins", "siblings", - "sidelen", "sideline", - "sideral", "sidereal", - "siezing", "seizing", - "siezure", "seizure", - "signfiy", "signify", - "signins", "signings", - "signles", "singles", - "silders", "sliders", - "silenty", "silently", - "similir", "similiar", - "simliar", "similar", - "simplet", "simplest", - "simpley", "simply", - "simplfy", "simplify", - "simpliy", "simplify", - "simposn", "simpson", - "simspon", "simpson", - "singals", "signals", - "singels", "singles", - "singify", "signify", - "singsog", "singsong", - "sitmuli", "stimuli", - "skecthy", "sketchy", - "skeletl", "skeletal", - "skeptis", "skeptics", - "sketchs", "sketches", - "sketpic", "skeptic", - "skpetic", "skeptic", - "sktechy", "sketchy", - "skwyard", "skyward", - "slavage", "salvage", - "slayign", "slaying", - "sldiers", "sliders", - "slefies", "selfies", - "slighly", "slightly", - "slighty", "slightly", - "slippes", "slippers", - "slippey", "slippery", - "smaples", "samples", - "smartre", "smarter", - "smaurai", "samurai", - "snadler", "sandler", - "snigles", "singles", - "snippes", "snippets", - "snodwen", "snowden", - "snwoden", "snowden", - "snycing", "syncing", - "snyergy", "synergy", - "socialy", "socially", - "sofware", "software", - "soildly", "solidly", - "soldies", "soldiers", - "soldily", "solidly", - "somaila", "somalia", - "someons", "someones", - "somethn", "somethin", - "southen", "southern", - "soveits", "soviets", - "spacebr", "spacebar", - "spainsh", "spanish", - "spansih", "spanish", - "spanwed", "spawned", - "sparkel", "sparkle", - "spartas", "spartans", - "spartsn", "spartans", - "sparyed", "sprayed", - "spawend", "spawned", - "spawnig", "spawning", - "specail", "special", - "specfic", "specific", - "specias", "specials", - "specisl", "specials", - "spectum", "spectrum", - "speechs", "speeches", - "spehres", "spheres", - "speical", "special", - "speices", "species", - "spellig", "spelling", - "spindel", "spindle", - "spiritd", "spirited", - "splaton", "splatoon", - "splittr", "splitter", - "spoiles", "spoilers", - "spoitfy", "spotify", - "spolied", "spoiled", - "sponser", "sponsor", - "sporles", "sproles", - "sporuts", "sprouts", - "spotfiy", "spotify", - "sprinke", "sprinkle", - "sproels", "sproles", - "spwaned", "spawned", - "sqaures", "squares", - "sqeuaky", "squeaky", - "sqiushy", "squishy", - "squarey", "squarely", - "squirel", "squirtle", - "squirle", "squirrel", - "squirrl", "squirrel", - "squirte", "squirtle", - "squsihy", "squishy", - "sriraca", "sriracha", - "srpouts", "sprouts", - "sryians", "syrians", - "sryinge", "syringe", - "stadius", "stadiums", - "staduim", "stadium", - "stagnat", "stagnant", - "staidum", "stadium", - "stakler", "stalker", - "stalkes", "stalkers", - "stamnia", "stamina", - "staoshi", "satoshi", - "starins", "strains", - "startde", "startled", - "startus", "startups", - "statits", "statist", - "statsit", "statist", - "statuer", "stature", - "statuse", "statutes", - "statuts", "statutes", - "stautes", "statues", - "stealty", "stealthy", - "steeles", "steelers", - "steorid", "steroid", - "steriel", "sterile", - "sterlie", "sterile", - "stickes", "stickers", - "stiring", "stirring", - "stirker", "striker", - "stirrig", "stirring", - "stitchs", "stitches", - "stlaker", "stalker", - "stlyish", "stylish", - "storeis", "stories", - "storise", "stories", - "stormde", "stormed", - "straigt", "straight", - "straind", "strained", - "streamd", "streamed", - "stregth", "strength", - "strengh", "strength", - "streoid", "steroid", - "stresss", "stresses", - "strians", "strains", - "stricty", "strictly", - "striekr", "striker", - "stromed", "stormed", - "stubbon", "stubborn", - "studing", "studying", - "stuidos", "studios", - "stunami", "tsunami", - "stupidr", "stupider", - "stupidy", "stupidly", - "stupire", "stupider", - "suasage", "sausage", - "subisdy", "subsidy", - "subjest", "subjects", - "subtiel", "subtitle", - "succede", "succeed", - "succeds", "succeeds", - "succees", "succeeds", - "succesd", "succeeds", - "suceeds", "succeeds", - "suddeny", "suddenly", - "suefull", "usefull", - "sufferd", "suffered", - "summonr", "summoner", - "summore", "summoner", - "sunggle", "snuggle", - "sunifre", "sunfire", - "superme", "supreme", - "suposed", "supposed", - "suposes", "supposes", - "suppoed", "supposed", - "suppost", "supports", - "suprass", "surpass", - "supress", "suppress", - "suprisd", "suprised", - "suprise", "surprise", - "suprize", "surprise", - "supsend", "suspend", - "suround", "surround", - "surpeme", "supreme", - "surroud", "surround", - "sweidsh", "swedish", - "swiflty", "swiftly", - "swiming", "swimming", - "switchs", "switches", - "switfly", "swiftly", - "swnasea", "swansea", - "sycning", "syncing", - "sycther", "scyther", - "syirans", "syrians", - "sykward", "skyward", - "syllabe", "syllable", - "symetry", "symmetry", - "symmety", "symmetry", - "symobls", "symbols", - "sympaty", "sympathy", - "symtpom", "symptom", - "synegry", "synergy", - "synoynm", "synonym", - "sypmtom", "symptom", - "syracue", "syracuse", - "syrains", "syrians", - "sysadmn", "sysadmin", - "systemc", "systemic", - "sytlish", "stylish", - "tabacco", "tobacco", - "tailban", "taliban", - "tailord", "tailored", - "talbian", "taliban", - "tallets", "tallest", - "tangeld", "tangled", - "tanlged", "tangled", - "targetd", "targeted", - "taryvon", "trayvon", - "teached", "taught", - "teaspon", "teaspoon", - "techeis", "techies", - "tehcies", "techies", - "temepst", "tempest", - "tempels", "temples", - "tempets", "tempest", - "templas", "templars", - "tempset", "tempest", - "tenacle", "tentacle", - "tendacy", "tendency", - "tequlia", "tequila", - "tesitfy", "testify", - "testice", "testicle", - "teusday", "tuesday", - "thankyu", "thankyou", - "thearpy", "therapy", - "theistc", "theistic", - "theives", "thieves", - "themsef", "themself", - "therefo", "thereof", - "therien", "therein", - "theroem", "theorem", - "thesits", "theists", - "thiests", "theists", - "thirldy", "thirdly", - "thirten", "thirteen", - "thirtsy", "thirsty", - "thoerem", "theorem", - "thorats", "throats", - "thornes", "thrones", - "thoruim", "thorium", - "thoughs", "thoughts", - "threadd", "threaded", - "threeof", "thereof", - "thridly", "thirdly", - "thristy", "thirsty", - "throast", "throats", - "throium", "thorium", - "thryoid", "thyroid", - "thyorid", "thyroid", - "thyriod", "thyroid", - "tigther", "tighter", - "tiolets", "toilets", - "tirdent", "trident", - "titanim", "titanium", - "tlaking", "talking", - "tobbaco", "tobacco", - "toliets", "toilets", - "tolkein", "tolkien", - "tomatos", "tomatoes", - "tongiht", "tonight", - "tonuges", "tongues", - "toppins", "toppings", - "torando", "tornado", - "torndao", "tornado", - "torpdeo", "torpedo", - "torrest", "torrents", - "tortila", "tortilla", - "toruney", "tourney", - "toubles", "troubles", - "touchda", "touchpad", - "tounrey", "tourney", - "tourisy", "touristy", - "tourits", "tourist", - "tournes", "tourneys", - "toursim", "tourism", - "toursit", "tourist", - "towords", "towards", - "trackes", "trackers", - "trailes", "trailers", - "traines", "trainers", - "trainig", "training", - "tralier", "trailer", - "tratior", "traitor", - "traveld", "traveled", - "travere", "traverse", - "travesy", "travesty", - "travles", "travels", - "treasue", "treasure", - "treatis", "treaties", - "tremelo", "tremolo", - "trendig", "trending", - "trialer", "trailer", - "triange", "triangle", - "triator", "traitor", - "trickey", "trickery", - "tridnet", "trident", - "trimuph", "triumph", - "trinkes", "trinkets", - "trinkst", "trinkets", - "trintiy", "trinity", - "triolgy", "trilogy", - "troleld", "trolled", - "troling", "trolling", - "tronado", "tornado", - "tropedo", "torpedo", - "trudnle", "trundle", - "truimph", "triumph", - "trukish", "turkish", - "trundel", "trundle", - "trunlde", "trundle", - "tryahrd", "tryhard", - "tryavon", "trayvon", - "tsamina", "stamina", - "tsnuami", "tsunami", - "tsuanmi", "tsunami", - "tsunmai", "tsunami", - "tuesdsy", "tuesdays", - "tunnles", "tunnels", - "turbins", "turbines", - "turksih", "turkish", - "turltes", "turtles", - "turrest", "turrets", - "turtels", "turtles", - "tuseday", "tuesday", - "tusnami", "tsunami", - "tutrles", "turtles", - "twiligt", "twilight", - "tyelnol", "tylenol", - "typcial", "typical", - "tyrhard", "tryhard", - "tyrrany", "tyranny", - "udpated", "updated", - "uesfull", "usefull", - "ugprade", "upgrade", - "ukarine", "ukraine", - "ukranie", "ukraine", - "ukriane", "ukraine", - "ultimae", "ultimate", - "umbrela", "umbrella", - "unahppy", "unhappy", - "unbannd", "unbanned", - "underog", "undergo", - "unfairy", "unfairly", - "ungoldy", "ungodly", - "unicors", "unicorns", - "uniquey", "uniquely", - "unknwon", "unknown", - "unkonwn", "unknown", - "unlcean", "unclean", - "unlcoks", "unlocks", - "unlcuky", "unlucky", - "unlikey", "unlikely", - "unopend", "unopened", - "unprone", "unproven", - "unusabe", "unusable", - "unworty", "unworthy", - "upgarde", "upgrade", - "upgrads", "upgrades", - "uplaods", "uploads", - "upsteam", "upstream", - "urainum", "uranium", - "uranuim", "uranium", - "uretrha", "urethra", - "urkaine", "ukraine", - "urnaium", "uranium", - "urugauy", "uruguay", - "usefull", "useful", - "usefuly", "usefully", - "utiltiy", "utility", - "utopain", "utopian", - "utpoian", "utopian", - "vaccins", "vaccines", - "vaccume", "vacuum", - "vageuly", "vaguely", - "vaguley", "vaguely", - "vairant", "variant", - "valenca", "valencia", - "valetta", "valletta", - "valkyre", "valkyrie", - "valuabe", "valuable", - "valuble", "valuable", - "vampirs", "vampires", - "vanguad", "vanguard", - "varaint", "variant", - "vareity", "variety", - "varians", "variants", - "varient", "variant", - "varisty", "varsity", - "varitey", "variety", - "varstiy", "varsity", - "vasalls", "vassals", - "vasslas", "vassals", - "vaugely", "vaguely", - "vecotrs", "vectors", - "vectros", "vectors", - "veitnam", "vietnam", - "veiwers", "viewers", - "vendeta", "vendetta", - "verbaly", "verbally", - "verical", "vertical", - "verious", "various", - "verison", "version", - "veritgo", "vertigo", - "versoin", "version", - "vertgio", "vertigo", - "vessles", "vessels", - "vetween", "between", - "viatmin", "vitamin", - "vibratr", "vibrator", - "vicitms", "victims", - "vientam", "vietnam", - "vigrins", "virgins", - "vikigns", "vikings", - "villian", "villain", - "villify", "vilify", - "virbate", "vibrate", - "virigns", "virgins", - "virtiol", "vitriol", - "virutal", "virtual", - "virutes", "virtues", - "visable", "visible", - "visably", "visibly", - "visbily", "visibly", - "visting", "visiting", - "vistors", "visitors", - "vitaliy", "vitality", - "vitamis", "vitamins", - "vitenam", "vietnam", - "vitirol", "vitriol", - "vitmain", "vitamin", - "vitroil", "vitriol", - "vitrual", "virtual", - "vitrues", "virtues", - "volatge", "voltage", - "volumne", "volume", - "votlage", "voltage", - "vrigins", "virgins", - "waclott", "walcott", - "wacther", "watcher", - "waitres", "waiters", - "waktins", "watkins", - "warcrat", "warcraft", - "wardobe", "wardrobe", - "wariwck", "warwick", - "warrany", "warranty", - "warrent", "warrant", - "warrios", "warriors", - "warwcik", "warwick", - "wathcer", "watcher", - "watiers", "waiters", - "waviers", "waivers", - "wawrick", "warwick", - "wayword", "wayward", - "webapge", "webpage", - "webiste", "website", - "webstie", "website", - "weigths", "weights", - "weilded", "wielded", - "weirldy", "weirdly", - "weirods", "weirdos", - "welathy", "wealthy", - "wendsay", "wednesday", - "wensday", "wednesday", - "wepbage", "webpage", - "weridly", "weirdly", - "weridos", "weirdos", - "werstle", "wrestle", - "wesbite", "website", - "whaeton", "wheaton", - "whipser", "whisper", - "whislte", "whistle", - "whistel", "whistle", - "whitsle", "whistle", - "whsiper", "whisper", - "wiaters", "waiters", - "wiavers", "waivers", - "widgest", "widgets", - "wieghts", "weights", - "wigdets", "widgets", - "windosr", "windsor", - "winnins", "winnings", - "winsdor", "windsor", - "wintson", "winston", - "wirting", "writing", - "wisnton", "winston", - "withces", "witches", - "witheld", "withheld", - "withing", "within", - "withold", "withhold", - "wlacott", "walcott", - "wokring", "working", - "workins", "workings", - "woudlnt", "wouldnt", - "woudlve", "wouldve", - "woulndt", "wouldnt", - "wreslte", "wrestle", - "wroking", "working", - "wtiches", "witches", - "wupport", "support", - "yaching", "yachting", - "younget", "youngest", - "youseff", "yousef", - "youself", "yourself", - "zaelots", "zealots", - "zealtos", "zealots", - "zelaots", "zealots", - "zelaous", "zealous", - "zimbabe", "zimbabwe", - "zionsim", "zionism", - "zionsit", "zionist", - "zoinism", "zionism", - "zoinist", "zionist", - "abbout", "about", - "abilty", "ability", - "absail", "abseil", - "abutts", "abuts", - "achive", "achieve", - "acused", "accused", - "addopt", "adopt", - "addres", "address", - "adress", "address", - "aeriel", "aerial", - "affort", "afford", - "agains", "against", - "aginst", "against", - "ahppen", "happen", - "aiport", "airport", - "aisian", "asian", - "albiet", "albeit", - "alchol", "alcohol", - "aledge", "allege", - "aleged", "alleged", - "allign", "align", - "almsot", "almost", - "alomst", "almost", - "alowed", "allowed", - "alwasy", "always", - "alwyas", "always", - "amking", "making", - "ammend", "amend", - "amoung", "among", - "aplied", "applied", - "appart", "apart", - "aquire", "acquire", - "aready", "already", - "arised", "arose", - "arival", "arrival", - "arrary", "array", - "artice", "article", - "asetic", "ascetic", - "asside", "aside", - "attemp", "attempt", - "attemt", "attempt", - "auther", "author", - "awared", "awarded", - "bedore", "before", - "beeing", "being", - "befoer", "before", - "beggin", "begin", - "beleif", "belief", - "belive", "believe", - "beteen", "between", - "betwen", "between", - "beween", "between", - "bianry", "binary", - "boyant", "buoyant", - "broady", "broadly", - "buddah", "buddha", - "buring", "burying", - "carcas", "carcass", - "casion", "caisson", - "casued", "caused", - "casues", "causes", - "ceasar", "caesar", - "cencus", "census", - "censur", "censor", - "cheifs", "chiefs", - "circut", "circuit", - "clasic", "classic", - "coform", "conform", - "comany", "company", - "coucil", "council", - "densly", "densely", - "deside", "decide", - "devels", "delves", - "devide", "divide", - "dieing", "dying", - "divice", "device", - "doulbe", "double", - "dreasm", "dreams", - "duting", "during", - "ealier", "earlier", - "eearly", "early", - "efford", "effort", - "emited", "emitted", - "emnity", "enmity", - "enduce", "induce", - "enlish", "english", - "erally", "orally", - "eratic", "erratic", - "ethose", "those", - "exampt", "exempt", - "excact", "exact", - "excell", "excel", - "exerpt", "excerpt", - "exinct", "extinct", - "expell", "expel", - "expoch", "epoch", - "extint", "extinct", - "facist", "fascist", - "faught", "fought", - "finaly", "finally", - "forsaw", "foresaw", - "fougth", "fought", - "fourty", "forty", - "foward", "forward", - "freind", "friend", - "fromed", "formed", - "fufill", "fulfill", - "futher", "further", - "gardai", "gardaí", - "ghandi", "gandhi", - "glight", "flight", - "gloabl", "global", - "godess", "goddess", - "guilia", "giulia", - "guilio", "giulio", - "habeus", "habeas", - "harras", "harass", - "hatian", "haitian", - "heared", "heard", - "hertzs", "hertz", - "hieght", "height", - "higest", "highest", - "higway", "highway", - "honory", "honorary", - "howver", "however", - "hstory", "history", - "hunman", "human", - "husban", "husband", - "hvaing", "having", - "illess", "illness", - "ilness", "illness", - "imagin", "imagine", - "imense", "immense", - "includ", "include", - "inital", "initial", - "interm", "interim", - "intial", "initial", - "iunior", "junior", - "jaques", "jacques", - "jospeh", "joseph", - "jouney", "journey", - "klenex", "kleenex", - "labled", "labelled", - "largst", "largest", - "larrry", "larry", - "lefted", "left", - "lenght", "length", - "lerans", "learns", - "liason", "liaison", - "libary", "library", - "lieing", "lying", - "lieved", "lived", - "littel", "little", - "livley", "lively", - "lonley", "lonely", - "mailny", "mainly", - "markes", "marks", - "mileau", "milieu", - "milion", "million", - "millon", "million", - "misile", "missile", - "missen", "mizzen", - "missle", "missile", - "mkaing", "making", - "moderm", "modem", - "moreso", "more", - "mounth", "month", - "myraid", "myriad", - "naieve", "naive", - "nestin", "nesting", - "nineth", "ninth", - "noveau", "nouveau", - "occour", "occur", - "occurr", "occur", - "offred", "offered", - "omited", "omitted", - "ouevre", "oeuvre", - "oxigen", "oxygen", - "p0enis", "penis", - "packge", "package", - "peaple", "people", - "pensle", "pencil", - "peopel", "people", - "peotry", "poetry", - "perade", "parade", - "persan", "person", - "persue", "pursue", - "plateu", "plateau", - "poenis", "penis", - "poisin", "poison", - "polute", "pollute", - "posess", "possess", - "posion", "poison", - "prairy", "prairie", - "prarie", "prairie", - "preiod", "period", - "privte", "private", - "proces", "process", - "proove", "prove", - "psuedo", "pseudo", - "psyhic", "psychic", - "pucini", "puccini", - "pumkin", "pumpkin", - "puting", "putting", - "pyscic", "psychic", - "quizes", "quizzes", - "quuery", "query", - "racaus", "raucous", - "radify", "ratify", - "raelly", "really", - "reacll", "recall", - "realyl", "really", - "reched", "reached", - "recide", "reside", - "recrod", "record", - "refect", "reflect", - "relaly", "really", - "renewl", "renewal", - "retuns", "returns", - "reveiw", "review", - "rhymme", "rhyme", - "rigeur", "rigueur", - "rocord", "record", - "rougly", "roughly", - "runing", "running", - "rythem", "rhythm", - "rythim", "rhythm", - "saftey", "safety", - "salery", "salary", - "satisy", "satisfy", - "satric", "satiric", - "saught", "sought", - "scince", "science", - "scirpt", "script", - "seceed", "succeed", - "seinor", "senior", - "sepina", "subpoena", - "sevice", "service", - "shamen", "shaman", - "sheild", "shield", - "shiped", "shipped", - "shorly", "shortly", - "shoudl", "should", - "shreak", "shriek", - "siezed", "seized", - "sixtin", "sistine", - "sneeks", "sneaks", - "somene", "someone", - "soudns", "sounds", - "sourth", "south", - "speach", "speech", - "spects", "aspects", - "spoace", "space", - "sqaure", "square", - "staion", "station", - "stange", "strange", - "stilus", "stylus", - "stirrs", "stirs", - "stopry", "story", - "strnad", "strand", - "studdy", "study", - "suceed", "succeed", - "sucess", "success", - "sucide", "suicide", - "sumary", "summary", - "suport", "support", - "supose", "suppose", - "surfce", "surface", - "surley", "surly", - "swaers", "swears", - "swepth", "swept", - "talekd", "talked", - "theese", "these", - "therby", "thereby", - "thigns", "things", - "thigsn", "things", - "thikns", "thinks", - "thiunk", "think", - "thnigs", "things", - "threee", "three", - "tkaing", "taking", - "tounge", "tongue", - "tourch", "torch", - "towrad", "toward", - "trafic", "traffic", - "troups", "troupes", - "truely", "truly", - "twelth", "twelfth", - "tyrany", "tyranny", - "unabel", "unable", - "unkown", "unknown", - "untill", "until", - "usally", "usually", - "useage", "usage", - "useing", "using", - "usualy", "usually", - "vaccum", "vacuum", - "variey", "variety", - "varing", "varying", - "varity", "variety", - "vasall", "vassal", - "vigeur", "vigueur", - "villin", "villain", - "vreity", "variety", - "vriety", "variety", - "whants", "wants", - "wheras", "whereas", - "wheter", "whether", - "wholey", "wholly", - "whther", "whether", - "wnated", "wanted", - "writen", "written", - "yaerly", "yearly", - "yotube", "youtube", - "zeebra", "zebra", - "abotu", "about", - "adres", "address", - "afair", "affair", - "agian", "again", - "agina", "again", - "agred", "agreed", - "alege", "allege", - "alsot", "also", - "altho", "although", - "amung", "among", - "anual", "annual", - "aroud", "around", - "arund", "around", - "asign", "assign", - "assit", "assist", - "asume", "assume", - "atain", "attain", - "autor", "author", - "baout", "about", - "blaim", "blame", - "boaut", "bout", - "boook", "book", - "borke", "broke", - "breif", "brief", - "caost", "coast", - "casue", "cause", - "chasr", "chaser", - "cheif", "chief", - "chuch", "church", - "claer", "clear", - "clera", "clear", - "coudl", "could", - "crowm", "crown", - "deram", "dram", - "diety", "deity", - "doens", "does", - "doign", "doing", - "donig", "doing", - "drnik", "drink", - "durig", "during", - "earnt", "earned", - "eigth", "eighth", - "eiter", "either", - "emtpy", "empty", - "endig", "ending", - "eveyr", "every", - "exept", "except", - "eyars", "years", - "eyasr", "years", - "fiels", "fields", - "firts", "flirts", - "fleed", "fled", - "fomed", "formed", - "foucs", "focus", - "foudn", "found", - "fouth", "fourth", - "frome", "from", - "ganes", "games", - "gaurd", "guard", - "gerat", "great", - "gogin", "going", - "goign", "going", - "gonig", "going", - "graet", "great", - "greif", "grief", - "gropu", "group", - "guage", "gauge", - "hapen", "happen", - "herad", "heard", - "heroe", "hero", - "higer", "higher", - "housr", "hours", - "htere", "there", - "htikn", "think", - "hting", "thing", - "htink", "think", - "hwihc", "which", - "hwile", "while", - "hwole", "whole", - "idaes", "ideas", - "idesa", "ideas", - "ihaca", "ithaca", - "knwos", "knows", - "konws", "knows", - "lastr", "last", - "lavae", "larvae", - "layed", "laid", - "leage", "league", - "leanr", "lean", - "leran", "learn", - "levle", "level", - "lible", "libel", - "liekd", "liked", - "liuke", "like", - "lmits", "limits", - "lonly", "lonely", - "lukid", "likud", - "lybia", "libya", - "maked", "marked", - "makse", "makes", - "mamal", "mammal", - "mileu", "milieu", - "mkaes", "makes", - "modle", "model", - "moent", "moment", - "moeny", "money", - "monts", "months", - "movei", "movie", - "muder", "murder", - "mysef", "myself", - "neice", "niece", - "ninty", "ninety", - "ocurr", "occur", - "oging", "going", - "opose", "oppose", - "orded", "ordered", - "orgin", "origin", - "otehr", "other", - "ouput", "output", - "owudl", "would", - "paide", "paid", - "palce", "place", - "pased", "passed", - "payed", "paid", - "peice", "piece", - "peoms", "poems", - "poety", "poetry", - "pwoer", "power", - "qtuie", "quite", - "qutie", "quite", - "realy", "really", - "repid", "rapid", - "rised", "raised", - "rulle", "rule", - "rwite", "write", - "rythm", "rhythm", - "safty", "safety", - "scoll", "scroll", - "seach", "search", - "seige", "siege", - "seing", "seeing", - "sence", "sense", - "sicne", "since", - "sieze", "seize", - "sinse", "sines", - "slowy", "slowly", - "snese", "sneeze", - "soley", "solely", - "sotry", "story", - "sotyr", "satyr", - "soudn", "sound", - "sould", "could", - "spred", "spread", - "stlye", "style", - "stong", "strong", - "stoyr", "story", - "strat", "start", - "stroy", "story", - "suppy", "supply", - "swaer", "swear", - "syrap", "syrup", - "sytem", "system", - "sytle", "style", - "tatoo", "tattoo", - "thast", "that", - "theif", "thief", - "theri", "their", - "thgat", "that", - "thier", "their", - "thign", "thing", - "thikn", "think", - "thnig", "thing", - "thrid", "third", - "thsoe", "those", - "thyat", "that", - "tihkn", "think", - "timne", "time", - "tiome", "time", - "tkaes", "takes", - "todya", "today", - "tyhat", "that", - "unsed", "used", - "weild", "wield", - "whant", "want", - "whcih", "which", - "whihc", "which", - "whith", "with", - "whlch", "which", - "wholy", "wholly", - "wierd", "weird", - "wille", "will", - "willk", "will", - "withh", "with", - "witht", "with", - "wiull", "will", - "wnats", "wants", - "wohle", "whole", - "worls", "world", - "woudl", "would", - "wriet", "write", - "wroet", "wrote", - "yaers", "years", - "yatch", "yacht", - "yearm", "year", - "yeasr", "years", - "yeild", "yield", - "yeras", "years", - "yersa", "years", - "agin", "again", - "agre", "agree", - "ahev", "have", - "ahve", "have", - "alse", "else", - "amke", "make", - "anbd", "and", - "andd", "and", - "apon", "upon", - "aslo", "also", - "awya", "away", - "bakc", "back", - "bcak", "back", - "clas", "class", - "cpoy", "coy", - "cxan", "cyan", - "daed", "dead", - "dael", "deal", - "diea", "idea", - "doub", "doubt", - "dyas", "dryas", - "eahc", "each", - "efel", "evil", - "eles", "eels", - "ened", "need", - "enxt", "next", - "esle", "else", - "eyar", "year", - "fatc", "fact", - "fidn", "find", - "fomr", "from", - "grwo", "grow", - "haev", "have", - "halp", "help", - "holf", "hold", - "hten", "then", - "htey", "they", - "htis", "this", - "hvae", "have", - "hvea", "have", - "inot", "into", - "iwll", "will", - "iwth", "with", - "jstu", "just", - "jsut", "just", - "knwo", "know", - "konw", "know", - "kwno", "know", - "liek", "like", - "loev", "love", - "lveo", "love", - "lvoe", "love", - "mkae", "make", - "mkea", "make", - "mroe", "more", - "nkow", "know", - "nkwo", "know", - "nmae", "name", - "noth", "north", - "nowe", "now", - "omre", "more", - "onot", "note", - "onyl", "only", - "owrk", "work", - "peom", "poem", - "pich", "pitch", - "rela", "real", - "sasy", "says", - "smae", "same", - "smoe", "some", - "soem", "some", - "sohw", "show", - "stpo", "stop", - "suop", "soup", - "syas", "says", - "tahn", "than", - "taht", "that", - "tast", "taste", - "tath", "that", - "tehy", "they", - "tghe", "the", - "ther", "there", - "thge", "the", - "thna", "than", - "thne", "then", - "thsi", "this", - "thta", "that", - "tiem", "time", - "tihs", "this", - "tjhe", "the", - "tkae", "take", - "tood", "todo", - "tust", "trust", - "twon", "town", - "twpo", "two", - "tyhe", "they", - "uise", "use", - "vell", "well", - "veyr", "very", - "vrey", "very", - "vyer", "very", - "vyre", "very", - "waht", "what", - "wass", "was", - "watn", "want", - "weas", "was", - "wehn", "when", - "whic", "which", - "whta", "what", - "wich", "which", - "wief", "wife", - "wiew", "view", - "wiht", "with", - "witn", "with", - "wnat", "want", - "wokr", "work", - "wrok", "work", - "wtih", "with", - "yaer", "year", - "yera", "year", - "yrea", "year", - "ytou", "you", - "adn", "and", - "ect", "etc", - "nto", "not", - "teh", "the", - "thn", "then", - "tje", "the", - "whn", "when", - "wih", "with", - "yuo", "you", -} - -// DictAmerican converts UK spellings to US spellings -var DictAmerican = []string{ - "institutionalisation", "institutionalization", - "internationalisation", "internationalization", - "professionalisation", "professionalization", - "compartmentalising", "compartmentalizing", - "institutionalising", "institutionalizing", - "internationalising", "internationalizing", - "compartmentalised", "compartmentalized", - "compartmentalises", "compartmentalizes", - "decriminalisation", "decriminalization", - "denationalisation", "denationalization", - "fictionalisations", "fictionalizations", - "institutionalised", "institutionalized", - "institutionalises", "institutionalizes", - "intellectualising", "intellectualizing", - "internationalised", "internationalized", - "internationalises", "internationalizes", - "pedestrianisation", "pedestrianization", - "professionalising", "professionalizing", - "archaeologically", "archeologically", - "compartmentalise", "compartmentalize", - "decentralisation", "decentralization", - "demilitarisation", "demilitarization", - "externalisations", "externalizations", - "fictionalisation", "fictionalization", - "institutionalise", "institutionalize", - "intellectualised", "intellectualized", - "intellectualises", "intellectualizes", - "internationalise", "internationalize", - "nationalisations", "nationalizations", - "palaeontologists", "paleontologists", - "professionalised", "professionalized", - "professionalises", "professionalizes", - "rationalisations", "rationalizations", - "sensationalising", "sensationalizing", - "sentimentalising", "sentimentalizing", - "acclimatisation", "acclimatization", - "bougainvillaeas", "bougainvilleas", - "commercialising", "commercializing", - "conceptualising", "conceptualizing", - "contextualising", "contextualizing", - "crystallisation", "crystallization", - "decriminalising", "decriminalizing", - "democratisation", "democratization", - "denationalising", "denationalizing", - "depersonalising", "depersonalizing", - "desensitisation", "desensitization", - "destabilisation", "destabilization", - "disorganisation", "disorganization", - "extemporisation", "extemporization", - "externalisation", "externalization", - "familiarisation", "familiarization", - "generalisations", "generalizations", - "hospitalisation", "hospitalization", - "individualising", "individualizing", - "industrialising", "industrializing", - "intellectualise", "intellectualize", - "internalisation", "internalization", - "manoeuvrability", "maneuverability", - "marginalisation", "marginalization", - "materialisation", "materialization", - "miniaturisation", "miniaturization", - "nationalisation", "nationalization", - "neighbourliness", "neighborliness", - "overemphasising", "overemphasizing", - "palaeontologist", "paleontologist", - "particularising", "particularizing", - "pedestrianising", "pedestrianizing", - "professionalise", "professionalize", - "psychoanalysing", "psychoanalyzing", - "rationalisation", "rationalization", - "reorganisations", "reorganizations", - "revolutionising", "revolutionizing", - "sensationalised", "sensationalized", - "sensationalises", "sensationalizes", - "sentimentalised", "sentimentalized", - "sentimentalises", "sentimentalizes", - "specialisations", "specializations", - "standardisation", "standardization", - "synchronisation", "synchronization", - "systematisation", "systematization", - "aggrandisement", "aggrandizement", - "anaesthetising", "anesthetizing", - "archaeological", "archeological", - "archaeologists", "archeologists", - "bougainvillaea", "bougainvillea", - "characterising", "characterizing", - "collectivising", "collectivizing", - "commercialised", "commercialized", - "commercialises", "commercializes", - "conceptualised", "conceptualized", - "conceptualises", "conceptualizes", - "contextualised", "contextualized", - "contextualises", "contextualizes", - "decentralising", "decentralizing", - "decriminalised", "decriminalized", - "decriminalises", "decriminalizes", - "dehumanisation", "dehumanization", - "demilitarising", "demilitarizing", - "demobilisation", "demobilization", - "demoralisation", "demoralization", - "denationalised", "denationalized", - "denationalises", "denationalizes", - "depersonalised", "depersonalized", - "depersonalises", "depersonalizes", - "disembowelling", "disemboweling", - "dramatisations", "dramatizations", - "editorialising", "editorializing", - "encyclopaedias", "encyclopedias", - "fictionalising", "fictionalizing", - "fraternisation", "fraternization", - "generalisation", "generalization", - "gynaecological", "gynecological", - "gynaecologists", "gynecologists", - "haematological", "hematological", - "haematologists", "hematologists", - "immobilisation", "immobilization", - "individualised", "individualized", - "individualises", "individualizes", - "industrialised", "industrialized", - "industrialises", "industrializes", - "liberalisation", "liberalization", - "monopolisation", "monopolization", - "naturalisation", "naturalization", - "neighbourhoods", "neighborhoods", - "neutralisation", "neutralization", - "organisational", "organizational", - "outmanoeuvring", "outmaneuvering", - "overemphasised", "overemphasized", - "overemphasises", "overemphasizes", - "paediatricians", "pediatricians", - "particularised", "particularized", - "particularises", "particularizes", - "pasteurisation", "pasteurization", - "pedestrianised", "pedestrianized", - "pedestrianises", "pedestrianizes", - "philosophising", "philosophizing", - "politicisation", "politicization", - "popularisation", "popularization", - "pressurisation", "pressurization", - "prioritisation", "prioritization", - "privatisations", "privatizations", - "propagandising", "propagandizing", - "psychoanalysed", "psychoanalyzed", - "psychoanalyses", "psychoanalyzes", - "regularisation", "regularization", - "reorganisation", "reorganization", - "revolutionised", "revolutionized", - "revolutionises", "revolutionizes", - "secularisation", "secularization", - "sensationalise", "sensationalize", - "sentimentalise", "sentimentalize", - "serialisations", "serializations", - "specialisation", "specialization", - "sterilisations", "sterilizations", - "stigmatisation", "stigmatization", - "transistorised", "transistorized", - "unrecognisable", "unrecognizable", - "visualisations", "visualizations", - "westernisation", "westernization", - "accessorising", "accessorizing", - "acclimatising", "acclimatizing", - "amortisations", "amortizations", - "amphitheatres", "amphitheaters", - "anaesthetised", "anesthetized", - "anaesthetises", "anesthetizes", - "anaesthetists", "anesthetists", - "archaeologist", "archeologist", - "backpedalling", "backpedaling", - "behaviourists", "behaviorists", - "breathalysers", "breathalyzers", - "breathalysing", "breathalyzing", - "callisthenics", "calisthenics", - "cannibalising", "cannibalizing", - "characterised", "characterized", - "characterises", "characterizes", - "circularising", "circularizing", - "clarinettists", "clarinetists", - "collectivised", "collectivized", - "collectivises", "collectivizes", - "commercialise", "commercialize", - "computerising", "computerizing", - "conceptualise", "conceptualize", - "contextualise", "contextualize", - "criminalising", "criminalizing", - "crystallising", "crystallizing", - "decentralised", "decentralized", - "decentralises", "decentralizes", - "decriminalise", "decriminalize", - "demilitarised", "demilitarized", - "demilitarises", "demilitarizes", - "democratising", "democratizing", - "denationalise", "denationalize", - "depersonalise", "depersonalize", - "desensitising", "desensitizing", - "destabilising", "destabilizing", - "disembowelled", "disemboweled", - "dishonourable", "dishonorable", - "dishonourably", "dishonorably", - "dramatisation", "dramatization", - "editorialised", "editorialized", - "editorialises", "editorializes", - "encyclopaedia", "encyclopedia", - "encyclopaedic", "encyclopedic", - "extemporising", "extemporizing", - "externalising", "externalizing", - "familiarising", "familiarizing", - "fertilisation", "fertilization", - "fictionalised", "fictionalized", - "fictionalises", "fictionalizes", - "formalisation", "formalization", - "fossilisation", "fossilization", - "globalisation", "globalization", - "gynaecologist", "gynecologist", - "haematologist", "hematologist", - "haemophiliacs", "hemophiliacs", - "haemorrhaging", "hemorrhaging", - "harmonisation", "harmonization", - "hospitalising", "hospitalizing", - "hypothesising", "hypothesizing", - "immortalising", "immortalizing", - "individualise", "individualize", - "industrialise", "industrialize", - "internalising", "internalizing", - "marginalising", "marginalizing", - "materialising", "materializing", - "mechanisation", "mechanization", - "memorialising", "memorializing", - "miniaturising", "miniaturizing", - "miscatalogued", "miscataloged", - "misdemeanours", "misdemeanors", - "multicoloured", "multicolored", - "nationalising", "nationalizing", - "neighbourhood", "neighborhood", - "normalisation", "normalization", - "organisations", "organizations", - "outmanoeuvred", "outmaneuvered", - "outmanoeuvres", "outmaneuvers", - "overemphasise", "overemphasize", - "paediatrician", "pediatrician", - "palaeontology", "paleontology", - "particularise", "particularize", - "passivisation", "passivization", - "patronisingly", "patronizingly", - "pedestrianise", "pedestrianize", - "personalising", "personalizing", - "philosophised", "philosophized", - "philosophises", "philosophizes", - "privatisation", "privatization", - "propagandised", "propagandized", - "propagandises", "propagandizes", - "proselytisers", "proselytizers", - "proselytising", "proselytizing", - "psychoanalyse", "psychoanalyze", - "pulverisation", "pulverization", - "rationalising", "rationalizing", - "reconnoitring", "reconnoitering", - "revolutionise", "revolutionize", - "romanticising", "romanticizing", - "serialisation", "serialization", - "socialisation", "socialization", - "stabilisation", "stabilization", - "standardising", "standardizing", - "sterilisation", "sterilization", - "subsidisation", "subsidization", - "synchronising", "synchronizing", - "systematising", "systematizing", - "tantalisingly", "tantalizingly", - "underutilised", "underutilized", - "victimisation", "victimization", - "visualisation", "visualization", - "vocalisations", "vocalizations", - "vulgarisation", "vulgarization", - "accessorised", "accessorized", - "accessorises", "accessorizes", - "acclimatised", "acclimatized", - "acclimatises", "acclimatizes", - "amortisation", "amortization", - "amphitheatre", "amphitheater", - "anaesthetics", "anesthetics", - "anaesthetise", "anesthetize", - "anaesthetist", "anesthetist", - "antagonising", "antagonizing", - "appetisingly", "appetizingly", - "backpedalled", "backpedaled", - "bastardising", "bastardizing", - "behaviourism", "behaviorism", - "behaviourist", "behaviorist", - "bowdlerising", "bowdlerizing", - "breathalysed", "breathalyzed", - "breathalyser", "breathalyzer", - "breathalyses", "breathalyzes", - "cannibalised", "cannibalized", - "cannibalises", "cannibalizes", - "capitalising", "capitalizing", - "caramelising", "caramelizing", - "categorising", "categorizing", - "centigrammes", "centigrams", - "centralising", "centralizing", - "centrepieces", "centerpieces", - "characterise", "characterize", - "circularised", "circularized", - "circularises", "circularizes", - "clarinettist", "clarinetist", - "collectivise", "collectivize", - "colonisation", "colonization", - "computerised", "computerized", - "computerises", "computerizes", - "criminalised", "criminalized", - "criminalises", "criminalizes", - "crystallised", "crystallized", - "crystallises", "crystallizes", - "decentralise", "decentralize", - "dehumanising", "dehumanizing", - "demilitarise", "demilitarize", - "demobilising", "demobilizing", - "democratised", "democratized", - "democratises", "democratizes", - "demoralising", "demoralizing", - "desensitised", "desensitized", - "desensitises", "desensitizes", - "destabilised", "destabilized", - "destabilises", "destabilizes", - "discolouring", "discoloring", - "dishonouring", "dishonoring", - "disorganised", "disorganized", - "editorialise", "editorialize", - "endeavouring", "endeavoring", - "equalisation", "equalization", - "evangelising", "evangelizing", - "extemporised", "extemporized", - "extemporises", "extemporizes", - "externalised", "externalized", - "externalises", "externalizes", - "familiarised", "familiarized", - "familiarises", "familiarizes", - "fictionalise", "fictionalize", - "finalisation", "finalization", - "fraternising", "fraternizing", - "generalising", "generalizing", - "haemophiliac", "hemophiliac", - "haemorrhaged", "hemorrhaged", - "haemorrhages", "hemorrhages", - "haemorrhoids", "hemorrhoids", - "homoeopathic", "homeopathic", - "homogenising", "homogenizing", - "hospitalised", "hospitalized", - "hospitalises", "hospitalizes", - "hypothesised", "hypothesized", - "hypothesises", "hypothesizes", - "idealisation", "idealization", - "immobilisers", "immobilizers", - "immobilising", "immobilizing", - "immortalised", "immortalized", - "immortalises", "immortalizes", - "immunisation", "immunization", - "initialising", "initializing", - "internalised", "internalized", - "internalises", "internalizes", - "jeopardising", "jeopardizing", - "legalisation", "legalization", - "legitimising", "legitimizing", - "liberalising", "liberalizing", - "manoeuvrable", "maneuverable", - "manoeuvrings", "maneuverings", - "marginalised", "marginalized", - "marginalises", "marginalizes", - "marvellously", "marvelously", - "materialised", "materialized", - "materialises", "materializes", - "maximisation", "maximization", - "memorialised", "memorialized", - "memorialises", "memorializes", - "metabolising", "metabolizing", - "militarising", "militarizing", - "milligrammes", "milligrams", - "miniaturised", "miniaturized", - "miniaturises", "miniaturizes", - "misbehaviour", "misbehavior", - "misdemeanour", "misdemeanor", - "mobilisation", "mobilization", - "moisturisers", "moisturizers", - "moisturising", "moisturizing", - "monopolising", "monopolizing", - "moustachioed", "mustachioed", - "nationalised", "nationalized", - "nationalises", "nationalizes", - "naturalising", "naturalizing", - "neighbouring", "neighboring", - "neutralising", "neutralizing", - "oesophaguses", "esophaguses", - "organisation", "organization", - "orthopaedics", "orthopedics", - "outmanoeuvre", "outmaneuver", - "palaeolithic", "paleolithic", - "pasteurising", "pasteurizing", - "personalised", "personalized", - "personalises", "personalizes", - "philosophise", "philosophize", - "plagiarising", "plagiarizing", - "ploughshares", "plowshares", - "polarisation", "polarization", - "politicising", "politicizing", - "popularising", "popularizing", - "pressurising", "pressurizing", - "prioritising", "prioritizing", - "propagandise", "propagandize", - "proselytised", "proselytized", - "proselytiser", "proselytizer", - "proselytises", "proselytizes", - "radicalising", "radicalizing", - "rationalised", "rationalized", - "rationalises", "rationalizes", - "realisations", "realizations", - "recognisable", "recognizable", - "recognisably", "recognizably", - "recognisance", "recognizance", - "reconnoitred", "reconnoitered", - "reconnoitres", "reconnoiters", - "regularising", "regularizing", - "reorganising", "reorganizing", - "revitalising", "revitalizing", - "rhapsodising", "rhapsodizing", - "romanticised", "romanticized", - "romanticises", "romanticizes", - "scandalising", "scandalizing", - "scrutinising", "scrutinizing", - "secularising", "secularizing", - "specialising", "specializing", - "squirrelling", "squirreling", - "standardised", "standardized", - "standardises", "standardizes", - "stigmatising", "stigmatizing", - "sympathisers", "sympathizers", - "sympathising", "sympathizing", - "synchronised", "synchronized", - "synchronises", "synchronizes", - "synthesisers", "synthesizers", - "synthesising", "synthesizing", - "systematised", "systematized", - "systematises", "systematizes", - "technicolour", "technicolor", - "theatregoers", "theatergoers", - "traumatising", "traumatizing", - "trivialising", "trivializing", - "unauthorised", "unauthorized", - "uncatalogued", "uncataloged", - "unfavourable", "unfavorable", - "unfavourably", "unfavorably", - "unionisation", "unionization", - "unrecognised", "unrecognized", - "untrammelled", "untrammeled", - "urbanisation", "urbanization", - "vaporisation", "vaporization", - "vocalisation", "vocalization", - "watercolours", "watercolors", - "westernising", "westernizing", - "accessorise", "accessorize", - "acclimatise", "acclimatize", - "agonisingly", "agonizingly", - "amortisable", "amortizable", - "anaesthesia", "anesthesia", - "anaesthetic", "anesthetic", - "anglicising", "anglicizing", - "antagonised", "antagonized", - "antagonises", "antagonizes", - "apologising", "apologizing", - "archaeology", "archeology", - "authorising", "authorizing", - "bastardised", "bastardized", - "bastardises", "bastardizes", - "bedevilling", "bedeviling", - "behavioural", "behavioral", - "belabouring", "belaboring", - "bowdlerised", "bowdlerized", - "bowdlerises", "bowdlerizes", - "breathalyse", "breathalyze", - "brutalising", "brutalizing", - "cannibalise", "cannibalize", - "capitalised", "capitalized", - "capitalises", "capitalizes", - "caramelised", "caramelized", - "caramelises", "caramelizes", - "carbonising", "carbonizing", - "cataloguing", "cataloging", - "categorised", "categorized", - "categorises", "categorizes", - "cauterising", "cauterizing", - "centigramme", "centigram", - "centilitres", "centiliters", - "centimetres", "centimeters", - "centralised", "centralized", - "centralises", "centralizes", - "centrefolds", "centerfolds", - "centrepiece", "centerpiece", - "channelling", "channeling", - "chequebooks", "checkbooks", - "circularise", "circularize", - "colourfully", "colorfully", - "colourizing", "colorizing", - "computerise", "computerize", - "councillors", "councilors", - "counselling", "counseling", - "counsellors", "counselors", - "criminalise", "criminalize", - "criticising", "criticizing", - "crystallise", "crystallize", - "customising", "customizing", - "defenceless", "defenseless", - "dehumanised", "dehumanized", - "dehumanises", "dehumanizes", - "demobilised", "demobilized", - "demobilises", "demobilizes", - "democratise", "democratize", - "demoralised", "demoralized", - "demoralises", "demoralizes", - "deodorising", "deodorizing", - "desensitise", "desensitize", - "destabilise", "destabilize", - "discoloured", "discolored", - "dishevelled", "disheveled", - "dishonoured", "dishonored", - "dramatising", "dramatizing", - "economising", "economizing", - "empathising", "empathizing", - "emphasising", "emphasizing", - "endeavoured", "endeavored", - "epitomising", "epitomizing", - "evangelised", "evangelized", - "evangelises", "evangelizes", - "extemporise", "extemporize", - "externalise", "externalize", - "factorising", "factorizing", - "familiarise", "familiarize", - "fantasising", "fantasizing", - "favouritism", "favoritism", - "fertilisers", "fertilizers", - "fertilising", "fertilizing", - "flavourings", "flavorings", - "flavourless", "flavorless", - "flavoursome", "flavorsome", - "formalising", "formalizing", - "fossilising", "fossilizing", - "fraternised", "fraternized", - "fraternises", "fraternizes", - "galvanising", "galvanizing", - "generalised", "generalized", - "generalises", "generalizes", - "ghettoising", "ghettoizing", - "globalising", "globalizing", - "gruellingly", "gruelingly", - "gynaecology", "gynecology", - "haematology", "hematology", - "haemoglobin", "hemoglobin", - "haemophilia", "hemophilia", - "haemorrhage", "hemorrhage", - "harmonising", "harmonizing", - "homoeopaths", "homeopaths", - "homoeopathy", "homeopathy", - "homogenised", "homogenized", - "homogenises", "homogenizes", - "hospitalise", "hospitalize", - "hybridising", "hybridizing", - "hypnotising", "hypnotizing", - "hypothesise", "hypothesize", - "immobilised", "immobilized", - "immobiliser", "immobilizer", - "immobilises", "immobilizes", - "immortalise", "immortalize", - "impanelling", "impaneling", - "imperilling", "imperiling", - "initialised", "initialized", - "initialises", "initializes", - "initialling", "initialing", - "instalments", "installments", - "internalise", "internalize", - "italicising", "italicizing", - "jeopardised", "jeopardized", - "jeopardises", "jeopardizes", - "kilogrammes", "kilograms", - "legitimised", "legitimized", - "legitimises", "legitimizes", - "liberalised", "liberalized", - "liberalises", "liberalizes", - "lionisation", "lionization", - "liquidisers", "liquidizers", - "liquidising", "liquidizing", - "magnetising", "magnetizing", - "manoeuvring", "maneuvering", - "marginalise", "marginalize", - "marshalling", "marshaling", - "materialise", "materialize", - "mechanising", "mechanizing", - "memorialise", "memorialize", - "mesmerising", "mesmerizing", - "metabolised", "metabolized", - "metabolises", "metabolizes", - "micrometres", "micrometers", - "militarised", "militarized", - "militarises", "militarizes", - "milligramme", "milligram", - "millilitres", "milliliters", - "millimetres", "millimeters", - "miniaturise", "miniaturize", - "modernising", "modernizing", - "moisturised", "moisturized", - "moisturiser", "moisturizer", - "moisturises", "moisturizes", - "monopolised", "monopolized", - "monopolises", "monopolizes", - "nationalise", "nationalize", - "naturalised", "naturalized", - "naturalises", "naturalizes", - "neighbourly", "neighborly", - "neutralised", "neutralized", - "neutralises", "neutralizes", - "normalising", "normalizing", - "orthopaedic", "orthopedic", - "ostracising", "ostracizing", - "oxidisation", "oxidization", - "paediatrics", "pediatrics", - "paedophiles", "pedophiles", - "paedophilia", "pedophilia", - "passivising", "passivizing", - "pasteurised", "pasteurized", - "pasteurises", "pasteurizes", - "patronising", "patronizing", - "personalise", "personalize", - "plagiarised", "plagiarized", - "plagiarises", "plagiarizes", - "ploughshare", "plowshare", - "politicised", "politicized", - "politicises", "politicizes", - "popularised", "popularized", - "popularises", "popularizes", - "praesidiums", "presidiums", - "pressurised", "pressurized", - "pressurises", "pressurizes", - "prioritised", "prioritized", - "prioritises", "prioritizes", - "privatising", "privatizing", - "proselytise", "proselytize", - "publicising", "publicizing", - "pulverising", "pulverizing", - "quarrelling", "quarreling", - "radicalised", "radicalized", - "radicalises", "radicalizes", - "randomising", "randomizing", - "rationalise", "rationalize", - "realisation", "realization", - "recognising", "recognizing", - "reconnoitre", "reconnoiter", - "regularised", "regularized", - "regularises", "regularizes", - "remodelling", "remodeling", - "reorganised", "reorganized", - "reorganises", "reorganizes", - "revitalised", "revitalized", - "revitalises", "revitalizes", - "rhapsodised", "rhapsodized", - "rhapsodises", "rhapsodizes", - "romanticise", "romanticize", - "scandalised", "scandalized", - "scandalises", "scandalizes", - "sceptically", "skeptically", - "scrutinised", "scrutinized", - "scrutinises", "scrutinizes", - "secularised", "secularized", - "secularises", "secularizes", - "sensitising", "sensitizing", - "serialising", "serializing", - "sermonising", "sermonizing", - "shrivelling", "shriveling", - "signalising", "signalizing", - "snorkelling", "snorkeling", - "snowploughs", "snowplow", - "socialising", "socializing", - "solemnising", "solemnizing", - "specialised", "specialized", - "specialises", "specializes", - "squirrelled", "squirreled", - "stabilisers", "stabilizers", - "stabilising", "stabilizing", - "standardise", "standardize", - "stencilling", "stenciling", - "sterilisers", "sterilizers", - "sterilising", "sterilizing", - "stigmatised", "stigmatized", - "stigmatises", "stigmatizes", - "subsidisers", "subsidizers", - "subsidising", "subsidizing", - "summarising", "summarizing", - "symbolising", "symbolizing", - "sympathised", "sympathized", - "sympathiser", "sympathizer", - "sympathises", "sympathizes", - "synchronise", "synchronize", - "synthesised", "synthesized", - "synthesiser", "synthesizer", - "synthesises", "synthesizes", - "systematise", "systematize", - "tantalising", "tantalizing", - "temporising", "temporizing", - "tenderising", "tenderizing", - "terrorising", "terrorizing", - "theatregoer", "theatergoer", - "traumatised", "traumatized", - "traumatises", "traumatizes", - "trivialised", "trivialized", - "trivialises", "trivializes", - "tyrannising", "tyrannizing", - "uncivilised", "uncivilized", - "unorganised", "unorganized", - "unravelling", "unraveling", - "utilisation", "utilization", - "vandalising", "vandalizing", - "verbalising", "verbalizing", - "victimising", "victimizing", - "visualising", "visualizing", - "vulgarising", "vulgarizing", - "watercolour", "watercolor", - "westernised", "westernized", - "westernises", "westernizes", - "worshipping", "worshiping", - "aeroplanes", "airplanes", - "amortising", "amortizing", - "anglicised", "anglicized", - "anglicises", "anglicizes", - "annualised", "annualized", - "antagonise", "antagonize", - "apologised", "apologized", - "apologises", "apologizes", - "appetisers", "appetizers", - "appetising", "appetizing", - "authorised", "authorized", - "authorises", "authorizes", - "bannisters", "banisters", - "bastardise", "bastardize", - "bedevilled", "bedeviled", - "behaviours", "behaviors", - "bejewelled", "bejeweled", - "belaboured", "belabored", - "bowdlerise", "bowdlerize", - "brutalised", "brutalized", - "brutalises", "brutalizes", - "canalising", "canalizing", - "cancelling", "canceling", - "canonising", "canonizing", - "capitalise", "capitalize", - "caramelise", "caramelize", - "carbonised", "carbonized", - "carbonises", "carbonizes", - "catalogued", "cataloged", - "catalogues", "catalogs", - "catalysing", "catalyzing", - "categorise", "categorize", - "cauterised", "cauterized", - "cauterises", "cauterizes", - "centilitre", "centiliter", - "centimetre", "centimeter", - "centralise", "centralize", - "centrefold", "centerfold", - "channelled", "channeled", - "chequebook", "checkbook", - "chiselling", "chiseling", - "civilising", "civilizing", - "clamouring", "clamoring", - "colonisers", "colonizers", - "colonising", "colonizing", - "colourants", "colorants", - "colourized", "colorized", - "colourizes", "colorizes", - "colourless", "colorless", - "connexions", "connections", - "councillor", "councilor", - "counselled", "counseled", - "counsellor", "counselor", - "criticised", "criticized", - "criticises", "criticizes", - "cudgelling", "cudgeling", - "customised", "customized", - "customises", "customizes", - "dehumanise", "dehumanize", - "demobilise", "demobilize", - "demonising", "demonizing", - "demoralise", "demoralize", - "deodorised", "deodorized", - "deodorises", "deodorizes", - "deputising", "deputizing", - "digitising", "digitizing", - "discolours", "discolors", - "dishonours", "dishonors", - "dramatised", "dramatized", - "dramatises", "dramatizes", - "drivelling", "driveling", - "economised", "economized", - "economises", "economizes", - "empathised", "empathized", - "empathises", "empathizes", - "emphasised", "emphasized", - "emphasises", "emphasizes", - "enamelling", "enameling", - "endeavours", "endeavors", - "energising", "energizing", - "epaulettes", "epaulets", - "epicentres", "epicenters", - "epitomised", "epitomized", - "epitomises", "epitomizes", - "equalisers", "equalizers", - "equalising", "equalizing", - "eulogising", "eulogizing", - "evangelise", "evangelize", - "factorised", "factorized", - "factorises", "factorizes", - "fantasised", "fantasized", - "fantasises", "fantasizes", - "favourable", "favorable", - "favourably", "favorably", - "favourites", "favorites", - "feminising", "feminizing", - "fertilised", "fertilized", - "fertiliser", "fertilizer", - "fertilises", "fertilizes", - "fibreglass", "fiberglass", - "finalising", "finalizing", - "flavouring", "flavoring", - "formalised", "formalized", - "formalises", "formalizes", - "fossilised", "fossilized", - "fossilises", "fossilizes", - "fraternise", "fraternize", - "fulfilment", "fulfillment", - "funnelling", "funneling", - "galvanised", "galvanized", - "galvanises", "galvanizes", - "gambolling", "gamboling", - "gaolbreaks", "jailbreaks", - "generalise", "generalize", - "ghettoised", "ghettoized", - "ghettoises", "ghettoizes", - "globalised", "globalized", - "globalises", "globalizes", - "gonorrhoea", "gonorrhea", - "grovelling", "groveling", - "harbouring", "harboring", - "harmonised", "harmonized", - "harmonises", "harmonizes", - "homoeopath", "homeopath", - "homogenise", "homogenize", - "honourable", "honorable", - "honourably", "honorably", - "humanising", "humanizing", - "humourless", "humorless", - "hybridised", "hybridized", - "hybridises", "hybridizes", - "hypnotised", "hypnotized", - "hypnotises", "hypnotizes", - "idealising", "idealizing", - "immobilise", "immobilize", - "immunising", "immunizing", - "impanelled", "impaneled", - "imperilled", "imperiled", - "inflexions", "inflections", - "initialise", "initialize", - "initialled", "initialed", - "instalment", "installment", - "ionisation", "ionization", - "italicised", "italicized", - "italicises", "italicizes", - "jeopardise", "jeopardize", - "kilogramme", "kilogram", - "kilometres", "kilometers", - "lacklustre", "lackluster", - "legalising", "legalizing", - "legitimise", "legitimize", - "liberalise", "liberalize", - "liquidised", "liquidized", - "liquidiser", "liquidizer", - "liquidises", "liquidizes", - "localising", "localizing", - "magnetised", "magnetized", - "magnetises", "magnetizes", - "manoeuvred", "maneuvered", - "manoeuvres", "maneuvers", - "marshalled", "marshaled", - "marvelling", "marveling", - "marvellous", "marvelous", - "maximising", "maximizing", - "mechanised", "mechanized", - "mechanises", "mechanizes", - "memorising", "memorizing", - "mesmerised", "mesmerized", - "mesmerises", "mesmerizes", - "metabolise", "metabolize", - "micrometre", "micrometer", - "militarise", "militarize", - "millilitre", "milliliter", - "millimetre", "millimeter", - "minimising", "minimizing", - "mobilising", "mobilizing", - "modernised", "modernized", - "modernises", "modernizes", - "moisturise", "moisturize", - "monopolise", "monopolize", - "moralising", "moralizing", - "mouldering", "moldering", - "moustached", "mustached", - "moustaches", "mustaches", - "naturalise", "naturalize", - "neighbours", "neighbors", - "neutralise", "neutralize", - "normalised", "normalized", - "normalises", "normalizes", - "oesophagus", "esophagus", - "optimising", "optimizing", - "organisers", "organizers", - "organising", "organizing", - "ostracised", "ostracized", - "ostracises", "ostracizes", - "paederasts", "pederasts", - "paediatric", "pediatric", - "paedophile", "pedophile", - "panellists", "panelists", - "paralysing", "paralyzing", - "parcelling", "parceling", - "passivised", "passivized", - "passivises", "passivizes", - "pasteurise", "pasteurize", - "patronised", "patronized", - "patronises", "patronizes", - "penalising", "penalizing", - "pencilling", "penciling", - "plagiarise", "plagiarize", - "polarising", "polarizing", - "politicise", "politicize", - "popularise", "popularize", - "practising", "practicing", - "praesidium", "presidium", - "pressurise", "pressurize", - "prioritise", "prioritize", - "privatised", "privatized", - "privatises", "privatizes", - "programmes", "programs", - "publicised", "publicized", - "publicises", "publicizes", - "pulverised", "pulverized", - "pulverises", "pulverizes", - "pummelling", "pummeled", - "quarrelled", "quarreled", - "radicalise", "radicalize", - "randomised", "randomized", - "randomises", "randomizes", - "realisable", "realizable", - "recognised", "recognized", - "recognises", "recognizes", - "refuelling", "refueling", - "regularise", "regularize", - "remodelled", "remodeled", - "remoulding", "remolding", - "reorganise", "reorganize", - "revitalise", "revitalize", - "rhapsodise", "rhapsodize", - "ritualised", "ritualized", - "sanitising", "sanitizing", - "satirising", "satirizing", - "scandalise", "scandalize", - "scepticism", "skepticism", - "scrutinise", "scrutinize", - "secularise", "secularize", - "sensitised", "sensitized", - "sensitises", "sensitizes", - "sepulchres", "sepulchers", - "serialised", "serialized", - "serialises", "serializes", - "sermonised", "sermonized", - "sermonises", "sermonizes", - "shovelling", "shoveling", - "shrivelled", "shriveled", - "signalised", "signalized", - "signalises", "signalizes", - "signalling", "signaling", - "snivelling", "sniveling", - "snorkelled", "snorkeled", - "snowplough", "snowplow", - "socialised", "socialized", - "socialises", "socializes", - "sodomising", "sodomizing", - "solemnised", "solemnized", - "solemnises", "solemnizes", - "specialise", "specialize", - "spiralling", "spiraling", - "splendours", "splendors", - "stabilised", "stabilized", - "stabiliser", "stabilizer", - "stabilises", "stabilizes", - "stencilled", "stenciled", - "sterilised", "sterilized", - "steriliser", "sterilizer", - "sterilises", "sterilizes", - "stigmatise", "stigmatize", - "subsidised", "subsidized", - "subsidiser", "subsidizer", - "subsidises", "subsidizes", - "succouring", "succoring", - "sulphurous", "sulfurous", - "summarised", "summarized", - "summarises", "summarizes", - "swivelling", "swiveling", - "symbolised", "symbolized", - "symbolises", "symbolizes", - "sympathise", "sympathize", - "synthesise", "synthesize", - "tantalised", "tantalized", - "tantalises", "tantalizes", - "temporised", "temporized", - "temporises", "temporizes", - "tenderised", "tenderized", - "tenderises", "tenderizes", - "terrorised", "terrorized", - "terrorises", "terrorizes", - "theorising", "theorizing", - "traumatise", "traumatize", - "travellers", "travelers", - "travelling", "traveling", - "tricolours", "tricolors", - "trivialise", "trivialize", - "tunnelling", "tunneling", - "tyrannised", "tyrannized", - "tyrannises", "tyrannizes", - "unequalled", "unequaled", - "unionising", "unionizing", - "unravelled", "unraveled", - "unrivalled", "unrivaled", - "urbanising", "urbanizing", - "utilisable", "utilizable", - "vandalised", "vandalized", - "vandalises", "vandalizes", - "vaporising", "vaporizing", - "verbalised", "verbalized", - "verbalises", "verbalizes", - "victimised", "victimized", - "victimises", "victimizes", - "visualised", "visualized", - "visualises", "visualizes", - "vocalising", "vocalizing", - "vulcanised", "vulcanized", - "vulgarised", "vulgarized", - "vulgarises", "vulgarizes", - "weaselling", "weaseling", - "westernise", "westernize", - "womanisers", "womanizers", - "womanising", "womanizing", - "worshipped", "worshiped", - "worshipper", "worshiper", - "aeroplane", "airplane", - "aetiology", "etiology", - "agonising", "agonizing", - "almanacks", "almanacs", - "aluminium", "aluminum", - "amortised", "amortized", - "amortises", "amortizes", - "analogues", "analogs", - "analysing", "analyzing", - "anglicise", "anglicize", - "apologise", "apologize", - "appetiser", "appetizer", - "armourers", "armorers", - "armouries", "armories", - "artefacts", "artifacts", - "authorise", "authorize", - "baptising", "baptizing", - "behaviour", "behavior", - "belabours", "belabors", - "brutalise", "brutalize", - "callipers", "calipers", - "canalised", "canalized", - "canalises", "canalizes", - "cancelled", "canceled", - "canonised", "canonized", - "canonises", "canonizes", - "carbonise", "carbonize", - "carolling", "caroling", - "catalogue", "catalog", - "catalysed", "catalyzed", - "catalyses", "catalyzes", - "cauterise", "cauterize", - "cavilling", "caviling", - "chequered", "checkered", - "chiselled", "chiseled", - "civilised", "civilized", - "civilises", "civilizes", - "clamoured", "clamored", - "colonised", "colonized", - "coloniser", "colonizer", - "colonises", "colonizes", - "colourant", "colorant", - "coloureds", "coloreds", - "colourful", "colorful", - "colouring", "coloring", - "colourize", "colorize", - "connexion", "connection", - "criticise", "criticize", - "cruellest", "cruelest", - "cudgelled", "cudgeled", - "customise", "customize", - "demeanour", "demeanor", - "demonised", "demonized", - "demonises", "demonizes", - "deodorise", "deodorize", - "deputised", "deputized", - "deputises", "deputizes", - "dialogues", "dialogs", - "diarrhoea", "diarrhea", - "digitised", "digitized", - "digitises", "digitizes", - "discolour", "discolor", - "disfavour", "disfavor", - "dishonour", "dishonor", - "dramatise", "dramatize", - "drivelled", "driveled", - "economise", "economize", - "empathise", "empathize", - "emphasise", "emphasize", - "enamelled", "enameled", - "enamoured", "enamored", - "endeavour", "endeavor", - "energised", "energized", - "energises", "energizes", - "epaulette", "epaulet", - "epicentre", "epicenter", - "epitomise", "epitomize", - "equalised", "equalized", - "equaliser", "equalizer", - "equalises", "equalizes", - "eulogised", "eulogized", - "eulogises", "eulogizes", - "factorise", "factorize", - "fantasise", "fantasize", - "favouring", "favoring", - "favourite", "favorite", - "feminised", "feminized", - "feminises", "feminizes", - "fertilise", "fertilize", - "finalised", "finalized", - "finalises", "finalizes", - "flautists", "flutists", - "flavoured", "flavored", - "formalise", "formalize", - "fossilise", "fossilize", - "funnelled", "funneled", - "galvanise", "galvanize", - "gambolled", "gamboled", - "gaolbirds", "jailbirds", - "gaolbreak", "jailbreak", - "ghettoise", "ghettoize", - "globalise", "globalize", - "gravelled", "graveled", - "grovelled", "groveled", - "gruelling", "grueling", - "harboured", "harbored", - "harmonise", "harmonize", - "honouring", "honoring", - "humanised", "humanized", - "humanises", "humanizes", - "humouring", "humoring", - "hybridise", "hybridize", - "hypnotise", "hypnotize", - "idealised", "idealized", - "idealises", "idealizes", - "idolising", "idolizing", - "immunised", "immunized", - "immunises", "immunizes", - "inflexion", "inflection", - "italicise", "italicize", - "itemising", "itemizing", - "jewellers", "jewelers", - "jewellery", "jewelry", - "kilometre", "kilometer", - "labelling", "labeling", - "labourers", "laborers", - "labouring", "laboring", - "legalised", "legalized", - "legalises", "legalizes", - "leukaemia", "leukemia", - "levellers", "levelers", - "levelling", "leveling", - "libelling", "libeling", - "libellous", "libelous", - "licencing", "licensing", - "lionising", "lionizing", - "liquidise", "liquidize", - "localised", "localized", - "localises", "localizes", - "magnetise", "magnetize", - "manoeuvre", "maneuver", - "marvelled", "marveled", - "maximised", "maximized", - "maximises", "maximizes", - "mechanise", "mechanize", - "mediaeval", "medieval", - "memorised", "memorized", - "memorises", "memorizes", - "mesmerise", "mesmerize", - "minimised", "minimized", - "minimises", "minimizes", - "mobilised", "mobilized", - "mobilises", "mobilizes", - "modellers", "modelers", - "modelling", "modeling", - "modernise", "modernize", - "moralised", "moralized", - "moralises", "moralizes", - "motorised", "motorized", - "mouldered", "moldered", - "mouldiest", "moldiest", - "mouldings", "moldings", - "moustache", "mustache", - "neighbour", "neighbor", - "normalise", "normalize", - "odourless", "odorless", - "oestrogen", "estrogen", - "optimised", "optimized", - "optimises", "optimizes", - "organised", "organized", - "organiser", "organizer", - "organises", "organizes", - "ostracise", "ostracize", - "oxidising", "oxidizing", - "paederast", "pederast", - "panelling", "paneling", - "panellist", "panelist", - "paralysed", "paralyzed", - "paralyses", "paralyzes", - "parcelled", "parceled", - "passivise", "passivize", - "patronise", "patronize", - "pedalling", "pedaling", - "penalised", "penalized", - "penalises", "penalizes", - "pencilled", "penciled", - "ploughing", "plowing", - "ploughman", "plowman", - "ploughmen", "plowmen", - "polarised", "polarized", - "polarises", "polarizes", - "practised", "practiced", - "practises", "practices", - "pretences", "pretenses", - "primaeval", "primeval", - "privatise", "privatize", - "programme", "program", - "publicise", "publicize", - "pulverise", "pulverize", - "pummelled", "pummel", - "randomise", "randomize", - "ravelling", "raveling", - "realising", "realizing", - "recognise", "recognize", - "refuelled", "refueled", - "remoulded", "remolded", - "revellers", "revelers", - "revelling", "reveling", - "rivalling", "rivaling", - "saltpetre", "saltpeter", - "sanitised", "sanitized", - "sanitises", "sanitizes", - "satirised", "satirized", - "satirises", "satirizes", - "savouries", "savories", - "savouring", "savoring", - "sceptical", "skeptical", - "sensitise", "sensitize", - "sepulchre", "sepulcher", - "serialise", "serialize", - "sermonise", "sermonize", - "shovelled", "shoveled", - "signalise", "signalize", - "signalled", "signaled", - "snivelled", "sniveled", - "socialise", "socialize", - "sodomised", "sodomized", - "sodomises", "sodomizes", - "solemnise", "solemnize", - "spiralled", "spiraled", - "splendour", "splendor", - "stabilise", "stabilize", - "sterilise", "sterilize", - "subsidise", "subsidize", - "succoured", "succored", - "sulphates", "sulfates", - "sulphides", "sulfides", - "summarise", "summarize", - "swivelled", "swiveled", - "symbolise", "symbolize", - "syphoning", "siphoning", - "tantalise", "tantalize", - "tasselled", "tasseled", - "temporise", "temporize", - "tenderise", "tenderize", - "terrorise", "terrorize", - "theorised", "theorized", - "theorises", "theorizes", - "towelling", "toweling", - "travelled", "traveled", - "traveller", "traveler", - "trialling", "trialing", - "tricolour", "tricolor", - "tunnelled", "tunneled", - "tyrannise", "tyrannize", - "unionised", "unionized", - "unionises", "unionizes", - "unsavoury", "unsavory", - "urbanised", "urbanized", - "urbanises", "urbanizes", - "utilising", "utilizing", - "vandalise", "vandalize", - "vaporised", "vaporized", - "vaporises", "vaporizes", - "verbalise", "verbalize", - "victimise", "victimize", - "visualise", "visualize", - "vocalised", "vocalized", - "vocalises", "vocalizes", - "vulgarise", "vulgarize", - "weaselled", "weaseled", - "womanised", "womanized", - "womaniser", "womanizer", - "womanises", "womanizes", - "yodelling", "yodeling", - "yoghourts", "yogurts", - "agonised", "agonized", - "agonises", "agonizes", - "almanack", "almanac", - "amortise", "amortize", - "analogue", "analog", - "analysed", "analyzed", - "analyses", "analyzes", - "armoured", "armored", - "armourer", "armorer", - "artefact", "artifact", - "baptised", "baptized", - "baptises", "baptizes", - "baulking", "balking", - "belabour", "belabor", - "bevelled", "beveled", - "calibres", "calibers", - "calliper", "caliper", - "canalise", "canalize", - "canonise", "canonize", - "carolled", "caroled", - "catalyse", "catalyze", - "cavilled", "caviled", - "civilise", "civilize", - "clamours", "clamors", - "clangour", "clangor", - "colonise", "colonize", - "coloured", "colored", - "cosiness", "coziness", - "crueller", "crueler", - "defences", "defenses", - "demonise", "demonize", - "deputise", "deputize", - "dialling", "dialing", - "dialogue", "dialog", - "digitise", "digitize", - "draughty", "drafty", - "duelling", "dueling", - "energise", "energize", - "enthrals", "enthralls", - "equalise", "equalize", - "eulogise", "eulogize", - "favoured", "favored", - "feminise", "feminize", - "finalise", "finalize", - "flautist", "flutist", - "flavours", "flavors", - "foetuses", "fetuses", - "fuelling", "fueling", - "gaolbird", "jailbird", - "gryphons", "griffins", - "harbours", "harbors", - "honoured", "honored", - "humanise", "humanize", - "humoured", "humored", - "idealise", "idealize", - "idolised", "idolized", - "idolises", "idolizes", - "immunise", "immunize", - "ionisers", "ionizers", - "ionising", "ionizing", - "itemised", "itemized", - "itemises", "itemizes", - "jewelled", "jeweled", - "jeweller", "jeweler", - "labelled", "labeled", - "laboured", "labored", - "labourer", "laborer", - "legalise", "legalize", - "levelled", "leveled", - "leveller", "leveler", - "libelled", "libeled", - "licenced", "licensed", - "licences", "licenses", - "lionised", "lionized", - "lionises", "lionizes", - "localise", "localize", - "maximise", "maximize", - "memorise", "memorize", - "minimise", "minimize", - "misspelt", "misspelled", - "mobilise", "mobilize", - "modelled", "modeled", - "modeller", "modeler", - "moralise", "moralize", - "moulders", "molders", - "mouldier", "moldier", - "moulding", "molding", - "moulting", "molting", - "offences", "offenses", - "optimise", "optimize", - "organise", "organize", - "oxidised", "oxidized", - "oxidises", "oxidizes", - "panelled", "paneled", - "paralyse", "paralyze", - "parlours", "parlors", - "pedalled", "pedaled", - "penalise", "penalize", - "philtres", "filters", - "ploughed", "plowed", - "polarise", "polarize", - "practise", "practice", - "pretence", "pretense", - "ravelled", "raveled", - "realised", "realized", - "realises", "realizes", - "remoulds", "remolds", - "revelled", "reveled", - "reveller", "reveler", - "rivalled", "rivaled", - "rumoured", "rumored", - "sanitise", "sanitize", - "satirise", "satirize", - "saviours", "saviors", - "savoured", "savored", - "sceptics", "skeptics", - "sceptres", "scepters", - "sodomise", "sodomize", - "spectres", "specters", - "succours", "succors", - "sulphate", "sulfate", - "sulphide", "sulfide", - "syphoned", "siphoned", - "theatres", "theaters", - "theorise", "theorize", - "towelled", "toweled", - "toxaemia", "toxemia", - "trialled", "trialed", - "unionise", "unionize", - "urbanise", "urbanize", - "utilised", "utilized", - "utilises", "utilizes", - "vaporise", "vaporize", - "vocalise", "vocalize", - "womanise", "womanize", - "yodelled", "yodeled", - "yoghourt", "yogurt", - "yoghurts", "yogurts", - "agonise", "agonize", - "anaemia", "anemia", - "anaemic", "anemic", - "analyse", "analyze", - "arbours", "arbors", - "armoury", "armory", - "baptise", "baptize", - "baulked", "balked", - "behoved", "behooved", - "behoves", "behooves", - "calibre", "caliber", - "candour", "candor", - "centred", "centered", - "centres", "centers", - "cheques", "checks", - "clamour", "clamor", - "colours", "colors", - "cosiest", "coziest", - "defence", "defense", - "dialled", "dialed", - "distils", "distills", - "duelled", "dueled", - "enthral", "enthrall", - "favours", "favors", - "fervour", "fervor", - "flavour", "flavor", - "fuelled", "fueled", - "fulfils", "fulfills", - "gaolers", "jailers", - "gaoling", "jailing", - "gipsies", "gypsies", - "glueing", "gluing", - "goitres", "goiters", - "grammes", "grams", - "groynes", "groins", - "gryphon", "griffin", - "harbour", "harbor", - "honours", "honors", - "humours", "humors", - "idolise", "idolize", - "instals", "installs", - "instils", "instills", - "ionised", "ionized", - "ioniser", "ionizer", - "ionises", "ionizes", - "itemise", "itemize", - "labours", "labors", - "licence", "license", - "lionise", "lionize", - "louvred", "louvered", - "louvres", "louvers", - "moulded", "molded", - "moulder", "molder", - "moulted", "molted", - "offence", "offense", - "oxidise", "oxidize", - "parlour", "parlor", - "philtre", "filter", - "ploughs", "plows", - "pyjamas", "pajamas", - "rancour", "rancor", - "realise", "realize", - "remould", "remold", - "rigours", "rigors", - "rumours", "rumors", - "saviour", "savior", - "savours", "savors", - "savoury", "savory", - "sceptic", "skeptic", - "sceptre", "scepter", - "spectre", "specter", - "storeys", "stories", - "succour", "succor", - "sulphur", "sulfur", - "syphons", "siphons", - "theatre", "theater", - "tumours", "tumors", - "utilise", "utilize", - "vapours", "vapors", - "waggons", "wagons", - "yoghurt", "yogurt", - "ageing", "aging", - "appals", "appalls", - "arbour", "arbor", - "ardour", "ardor", - "baulks", "balks", - "behove", "behoove", - "centre", "center", - "cheque", "check", - "chilli", "chili", - "colour", "color", - "cosier", "cozier", - "cosies", "cozies", - "cosily", "cozily", - "distil", "distill", - "edoema", "edema", - "enrols", "enrolls", - "faecal", "fecal", - "faeces", "feces", - "favour", "favor", - "fibres", "fibers", - "foetal", "fetal", - "foetid", "fetid", - "foetus", "fetus", - "fulfil", "fulfill", - "gaoled", "jailed", - "gaoler", "jailer", - "goitre", "goiter", - "gramme", "gram", - "groyne", "groin", - "honour", "honor", - "humour", "humor", - "instal", "install", - "instil", "instill", - "ionise", "ionize", - "labour", "labor", - "litres", "liters", - "lustre", "luster", - "meagre", "meager", - "metres", "meters", - "mitres", "miters", - "moulds", "molds", - "mouldy", "moldy", - "moults", "molts", - "odours", "odors", - "plough", "plow", - "pyjama", "pajama", - "rigour", "rigor", - "rumour", "rumor", - "savour", "savor", - "storey", "story", - "syphon", "siphon", - "tumour", "tumor", - "valour", "valor", - "vapour", "vapor", - "vigour", "vigor", - "waggon", "wagon", - "appal", "appall", - "baulk", "balk", - "enrol", "enroll", - "fibre", "fiber", - "gaols", "jails", - "litre", "liter", - "metre", "meter", - "mitre", "miter", - "mould", "mold", - "moult", "molt", - "odour", "odor", - "tyres", "tires", - "cosy", "cozy", - "gaol", "jail", - "tyre", "tire", -} - -// DictBritish converts US spellings to UK spellings -var DictBritish = []string{ - "institutionalization", "institutionalisation", - "internationalization", "internationalisation", - "professionalization", "professionalisation", - "compartmentalizing", "compartmentalising", - "institutionalizing", "institutionalising", - "internationalizing", "internationalising", - "compartmentalized", "compartmentalised", - "compartmentalizes", "compartmentalises", - "decriminalization", "decriminalisation", - "denationalization", "denationalisation", - "fictionalizations", "fictionalisations", - "institutionalized", "institutionalised", - "institutionalizes", "institutionalises", - "intellectualizing", "intellectualising", - "internationalized", "internationalised", - "internationalizes", "internationalises", - "pedestrianization", "pedestrianisation", - "professionalizing", "professionalising", - "compartmentalize", "compartmentalise", - "decentralization", "decentralisation", - "demilitarization", "demilitarisation", - "externalizations", "externalisations", - "fictionalization", "fictionalisation", - "institutionalize", "institutionalise", - "intellectualized", "intellectualised", - "intellectualizes", "intellectualises", - "internationalize", "internationalise", - "nationalizations", "nationalisations", - "professionalized", "professionalised", - "professionalizes", "professionalises", - "rationalizations", "rationalisations", - "sensationalizing", "sensationalising", - "sentimentalizing", "sentimentalising", - "acclimatization", "acclimatisation", - "commercializing", "commercialising", - "conceptualizing", "conceptualising", - "contextualizing", "contextualising", - "crystallization", "crystallisation", - "decriminalizing", "decriminalising", - "democratization", "democratisation", - "denationalizing", "denationalising", - "depersonalizing", "depersonalising", - "desensitization", "desensitisation", - "disorganization", "disorganisation", - "extemporization", "extemporisation", - "externalization", "externalisation", - "familiarization", "familiarisation", - "generalizations", "generalisations", - "hospitalization", "hospitalisation", - "individualizing", "individualising", - "industrializing", "industrialising", - "intellectualize", "intellectualise", - "internalization", "internalisation", - "maneuverability", "manoeuvrability", - "materialization", "materialisation", - "miniaturization", "miniaturisation", - "nationalization", "nationalisation", - "overemphasizing", "overemphasising", - "paleontologists", "palaeontologists", - "particularizing", "particularising", - "pedestrianizing", "pedestrianising", - "professionalize", "professionalise", - "psychoanalyzing", "psychoanalysing", - "rationalization", "rationalisation", - "reorganizations", "reorganisations", - "revolutionizing", "revolutionising", - "sensationalized", "sensationalised", - "sensationalizes", "sensationalises", - "sentimentalized", "sentimentalised", - "sentimentalizes", "sentimentalises", - "specializations", "specialisations", - "standardization", "standardisation", - "synchronization", "synchronisation", - "systematization", "systematisation", - "aggrandizement", "aggrandisement", - "characterizing", "characterising", - "collectivizing", "collectivising", - "commercialized", "commercialised", - "commercializes", "commercialises", - "conceptualized", "conceptualised", - "conceptualizes", "conceptualises", - "contextualized", "contextualised", - "contextualizes", "contextualises", - "decentralizing", "decentralising", - "decriminalized", "decriminalised", - "decriminalizes", "decriminalises", - "dehumanization", "dehumanisation", - "demilitarizing", "demilitarising", - "demobilization", "demobilisation", - "demoralization", "demoralisation", - "denationalized", "denationalised", - "denationalizes", "denationalises", - "depersonalized", "depersonalised", - "depersonalizes", "depersonalises", - "dramatizations", "dramatisations", - "editorializing", "editorialising", - "fictionalizing", "fictionalising", - "fraternization", "fraternisation", - "generalization", "generalisation", - "immobilization", "immobilisation", - "individualized", "individualised", - "individualizes", "individualises", - "industrialized", "industrialised", - "industrializes", "industrialises", - "liberalization", "liberalisation", - "monopolization", "monopolisation", - "naturalization", "naturalisation", - "neighborliness", "neighbourliness", - "neutralization", "neutralisation", - "organizational", "organisational", - "outmaneuvering", "outmanoeuvring", - "overemphasized", "overemphasised", - "overemphasizes", "overemphasises", - "paleontologist", "palaeontologist", - "particularized", "particularised", - "particularizes", "particularises", - "pasteurization", "pasteurisation", - "pedestrianized", "pedestrianised", - "pedestrianizes", "pedestrianises", - "philosophizing", "philosophising", - "politicization", "politicisation", - "popularization", "popularisation", - "pressurization", "pressurisation", - "prioritization", "prioritisation", - "privatizations", "privatisations", - "propagandizing", "propagandising", - "psychoanalyzed", "psychoanalysed", - "psychoanalyzes", "psychoanalyses", - "reconnoitering", "reconnoitring", - "regularization", "regularisation", - "reorganization", "reorganisation", - "revolutionized", "revolutionised", - "revolutionizes", "revolutionises", - "secularization", "secularisation", - "sensationalize", "sensationalise", - "sentimentalize", "sentimentalise", - "serializations", "serialisations", - "specialization", "specialisation", - "sterilizations", "sterilisations", - "stigmatization", "stigmatisation", - "transistorized", "transistorised", - "unrecognizable", "unrecognisable", - "visualizations", "visualisations", - "westernization", "westernisation", - "accessorizing", "accessorising", - "acclimatizing", "acclimatising", - "amortizations", "amortisations", - "amphitheaters", "amphitheatres", - "anesthetizing", "anaesthetising", - "archeologists", "archaeologists", - "breathalyzers", "breathalysers", - "breathalyzing", "breathalysing", - "cannibalizing", "cannibalising", - "characterized", "characterised", - "characterizes", "characterises", - "circularizing", "circularising", - "collectivized", "collectivised", - "collectivizes", "collectivises", - "commercialize", "commercialise", - "computerizing", "computerising", - "conceptualize", "conceptualise", - "contextualize", "contextualise", - "criminalizing", "criminalising", - "crystallizing", "crystallising", - "decentralized", "decentralised", - "decentralizes", "decentralises", - "decriminalize", "decriminalise", - "demilitarized", "demilitarised", - "demilitarizes", "demilitarises", - "democratizing", "democratising", - "denationalize", "denationalise", - "depersonalize", "depersonalise", - "desensitizing", "desensitising", - "destabilizing", "destabilising", - "disemboweling", "disembowelling", - "dramatization", "dramatisation", - "editorialized", "editorialised", - "editorializes", "editorialises", - "extemporizing", "extemporising", - "externalizing", "externalising", - "familiarizing", "familiarising", - "fertilization", "fertilisation", - "fictionalized", "fictionalised", - "fictionalizes", "fictionalises", - "formalization", "formalisation", - "fossilization", "fossilisation", - "globalization", "globalisation", - "gynecological", "gynaecological", - "gynecologists", "gynaecologists", - "harmonization", "harmonisation", - "hematological", "haematological", - "hematologists", "haematologists", - "hospitalizing", "hospitalising", - "hypothesizing", "hypothesising", - "immortalizing", "immortalising", - "individualize", "individualise", - "industrialize", "industrialise", - "internalizing", "internalising", - "marginalizing", "marginalising", - "materializing", "materialising", - "mechanization", "mechanisation", - "memorializing", "memorialising", - "miniaturizing", "miniaturising", - "nationalizing", "nationalising", - "neighborhoods", "neighbourhoods", - "normalization", "normalisation", - "organizations", "organisations", - "outmaneuvered", "outmanoeuvred", - "overemphasize", "overemphasise", - "particularize", "particularise", - "passivization", "passivisation", - "patronizingly", "patronisingly", - "pedestrianize", "pedestrianise", - "pediatricians", "paediatricians", - "personalizing", "personalising", - "philosophized", "philosophised", - "philosophizes", "philosophises", - "privatization", "privatisation", - "propagandized", "propagandised", - "propagandizes", "propagandises", - "proselytizers", "proselytisers", - "proselytizing", "proselytising", - "psychoanalyze", "psychoanalyse", - "pulverization", "pulverisation", - "rationalizing", "rationalising", - "reconnoitered", "reconnoitred", - "revolutionize", "revolutionise", - "romanticizing", "romanticising", - "serialization", "serialisation", - "socialization", "socialisation", - "standardizing", "standardising", - "sterilization", "sterilisation", - "subsidization", "subsidisation", - "synchronizing", "synchronising", - "systematizing", "systematising", - "tantalizingly", "tantalisingly", - "underutilized", "underutilised", - "victimization", "victimisation", - "visualization", "visualisation", - "vocalizations", "vocalisations", - "vulgarization", "vulgarisation", - "accessorized", "accessorised", - "accessorizes", "accessorises", - "acclimatized", "acclimatised", - "acclimatizes", "acclimatises", - "amortization", "amortisation", - "amphitheater", "amphitheatre", - "anesthetists", "anaesthetists", - "anesthetized", "anaesthetised", - "anesthetizes", "anaesthetises", - "antagonizing", "antagonising", - "appetizingly", "appetisingly", - "archeologist", "archaeologist", - "backpedaling", "backpedalling", - "bastardizing", "bastardising", - "behaviorists", "behaviourists", - "bowdlerizing", "bowdlerising", - "breathalyzed", "breathalysed", - "breathalyzes", "breathalyses", - "cannibalized", "cannibalised", - "cannibalizes", "cannibalises", - "capitalizing", "capitalising", - "caramelizing", "caramelising", - "categorizing", "categorising", - "centerpieces", "centrepieces", - "centralizing", "centralising", - "characterize", "characterise", - "circularized", "circularised", - "circularizes", "circularises", - "clarinetists", "clarinettists", - "collectivize", "collectivise", - "colonization", "colonisation", - "computerized", "computerised", - "computerizes", "computerises", - "criminalized", "criminalised", - "criminalizes", "criminalises", - "crystallized", "crystallised", - "crystallizes", "crystallises", - "decentralize", "decentralise", - "dehumanizing", "dehumanising", - "demilitarize", "demilitarise", - "demobilizing", "demobilising", - "democratized", "democratised", - "democratizes", "democratises", - "demoralizing", "demoralising", - "desensitized", "desensitised", - "desensitizes", "desensitises", - "destabilized", "destabilised", - "destabilizes", "destabilises", - "disemboweled", "disembowelled", - "dishonorable", "dishonourable", - "dishonorably", "dishonourably", - "disorganized", "disorganised", - "editorialize", "editorialise", - "equalization", "equalisation", - "evangelizing", "evangelising", - "extemporized", "extemporised", - "extemporizes", "extemporises", - "externalized", "externalised", - "externalizes", "externalises", - "familiarized", "familiarised", - "familiarizes", "familiarises", - "fictionalize", "fictionalise", - "finalization", "finalisation", - "fraternizing", "fraternising", - "generalizing", "generalising", - "gynecologist", "gynaecologist", - "hematologist", "haematologist", - "hemophiliacs", "haemophiliacs", - "hemorrhaging", "haemorrhaging", - "homogenizing", "homogenising", - "hospitalized", "hospitalised", - "hospitalizes", "hospitalises", - "hypothesized", "hypothesised", - "hypothesizes", "hypothesises", - "idealization", "idealisation", - "immobilizers", "immobilisers", - "immobilizing", "immobilising", - "immortalized", "immortalised", - "immortalizes", "immortalises", - "immunization", "immunisation", - "initializing", "initialising", - "installments", "instalments", - "internalized", "internalised", - "internalizes", "internalises", - "jeopardizing", "jeopardising", - "legalization", "legalisation", - "legitimizing", "legitimising", - "liberalizing", "liberalising", - "maneuverable", "manoeuvrable", - "maneuverings", "manoeuvrings", - "marginalized", "marginalised", - "marginalizes", "marginalises", - "materialized", "materialised", - "materializes", "materialises", - "maximization", "maximisation", - "memorialized", "memorialised", - "memorializes", "memorialises", - "metabolizing", "metabolising", - "militarizing", "militarising", - "miniaturized", "miniaturised", - "miniaturizes", "miniaturises", - "miscataloged", "miscatalogued", - "misdemeanors", "misdemeanours", - "mobilization", "mobilisation", - "moisturizers", "moisturisers", - "moisturizing", "moisturising", - "monopolizing", "monopolising", - "multicolored", "multicoloured", - "nationalized", "nationalised", - "nationalizes", "nationalises", - "naturalizing", "naturalising", - "neighborhood", "neighbourhood", - "neutralizing", "neutralising", - "organization", "organisation", - "outmaneuvers", "outmanoeuvres", - "paleontology", "palaeontology", - "pasteurizing", "pasteurising", - "pediatrician", "paediatrician", - "personalized", "personalised", - "personalizes", "personalises", - "philosophize", "philosophise", - "plagiarizing", "plagiarising", - "polarization", "polarisation", - "politicizing", "politicising", - "popularizing", "popularising", - "pressurizing", "pressurising", - "prioritizing", "prioritising", - "propagandize", "propagandise", - "proselytized", "proselytised", - "proselytizer", "proselytiser", - "proselytizes", "proselytises", - "radicalizing", "radicalising", - "rationalized", "rationalised", - "rationalizes", "rationalises", - "realizations", "realisations", - "recognizable", "recognisable", - "recognizably", "recognisably", - "recognizance", "recognisance", - "reconnoiters", "reconnoitres", - "regularizing", "regularising", - "reorganizing", "reorganising", - "revitalizing", "revitalising", - "rhapsodizing", "rhapsodising", - "romanticized", "romanticised", - "romanticizes", "romanticises", - "scandalizing", "scandalising", - "scrutinizing", "scrutinising", - "secularizing", "secularising", - "standardized", "standardised", - "standardizes", "standardises", - "stigmatizing", "stigmatising", - "sympathizers", "sympathisers", - "sympathizing", "sympathising", - "synchronized", "synchronised", - "synchronizes", "synchronises", - "synthesizing", "synthesising", - "systematized", "systematised", - "systematizes", "systematises", - "theatergoers", "theatregoers", - "traumatizing", "traumatising", - "trivializing", "trivialising", - "unauthorized", "unauthorised", - "unionization", "unionisation", - "unrecognized", "unrecognised", - "urbanization", "urbanisation", - "vaporization", "vaporisation", - "vocalization", "vocalisation", - "westernizing", "westernising", - "accessorize", "accessorise", - "acclimatize", "acclimatise", - "agonizingly", "agonisingly", - "amortizable", "amortisable", - "anesthetics", "anaesthetics", - "anesthetist", "anaesthetist", - "anesthetize", "anaesthetise", - "anglicizing", "anglicising", - "antagonized", "antagonised", - "antagonizes", "antagonises", - "apologizing", "apologising", - "backpedaled", "backpedalled", - "bastardized", "bastardised", - "bastardizes", "bastardises", - "behaviorism", "behaviourism", - "behaviorist", "behaviourist", - "bowdlerized", "bowdlerised", - "bowdlerizes", "bowdlerises", - "brutalizing", "brutalising", - "cannibalize", "cannibalise", - "capitalized", "capitalised", - "capitalizes", "capitalises", - "caramelized", "caramelised", - "caramelizes", "caramelises", - "carbonizing", "carbonising", - "categorized", "categorised", - "categorizes", "categorises", - "cauterizing", "cauterising", - "centerfolds", "centrefolds", - "centerpiece", "centrepiece", - "centiliters", "centilitres", - "centimeters", "centimetres", - "centralized", "centralised", - "centralizes", "centralises", - "circularize", "circularise", - "clarinetist", "clarinettist", - "computerize", "computerise", - "criminalize", "criminalise", - "criticizing", "criticising", - "crystallize", "crystallise", - "customizing", "customising", - "defenseless", "defenceless", - "dehumanized", "dehumanised", - "dehumanizes", "dehumanises", - "demobilized", "demobilised", - "demobilizes", "demobilises", - "democratize", "democratise", - "demoralized", "demoralised", - "demoralizes", "demoralises", - "deodorizing", "deodorising", - "desensitize", "desensitise", - "destabilize", "destabilise", - "discoloring", "discolouring", - "dishonoring", "dishonouring", - "dramatizing", "dramatising", - "economizing", "economising", - "empathizing", "empathising", - "emphasizing", "emphasising", - "endeavoring", "endeavouring", - "epitomizing", "epitomising", - "esophaguses", "oesophaguses", - "evangelized", "evangelised", - "evangelizes", "evangelises", - "extemporize", "extemporise", - "externalize", "externalise", - "factorizing", "factorising", - "familiarize", "familiarise", - "fantasizing", "fantasising", - "fertilizers", "fertilisers", - "fertilizing", "fertilising", - "formalizing", "formalising", - "fossilizing", "fossilising", - "fraternized", "fraternised", - "fraternizes", "fraternises", - "fulfillment", "fulfilment", - "galvanizing", "galvanising", - "generalized", "generalised", - "generalizes", "generalises", - "ghettoizing", "ghettoising", - "globalizing", "globalising", - "harmonizing", "harmonising", - "hemophiliac", "haemophiliac", - "hemorrhaged", "haemorrhaged", - "hemorrhages", "haemorrhages", - "hemorrhoids", "haemorrhoids", - "homogenized", "homogenised", - "homogenizes", "homogenises", - "hospitalize", "hospitalise", - "hybridizing", "hybridising", - "hypnotizing", "hypnotising", - "hypothesize", "hypothesise", - "immobilized", "immobilised", - "immobilizer", "immobiliser", - "immobilizes", "immobilises", - "immortalize", "immortalise", - "initialized", "initialised", - "initializes", "initialises", - "installment", "instalment", - "internalize", "internalise", - "italicizing", "italicising", - "jeopardized", "jeopardised", - "jeopardizes", "jeopardises", - "legitimized", "legitimised", - "legitimizes", "legitimises", - "liberalized", "liberalised", - "liberalizes", "liberalises", - "lionization", "lionisation", - "liquidizers", "liquidisers", - "liquidizing", "liquidising", - "magnetizing", "magnetising", - "maneuvering", "manoeuvring", - "marginalize", "marginalise", - "marvelously", "marvellously", - "materialize", "materialise", - "mechanizing", "mechanising", - "memorialize", "memorialise", - "mesmerizing", "mesmerising", - "metabolized", "metabolised", - "metabolizes", "metabolises", - "militarized", "militarised", - "militarizes", "militarises", - "milliliters", "millilitres", - "millimeters", "millimetres", - "miniaturize", "miniaturise", - "misbehavior", "misbehaviour", - "misdemeanor", "misdemeanour", - "modernizing", "modernising", - "moisturized", "moisturised", - "moisturizer", "moisturiser", - "moisturizes", "moisturises", - "monopolized", "monopolised", - "monopolizes", "monopolises", - "nationalize", "nationalise", - "naturalized", "naturalised", - "naturalizes", "naturalises", - "neighboring", "neighbouring", - "neutralized", "neutralised", - "neutralizes", "neutralises", - "normalizing", "normalising", - "orthopedics", "orthopaedics", - "ostracizing", "ostracising", - "outmaneuver", "outmanoeuvre", - "oxidization", "oxidisation", - "pasteurized", "pasteurised", - "pasteurizes", "pasteurises", - "patronizing", "patronising", - "personalize", "personalise", - "plagiarized", "plagiarised", - "plagiarizes", "plagiarises", - "politicized", "politicised", - "politicizes", "politicises", - "popularized", "popularised", - "popularizes", "popularises", - "pressurized", "pressurised", - "pressurizes", "pressurises", - "prioritized", "prioritised", - "prioritizes", "prioritises", - "privatizing", "privatising", - "proselytize", "proselytise", - "publicizing", "publicising", - "pulverizing", "pulverising", - "radicalized", "radicalised", - "radicalizes", "radicalises", - "randomizing", "randomising", - "rationalize", "rationalise", - "realization", "realisation", - "recognizing", "recognising", - "reconnoiter", "reconnoitre", - "regularized", "regularised", - "regularizes", "regularises", - "reorganized", "reorganised", - "reorganizes", "reorganises", - "revitalized", "revitalised", - "revitalizes", "revitalises", - "rhapsodized", "rhapsodised", - "rhapsodizes", "rhapsodises", - "romanticize", "romanticise", - "scandalized", "scandalised", - "scandalizes", "scandalises", - "scrutinized", "scrutinised", - "scrutinizes", "scrutinises", - "secularized", "secularised", - "secularizes", "secularises", - "sensitizing", "sensitising", - "serializing", "serialising", - "sermonizing", "sermonising", - "signalizing", "signalising", - "skeptically", "sceptically", - "socializing", "socialising", - "solemnizing", "solemnising", - "specialized", "specialised", - "specializes", "specialises", - "squirreling", "squirrelling", - "stabilizers", "stabilisers", - "stabilizing", "stabilising", - "standardize", "standardise", - "sterilizers", "sterilisers", - "sterilizing", "sterilising", - "stigmatized", "stigmatised", - "stigmatizes", "stigmatises", - "subsidizers", "subsidisers", - "subsidizing", "subsidising", - "summarizing", "summarising", - "symbolizing", "symbolising", - "sympathized", "sympathised", - "sympathizer", "sympathiser", - "sympathizes", "sympathises", - "synchronize", "synchronise", - "synthesized", "synthesised", - "synthesizes", "synthesises", - "systematize", "systematise", - "tantalizing", "tantalising", - "temporizing", "temporising", - "tenderizing", "tenderising", - "terrorizing", "terrorising", - "theatergoer", "theatregoer", - "traumatized", "traumatised", - "traumatizes", "traumatises", - "trivialized", "trivialised", - "trivializes", "trivialises", - "tyrannizing", "tyrannising", - "uncataloged", "uncatalogued", - "uncivilized", "uncivilised", - "unfavorable", "unfavourable", - "unfavorably", "unfavourably", - "unorganized", "unorganised", - "untrammeled", "untrammelled", - "utilization", "utilisation", - "vandalizing", "vandalising", - "verbalizing", "verbalising", - "victimizing", "victimising", - "visualizing", "visualising", - "vulgarizing", "vulgarising", - "watercolors", "watercolours", - "westernized", "westernised", - "westernizes", "westernises", - "amortizing", "amortising", - "anesthesia", "anaesthesia", - "anesthetic", "anaesthetic", - "anglicized", "anglicised", - "anglicizes", "anglicises", - "annualized", "annualised", - "antagonize", "antagonise", - "apologized", "apologised", - "apologizes", "apologises", - "appetizers", "appetisers", - "appetizing", "appetising", - "archeology", "archaeology", - "authorizes", "authorises", - "bastardize", "bastardise", - "bedeviling", "bedevilling", - "behavioral", "behavioural", - "belaboring", "belabouring", - "bowdlerize", "bowdlerise", - "brutalized", "brutalised", - "brutalizes", "brutalises", - "canalizing", "canalising", - "canonizing", "canonising", - "capitalize", "capitalise", - "caramelize", "caramelise", - "carbonized", "carbonised", - "carbonizes", "carbonises", - "cataloging", "cataloguing", - "catalyzing", "catalysing", - "categorize", "categorise", - "cauterized", "cauterised", - "cauterizes", "cauterises", - "centerfold", "centrefold", - "centiliter", "centilitre", - "centimeter", "centimetre", - "centralize", "centralise", - "channeling", "channelling", - "checkbooks", "chequebooks", - "civilizing", "civilising", - "colonizers", "colonisers", - "colonizing", "colonising", - "colorfully", "colourfully", - "colorizing", "colourizing", - "councilors", "councillors", - "counselors", "counsellors", - "criticized", "criticised", - "criticizes", "criticises", - "customized", "customised", - "customizes", "customises", - "dehumanize", "dehumanise", - "demobilize", "demobilise", - "demonizing", "demonising", - "demoralize", "demoralise", - "deodorized", "deodorised", - "deodorizes", "deodorises", - "deputizing", "deputising", - "digitizing", "digitising", - "discolored", "discoloured", - "disheveled", "dishevelled", - "dishonored", "dishonoured", - "dramatized", "dramatised", - "dramatizes", "dramatises", - "economized", "economised", - "economizes", "economises", - "empathized", "empathised", - "empathizes", "empathises", - "emphasized", "emphasised", - "emphasizes", "emphasises", - "endeavored", "endeavoured", - "energizing", "energising", - "epicenters", "epicentres", - "epitomized", "epitomised", - "epitomizes", "epitomises", - "equalizers", "equalisers", - "equalizing", "equalising", - "eulogizing", "eulogising", - "evangelize", "evangelise", - "factorized", "factorised", - "factorizes", "factorises", - "fantasized", "fantasised", - "fantasizes", "fantasises", - "favoritism", "favouritism", - "feminizing", "feminising", - "fertilized", "fertilised", - "fertilizer", "fertiliser", - "fertilizes", "fertilises", - "fiberglass", "fibreglass", - "finalizing", "finalising", - "flavorings", "flavourings", - "flavorless", "flavourless", - "flavorsome", "flavoursome", - "formalized", "formalised", - "formalizes", "formalises", - "fossilized", "fossilised", - "fossilizes", "fossilises", - "fraternize", "fraternise", - "galvanized", "galvanised", - "galvanizes", "galvanises", - "generalize", "generalise", - "ghettoized", "ghettoised", - "ghettoizes", "ghettoises", - "globalized", "globalised", - "globalizes", "globalises", - "gruelingly", "gruellingly", - "gynecology", "gynaecology", - "harmonized", "harmonised", - "harmonizes", "harmonises", - "hematology", "haematology", - "hemoglobin", "haemoglobin", - "hemophilia", "haemophilia", - "hemorrhage", "haemorrhage", - "homogenize", "homogenise", - "humanizing", "humanising", - "hybridized", "hybridised", - "hybridizes", "hybridises", - "hypnotized", "hypnotised", - "hypnotizes", "hypnotises", - "idealizing", "idealising", - "immobilize", "immobilise", - "immunizing", "immunising", - "impaneling", "impanelling", - "imperiling", "imperilling", - "initialing", "initialling", - "initialize", "initialise", - "ionization", "ionisation", - "italicized", "italicised", - "italicizes", "italicises", - "jeopardize", "jeopardise", - "kilometers", "kilometres", - "lackluster", "lacklustre", - "legalizing", "legalising", - "legitimize", "legitimise", - "liberalize", "liberalise", - "liquidized", "liquidised", - "liquidizer", "liquidiser", - "liquidizes", "liquidises", - "localizing", "localising", - "magnetized", "magnetised", - "magnetizes", "magnetises", - "maneuvered", "manoeuvred", - "marshaling", "marshalling", - "maximizing", "maximising", - "mechanized", "mechanised", - "mechanizes", "mechanises", - "memorizing", "memorising", - "mesmerized", "mesmerised", - "mesmerizes", "mesmerises", - "metabolize", "metabolise", - "militarize", "militarise", - "milliliter", "millilitre", - "millimeter", "millimetre", - "minimizing", "minimising", - "mobilizing", "mobilising", - "modernized", "modernised", - "modernizes", "modernises", - "moisturize", "moisturise", - "monopolize", "monopolise", - "moralizing", "moralising", - "naturalize", "naturalise", - "neighborly", "neighbourly", - "neutralize", "neutralise", - "normalized", "normalised", - "normalizes", "normalises", - "optimizing", "optimising", - "organizers", "organisers", - "organizing", "organising", - "orthopedic", "orthopaedic", - "ostracized", "ostracised", - "ostracizes", "ostracises", - "paralyzing", "paralysing", - "pasteurize", "pasteurise", - "patronized", "patronised", - "patronizes", "patronises", - "pedophiles", "paedophiles", - "pedophilia", "paedophilia", - "penalizing", "penalising", - "plagiarize", "plagiarise", - "plowshares", "ploughshares", - "polarizing", "polarising", - "politicize", "politicise", - "popularize", "popularise", - "prioritize", "prioritise", - "privatized", "privatised", - "privatizes", "privatises", - "publicized", "publicised", - "publicizes", "publicises", - "pulverized", "pulverised", - "pulverizes", "pulverises", - "quarreling", "quarrelling", - "radicalize", "radicalise", - "randomized", "randomised", - "randomizes", "randomises", - "realizable", "realisable", - "recognized", "recognised", - "recognizes", "recognises", - "regularize", "regularise", - "remodeling", "remodelling", - "reorganize", "reorganise", - "revitalize", "revitalise", - "rhapsodize", "rhapsodise", - "ritualized", "ritualised", - "sanitizing", "sanitising", - "satirizing", "satirising", - "scandalize", "scandalise", - "scrutinize", "scrutinise", - "secularize", "secularise", - "sensitized", "sensitised", - "sensitizes", "sensitises", - "sepulchers", "sepulchres", - "serialized", "serialised", - "serializes", "serialises", - "sermonized", "sermonised", - "sermonizes", "sermonises", - "shriveling", "shrivelling", - "signalized", "signalised", - "signalizes", "signalises", - "skepticism", "scepticism", - "socialized", "socialised", - "socializes", "socialises", - "sodomizing", "sodomising", - "solemnized", "solemnised", - "solemnizes", "solemnises", - "specialize", "specialise", - "squirreled", "squirrelled", - "stabilized", "stabilised", - "stabilizer", "stabiliser", - "stabilizes", "stabilises", - "stenciling", "stencilling", - "sterilized", "sterilised", - "sterilizer", "steriliser", - "sterilizes", "sterilises", - "stigmatize", "stigmatise", - "subsidized", "subsidised", - "subsidizer", "subsidiser", - "subsidizes", "subsidises", - "summarized", "summarised", - "summarizes", "summarises", - "symbolized", "symbolised", - "symbolizes", "symbolises", - "sympathize", "sympathise", - "tantalized", "tantalised", - "tantalizes", "tantalises", - "temporized", "temporised", - "temporizes", "temporises", - "tenderized", "tenderised", - "tenderizes", "tenderises", - "terrorized", "terrorised", - "terrorizes", "terrorises", - "theorizing", "theorising", - "traumatize", "traumatise", - "trivialize", "trivialise", - "tyrannized", "tyrannised", - "tyrannizes", "tyrannises", - "unionizing", "unionising", - "unraveling", "unravelling", - "urbanizing", "urbanising", - "utilizable", "utilisable", - "vandalized", "vandalised", - "vandalizes", "vandalises", - "vaporizing", "vaporising", - "verbalized", "verbalised", - "verbalizes", "verbalises", - "victimized", "victimised", - "victimizes", "victimises", - "visualized", "visualised", - "visualizes", "visualises", - "vocalizing", "vocalising", - "vulcanized", "vulcanised", - "vulgarized", "vulgarised", - "vulgarizes", "vulgarises", - "watercolor", "watercolour", - "westernize", "westernise", - "womanizers", "womanisers", - "womanizing", "womanising", - "worshiping", "worshipping", - "agonizing", "agonising", - "airplanes", "aeroplanes", - "amortized", "amortised", - "amortizes", "amortises", - "analyzing", "analysing", - "apologize", "apologise", - "appetizer", "appetiser", - "artifacts", "artefacts", - "baptizing", "baptising", - "bedeviled", "bedevilled", - "behaviors", "behaviours", - "bejeweled", "bejewelled", - "belabored", "belaboured", - "brutalize", "brutalise", - "canalized", "canalised", - "canalizes", "canalises", - "canonized", "canonised", - "canonizes", "canonises", - "carbonize", "carbonise", - "cataloged", "catalogued", - "catalyzed", "catalysed", - "catalyzes", "catalyses", - "cauterize", "cauterise", - "channeled", "channelled", - "checkbook", "chequebook", - "checkered", "chequered", - "chiseling", "chiselling", - "civilized", "civilised", - "civilizes", "civilises", - "clamoring", "clamouring", - "colonized", "colonised", - "colonizer", "coloniser", - "colonizes", "colonises", - "colorants", "colourants", - "colorized", "colourized", - "colorizes", "colourizes", - "colorless", "colourless", - "councilor", "councillor", - "counseled", "counselled", - "counselor", "counsellor", - "criticize", "criticise", - "cudgeling", "cudgelling", - "customize", "customise", - "demonized", "demonised", - "demonizes", "demonises", - "deodorize", "deodorise", - "deputized", "deputised", - "deputizes", "deputises", - "digitized", "digitised", - "digitizes", "digitises", - "discolors", "discolours", - "dishonors", "dishonours", - "dramatize", "dramatise", - "driveling", "drivelling", - "economize", "economise", - "empathize", "empathise", - "emphasize", "emphasise", - "enameling", "enamelling", - "endeavors", "endeavours", - "energized", "energised", - "energizes", "energises", - "enthralls", "enthrals", - "epicenter", "epicentre", - "epitomize", "epitomise", - "equalized", "equalised", - "equalizer", "equaliser", - "equalizes", "equalises", - "eulogized", "eulogised", - "eulogizes", "eulogises", - "factorize", "factorise", - "fantasize", "fantasise", - "favorable", "favourable", - "favorably", "favourably", - "favorites", "favourites", - "feminized", "feminised", - "feminizes", "feminises", - "fertilize", "fertilise", - "finalized", "finalised", - "finalizes", "finalises", - "flavoring", "flavouring", - "formalize", "formalise", - "fossilize", "fossilise", - "funneling", "funnelling", - "galvanize", "galvanise", - "gamboling", "gambolling", - "ghettoize", "ghettoise", - "globalize", "globalise", - "gonorrhea", "gonorrhoea", - "groveling", "grovelling", - "harboring", "harbouring", - "harmonize", "harmonise", - "honorably", "honourably", - "humanized", "humanised", - "humanizes", "humanises", - "hybridize", "hybridise", - "hypnotize", "hypnotise", - "idealized", "idealised", - "idealizes", "idealises", - "idolizing", "idolising", - "immunized", "immunised", - "immunizes", "immunises", - "impaneled", "impanelled", - "imperiled", "imperilled", - "initialed", "initialled", - "italicize", "italicise", - "itemizing", "itemising", - "kilometer", "kilometre", - "legalized", "legalised", - "legalizes", "legalises", - "lionizing", "lionising", - "liquidize", "liquidise", - "localized", "localised", - "localizes", "localises", - "magnetize", "magnetise", - "maneuvers", "manoeuvres", - "marshaled", "marshalled", - "marveling", "marvelling", - "marvelous", "marvellous", - "maximized", "maximised", - "maximizes", "maximises", - "mechanize", "mechanise", - "memorized", "memorised", - "memorizes", "memorises", - "mesmerize", "mesmerise", - "minimized", "minimised", - "minimizes", "minimises", - "mobilized", "mobilised", - "mobilizes", "mobilises", - "modernize", "modernise", - "moldering", "mouldering", - "moralized", "moralised", - "moralizes", "moralises", - "motorized", "motorised", - "mustached", "moustached", - "mustaches", "moustaches", - "neighbors", "neighbours", - "normalize", "normalise", - "optimized", "optimised", - "optimizes", "optimises", - "organized", "organised", - "organizer", "organiser", - "organizes", "organises", - "ostracize", "ostracise", - "oxidizing", "oxidising", - "panelists", "panellists", - "paralyzed", "paralysed", - "paralyzes", "paralyses", - "parceling", "parcelling", - "patronize", "patronise", - "pedophile", "paedophile", - "penalized", "penalised", - "penalizes", "penalises", - "penciling", "pencilling", - "plowshare", "ploughshare", - "polarized", "polarised", - "polarizes", "polarises", - "practiced", "practised", - "pretenses", "pretences", - "privatize", "privatise", - "publicize", "publicise", - "pulverize", "pulverise", - "quarreled", "quarrelled", - "randomize", "randomise", - "realizing", "realising", - "recognize", "recognise", - "refueling", "refuelling", - "remodeled", "remodelled", - "remolding", "remoulding", - "saltpeter", "saltpetre", - "sanitized", "sanitised", - "sanitizes", "sanitises", - "satirized", "satirised", - "satirizes", "satirises", - "sensitize", "sensitise", - "sepulcher", "sepulchre", - "serialize", "serialise", - "sermonize", "sermonise", - "shoveling", "shovelling", - "shriveled", "shrivelled", - "signaling", "signalling", - "signalize", "signalise", - "skeptical", "sceptical", - "sniveling", "snivelling", - "snorkeled", "snorkelled", - "socialize", "socialise", - "sodomized", "sodomised", - "sodomizes", "sodomises", - "solemnize", "solemnise", - "spiraling", "spiralling", - "splendors", "splendours", - "stabilize", "stabilise", - "stenciled", "stencilled", - "sterilize", "sterilise", - "subsidize", "subsidise", - "succoring", "succouring", - "sulfurous", "sulphurous", - "summarize", "summarise", - "swiveling", "swivelling", - "symbolize", "symbolise", - "tantalize", "tantalise", - "temporize", "temporise", - "tenderize", "tenderise", - "terrorize", "terrorise", - "theorized", "theorised", - "theorizes", "theorises", - "travelers", "travellers", - "traveling", "travelling", - "tricolors", "tricolours", - "tunneling", "tunnelling", - "tyrannize", "tyrannise", - "unequaled", "unequalled", - "unionized", "unionised", - "unionizes", "unionises", - "unraveled", "unravelled", - "unrivaled", "unrivalled", - "urbanized", "urbanised", - "urbanizes", "urbanises", - "utilizing", "utilising", - "vandalize", "vandalise", - "vaporized", "vaporised", - "vaporizes", "vaporises", - "verbalize", "verbalise", - "victimize", "victimise", - "visualize", "visualise", - "vocalized", "vocalised", - "vocalizes", "vocalises", - "vulgarize", "vulgarise", - "weaseling", "weaselling", - "womanized", "womanised", - "womanizer", "womaniser", - "womanizes", "womanises", - "worshiped", "worshipped", - "worshiper", "worshipper", - "agonized", "agonised", - "agonizes", "agonises", - "airplane", "aeroplane", - "aluminum", "aluminium", - "amortize", "amortise", - "analyzed", "analysed", - "analyzes", "analyses", - "armorers", "armourers", - "armories", "armouries", - "artifact", "artefact", - "baptized", "baptised", - "baptizes", "baptises", - "behavior", "behaviour", - "behooved", "behoved", - "behooves", "behoves", - "belabors", "belabours", - "calibers", "calibres", - "canalize", "canalise", - "canonize", "canonise", - "catalogs", "catalogues", - "catalyze", "catalyse", - "caviling", "cavilling", - "centered", "centred", - "chiseled", "chiselled", - "civilize", "civilise", - "clamored", "clamoured", - "colonize", "colonise", - "colorant", "colourant", - "coloreds", "coloureds", - "colorful", "colourful", - "coloring", "colouring", - "colorize", "colourize", - "coziness", "cosiness", - "cruelest", "cruellest", - "cudgeled", "cudgelled", - "defenses", "defences", - "demeanor", "demeanour", - "demonize", "demonise", - "deputize", "deputise", - "diarrhea", "diarrhoea", - "digitize", "digitise", - "disfavor", "disfavour", - "dishonor", "dishonour", - "distills", "distils", - "driveled", "drivelled", - "enameled", "enamelled", - "enamored", "enamoured", - "endeavor", "endeavour", - "energize", "energise", - "epaulets", "epaulettes", - "equalize", "equalise", - "estrogen", "oestrogen", - "etiology", "aetiology", - "eulogize", "eulogise", - "favoring", "favouring", - "favorite", "favourite", - "feminize", "feminise", - "finalize", "finalise", - "flavored", "flavoured", - "flutists", "flautists", - "fulfills", "fulfils", - "funneled", "funnelled", - "gamboled", "gambolled", - "graveled", "gravelled", - "groveled", "grovelled", - "grueling", "gruelling", - "harbored", "harboured", - "honoring", "honouring", - "humanize", "humanise", - "humoring", "humouring", - "idealize", "idealise", - "idolized", "idolised", - "idolizes", "idolises", - "immunize", "immunise", - "ionizing", "ionising", - "itemized", "itemised", - "itemizes", "itemises", - "jewelers", "jewellers", - "labeling", "labelling", - "laborers", "labourers", - "laboring", "labouring", - "legalize", "legalise", - "leukemia", "leukaemia", - "levelers", "levellers", - "leveling", "levelling", - "libeling", "libelling", - "libelous", "libellous", - "lionized", "lionised", - "lionizes", "lionises", - "localize", "localise", - "louvered", "louvred", - "maneuver", "manoeuvre", - "marveled", "marvelled", - "maximize", "maximise", - "memorize", "memorise", - "minimize", "minimise", - "mobilize", "mobilise", - "modelers", "modellers", - "modeling", "modelling", - "moldered", "mouldered", - "moldiest", "mouldiest", - "moldings", "mouldings", - "moralize", "moralise", - "mustache", "moustache", - "neighbor", "neighbour", - "odorless", "odourless", - "offenses", "offences", - "optimize", "optimise", - "organize", "organise", - "oxidized", "oxidised", - "oxidizes", "oxidises", - "paneling", "panelling", - "panelist", "panellist", - "paralyze", "paralyse", - "parceled", "parcelled", - "pedaling", "pedalling", - "penalize", "penalise", - "penciled", "pencilled", - "polarize", "polarise", - "pretense", "pretence", - "pummeled", "pummelling", - "raveling", "ravelling", - "realized", "realised", - "realizes", "realises", - "refueled", "refuelled", - "remolded", "remoulded", - "revelers", "revellers", - "reveling", "revelling", - "rivaling", "rivalling", - "sanitize", "sanitise", - "satirize", "satirise", - "savories", "savouries", - "savoring", "savouring", - "scepters", "sceptres", - "shoveled", "shovelled", - "signaled", "signalled", - "skeptics", "sceptics", - "sniveled", "snivelled", - "sodomize", "sodomise", - "specters", "spectres", - "spiraled", "spiralled", - "splendor", "splendour", - "succored", "succoured", - "sulfates", "sulphates", - "sulfides", "sulphides", - "swiveled", "swivelled", - "tasseled", "tasselled", - "theaters", "theatres", - "theorize", "theorise", - "toweling", "towelling", - "traveler", "traveller", - "trialing", "trialling", - "tricolor", "tricolour", - "tunneled", "tunnelled", - "unionize", "unionise", - "unsavory", "unsavoury", - "urbanize", "urbanise", - "utilized", "utilised", - "utilizes", "utilises", - "vaporize", "vaporise", - "vocalize", "vocalise", - "weaseled", "weaselled", - "womanize", "womanise", - "yodeling", "yodelling", - "agonize", "agonise", - "analyze", "analyse", - "appalls", "appals", - "armored", "armoured", - "armorer", "armourer", - "baptize", "baptise", - "behoove", "behove", - "belabor", "belabour", - "beveled", "bevelled", - "caliber", "calibre", - "caroled", "carolled", - "caviled", "cavilled", - "centers", "centres", - "clamors", "clamours", - "clangor", "clangour", - "colored", "coloured", - "coziest", "cosiest", - "crueler", "crueller", - "defense", "defence", - "dialing", "dialling", - "dialogs", "dialogues", - "distill", "distil", - "dueling", "duelling", - "enrolls", "enrols", - "epaulet", "epaulette", - "favored", "favoured", - "flavors", "flavours", - "flutist", "flautist", - "fueling", "fuelling", - "fulfill", "fulfil", - "goiters", "goitres", - "harbors", "harbours", - "honored", "honoured", - "humored", "humoured", - "idolize", "idolise", - "ionized", "ionised", - "ionizes", "ionises", - "itemize", "itemise", - "jeweled", "jewelled", - "jeweler", "jeweller", - "jewelry", "jewellery", - "labeled", "labelled", - "labored", "laboured", - "laborer", "labourer", - "leveled", "levelled", - "leveler", "leveller", - "libeled", "libelled", - "lionize", "lionise", - "louvers", "louvres", - "modeled", "modelled", - "modeler", "modeller", - "molders", "moulders", - "moldier", "mouldier", - "molding", "moulding", - "molting", "moulting", - "offense", "offence", - "oxidize", "oxidise", - "pajamas", "pyjamas", - "paneled", "panelled", - "parlors", "parlours", - "pedaled", "pedalled", - "plowing", "ploughing", - "plowman", "ploughman", - "plowmen", "ploughmen", - "realize", "realise", - "remolds", "remoulds", - "reveled", "revelled", - "reveler", "reveller", - "rivaled", "rivalled", - "rumored", "rumoured", - "saviors", "saviours", - "savored", "savoured", - "scepter", "sceptre", - "skeptic", "sceptic", - "specter", "spectre", - "succors", "succours", - "sulfate", "sulphate", - "sulfide", "sulphide", - "theater", "theatre", - "toweled", "towelled", - "toxemia", "toxaemia", - "trialed", "trialled", - "utilize", "utilise", - "yodeled", "yodelled", - "anemia", "anaemia", - "anemic", "anaemic", - "appall", "appal", - "arbors", "arbours", - "armory", "armoury", - "candor", "candour", - "center", "centre", - "clamor", "clamour", - "colors", "colours", - "cozier", "cosier", - "cozies", "cosies", - "cozily", "cosily", - "dialed", "dialled", - "drafty", "draughty", - "dueled", "duelled", - "favors", "favours", - "fervor", "fervour", - "fibers", "fibres", - "flavor", "flavour", - "fueled", "fuelled", - "goiter", "goitre", - "harbor", "harbour", - "honors", "honours", - "humors", "humours", - "labors", "labours", - "liters", "litres", - "louver", "louvre", - "luster", "lustre", - "meager", "meagre", - "miters", "mitres", - "molded", "moulded", - "molder", "moulder", - "molted", "moulted", - "pajama", "pyjama", - "parlor", "parlour", - "plowed", "ploughed", - "rancor", "rancour", - "remold", "remould", - "rigors", "rigours", - "rumors", "rumours", - "savors", "savours", - "savory", "savoury", - "succor", "succour", - "tumors", "tumours", - "vapors", "vapours", - "aging", "ageing", - "arbor", "arbour", - "ardor", "ardour", - "armor", "armour", - "chili", "chilli", - "color", "colour", - "edema", "edoema", - "favor", "favour", - "fecal", "faecal", - "feces", "faeces", - "fiber", "fibre", - "honor", "honour", - "humor", "humour", - "labor", "labour", - "liter", "litre", - "miter", "mitre", - "molds", "moulds", - "moldy", "mouldy", - "molts", "moults", - "odors", "odours", - "plows", "ploughs", - "rigor", "rigour", - "rumor", "rumour", - "savor", "savour", - "valor", "valour", - "vapor", "vapour", - "vigor", "vigour", - "cozy", "cosy", - "mold", "mould", - "molt", "moult", - "odor", "odour", - "plow", "plough", -} diff --git a/vendor/github.com/fatih/color/.travis.yml b/vendor/github.com/fatih/color/.travis.yml deleted file mode 100644 index 95f8a1ff5c..0000000000 --- a/vendor/github.com/fatih/color/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: go -go: - - 1.8.x - - tip - diff --git a/vendor/github.com/fatih/color/BUILD.bazel b/vendor/github.com/fatih/color/BUILD.bazel deleted file mode 100644 index 4c6f46296b..0000000000 --- a/vendor/github.com/fatih/color/BUILD.bazel +++ /dev/null @@ -1,16 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "color.go", - "doc.go", - ], - importmap = "k8s.io/kops/vendor/github.com/fatih/color", - importpath = "github.com/fatih/color", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/mattn/go-colorable:go_default_library", - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], -) diff --git a/vendor/github.com/fatih/color/Gopkg.lock b/vendor/github.com/fatih/color/Gopkg.lock deleted file mode 100644 index 7d879e9caf..0000000000 --- a/vendor/github.com/fatih/color/Gopkg.lock +++ /dev/null @@ -1,27 +0,0 @@ -# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. - - -[[projects]] - name = "github.com/mattn/go-colorable" - packages = ["."] - revision = "167de6bfdfba052fa6b2d3664c8f5272e23c9072" - version = "v0.0.9" - -[[projects]] - name = "github.com/mattn/go-isatty" - packages = ["."] - revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39" - version = "v0.0.3" - -[[projects]] - branch = "master" - name = "golang.org/x/sys" - packages = ["unix"] - revision = "37707fdb30a5b38865cfb95e5aab41707daec7fd" - -[solve-meta] - analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "e8a50671c3cb93ea935bf210b1cd20702876b9d9226129be581ef646d1565cdc" - solver-name = "gps-cdcl" - solver-version = 1 diff --git a/vendor/github.com/fatih/color/Gopkg.toml b/vendor/github.com/fatih/color/Gopkg.toml deleted file mode 100644 index ff1617f71d..0000000000 --- a/vendor/github.com/fatih/color/Gopkg.toml +++ /dev/null @@ -1,30 +0,0 @@ - -# Gopkg.toml example -# -# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md -# for detailed Gopkg.toml documentation. -# -# required = ["github.com/user/thing/cmd/thing"] -# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] -# -# [[constraint]] -# name = "github.com/user/project" -# version = "1.0.0" -# -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# -# [[override]] -# name = "github.com/x/y" -# version = "2.4.0" - - -[[constraint]] - name = "github.com/mattn/go-colorable" - version = "0.0.9" - -[[constraint]] - name = "github.com/mattn/go-isatty" - version = "0.0.3" diff --git a/vendor/github.com/fatih/color/LICENSE.md b/vendor/github.com/fatih/color/LICENSE.md deleted file mode 100644 index 25fdaf639d..0000000000 --- a/vendor/github.com/fatih/color/LICENSE.md +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Fatih Arslan - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/fatih/color/README.md b/vendor/github.com/fatih/color/README.md deleted file mode 100644 index 3fc9544602..0000000000 --- a/vendor/github.com/fatih/color/README.md +++ /dev/null @@ -1,179 +0,0 @@ -# Color [![GoDoc](https://godoc.org/github.com/fatih/color?status.svg)](https://godoc.org/github.com/fatih/color) [![Build Status](https://img.shields.io/travis/fatih/color.svg?style=flat-square)](https://travis-ci.org/fatih/color) - - - -Color lets you use colorized outputs in terms of [ANSI Escape -Codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors) in Go (Golang). It -has support for Windows too! The API can be used in several ways, pick one that -suits you. - - -![Color](https://i.imgur.com/c1JI0lA.png) - - -## Install - -```bash -go get github.com/fatih/color -``` - -Note that the `vendor` folder is here for stability. Remove the folder if you -already have the dependencies in your GOPATH. - -## Examples - -### Standard colors - -```go -// Print with default helper functions -color.Cyan("Prints text in cyan.") - -// A newline will be appended automatically -color.Blue("Prints %s in blue.", "text") - -// These are using the default foreground colors -color.Red("We have red") -color.Magenta("And many others ..") - -``` - -### Mix and reuse colors - -```go -// Create a new color object -c := color.New(color.FgCyan).Add(color.Underline) -c.Println("Prints cyan text with an underline.") - -// Or just add them to New() -d := color.New(color.FgCyan, color.Bold) -d.Printf("This prints bold cyan %s\n", "too!.") - -// Mix up foreground and background colors, create new mixes! -red := color.New(color.FgRed) - -boldRed := red.Add(color.Bold) -boldRed.Println("This will print text in bold red.") - -whiteBackground := red.Add(color.BgWhite) -whiteBackground.Println("Red text with white background.") -``` - -### Use your own output (io.Writer) - -```go -// Use your own io.Writer output -color.New(color.FgBlue).Fprintln(myWriter, "blue color!") - -blue := color.New(color.FgBlue) -blue.Fprint(writer, "This will print text in blue.") -``` - -### Custom print functions (PrintFunc) - -```go -// Create a custom print function for convenience -red := color.New(color.FgRed).PrintfFunc() -red("Warning") -red("Error: %s", err) - -// Mix up multiple attributes -notice := color.New(color.Bold, color.FgGreen).PrintlnFunc() -notice("Don't forget this...") -``` - -### Custom fprint functions (FprintFunc) - -```go -blue := color.New(FgBlue).FprintfFunc() -blue(myWriter, "important notice: %s", stars) - -// Mix up with multiple attributes -success := color.New(color.Bold, color.FgGreen).FprintlnFunc() -success(myWriter, "Don't forget this...") -``` - -### Insert into noncolor strings (SprintFunc) - -```go -// Create SprintXxx functions to mix strings with other non-colorized strings: -yellow := color.New(color.FgYellow).SprintFunc() -red := color.New(color.FgRed).SprintFunc() -fmt.Printf("This is a %s and this is %s.\n", yellow("warning"), red("error")) - -info := color.New(color.FgWhite, color.BgGreen).SprintFunc() -fmt.Printf("This %s rocks!\n", info("package")) - -// Use helper functions -fmt.Println("This", color.RedString("warning"), "should be not neglected.") -fmt.Printf("%v %v\n", color.GreenString("Info:"), "an important message.") - -// Windows supported too! Just don't forget to change the output to color.Output -fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS")) -``` - -### Plug into existing code - -```go -// Use handy standard colors -color.Set(color.FgYellow) - -fmt.Println("Existing text will now be in yellow") -fmt.Printf("This one %s\n", "too") - -color.Unset() // Don't forget to unset - -// You can mix up parameters -color.Set(color.FgMagenta, color.Bold) -defer color.Unset() // Use it in your function - -fmt.Println("All text will now be bold magenta.") -``` - -### Disable/Enable color - -There might be a case where you want to explicitly disable/enable color output. the -`go-isatty` package will automatically disable color output for non-tty output streams -(for example if the output were piped directly to `less`) - -`Color` has support to disable/enable colors both globally and for single color -definitions. For example suppose you have a CLI app and a `--no-color` bool flag. You -can easily disable the color output with: - -```go - -var flagNoColor = flag.Bool("no-color", false, "Disable color output") - -if *flagNoColor { - color.NoColor = true // disables colorized output -} -``` - -It also has support for single color definitions (local). You can -disable/enable color output on the fly: - -```go -c := color.New(color.FgCyan) -c.Println("Prints cyan text") - -c.DisableColor() -c.Println("This is printed without any color") - -c.EnableColor() -c.Println("This prints again cyan...") -``` - -## Todo - -* Save/Return previous values -* Evaluate fmt.Formatter interface - - -## Credits - - * [Fatih Arslan](https://github.com/fatih) - * Windows support via @mattn: [colorable](https://github.com/mattn/go-colorable) - -## License - -The MIT License (MIT) - see [`LICENSE.md`](https://github.com/fatih/color/blob/master/LICENSE.md) for more details - diff --git a/vendor/github.com/fatih/color/color.go b/vendor/github.com/fatih/color/color.go deleted file mode 100644 index 91c8e9f062..0000000000 --- a/vendor/github.com/fatih/color/color.go +++ /dev/null @@ -1,603 +0,0 @@ -package color - -import ( - "fmt" - "io" - "os" - "strconv" - "strings" - "sync" - - "github.com/mattn/go-colorable" - "github.com/mattn/go-isatty" -) - -var ( - // NoColor defines if the output is colorized or not. It's dynamically set to - // false or true based on the stdout's file descriptor referring to a terminal - // or not. This is a global option and affects all colors. For more control - // over each color block use the methods DisableColor() individually. - NoColor = os.Getenv("TERM") == "dumb" || - (!isatty.IsTerminal(os.Stdout.Fd()) && !isatty.IsCygwinTerminal(os.Stdout.Fd())) - - // Output defines the standard output of the print functions. By default - // os.Stdout is used. - Output = colorable.NewColorableStdout() - - // Error defines a color supporting writer for os.Stderr. - Error = colorable.NewColorableStderr() - - // colorsCache is used to reduce the count of created Color objects and - // allows to reuse already created objects with required Attribute. - colorsCache = make(map[Attribute]*Color) - colorsCacheMu sync.Mutex // protects colorsCache -) - -// Color defines a custom color object which is defined by SGR parameters. -type Color struct { - params []Attribute - noColor *bool -} - -// Attribute defines a single SGR Code -type Attribute int - -const escape = "\x1b" - -// Base attributes -const ( - Reset Attribute = iota - Bold - Faint - Italic - Underline - BlinkSlow - BlinkRapid - ReverseVideo - Concealed - CrossedOut -) - -// Foreground text colors -const ( - FgBlack Attribute = iota + 30 - FgRed - FgGreen - FgYellow - FgBlue - FgMagenta - FgCyan - FgWhite -) - -// Foreground Hi-Intensity text colors -const ( - FgHiBlack Attribute = iota + 90 - FgHiRed - FgHiGreen - FgHiYellow - FgHiBlue - FgHiMagenta - FgHiCyan - FgHiWhite -) - -// Background text colors -const ( - BgBlack Attribute = iota + 40 - BgRed - BgGreen - BgYellow - BgBlue - BgMagenta - BgCyan - BgWhite -) - -// Background Hi-Intensity text colors -const ( - BgHiBlack Attribute = iota + 100 - BgHiRed - BgHiGreen - BgHiYellow - BgHiBlue - BgHiMagenta - BgHiCyan - BgHiWhite -) - -// New returns a newly created color object. -func New(value ...Attribute) *Color { - c := &Color{params: make([]Attribute, 0)} - c.Add(value...) - return c -} - -// Set sets the given parameters immediately. It will change the color of -// output with the given SGR parameters until color.Unset() is called. -func Set(p ...Attribute) *Color { - c := New(p...) - c.Set() - return c -} - -// Unset resets all escape attributes and clears the output. Usually should -// be called after Set(). -func Unset() { - if NoColor { - return - } - - fmt.Fprintf(Output, "%s[%dm", escape, Reset) -} - -// Set sets the SGR sequence. -func (c *Color) Set() *Color { - if c.isNoColorSet() { - return c - } - - fmt.Fprintf(Output, c.format()) - return c -} - -func (c *Color) unset() { - if c.isNoColorSet() { - return - } - - Unset() -} - -func (c *Color) setWriter(w io.Writer) *Color { - if c.isNoColorSet() { - return c - } - - fmt.Fprintf(w, c.format()) - return c -} - -func (c *Color) unsetWriter(w io.Writer) { - if c.isNoColorSet() { - return - } - - if NoColor { - return - } - - fmt.Fprintf(w, "%s[%dm", escape, Reset) -} - -// Add is used to chain SGR parameters. Use as many as parameters to combine -// and create custom color objects. Example: Add(color.FgRed, color.Underline). -func (c *Color) Add(value ...Attribute) *Color { - c.params = append(c.params, value...) - return c -} - -func (c *Color) prepend(value Attribute) { - c.params = append(c.params, 0) - copy(c.params[1:], c.params[0:]) - c.params[0] = value -} - -// Fprint formats using the default formats for its operands and writes to w. -// Spaces are added between operands when neither is a string. -// It returns the number of bytes written and any write error encountered. -// On Windows, users should wrap w with colorable.NewColorable() if w is of -// type *os.File. -func (c *Color) Fprint(w io.Writer, a ...interface{}) (n int, err error) { - c.setWriter(w) - defer c.unsetWriter(w) - - return fmt.Fprint(w, a...) -} - -// Print formats using the default formats for its operands and writes to -// standard output. Spaces are added between operands when neither is a -// string. It returns the number of bytes written and any write error -// encountered. This is the standard fmt.Print() method wrapped with the given -// color. -func (c *Color) Print(a ...interface{}) (n int, err error) { - c.Set() - defer c.unset() - - return fmt.Fprint(Output, a...) -} - -// Fprintf formats according to a format specifier and writes to w. -// It returns the number of bytes written and any write error encountered. -// On Windows, users should wrap w with colorable.NewColorable() if w is of -// type *os.File. -func (c *Color) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { - c.setWriter(w) - defer c.unsetWriter(w) - - return fmt.Fprintf(w, format, a...) -} - -// Printf formats according to a format specifier and writes to standard output. -// It returns the number of bytes written and any write error encountered. -// This is the standard fmt.Printf() method wrapped with the given color. -func (c *Color) Printf(format string, a ...interface{}) (n int, err error) { - c.Set() - defer c.unset() - - return fmt.Fprintf(Output, format, a...) -} - -// Fprintln formats using the default formats for its operands and writes to w. -// Spaces are always added between operands and a newline is appended. -// On Windows, users should wrap w with colorable.NewColorable() if w is of -// type *os.File. -func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { - c.setWriter(w) - defer c.unsetWriter(w) - - return fmt.Fprintln(w, a...) -} - -// Println formats using the default formats for its operands and writes to -// standard output. Spaces are always added between operands and a newline is -// appended. It returns the number of bytes written and any write error -// encountered. This is the standard fmt.Print() method wrapped with the given -// color. -func (c *Color) Println(a ...interface{}) (n int, err error) { - c.Set() - defer c.unset() - - return fmt.Fprintln(Output, a...) -} - -// Sprint is just like Print, but returns a string instead of printing it. -func (c *Color) Sprint(a ...interface{}) string { - return c.wrap(fmt.Sprint(a...)) -} - -// Sprintln is just like Println, but returns a string instead of printing it. -func (c *Color) Sprintln(a ...interface{}) string { - return c.wrap(fmt.Sprintln(a...)) -} - -// Sprintf is just like Printf, but returns a string instead of printing it. -func (c *Color) Sprintf(format string, a ...interface{}) string { - return c.wrap(fmt.Sprintf(format, a...)) -} - -// FprintFunc returns a new function that prints the passed arguments as -// colorized with color.Fprint(). -func (c *Color) FprintFunc() func(w io.Writer, a ...interface{}) { - return func(w io.Writer, a ...interface{}) { - c.Fprint(w, a...) - } -} - -// PrintFunc returns a new function that prints the passed arguments as -// colorized with color.Print(). -func (c *Color) PrintFunc() func(a ...interface{}) { - return func(a ...interface{}) { - c.Print(a...) - } -} - -// FprintfFunc returns a new function that prints the passed arguments as -// colorized with color.Fprintf(). -func (c *Color) FprintfFunc() func(w io.Writer, format string, a ...interface{}) { - return func(w io.Writer, format string, a ...interface{}) { - c.Fprintf(w, format, a...) - } -} - -// PrintfFunc returns a new function that prints the passed arguments as -// colorized with color.Printf(). -func (c *Color) PrintfFunc() func(format string, a ...interface{}) { - return func(format string, a ...interface{}) { - c.Printf(format, a...) - } -} - -// FprintlnFunc returns a new function that prints the passed arguments as -// colorized with color.Fprintln(). -func (c *Color) FprintlnFunc() func(w io.Writer, a ...interface{}) { - return func(w io.Writer, a ...interface{}) { - c.Fprintln(w, a...) - } -} - -// PrintlnFunc returns a new function that prints the passed arguments as -// colorized with color.Println(). -func (c *Color) PrintlnFunc() func(a ...interface{}) { - return func(a ...interface{}) { - c.Println(a...) - } -} - -// SprintFunc returns a new function that returns colorized strings for the -// given arguments with fmt.Sprint(). Useful to put into or mix into other -// string. Windows users should use this in conjunction with color.Output, example: -// -// put := New(FgYellow).SprintFunc() -// fmt.Fprintf(color.Output, "This is a %s", put("warning")) -func (c *Color) SprintFunc() func(a ...interface{}) string { - return func(a ...interface{}) string { - return c.wrap(fmt.Sprint(a...)) - } -} - -// SprintfFunc returns a new function that returns colorized strings for the -// given arguments with fmt.Sprintf(). Useful to put into or mix into other -// string. Windows users should use this in conjunction with color.Output. -func (c *Color) SprintfFunc() func(format string, a ...interface{}) string { - return func(format string, a ...interface{}) string { - return c.wrap(fmt.Sprintf(format, a...)) - } -} - -// SprintlnFunc returns a new function that returns colorized strings for the -// given arguments with fmt.Sprintln(). Useful to put into or mix into other -// string. Windows users should use this in conjunction with color.Output. -func (c *Color) SprintlnFunc() func(a ...interface{}) string { - return func(a ...interface{}) string { - return c.wrap(fmt.Sprintln(a...)) - } -} - -// sequence returns a formatted SGR sequence to be plugged into a "\x1b[...m" -// an example output might be: "1;36" -> bold cyan -func (c *Color) sequence() string { - format := make([]string, len(c.params)) - for i, v := range c.params { - format[i] = strconv.Itoa(int(v)) - } - - return strings.Join(format, ";") -} - -// wrap wraps the s string with the colors attributes. The string is ready to -// be printed. -func (c *Color) wrap(s string) string { - if c.isNoColorSet() { - return s - } - - return c.format() + s + c.unformat() -} - -func (c *Color) format() string { - return fmt.Sprintf("%s[%sm", escape, c.sequence()) -} - -func (c *Color) unformat() string { - return fmt.Sprintf("%s[%dm", escape, Reset) -} - -// DisableColor disables the color output. Useful to not change any existing -// code and still being able to output. Can be used for flags like -// "--no-color". To enable back use EnableColor() method. -func (c *Color) DisableColor() { - c.noColor = boolPtr(true) -} - -// EnableColor enables the color output. Use it in conjunction with -// DisableColor(). Otherwise this method has no side effects. -func (c *Color) EnableColor() { - c.noColor = boolPtr(false) -} - -func (c *Color) isNoColorSet() bool { - // check first if we have user setted action - if c.noColor != nil { - return *c.noColor - } - - // if not return the global option, which is disabled by default - return NoColor -} - -// Equals returns a boolean value indicating whether two colors are equal. -func (c *Color) Equals(c2 *Color) bool { - if len(c.params) != len(c2.params) { - return false - } - - for _, attr := range c.params { - if !c2.attrExists(attr) { - return false - } - } - - return true -} - -func (c *Color) attrExists(a Attribute) bool { - for _, attr := range c.params { - if attr == a { - return true - } - } - - return false -} - -func boolPtr(v bool) *bool { - return &v -} - -func getCachedColor(p Attribute) *Color { - colorsCacheMu.Lock() - defer colorsCacheMu.Unlock() - - c, ok := colorsCache[p] - if !ok { - c = New(p) - colorsCache[p] = c - } - - return c -} - -func colorPrint(format string, p Attribute, a ...interface{}) { - c := getCachedColor(p) - - if !strings.HasSuffix(format, "\n") { - format += "\n" - } - - if len(a) == 0 { - c.Print(format) - } else { - c.Printf(format, a...) - } -} - -func colorString(format string, p Attribute, a ...interface{}) string { - c := getCachedColor(p) - - if len(a) == 0 { - return c.SprintFunc()(format) - } - - return c.SprintfFunc()(format, a...) -} - -// Black is a convenient helper function to print with black foreground. A -// newline is appended to format by default. -func Black(format string, a ...interface{}) { colorPrint(format, FgBlack, a...) } - -// Red is a convenient helper function to print with red foreground. A -// newline is appended to format by default. -func Red(format string, a ...interface{}) { colorPrint(format, FgRed, a...) } - -// Green is a convenient helper function to print with green foreground. A -// newline is appended to format by default. -func Green(format string, a ...interface{}) { colorPrint(format, FgGreen, a...) } - -// Yellow is a convenient helper function to print with yellow foreground. -// A newline is appended to format by default. -func Yellow(format string, a ...interface{}) { colorPrint(format, FgYellow, a...) } - -// Blue is a convenient helper function to print with blue foreground. A -// newline is appended to format by default. -func Blue(format string, a ...interface{}) { colorPrint(format, FgBlue, a...) } - -// Magenta is a convenient helper function to print with magenta foreground. -// A newline is appended to format by default. -func Magenta(format string, a ...interface{}) { colorPrint(format, FgMagenta, a...) } - -// Cyan is a convenient helper function to print with cyan foreground. A -// newline is appended to format by default. -func Cyan(format string, a ...interface{}) { colorPrint(format, FgCyan, a...) } - -// White is a convenient helper function to print with white foreground. A -// newline is appended to format by default. -func White(format string, a ...interface{}) { colorPrint(format, FgWhite, a...) } - -// BlackString is a convenient helper function to return a string with black -// foreground. -func BlackString(format string, a ...interface{}) string { return colorString(format, FgBlack, a...) } - -// RedString is a convenient helper function to return a string with red -// foreground. -func RedString(format string, a ...interface{}) string { return colorString(format, FgRed, a...) } - -// GreenString is a convenient helper function to return a string with green -// foreground. -func GreenString(format string, a ...interface{}) string { return colorString(format, FgGreen, a...) } - -// YellowString is a convenient helper function to return a string with yellow -// foreground. -func YellowString(format string, a ...interface{}) string { return colorString(format, FgYellow, a...) } - -// BlueString is a convenient helper function to return a string with blue -// foreground. -func BlueString(format string, a ...interface{}) string { return colorString(format, FgBlue, a...) } - -// MagentaString is a convenient helper function to return a string with magenta -// foreground. -func MagentaString(format string, a ...interface{}) string { - return colorString(format, FgMagenta, a...) -} - -// CyanString is a convenient helper function to return a string with cyan -// foreground. -func CyanString(format string, a ...interface{}) string { return colorString(format, FgCyan, a...) } - -// WhiteString is a convenient helper function to return a string with white -// foreground. -func WhiteString(format string, a ...interface{}) string { return colorString(format, FgWhite, a...) } - -// HiBlack is a convenient helper function to print with hi-intensity black foreground. A -// newline is appended to format by default. -func HiBlack(format string, a ...interface{}) { colorPrint(format, FgHiBlack, a...) } - -// HiRed is a convenient helper function to print with hi-intensity red foreground. A -// newline is appended to format by default. -func HiRed(format string, a ...interface{}) { colorPrint(format, FgHiRed, a...) } - -// HiGreen is a convenient helper function to print with hi-intensity green foreground. A -// newline is appended to format by default. -func HiGreen(format string, a ...interface{}) { colorPrint(format, FgHiGreen, a...) } - -// HiYellow is a convenient helper function to print with hi-intensity yellow foreground. -// A newline is appended to format by default. -func HiYellow(format string, a ...interface{}) { colorPrint(format, FgHiYellow, a...) } - -// HiBlue is a convenient helper function to print with hi-intensity blue foreground. A -// newline is appended to format by default. -func HiBlue(format string, a ...interface{}) { colorPrint(format, FgHiBlue, a...) } - -// HiMagenta is a convenient helper function to print with hi-intensity magenta foreground. -// A newline is appended to format by default. -func HiMagenta(format string, a ...interface{}) { colorPrint(format, FgHiMagenta, a...) } - -// HiCyan is a convenient helper function to print with hi-intensity cyan foreground. A -// newline is appended to format by default. -func HiCyan(format string, a ...interface{}) { colorPrint(format, FgHiCyan, a...) } - -// HiWhite is a convenient helper function to print with hi-intensity white foreground. A -// newline is appended to format by default. -func HiWhite(format string, a ...interface{}) { colorPrint(format, FgHiWhite, a...) } - -// HiBlackString is a convenient helper function to return a string with hi-intensity black -// foreground. -func HiBlackString(format string, a ...interface{}) string { - return colorString(format, FgHiBlack, a...) -} - -// HiRedString is a convenient helper function to return a string with hi-intensity red -// foreground. -func HiRedString(format string, a ...interface{}) string { return colorString(format, FgHiRed, a...) } - -// HiGreenString is a convenient helper function to return a string with hi-intensity green -// foreground. -func HiGreenString(format string, a ...interface{}) string { - return colorString(format, FgHiGreen, a...) -} - -// HiYellowString is a convenient helper function to return a string with hi-intensity yellow -// foreground. -func HiYellowString(format string, a ...interface{}) string { - return colorString(format, FgHiYellow, a...) -} - -// HiBlueString is a convenient helper function to return a string with hi-intensity blue -// foreground. -func HiBlueString(format string, a ...interface{}) string { return colorString(format, FgHiBlue, a...) } - -// HiMagentaString is a convenient helper function to return a string with hi-intensity magenta -// foreground. -func HiMagentaString(format string, a ...interface{}) string { - return colorString(format, FgHiMagenta, a...) -} - -// HiCyanString is a convenient helper function to return a string with hi-intensity cyan -// foreground. -func HiCyanString(format string, a ...interface{}) string { return colorString(format, FgHiCyan, a...) } - -// HiWhiteString is a convenient helper function to return a string with hi-intensity white -// foreground. -func HiWhiteString(format string, a ...interface{}) string { - return colorString(format, FgHiWhite, a...) -} diff --git a/vendor/github.com/fatih/color/doc.go b/vendor/github.com/fatih/color/doc.go deleted file mode 100644 index cf1e96500f..0000000000 --- a/vendor/github.com/fatih/color/doc.go +++ /dev/null @@ -1,133 +0,0 @@ -/* -Package color is an ANSI color package to output colorized or SGR defined -output to the standard output. The API can be used in several way, pick one -that suits you. - -Use simple and default helper functions with predefined foreground colors: - - color.Cyan("Prints text in cyan.") - - // a newline will be appended automatically - color.Blue("Prints %s in blue.", "text") - - // More default foreground colors.. - color.Red("We have red") - color.Yellow("Yellow color too!") - color.Magenta("And many others ..") - - // Hi-intensity colors - color.HiGreen("Bright green color.") - color.HiBlack("Bright black means gray..") - color.HiWhite("Shiny white color!") - -However there are times where custom color mixes are required. Below are some -examples to create custom color objects and use the print functions of each -separate color object. - - // Create a new color object - c := color.New(color.FgCyan).Add(color.Underline) - c.Println("Prints cyan text with an underline.") - - // Or just add them to New() - d := color.New(color.FgCyan, color.Bold) - d.Printf("This prints bold cyan %s\n", "too!.") - - - // Mix up foreground and background colors, create new mixes! - red := color.New(color.FgRed) - - boldRed := red.Add(color.Bold) - boldRed.Println("This will print text in bold red.") - - whiteBackground := red.Add(color.BgWhite) - whiteBackground.Println("Red text with White background.") - - // Use your own io.Writer output - color.New(color.FgBlue).Fprintln(myWriter, "blue color!") - - blue := color.New(color.FgBlue) - blue.Fprint(myWriter, "This will print text in blue.") - -You can create PrintXxx functions to simplify even more: - - // Create a custom print function for convenient - red := color.New(color.FgRed).PrintfFunc() - red("warning") - red("error: %s", err) - - // Mix up multiple attributes - notice := color.New(color.Bold, color.FgGreen).PrintlnFunc() - notice("don't forget this...") - -You can also FprintXxx functions to pass your own io.Writer: - - blue := color.New(FgBlue).FprintfFunc() - blue(myWriter, "important notice: %s", stars) - - // Mix up with multiple attributes - success := color.New(color.Bold, color.FgGreen).FprintlnFunc() - success(myWriter, don't forget this...") - - -Or create SprintXxx functions to mix strings with other non-colorized strings: - - yellow := New(FgYellow).SprintFunc() - red := New(FgRed).SprintFunc() - - fmt.Printf("this is a %s and this is %s.\n", yellow("warning"), red("error")) - - info := New(FgWhite, BgGreen).SprintFunc() - fmt.Printf("this %s rocks!\n", info("package")) - -Windows support is enabled by default. All Print functions work as intended. -However only for color.SprintXXX functions, user should use fmt.FprintXXX and -set the output to color.Output: - - fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS")) - - info := New(FgWhite, BgGreen).SprintFunc() - fmt.Fprintf(color.Output, "this %s rocks!\n", info("package")) - -Using with existing code is possible. Just use the Set() method to set the -standard output to the given parameters. That way a rewrite of an existing -code is not required. - - // Use handy standard colors. - color.Set(color.FgYellow) - - fmt.Println("Existing text will be now in Yellow") - fmt.Printf("This one %s\n", "too") - - color.Unset() // don't forget to unset - - // You can mix up parameters - color.Set(color.FgMagenta, color.Bold) - defer color.Unset() // use it in your function - - fmt.Println("All text will be now bold magenta.") - -There might be a case where you want to disable color output (for example to -pipe the standard output of your app to somewhere else). `Color` has support to -disable colors both globally and for single color definition. For example -suppose you have a CLI app and a `--no-color` bool flag. You can easily disable -the color output with: - - var flagNoColor = flag.Bool("no-color", false, "Disable color output") - - if *flagNoColor { - color.NoColor = true // disables colorized output - } - -It also has support for single color definitions (local). You can -disable/enable color output on the fly: - - c := color.New(color.FgCyan) - c.Println("Prints cyan text") - - c.DisableColor() - c.Println("This is printed without any color") - - c.EnableColor() - c.Println("This prints again cyan...") -*/ -package color diff --git a/vendor/github.com/gobuffalo/flect/.gitignore b/vendor/github.com/gobuffalo/flect/.gitignore deleted file mode 100644 index 3689718594..0000000000 --- a/vendor/github.com/gobuffalo/flect/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -*.log -.DS_Store -doc -tmp -pkg -*.gem -*.pid -coverage -coverage.data -build/* -*.pbxuser -*.mode1v3 -.svn -profile -.console_history -.sass-cache/* -.rake_tasks~ -*.log.lck -solr/ -.jhw-cache/ -jhw.* -*.sublime* -node_modules/ -dist/ -generated/ -.vendor/ -bin/* -gin-bin -.idea/ diff --git a/vendor/github.com/gobuffalo/flect/.gometalinter.json b/vendor/github.com/gobuffalo/flect/.gometalinter.json deleted file mode 100644 index e4f65a36e8..0000000000 --- a/vendor/github.com/gobuffalo/flect/.gometalinter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Enable": ["vet", "golint", "goimports", "deadcode", "gotype", "ineffassign", "misspell", "nakedret", "unconvert", "megacheck", "varcheck"] -} diff --git a/vendor/github.com/gobuffalo/flect/BUILD.bazel b/vendor/github.com/gobuffalo/flect/BUILD.bazel deleted file mode 100644 index 590564d6c7..0000000000 --- a/vendor/github.com/gobuffalo/flect/BUILD.bazel +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "acronyms.go", - "camelize.go", - "capitalize.go", - "custom_data.go", - "dasherize.go", - "flect.go", - "humanize.go", - "ident.go", - "lower_upper.go", - "ordinalize.go", - "pascalize.go", - "plural_rules.go", - "pluralize.go", - "rule.go", - "singular_rules.go", - "singularize.go", - "titleize.go", - "underscore.go", - "version.go", - ], - importmap = "k8s.io/kops/vendor/github.com/gobuffalo/flect", - importpath = "github.com/gobuffalo/flect", - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gobuffalo/flect/LICENSE b/vendor/github.com/gobuffalo/flect/LICENSE deleted file mode 100644 index 649efd4372..0000000000 --- a/vendor/github.com/gobuffalo/flect/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2019 Mark Bates - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/github.com/gobuffalo/flect/Makefile b/vendor/github.com/gobuffalo/flect/Makefile deleted file mode 100644 index 0ac539f1c2..0000000000 --- a/vendor/github.com/gobuffalo/flect/Makefile +++ /dev/null @@ -1,61 +0,0 @@ -TAGS ?= "" -GO_BIN ?= "go" - -install: - $(GO_BIN) install -tags ${TAGS} -v . - make tidy - -tidy: -ifeq ($(GO111MODULE),on) - $(GO_BIN) mod tidy -else - echo skipping go mod tidy -endif - -deps: - $(GO_BIN) get -tags ${TAGS} -t ./... - make tidy - -build: - $(GO_BIN) build -v . - make tidy - -test: - $(GO_BIN) test -cover -tags ${TAGS} ./... - make tidy - -ci-deps: - $(GO_BIN) get -tags ${TAGS} -t ./... - -ci-test: - $(GO_BIN) test -tags ${TAGS} -race ./... - -lint: - go get github.com/golangci/golangci-lint/cmd/golangci-lint - golangci-lint run --enable-all - make tidy - -update: -ifeq ($(GO111MODULE),on) - rm go.* - $(GO_BIN) mod init - $(GO_BIN) mod tidy -else - $(GO_BIN) get -u -tags ${TAGS} -endif - make test - make install - make tidy - -release-test: - $(GO_BIN) test -tags ${TAGS} -race ./... - make tidy - -release: - $(GO_BIN) get github.com/gobuffalo/release - make tidy - release -y -f version.go --skip-packr - make tidy - - - diff --git a/vendor/github.com/gobuffalo/flect/README.md b/vendor/github.com/gobuffalo/flect/README.md deleted file mode 100644 index 2d9a1bd3b6..0000000000 --- a/vendor/github.com/gobuffalo/flect/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Flect - -

-GoDoc -CI -Go Report Card -

- -This is a new inflection engine to replace [https://github.com/markbates/inflect](https://github.com/markbates/inflect) designed to be more modular, more readable, and easier to fix issues on than the original. - -## Installation - -```bash -$ go get -u -v github.com/gobuffalo/flect -``` - -## `github.com/gobuffalo/flect` -GoDoc - -The `github.com/gobuffalo/flect` package contains "basic" inflection tools, like pluralization, singularization, etc... - -### The `Ident` Type - -In addition to helpful methods that take in a `string` and return a `string`, there is an `Ident` type that can be used to create new, custom, inflection rules. - -The `Ident` type contains two fields. - -* `Original` - This is the original `string` that was used to create the `Ident` -* `Parts` - This is a `[]string` that represents all of the "parts" of the string, that have been split apart, making the segments easier to work with - -Examples of creating new inflection rules using `Ident` can be found in the `github.com/gobuffalo/flect/name` package. - -## `github.com/gobuffalo/flect/name` -GoDoc - -The `github.com/gobuffalo/flect/name` package contains more "business" inflection rules like creating proper names, table names, etc... diff --git a/vendor/github.com/gobuffalo/flect/SHOULDERS.md b/vendor/github.com/gobuffalo/flect/SHOULDERS.md deleted file mode 100644 index 8c359f157e..0000000000 --- a/vendor/github.com/gobuffalo/flect/SHOULDERS.md +++ /dev/null @@ -1,10 +0,0 @@ -# github.com/gobuffalo/flect Stands on the Shoulders of Giants - -github.com/gobuffalo/flect does not try to reinvent the wheel! Instead, it uses the already great wheels developed by the Go community and puts them all together in the best way possible. Without these giants, this project would not be possible. Please make sure to check them out and thank them for all of their hard work. - -Thank you to the following **GIANTS**: - - -* [github.com/davecgh/go-spew](https://godoc.org/github.com/davecgh/go-spew) - -* [github.com/stretchr/testify](https://godoc.org/github.com/stretchr/testify) diff --git a/vendor/github.com/gobuffalo/flect/acronyms.go b/vendor/github.com/gobuffalo/flect/acronyms.go deleted file mode 100644 index b169724a4c..0000000000 --- a/vendor/github.com/gobuffalo/flect/acronyms.go +++ /dev/null @@ -1,152 +0,0 @@ -package flect - -import "sync" - -var acronymsMoot = &sync.RWMutex{} - -var baseAcronyms = map[string]bool{ - "OK": true, - "UTF8": true, - "HTML": true, - "JSON": true, - "JWT": true, - "ID": true, - "UUID": true, - "SQL": true, - "ACK": true, - "ACL": true, - "ADSL": true, - "AES": true, - "ANSI": true, - "API": true, - "ARP": true, - "ATM": true, - "BGP": true, - "BSS": true, - "CCITT": true, - "CHAP": true, - "CIDR": true, - "CIR": true, - "CLI": true, - "CPE": true, - "CPU": true, - "CRC": true, - "CRT": true, - "CSMA": true, - "CMOS": true, - "DCE": true, - "DEC": true, - "DES": true, - "DHCP": true, - "DNS": true, - "DRAM": true, - "DSL": true, - "DSLAM": true, - "DTE": true, - "DMI": true, - "EHA": true, - "EIA": true, - "EIGRP": true, - "EOF": true, - "ESS": true, - "FCC": true, - "FCS": true, - "FDDI": true, - "FTP": true, - "GBIC": true, - "gbps": true, - "GEPOF": true, - "HDLC": true, - "HTTP": true, - "HTTPS": true, - "IANA": true, - "ICMP": true, - "IDF": true, - "IDS": true, - "IEEE": true, - "IETF": true, - "IMAP": true, - "IP": true, - "IPS": true, - "ISDN": true, - "ISP": true, - "kbps": true, - "LACP": true, - "LAN": true, - "LAPB": true, - "LAPF": true, - "LLC": true, - "MAC": true, - "Mbps": true, - "MC": true, - "MDF": true, - "MIB": true, - "MoCA": true, - "MPLS": true, - "MTU": true, - "NAC": true, - "NAT": true, - "NBMA": true, - "NIC": true, - "NRZ": true, - "NRZI": true, - "NVRAM": true, - "OSI": true, - "OSPF": true, - "OUI": true, - "PAP": true, - "PAT": true, - "PC": true, - "PIM": true, - "PCM": true, - "PDU": true, - "POP3": true, - "POTS": true, - "PPP": true, - "PPTP": true, - "PTT": true, - "PVST": true, - "RAM": true, - "RARP": true, - "RFC": true, - "RIP": true, - "RLL": true, - "ROM": true, - "RSTP": true, - "RTP": true, - "RCP": true, - "SDLC": true, - "SFD": true, - "SFP": true, - "SLARP": true, - "SLIP": true, - "SMTP": true, - "SNA": true, - "SNAP": true, - "SNMP": true, - "SOF": true, - "SRAM": true, - "SSH": true, - "SSID": true, - "STP": true, - "SYN": true, - "TDM": true, - "TFTP": true, - "TIA": true, - "TOFU": true, - "UDP": true, - "URL": true, - "URI": true, - "USB": true, - "UTP": true, - "VC": true, - "VLAN": true, - "VLSM": true, - "VPN": true, - "W3C": true, - "WAN": true, - "WEP": true, - "WiFi": true, - "WPA": true, - "WWW": true, -} diff --git a/vendor/github.com/gobuffalo/flect/azure-pipelines.yml b/vendor/github.com/gobuffalo/flect/azure-pipelines.yml deleted file mode 100644 index 417e2c5792..0000000000 --- a/vendor/github.com/gobuffalo/flect/azure-pipelines.yml +++ /dev/null @@ -1,71 +0,0 @@ -variables: - GOBIN: "$(GOPATH)/bin" # Go binaries path - GOPATH: "$(system.defaultWorkingDirectory)/gopath" # Go workspace path - modulePath: "$(GOPATH)/src/github.com/$(build.repository.name)" # Path to the module"s code - -jobs: -- job: Windows - pool: - vmImage: "vs2017-win2016" - strategy: - matrix: - go 1.10: - go_version: "1.10" - go 1.11 (on): - go_version: "1.11.5" - GO111MODULE: "on" - go 1.11 (off): - go_version: "1.11.5" - GO111MODULE: "off" - go 1.12 (on): - go_version: "1.12" - GO111MODULE: "on" - go 1.12 (off): - go_version: "1.12" - GO111MODULE: "off" - steps: - - template: azure-tests.yml - -- job: macOS - pool: - vmImage: "macOS-10.13" - strategy: - matrix: - go 1.10: - go_version: "1.10" - go 1.11 (on): - go_version: "1.11.5" - GO111MODULE: "on" - go 1.11 (off): - go_version: "1.11.5" - GO111MODULE: "off" - go 1.12 (on): - go_version: "1.12" - GO111MODULE: "on" - go 1.12 (off): - go_version: "1.12" - GO111MODULE: "off" - steps: - - template: azure-tests.yml - -- job: Linux - pool: - vmImage: "ubuntu-16.04" - strategy: - matrix: - go 1.10: - go_version: "1.10" - go 1.11 (on): - go_version: "1.11.5" - GO111MODULE: "on" - go 1.11 (off): - go_version: "1.11.5" - GO111MODULE: "off" - go 1.12 (on): - go_version: "1.12" - GO111MODULE: "on" - go 1.12 (off): - go_version: "1.12" - GO111MODULE: "off" - steps: - - template: azure-tests.yml diff --git a/vendor/github.com/gobuffalo/flect/azure-tests.yml b/vendor/github.com/gobuffalo/flect/azure-tests.yml deleted file mode 100644 index eea5822fad..0000000000 --- a/vendor/github.com/gobuffalo/flect/azure-tests.yml +++ /dev/null @@ -1,19 +0,0 @@ -steps: - - task: GoTool@0 - inputs: - version: $(go_version) - - task: Bash@3 - inputs: - targetType: inline - script: | - mkdir -p "$(GOBIN)" - mkdir -p "$(GOPATH)/pkg" - mkdir -p "$(modulePath)" - shopt -s extglob - mv !(gopath) "$(modulePath)" - displayName: "Setup Go Workspace" - - script: | - go get -t -v ./... - go test -race ./... - workingDirectory: "$(modulePath)" - displayName: "Tests" diff --git a/vendor/github.com/gobuffalo/flect/camelize.go b/vendor/github.com/gobuffalo/flect/camelize.go deleted file mode 100644 index 8a9928e8be..0000000000 --- a/vendor/github.com/gobuffalo/flect/camelize.go +++ /dev/null @@ -1,48 +0,0 @@ -package flect - -import ( - "strings" - "unicode" -) - -// Camelize returns a camelize version of a string -// bob dylan = bobDylan -// widget_id = widgetID -// WidgetID = widgetID -func Camelize(s string) string { - return New(s).Camelize().String() -} - -// Camelize returns a camelize version of a string -// bob dylan = bobDylan -// widget_id = widgetID -// WidgetID = widgetID -func (i Ident) Camelize() Ident { - var out []string - for i, part := range i.Parts { - var x string - var capped bool - if strings.ToLower(part) == "id" { - out = append(out, "ID") - continue - } - for _, c := range part { - if unicode.IsLetter(c) || unicode.IsDigit(c) { - if i == 0 { - x += string(unicode.ToLower(c)) - continue - } - if !capped { - capped = true - x += string(unicode.ToUpper(c)) - continue - } - x += string(c) - } - } - if x != "" { - out = append(out, x) - } - } - return New(strings.Join(out, "")) -} diff --git a/vendor/github.com/gobuffalo/flect/capitalize.go b/vendor/github.com/gobuffalo/flect/capitalize.go deleted file mode 100644 index 42ecc166cb..0000000000 --- a/vendor/github.com/gobuffalo/flect/capitalize.go +++ /dev/null @@ -1,27 +0,0 @@ -package flect - -import "unicode" - -// Capitalize will cap the first letter of string -// user = User -// bob dylan = Bob dylan -// widget_id = Widget_id -func Capitalize(s string) string { - return New(s).Capitalize().String() -} - -// Capitalize will cap the first letter of string -// user = User -// bob dylan = Bob dylan -// widget_id = Widget_id -func (i Ident) Capitalize() Ident { - var x string - if len(i.Parts) == 0 { - return New("") - } - x = string(unicode.ToTitle(rune(i.Original[0]))) - if len(i.Original) > 1 { - x += i.Original[1:] - } - return New(x) -} diff --git a/vendor/github.com/gobuffalo/flect/custom_data.go b/vendor/github.com/gobuffalo/flect/custom_data.go deleted file mode 100644 index 9a2dfc74ad..0000000000 --- a/vendor/github.com/gobuffalo/flect/custom_data.go +++ /dev/null @@ -1,83 +0,0 @@ -package flect - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" -) - -func init() { - loadCustomData("inflections.json", "INFLECT_PATH", "could not read inflection file", LoadInflections) - loadCustomData("acronyms.json", "ACRONYMS_PATH", "could not read acronyms file", LoadAcronyms) -} - -//CustomDataParser are functions that parse data like acronyms or -//plurals in the shape of a io.Reader it receives. -type CustomDataParser func(io.Reader) error - -func loadCustomData(defaultFile, env, readErrorMessage string, parser CustomDataParser) { - pwd, _ := os.Getwd() - path, found := os.LookupEnv(env) - if !found { - path = filepath.Join(pwd, defaultFile) - } - - if _, err := os.Stat(path); err != nil { - return - } - - b, err := ioutil.ReadFile(path) - if err != nil { - fmt.Printf("%s %s (%s)\n", readErrorMessage, path, err) - return - } - - if err = parser(bytes.NewReader(b)); err != nil { - fmt.Println(err) - } -} - -//LoadAcronyms loads rules from io.Reader param -func LoadAcronyms(r io.Reader) error { - m := []string{} - err := json.NewDecoder(r).Decode(&m) - - if err != nil { - return fmt.Errorf("could not decode acronyms JSON from reader: %s", err) - } - - acronymsMoot.Lock() - defer acronymsMoot.Unlock() - - for _, acronym := range m { - baseAcronyms[acronym] = true - } - - return nil -} - -//LoadInflections loads rules from io.Reader param -func LoadInflections(r io.Reader) error { - m := map[string]string{} - - err := json.NewDecoder(r).Decode(&m) - if err != nil { - return fmt.Errorf("could not decode inflection JSON from reader: %s", err) - } - - pluralMoot.Lock() - defer pluralMoot.Unlock() - singularMoot.Lock() - defer singularMoot.Unlock() - - for s, p := range m { - singleToPlural[s] = p - pluralToSingle[p] = s - } - - return nil -} diff --git a/vendor/github.com/gobuffalo/flect/dasherize.go b/vendor/github.com/gobuffalo/flect/dasherize.go deleted file mode 100644 index c7a8a33e36..0000000000 --- a/vendor/github.com/gobuffalo/flect/dasherize.go +++ /dev/null @@ -1,34 +0,0 @@ -package flect - -import ( - "strings" - "unicode" -) - -// Dasherize returns an alphanumeric, lowercased, dashed string -// Donald E. Knuth = donald-e-knuth -// Test with + sign = test-with-sign -// admin/WidgetID = admin-widget-id -func Dasherize(s string) string { - return New(s).Dasherize().String() -} - -// Dasherize returns an alphanumeric, lowercased, dashed string -// Donald E. Knuth = donald-e-knuth -// Test with + sign = test-with-sign -// admin/WidgetID = admin-widget-id -func (i Ident) Dasherize() Ident { - var parts []string - - for _, part := range i.Parts { - var x string - for _, c := range part { - if unicode.IsLetter(c) || unicode.IsDigit(c) { - x += string(c) - } - } - parts = xappend(parts, x) - } - - return New(strings.ToLower(strings.Join(parts, "-"))) -} diff --git a/vendor/github.com/gobuffalo/flect/flect.go b/vendor/github.com/gobuffalo/flect/flect.go deleted file mode 100644 index ee81b6f2bc..0000000000 --- a/vendor/github.com/gobuffalo/flect/flect.go +++ /dev/null @@ -1,43 +0,0 @@ -/* -Package flect is a new inflection engine to replace [https://github.com/markbates/inflect](https://github.com/markbates/inflect) designed to be more modular, more readable, and easier to fix issues on than the original. -*/ -package flect - -import ( - "strings" - "unicode" -) - -var spaces = []rune{'_', ' ', ':', '-', '/'} - -func isSpace(c rune) bool { - for _, r := range spaces { - if r == c { - return true - } - } - return unicode.IsSpace(c) -} - -func xappend(a []string, ss ...string) []string { - for _, s := range ss { - s = strings.TrimSpace(s) - for _, x := range spaces { - s = strings.Trim(s, string(x)) - } - if _, ok := baseAcronyms[strings.ToUpper(s)]; ok { - s = strings.ToUpper(s) - } - if s != "" { - a = append(a, s) - } - } - return a -} - -func abs(x int) int { - if x < 0 { - return -x - } - return x -} diff --git a/vendor/github.com/gobuffalo/flect/go.mod b/vendor/github.com/gobuffalo/flect/go.mod deleted file mode 100644 index cd02d074b9..0000000000 --- a/vendor/github.com/gobuffalo/flect/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/gobuffalo/flect - -go 1.12 - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/stretchr/testify v1.3.0 -) diff --git a/vendor/github.com/gobuffalo/flect/go.sum b/vendor/github.com/gobuffalo/flect/go.sum deleted file mode 100644 index 4f76e62c1f..0000000000 --- a/vendor/github.com/gobuffalo/flect/go.sum +++ /dev/null @@ -1,9 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= diff --git a/vendor/github.com/gobuffalo/flect/humanize.go b/vendor/github.com/gobuffalo/flect/humanize.go deleted file mode 100644 index ded0939703..0000000000 --- a/vendor/github.com/gobuffalo/flect/humanize.go +++ /dev/null @@ -1,35 +0,0 @@ -package flect - -import ( - "strings" -) - -// Humanize returns first letter of sentence capitalized. -// Common acronyms are capitalized as well. -// Other capital letters in string are left as provided. -// employee_salary = Employee salary -// employee_id = employee ID -// employee_mobile_number = Employee mobile number -// first_Name = First Name -// firstName = First Name -func Humanize(s string) string { - return New(s).Humanize().String() -} - -// Humanize First letter of sentence capitalized -func (i Ident) Humanize() Ident { - if len(i.Original) == 0 { - return New("") - } - - var parts []string - for index, part := range i.Parts { - if index == 0 { - part = strings.Title(i.Parts[0]) - } - - parts = xappend(parts, part) - } - - return New(strings.Join(parts, " ")) -} diff --git a/vendor/github.com/gobuffalo/flect/ident.go b/vendor/github.com/gobuffalo/flect/ident.go deleted file mode 100644 index 78b51d4576..0000000000 --- a/vendor/github.com/gobuffalo/flect/ident.go +++ /dev/null @@ -1,106 +0,0 @@ -package flect - -import ( - "encoding" - "strings" - "unicode" - "unicode/utf8" -) - -// Ident represents the string and it's parts -type Ident struct { - Original string - Parts []string -} - -// String implements fmt.Stringer and returns the original string -func (i Ident) String() string { - return i.Original -} - -// New creates a new Ident from the string -func New(s string) Ident { - i := Ident{ - Original: s, - Parts: toParts(s), - } - - return i -} - -func toParts(s string) []string { - parts := []string{} - s = strings.TrimSpace(s) - if len(s) == 0 { - return parts - } - if _, ok := baseAcronyms[strings.ToUpper(s)]; ok { - return []string{strings.ToUpper(s)} - } - var prev rune - var x string - for _, c := range s { - cs := string(c) - // fmt.Println("### cs ->", cs) - // fmt.Println("### unicode.IsControl(c) ->", unicode.IsControl(c)) - // fmt.Println("### unicode.IsDigit(c) ->", unicode.IsDigit(c)) - // fmt.Println("### unicode.IsGraphic(c) ->", unicode.IsGraphic(c)) - // fmt.Println("### unicode.IsLetter(c) ->", unicode.IsLetter(c)) - // fmt.Println("### unicode.IsLower(c) ->", unicode.IsLower(c)) - // fmt.Println("### unicode.IsMark(c) ->", unicode.IsMark(c)) - // fmt.Println("### unicode.IsPrint(c) ->", unicode.IsPrint(c)) - // fmt.Println("### unicode.IsPunct(c) ->", unicode.IsPunct(c)) - // fmt.Println("### unicode.IsSpace(c) ->", unicode.IsSpace(c)) - // fmt.Println("### unicode.IsTitle(c) ->", unicode.IsTitle(c)) - // fmt.Println("### unicode.IsUpper(c) ->", unicode.IsUpper(c)) - if !utf8.ValidRune(c) { - continue - } - - if isSpace(c) { - parts = xappend(parts, x) - x = cs - prev = c - continue - } - - if unicode.IsUpper(c) && !unicode.IsUpper(prev) { - parts = xappend(parts, x) - x = cs - prev = c - continue - } - if unicode.IsUpper(c) && baseAcronyms[strings.ToUpper(x)] { - parts = xappend(parts, x) - x = cs - prev = c - continue - } - if unicode.IsLetter(c) || unicode.IsDigit(c) || unicode.IsPunct(c) || c == '`' { - prev = c - x += cs - continue - } - - parts = xappend(parts, x) - x = "" - prev = c - } - parts = xappend(parts, x) - - return parts -} - -var _ encoding.TextUnmarshaler = &Ident{} -var _ encoding.TextMarshaler = &Ident{} - -//UnmarshalText unmarshalls byte array into the Ident -func (i *Ident) UnmarshalText(data []byte) error { - (*i) = New(string(data)) - return nil -} - -//MarshalText marshals Ident into byte array -func (i Ident) MarshalText() ([]byte, error) { - return []byte(i.Original), nil -} diff --git a/vendor/github.com/gobuffalo/flect/lower_upper.go b/vendor/github.com/gobuffalo/flect/lower_upper.go deleted file mode 100644 index 930da58d8c..0000000000 --- a/vendor/github.com/gobuffalo/flect/lower_upper.go +++ /dev/null @@ -1,13 +0,0 @@ -package flect - -import "strings" - -// ToUpper is a convience wrapper for strings.ToUpper -func (i Ident) ToUpper() Ident { - return New(strings.ToUpper(i.Original)) -} - -// ToLower is a convience wrapper for strings.ToLower -func (i Ident) ToLower() Ident { - return New(strings.ToLower(i.Original)) -} diff --git a/vendor/github.com/gobuffalo/flect/ordinalize.go b/vendor/github.com/gobuffalo/flect/ordinalize.go deleted file mode 100644 index 1ce27b3a0d..0000000000 --- a/vendor/github.com/gobuffalo/flect/ordinalize.go +++ /dev/null @@ -1,43 +0,0 @@ -package flect - -import ( - "fmt" - "strconv" -) - -// Ordinalize converts a number to an ordinal version -// 42 = 42nd -// 45 = 45th -// 1 = 1st -func Ordinalize(s string) string { - return New(s).Ordinalize().String() -} - -// Ordinalize converts a number to an ordinal version -// 42 = 42nd -// 45 = 45th -// 1 = 1st -func (i Ident) Ordinalize() Ident { - number, err := strconv.Atoi(i.Original) - if err != nil { - return i - } - var s string - switch abs(number) % 100 { - case 11, 12, 13: - s = fmt.Sprintf("%dth", number) - default: - switch abs(number) % 10 { - case 1: - s = fmt.Sprintf("%dst", number) - case 2: - s = fmt.Sprintf("%dnd", number) - case 3: - s = fmt.Sprintf("%drd", number) - } - } - if s != "" { - return New(s) - } - return New(fmt.Sprintf("%dth", number)) -} diff --git a/vendor/github.com/gobuffalo/flect/pascalize.go b/vendor/github.com/gobuffalo/flect/pascalize.go deleted file mode 100644 index 76f0c6a706..0000000000 --- a/vendor/github.com/gobuffalo/flect/pascalize.go +++ /dev/null @@ -1,25 +0,0 @@ -package flect - -import ( - "unicode" -) - -// Pascalize returns a string with each segment capitalized -// user = User -// bob dylan = BobDylan -// widget_id = WidgetID -func Pascalize(s string) string { - return New(s).Pascalize().String() -} - -// Pascalize returns a string with each segment capitalized -// user = User -// bob dylan = BobDylan -// widget_id = WidgetID -func (i Ident) Pascalize() Ident { - c := i.Camelize() - if len(c.String()) == 0 { - return c - } - return New(string(unicode.ToUpper(rune(c.Original[0]))) + c.Original[1:]) -} diff --git a/vendor/github.com/gobuffalo/flect/plural_rules.go b/vendor/github.com/gobuffalo/flect/plural_rules.go deleted file mode 100644 index 86fca8c5f5..0000000000 --- a/vendor/github.com/gobuffalo/flect/plural_rules.go +++ /dev/null @@ -1,284 +0,0 @@ -package flect - -var pluralRules = []rule{} - -// AddPlural adds a rule that will replace the given suffix with the replacement suffix. -func AddPlural(suffix string, repl string) { - pluralMoot.Lock() - defer pluralMoot.Unlock() - pluralRules = append(pluralRules, rule{ - suffix: suffix, - fn: func(s string) string { - s = s[:len(s)-len(suffix)] - return s + repl - }, - }) - - pluralRules = append(pluralRules, rule{ - suffix: repl, - fn: noop, - }) -} - -var singleToPlural = map[string]string{ - "aircraft": "aircraft", - "alias": "aliases", - "alumna": "alumnae", - "alumnus": "alumni", - "analysis": "analyses", - "antenna": "antennas", - "antithesis": "antitheses", - "apex": "apexes", - "appendix": "appendices", - "axis": "axes", - "bacillus": "bacilli", - "bacterium": "bacteria", - "basis": "bases", - "beau": "beaus", - "bison": "bison", - "bureau": "bureaus", - "bus": "buses", - "campus": "campuses", - "caucus": "caucuses", - "château": "châteaux", - "circus": "circuses", - "codex": "codices", - "concerto": "concertos", - "corpus": "corpora", - "crisis": "crises", - "curriculum": "curriculums", - "datum": "data", - "dear": "dear", - "deer": "deer", - "diagnosis": "diagnoses", - "die": "dice", - "dwarf": "dwarves", - "ellipsis": "ellipses", - "equipment": "equipment", - "erratum": "errata", - "faux pas": "faux pas", - "fez": "fezzes", - "fish": "fish", - "focus": "foci", - "foo": "foos", - "foot": "feet", - "formula": "formulas", - "fungus": "fungi", - "genus": "genera", - "goose": "geese", - "graffito": "graffiti", - "grouse": "grouse", - "half": "halves", - "halo": "halos", - "hoof": "hooves", - "human": "humans", - "hypothesis": "hypotheses", - "index": "indices", - "information": "information", - "jeans": "jeans", - "larva": "larvae", - "libretto": "librettos", - "loaf": "loaves", - "locus": "loci", - "louse": "lice", - "matrix": "matrices", - "minutia": "minutiae", - "money": "money", - "moose": "moose", - "mouse": "mice", - "nebula": "nebulae", - "news": "news", - "nucleus": "nuclei", - "oasis": "oases", - "octopus": "octopi", - "offspring": "offspring", - "opus": "opera", - "ovum": "ova", - "ox": "oxen", - "parenthesis": "parentheses", - "phenomenon": "phenomena", - "photo": "photos", - "phylum": "phyla", - "piano": "pianos", - "plus": "pluses", - "police": "police", - "prognosis": "prognoses", - "prometheus": "prometheuses", - "quiz": "quizzes", - "radius": "radiuses", - "referendum": "referendums", - "ress": "resses", - "rice": "rice", - "salmon": "salmon", - "series": "series", - "sheep": "sheep", - "shoe": "shoes", - "shrimp": "shrimp", - "species": "species", - "stimulus": "stimuli", - "stratum": "strata", - "swine": "swine", - "syllabus": "syllabi", - "symposium": "symposiums", - "synopsis": "synopses", - "tableau": "tableaus", - "testis": "testes", - "thesis": "theses", - "thief": "thieves", - "tooth": "teeth", - "trout": "trout", - "tuna": "tuna", - "vertebra": "vertebrae", - "vertix": "vertices", - "vita": "vitae", - "vortex": "vortices", - "wharf": "wharves", - "wife": "wives", - "wolf": "wolves", - "you": "you", -} - -var pluralToSingle = map[string]string{} - -func init() { - for k, v := range singleToPlural { - pluralToSingle[v] = k - } -} - -type singularToPluralSuffix struct { - singular string - plural string -} - -var singularToPluralSuffixList = []singularToPluralSuffix{ - {"iterion", "iteria"}, - {"campus", "campuses"}, - {"genera", "genus"}, - {"person", "people"}, - {"phylum", "phyla"}, - {"randum", "randa"}, - {"actus", "acti"}, - {"adium", "adia"}, - {"alias", "aliases"}, - {"basis", "basis"}, - {"child", "children"}, - {"chive", "chives"}, - {"focus", "foci"}, - {"hello", "hellos"}, - {"jeans", "jeans"}, - {"louse", "lice"}, - {"mouse", "mice"}, - {"movie", "movies"}, - {"oasis", "oasis"}, - {"atum", "ata"}, - {"atus", "atuses"}, - {"base", "bases"}, - {"cess", "cesses"}, - {"dium", "diums"}, - {"eses", "esis"}, - {"half", "halves"}, - {"hive", "hives"}, - {"iano", "ianos"}, - {"irus", "iri"}, - {"isis", "ises"}, - {"leus", "li"}, - {"mnus", "mni"}, - {"move", "moves"}, - {"news", "news"}, - {"odex", "odice"}, - {"oose", "eese"}, - {"ouse", "ouses"}, - {"ovum", "ova"}, - {"rion", "ria"}, - {"shoe", "shoes"}, - {"stis", "stes"}, - {"tive", "tives"}, - {"wife", "wives"}, - {"afe", "aves"}, - {"bfe", "bves"}, - {"box", "boxes"}, - {"cfe", "cves"}, - {"dfe", "dves"}, - {"dge", "dges"}, - {"efe", "eves"}, - {"gfe", "gves"}, - {"hfe", "hves"}, - {"ife", "ives"}, - {"itz", "itzes"}, - {"ium", "ia"}, - {"ize", "izes"}, - {"jfe", "jves"}, - {"kfe", "kves"}, - {"man", "men"}, - {"mfe", "mves"}, - {"nfe", "nves"}, - {"nna", "nnas"}, - {"oaf", "oaves"}, - {"oci", "ocus"}, - {"ode", "odes"}, - {"ofe", "oves"}, - {"oot", "eet"}, - {"pfe", "pves"}, - {"pse", "psis"}, - {"qfe", "qves"}, - {"quy", "quies"}, - {"rfe", "rves"}, - {"sfe", "sves"}, - {"tfe", "tves"}, - {"tum", "ta"}, - {"tus", "tuses"}, - {"ufe", "uves"}, - {"ula", "ulae"}, - {"ula", "ulas"}, - {"uli", "ulus"}, - {"use", "uses"}, - {"uss", "usses"}, - {"vfe", "vves"}, - {"wfe", "wves"}, - {"xfe", "xves"}, - {"yfe", "yves"}, - {"you", "you"}, - {"zfe", "zves"}, - {"by", "bies"}, - {"ch", "ches"}, - {"cy", "cies"}, - {"dy", "dies"}, - {"ex", "ices"}, - {"fy", "fies"}, - {"gy", "gies"}, - {"hy", "hies"}, - {"io", "ios"}, - {"jy", "jies"}, - {"ky", "kies"}, - {"ld", "ldren"}, - {"lf", "lves"}, - {"ly", "lies"}, - {"my", "mies"}, - {"ny", "nies"}, - {"ox", "oxen"}, - {"py", "pies"}, - {"qy", "qies"}, - {"rf", "rves"}, - {"ry", "ries"}, - {"sh", "shes"}, - {"ss", "sses"}, - {"sy", "sies"}, - {"ty", "ties"}, - {"tz", "tzes"}, - {"va", "vae"}, - {"vy", "vies"}, - {"wy", "wies"}, - {"xy", "xies"}, - {"zy", "zies"}, - {"zz", "zzes"}, - {"o", "oes"}, - {"x", "xes"}, -} - -func init() { - for _, suffix := range singularToPluralSuffixList { - AddPlural(suffix.singular, suffix.plural) - AddSingular(suffix.plural, suffix.singular) - } -} diff --git a/vendor/github.com/gobuffalo/flect/pluralize.go b/vendor/github.com/gobuffalo/flect/pluralize.go deleted file mode 100644 index 1b9d43e462..0000000000 --- a/vendor/github.com/gobuffalo/flect/pluralize.go +++ /dev/null @@ -1,49 +0,0 @@ -package flect - -import ( - "strings" - "sync" -) - -var pluralMoot = &sync.RWMutex{} - -// Pluralize returns a plural version of the string -// user = users -// person = people -// datum = data -func Pluralize(s string) string { - return New(s).Pluralize().String() -} - -// Pluralize returns a plural version of the string -// user = users -// person = people -// datum = data -func (i Ident) Pluralize() Ident { - s := i.Original - if len(s) == 0 { - return New("") - } - - pluralMoot.RLock() - defer pluralMoot.RUnlock() - - ls := strings.ToLower(s) - if _, ok := pluralToSingle[ls]; ok { - return i - } - if p, ok := singleToPlural[ls]; ok { - return New(p) - } - for _, r := range pluralRules { - if strings.HasSuffix(ls, r.suffix) { - return New(r.fn(s)) - } - } - - if strings.HasSuffix(ls, "s") { - return i - } - - return New(i.String() + "s") -} diff --git a/vendor/github.com/gobuffalo/flect/rule.go b/vendor/github.com/gobuffalo/flect/rule.go deleted file mode 100644 index dc616b337d..0000000000 --- a/vendor/github.com/gobuffalo/flect/rule.go +++ /dev/null @@ -1,10 +0,0 @@ -package flect - -type ruleFn func(string) string - -type rule struct { - suffix string - fn ruleFn -} - -func noop(s string) string { return s } diff --git a/vendor/github.com/gobuffalo/flect/singular_rules.go b/vendor/github.com/gobuffalo/flect/singular_rules.go deleted file mode 100644 index b20371b355..0000000000 --- a/vendor/github.com/gobuffalo/flect/singular_rules.go +++ /dev/null @@ -1,23 +0,0 @@ -package flect - -var singularRules = []rule{} - -// AddSingular adds a rule that will replace the given suffix with the replacement suffix. -func AddSingular(ext string, repl string) { - singularMoot.Lock() - defer singularMoot.Unlock() - singularRules = append(singularRules, rule{ - suffix: ext, - fn: func(s string) string { - s = s[:len(s)-len(ext)] - return s + repl - }, - }) - - singularRules = append(singularRules, rule{ - suffix: repl, - fn: func(s string) string { - return s - }, - }) -} diff --git a/vendor/github.com/gobuffalo/flect/singularize.go b/vendor/github.com/gobuffalo/flect/singularize.go deleted file mode 100644 index a0f8545ef2..0000000000 --- a/vendor/github.com/gobuffalo/flect/singularize.go +++ /dev/null @@ -1,47 +0,0 @@ -package flect - -import ( - "strings" - "sync" -) - -var singularMoot = &sync.RWMutex{} - -// Singularize returns a singular version of the string -// users = user -// data = datum -// people = person -func Singularize(s string) string { - return New(s).Singularize().String() -} - -// Singularize returns a singular version of the string -// users = user -// data = datum -// people = person -func (i Ident) Singularize() Ident { - s := i.Original - if len(s) == 0 { - return i - } - - singularMoot.RLock() - defer singularMoot.RUnlock() - ls := strings.ToLower(s) - if p, ok := pluralToSingle[ls]; ok { - return New(p) - } - if _, ok := singleToPlural[ls]; ok { - return i - } - for _, r := range singularRules { - if strings.HasSuffix(ls, r.suffix) { - return New(r.fn(s)) - } - } - - if strings.HasSuffix(s, "s") { - return New(s[:len(s)-1]) - } - return i -} diff --git a/vendor/github.com/gobuffalo/flect/titleize.go b/vendor/github.com/gobuffalo/flect/titleize.go deleted file mode 100644 index cbbf08a5aa..0000000000 --- a/vendor/github.com/gobuffalo/flect/titleize.go +++ /dev/null @@ -1,30 +0,0 @@ -package flect - -import ( - "strings" - "unicode" -) - -// Titleize will capitalize the start of each part -// "Nice to see you!" = "Nice To See You!" -// "i've read a book! have you?" = "I've Read A Book! Have You?" -// "This is `code` ok" = "This Is `code` OK" -func Titleize(s string) string { - return New(s).Titleize().String() -} - -// Titleize will capitalize the start of each part -// "Nice to see you!" = "Nice To See You!" -// "i've read a book! have you?" = "I've Read A Book! Have You?" -// "This is `code` ok" = "This Is `code` OK" -func (i Ident) Titleize() Ident { - var parts []string - for _, part := range i.Parts { - x := string(unicode.ToTitle(rune(part[0]))) - if len(part) > 1 { - x += part[1:] - } - parts = append(parts, x) - } - return New(strings.Join(parts, " ")) -} diff --git a/vendor/github.com/gobuffalo/flect/underscore.go b/vendor/github.com/gobuffalo/flect/underscore.go deleted file mode 100644 index b92488aa00..0000000000 --- a/vendor/github.com/gobuffalo/flect/underscore.go +++ /dev/null @@ -1,34 +0,0 @@ -package flect - -import ( - "strings" - "unicode" -) - -// Underscore a string -// bob dylan = bob_dylan -// Nice to see you! = nice_to_see_you -// widgetID = widget_id -func Underscore(s string) string { - return New(s).Underscore().String() -} - -// Underscore a string -// bob dylan = bob_dylan -// Nice to see you! = nice_to_see_you -// widgetID = widget_id -func (i Ident) Underscore() Ident { - var out []string - for _, part := range i.Parts { - var x string - for _, c := range part { - if unicode.IsLetter(c) || unicode.IsDigit(c) { - x += string(c) - } - } - if x != "" { - out = append(out, x) - } - } - return New(strings.ToLower(strings.Join(out, "_"))) -} diff --git a/vendor/github.com/gobuffalo/flect/version.go b/vendor/github.com/gobuffalo/flect/version.go deleted file mode 100644 index 9624d5df2d..0000000000 --- a/vendor/github.com/gobuffalo/flect/version.go +++ /dev/null @@ -1,4 +0,0 @@ -package flect - -//Version holds Flect version number -const Version = "v0.1.6" diff --git a/vendor/github.com/mattn/go-colorable/.travis.yml b/vendor/github.com/mattn/go-colorable/.travis.yml deleted file mode 100644 index 98db8f060b..0000000000 --- a/vendor/github.com/mattn/go-colorable/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: go -go: - - tip - -before_install: - - go get github.com/mattn/goveralls - - go get golang.org/x/tools/cmd/cover -script: - - $HOME/gopath/bin/goveralls -repotoken xnXqRGwgW3SXIguzxf90ZSK1GPYZPaGrw diff --git a/vendor/github.com/mattn/go-colorable/BUILD.bazel b/vendor/github.com/mattn/go-colorable/BUILD.bazel deleted file mode 100644 index 5ca422118d..0000000000 --- a/vendor/github.com/mattn/go-colorable/BUILD.bazel +++ /dev/null @@ -1,52 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "colorable_others.go", - "colorable_windows.go", - "noncolorable.go", - ], - importmap = "k8s.io/kops/vendor/github.com/mattn/go-colorable", - importpath = "github.com/mattn/go-colorable", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/mattn/go-isatty:go_default_library", - ], - "//conditions:default": [], - }), -) diff --git a/vendor/github.com/mattn/go-colorable/LICENSE b/vendor/github.com/mattn/go-colorable/LICENSE deleted file mode 100644 index 91b5cef30e..0000000000 --- a/vendor/github.com/mattn/go-colorable/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Yasuhiro Matsumoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/github.com/mattn/go-colorable/README.md b/vendor/github.com/mattn/go-colorable/README.md deleted file mode 100644 index 56729a92ca..0000000000 --- a/vendor/github.com/mattn/go-colorable/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# go-colorable - -[![Godoc Reference](https://godoc.org/github.com/mattn/go-colorable?status.svg)](http://godoc.org/github.com/mattn/go-colorable) -[![Build Status](https://travis-ci.org/mattn/go-colorable.svg?branch=master)](https://travis-ci.org/mattn/go-colorable) -[![Coverage Status](https://coveralls.io/repos/github/mattn/go-colorable/badge.svg?branch=master)](https://coveralls.io/github/mattn/go-colorable?branch=master) -[![Go Report Card](https://goreportcard.com/badge/mattn/go-colorable)](https://goreportcard.com/report/mattn/go-colorable) - -Colorable writer for windows. - -For example, most of logger packages doesn't show colors on windows. (I know we can do it with ansicon. But I don't want.) -This package is possible to handle escape sequence for ansi color on windows. - -## Too Bad! - -![](https://raw.githubusercontent.com/mattn/go-colorable/gh-pages/bad.png) - - -## So Good! - -![](https://raw.githubusercontent.com/mattn/go-colorable/gh-pages/good.png) - -## Usage - -```go -logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true}) -logrus.SetOutput(colorable.NewColorableStdout()) - -logrus.Info("succeeded") -logrus.Warn("not correct") -logrus.Error("something error") -logrus.Fatal("panic") -``` - -You can compile above code on non-windows OSs. - -## Installation - -``` -$ go get github.com/mattn/go-colorable -``` - -# License - -MIT - -# Author - -Yasuhiro Matsumoto (a.k.a mattn) diff --git a/vendor/github.com/mattn/go-colorable/colorable_appengine.go b/vendor/github.com/mattn/go-colorable/colorable_appengine.go deleted file mode 100644 index 1f28d773d7..0000000000 --- a/vendor/github.com/mattn/go-colorable/colorable_appengine.go +++ /dev/null @@ -1,29 +0,0 @@ -// +build appengine - -package colorable - -import ( - "io" - "os" - - _ "github.com/mattn/go-isatty" -) - -// NewColorable return new instance of Writer which handle escape sequence. -func NewColorable(file *os.File) io.Writer { - if file == nil { - panic("nil passed instead of *os.File to NewColorable()") - } - - return file -} - -// NewColorableStdout return new instance of Writer which handle escape sequence for stdout. -func NewColorableStdout() io.Writer { - return os.Stdout -} - -// NewColorableStderr return new instance of Writer which handle escape sequence for stderr. -func NewColorableStderr() io.Writer { - return os.Stderr -} diff --git a/vendor/github.com/mattn/go-colorable/colorable_others.go b/vendor/github.com/mattn/go-colorable/colorable_others.go deleted file mode 100644 index 887f203dc7..0000000000 --- a/vendor/github.com/mattn/go-colorable/colorable_others.go +++ /dev/null @@ -1,30 +0,0 @@ -// +build !windows -// +build !appengine - -package colorable - -import ( - "io" - "os" - - _ "github.com/mattn/go-isatty" -) - -// NewColorable return new instance of Writer which handle escape sequence. -func NewColorable(file *os.File) io.Writer { - if file == nil { - panic("nil passed instead of *os.File to NewColorable()") - } - - return file -} - -// NewColorableStdout return new instance of Writer which handle escape sequence for stdout. -func NewColorableStdout() io.Writer { - return os.Stdout -} - -// NewColorableStderr return new instance of Writer which handle escape sequence for stderr. -func NewColorableStderr() io.Writer { - return os.Stderr -} diff --git a/vendor/github.com/mattn/go-colorable/colorable_windows.go b/vendor/github.com/mattn/go-colorable/colorable_windows.go deleted file mode 100644 index 404e10ca02..0000000000 --- a/vendor/github.com/mattn/go-colorable/colorable_windows.go +++ /dev/null @@ -1,980 +0,0 @@ -// +build windows -// +build !appengine - -package colorable - -import ( - "bytes" - "io" - "math" - "os" - "strconv" - "strings" - "syscall" - "unsafe" - - "github.com/mattn/go-isatty" -) - -const ( - foregroundBlue = 0x1 - foregroundGreen = 0x2 - foregroundRed = 0x4 - foregroundIntensity = 0x8 - foregroundMask = (foregroundRed | foregroundBlue | foregroundGreen | foregroundIntensity) - backgroundBlue = 0x10 - backgroundGreen = 0x20 - backgroundRed = 0x40 - backgroundIntensity = 0x80 - backgroundMask = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity) -) - -const ( - genericRead = 0x80000000 - genericWrite = 0x40000000 -) - -const ( - consoleTextmodeBuffer = 0x1 -) - -type wchar uint16 -type short int16 -type dword uint32 -type word uint16 - -type coord struct { - x short - y short -} - -type smallRect struct { - left short - top short - right short - bottom short -} - -type consoleScreenBufferInfo struct { - size coord - cursorPosition coord - attributes word - window smallRect - maximumWindowSize coord -} - -type consoleCursorInfo struct { - size dword - visible int32 -} - -var ( - kernel32 = syscall.NewLazyDLL("kernel32.dll") - procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo") - procSetConsoleTextAttribute = kernel32.NewProc("SetConsoleTextAttribute") - procSetConsoleCursorPosition = kernel32.NewProc("SetConsoleCursorPosition") - procFillConsoleOutputCharacter = kernel32.NewProc("FillConsoleOutputCharacterW") - procFillConsoleOutputAttribute = kernel32.NewProc("FillConsoleOutputAttribute") - procGetConsoleCursorInfo = kernel32.NewProc("GetConsoleCursorInfo") - procSetConsoleCursorInfo = kernel32.NewProc("SetConsoleCursorInfo") - procSetConsoleTitle = kernel32.NewProc("SetConsoleTitleW") - procCreateConsoleScreenBuffer = kernel32.NewProc("CreateConsoleScreenBuffer") -) - -// Writer provide colorable Writer to the console -type Writer struct { - out io.Writer - handle syscall.Handle - althandle syscall.Handle - oldattr word - oldpos coord - rest bytes.Buffer -} - -// NewColorable return new instance of Writer which handle escape sequence from File. -func NewColorable(file *os.File) io.Writer { - if file == nil { - panic("nil passed instead of *os.File to NewColorable()") - } - - if isatty.IsTerminal(file.Fd()) { - var csbi consoleScreenBufferInfo - handle := syscall.Handle(file.Fd()) - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - return &Writer{out: file, handle: handle, oldattr: csbi.attributes, oldpos: coord{0, 0}} - } - return file -} - -// NewColorableStdout return new instance of Writer which handle escape sequence for stdout. -func NewColorableStdout() io.Writer { - return NewColorable(os.Stdout) -} - -// NewColorableStderr return new instance of Writer which handle escape sequence for stderr. -func NewColorableStderr() io.Writer { - return NewColorable(os.Stderr) -} - -var color256 = map[int]int{ - 0: 0x000000, - 1: 0x800000, - 2: 0x008000, - 3: 0x808000, - 4: 0x000080, - 5: 0x800080, - 6: 0x008080, - 7: 0xc0c0c0, - 8: 0x808080, - 9: 0xff0000, - 10: 0x00ff00, - 11: 0xffff00, - 12: 0x0000ff, - 13: 0xff00ff, - 14: 0x00ffff, - 15: 0xffffff, - 16: 0x000000, - 17: 0x00005f, - 18: 0x000087, - 19: 0x0000af, - 20: 0x0000d7, - 21: 0x0000ff, - 22: 0x005f00, - 23: 0x005f5f, - 24: 0x005f87, - 25: 0x005faf, - 26: 0x005fd7, - 27: 0x005fff, - 28: 0x008700, - 29: 0x00875f, - 30: 0x008787, - 31: 0x0087af, - 32: 0x0087d7, - 33: 0x0087ff, - 34: 0x00af00, - 35: 0x00af5f, - 36: 0x00af87, - 37: 0x00afaf, - 38: 0x00afd7, - 39: 0x00afff, - 40: 0x00d700, - 41: 0x00d75f, - 42: 0x00d787, - 43: 0x00d7af, - 44: 0x00d7d7, - 45: 0x00d7ff, - 46: 0x00ff00, - 47: 0x00ff5f, - 48: 0x00ff87, - 49: 0x00ffaf, - 50: 0x00ffd7, - 51: 0x00ffff, - 52: 0x5f0000, - 53: 0x5f005f, - 54: 0x5f0087, - 55: 0x5f00af, - 56: 0x5f00d7, - 57: 0x5f00ff, - 58: 0x5f5f00, - 59: 0x5f5f5f, - 60: 0x5f5f87, - 61: 0x5f5faf, - 62: 0x5f5fd7, - 63: 0x5f5fff, - 64: 0x5f8700, - 65: 0x5f875f, - 66: 0x5f8787, - 67: 0x5f87af, - 68: 0x5f87d7, - 69: 0x5f87ff, - 70: 0x5faf00, - 71: 0x5faf5f, - 72: 0x5faf87, - 73: 0x5fafaf, - 74: 0x5fafd7, - 75: 0x5fafff, - 76: 0x5fd700, - 77: 0x5fd75f, - 78: 0x5fd787, - 79: 0x5fd7af, - 80: 0x5fd7d7, - 81: 0x5fd7ff, - 82: 0x5fff00, - 83: 0x5fff5f, - 84: 0x5fff87, - 85: 0x5fffaf, - 86: 0x5fffd7, - 87: 0x5fffff, - 88: 0x870000, - 89: 0x87005f, - 90: 0x870087, - 91: 0x8700af, - 92: 0x8700d7, - 93: 0x8700ff, - 94: 0x875f00, - 95: 0x875f5f, - 96: 0x875f87, - 97: 0x875faf, - 98: 0x875fd7, - 99: 0x875fff, - 100: 0x878700, - 101: 0x87875f, - 102: 0x878787, - 103: 0x8787af, - 104: 0x8787d7, - 105: 0x8787ff, - 106: 0x87af00, - 107: 0x87af5f, - 108: 0x87af87, - 109: 0x87afaf, - 110: 0x87afd7, - 111: 0x87afff, - 112: 0x87d700, - 113: 0x87d75f, - 114: 0x87d787, - 115: 0x87d7af, - 116: 0x87d7d7, - 117: 0x87d7ff, - 118: 0x87ff00, - 119: 0x87ff5f, - 120: 0x87ff87, - 121: 0x87ffaf, - 122: 0x87ffd7, - 123: 0x87ffff, - 124: 0xaf0000, - 125: 0xaf005f, - 126: 0xaf0087, - 127: 0xaf00af, - 128: 0xaf00d7, - 129: 0xaf00ff, - 130: 0xaf5f00, - 131: 0xaf5f5f, - 132: 0xaf5f87, - 133: 0xaf5faf, - 134: 0xaf5fd7, - 135: 0xaf5fff, - 136: 0xaf8700, - 137: 0xaf875f, - 138: 0xaf8787, - 139: 0xaf87af, - 140: 0xaf87d7, - 141: 0xaf87ff, - 142: 0xafaf00, - 143: 0xafaf5f, - 144: 0xafaf87, - 145: 0xafafaf, - 146: 0xafafd7, - 147: 0xafafff, - 148: 0xafd700, - 149: 0xafd75f, - 150: 0xafd787, - 151: 0xafd7af, - 152: 0xafd7d7, - 153: 0xafd7ff, - 154: 0xafff00, - 155: 0xafff5f, - 156: 0xafff87, - 157: 0xafffaf, - 158: 0xafffd7, - 159: 0xafffff, - 160: 0xd70000, - 161: 0xd7005f, - 162: 0xd70087, - 163: 0xd700af, - 164: 0xd700d7, - 165: 0xd700ff, - 166: 0xd75f00, - 167: 0xd75f5f, - 168: 0xd75f87, - 169: 0xd75faf, - 170: 0xd75fd7, - 171: 0xd75fff, - 172: 0xd78700, - 173: 0xd7875f, - 174: 0xd78787, - 175: 0xd787af, - 176: 0xd787d7, - 177: 0xd787ff, - 178: 0xd7af00, - 179: 0xd7af5f, - 180: 0xd7af87, - 181: 0xd7afaf, - 182: 0xd7afd7, - 183: 0xd7afff, - 184: 0xd7d700, - 185: 0xd7d75f, - 186: 0xd7d787, - 187: 0xd7d7af, - 188: 0xd7d7d7, - 189: 0xd7d7ff, - 190: 0xd7ff00, - 191: 0xd7ff5f, - 192: 0xd7ff87, - 193: 0xd7ffaf, - 194: 0xd7ffd7, - 195: 0xd7ffff, - 196: 0xff0000, - 197: 0xff005f, - 198: 0xff0087, - 199: 0xff00af, - 200: 0xff00d7, - 201: 0xff00ff, - 202: 0xff5f00, - 203: 0xff5f5f, - 204: 0xff5f87, - 205: 0xff5faf, - 206: 0xff5fd7, - 207: 0xff5fff, - 208: 0xff8700, - 209: 0xff875f, - 210: 0xff8787, - 211: 0xff87af, - 212: 0xff87d7, - 213: 0xff87ff, - 214: 0xffaf00, - 215: 0xffaf5f, - 216: 0xffaf87, - 217: 0xffafaf, - 218: 0xffafd7, - 219: 0xffafff, - 220: 0xffd700, - 221: 0xffd75f, - 222: 0xffd787, - 223: 0xffd7af, - 224: 0xffd7d7, - 225: 0xffd7ff, - 226: 0xffff00, - 227: 0xffff5f, - 228: 0xffff87, - 229: 0xffffaf, - 230: 0xffffd7, - 231: 0xffffff, - 232: 0x080808, - 233: 0x121212, - 234: 0x1c1c1c, - 235: 0x262626, - 236: 0x303030, - 237: 0x3a3a3a, - 238: 0x444444, - 239: 0x4e4e4e, - 240: 0x585858, - 241: 0x626262, - 242: 0x6c6c6c, - 243: 0x767676, - 244: 0x808080, - 245: 0x8a8a8a, - 246: 0x949494, - 247: 0x9e9e9e, - 248: 0xa8a8a8, - 249: 0xb2b2b2, - 250: 0xbcbcbc, - 251: 0xc6c6c6, - 252: 0xd0d0d0, - 253: 0xdadada, - 254: 0xe4e4e4, - 255: 0xeeeeee, -} - -// `\033]0;TITLESTR\007` -func doTitleSequence(er *bytes.Reader) error { - var c byte - var err error - - c, err = er.ReadByte() - if err != nil { - return err - } - if c != '0' && c != '2' { - return nil - } - c, err = er.ReadByte() - if err != nil { - return err - } - if c != ';' { - return nil - } - title := make([]byte, 0, 80) - for { - c, err = er.ReadByte() - if err != nil { - return err - } - if c == 0x07 || c == '\n' { - break - } - title = append(title, c) - } - if len(title) > 0 { - title8, err := syscall.UTF16PtrFromString(string(title)) - if err == nil { - procSetConsoleTitle.Call(uintptr(unsafe.Pointer(title8))) - } - } - return nil -} - -// Write write data on console -func (w *Writer) Write(data []byte) (n int, err error) { - var csbi consoleScreenBufferInfo - procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) - - handle := w.handle - - var er *bytes.Reader - if w.rest.Len() > 0 { - var rest bytes.Buffer - w.rest.WriteTo(&rest) - w.rest.Reset() - rest.Write(data) - er = bytes.NewReader(rest.Bytes()) - } else { - er = bytes.NewReader(data) - } - var bw [1]byte -loop: - for { - c1, err := er.ReadByte() - if err != nil { - break loop - } - if c1 != 0x1b { - bw[0] = c1 - w.out.Write(bw[:]) - continue - } - c2, err := er.ReadByte() - if err != nil { - break loop - } - - switch c2 { - case '>': - continue - case ']': - w.rest.WriteByte(c1) - w.rest.WriteByte(c2) - er.WriteTo(&w.rest) - if bytes.IndexByte(w.rest.Bytes(), 0x07) == -1 { - break loop - } - er = bytes.NewReader(w.rest.Bytes()[2:]) - err := doTitleSequence(er) - if err != nil { - break loop - } - w.rest.Reset() - continue - // https://github.com/mattn/go-colorable/issues/27 - case '7': - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - w.oldpos = csbi.cursorPosition - continue - case '8': - procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&w.oldpos))) - continue - case 0x5b: - // execute part after switch - default: - continue - } - - w.rest.WriteByte(c1) - w.rest.WriteByte(c2) - er.WriteTo(&w.rest) - - var buf bytes.Buffer - var m byte - for i, c := range w.rest.Bytes()[2:] { - if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' { - m = c - er = bytes.NewReader(w.rest.Bytes()[2+i+1:]) - w.rest.Reset() - break - } - buf.Write([]byte(string(c))) - } - if m == 0 { - break loop - } - - switch m { - case 'A': - n, err = strconv.Atoi(buf.String()) - if err != nil { - continue - } - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - csbi.cursorPosition.y -= short(n) - procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) - case 'B': - n, err = strconv.Atoi(buf.String()) - if err != nil { - continue - } - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - csbi.cursorPosition.y += short(n) - procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) - case 'C': - n, err = strconv.Atoi(buf.String()) - if err != nil { - continue - } - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - csbi.cursorPosition.x += short(n) - procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) - case 'D': - n, err = strconv.Atoi(buf.String()) - if err != nil { - continue - } - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - csbi.cursorPosition.x -= short(n) - if csbi.cursorPosition.x < 0 { - csbi.cursorPosition.x = 0 - } - procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) - case 'E': - n, err = strconv.Atoi(buf.String()) - if err != nil { - continue - } - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - csbi.cursorPosition.x = 0 - csbi.cursorPosition.y += short(n) - procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) - case 'F': - n, err = strconv.Atoi(buf.String()) - if err != nil { - continue - } - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - csbi.cursorPosition.x = 0 - csbi.cursorPosition.y -= short(n) - procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) - case 'G': - n, err = strconv.Atoi(buf.String()) - if err != nil { - continue - } - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - csbi.cursorPosition.x = short(n - 1) - procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) - case 'H', 'f': - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - if buf.Len() > 0 { - token := strings.Split(buf.String(), ";") - switch len(token) { - case 1: - n1, err := strconv.Atoi(token[0]) - if err != nil { - continue - } - csbi.cursorPosition.y = short(n1 - 1) - case 2: - n1, err := strconv.Atoi(token[0]) - if err != nil { - continue - } - n2, err := strconv.Atoi(token[1]) - if err != nil { - continue - } - csbi.cursorPosition.x = short(n2 - 1) - csbi.cursorPosition.y = short(n1 - 1) - } - } else { - csbi.cursorPosition.y = 0 - } - procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) - case 'J': - n := 0 - if buf.Len() > 0 { - n, err = strconv.Atoi(buf.String()) - if err != nil { - continue - } - } - var count, written dword - var cursor coord - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - switch n { - case 0: - cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y} - count = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.size.y-csbi.cursorPosition.y)*dword(csbi.size.x) - case 1: - cursor = coord{x: csbi.window.left, y: csbi.window.top} - count = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.window.top-csbi.cursorPosition.y)*dword(csbi.size.x) - case 2: - cursor = coord{x: csbi.window.left, y: csbi.window.top} - count = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.size.y-csbi.cursorPosition.y)*dword(csbi.size.x) - } - procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) - procFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) - case 'K': - n := 0 - if buf.Len() > 0 { - n, err = strconv.Atoi(buf.String()) - if err != nil { - continue - } - } - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - var cursor coord - var count, written dword - switch n { - case 0: - cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y} - count = dword(csbi.size.x - csbi.cursorPosition.x) - case 1: - cursor = coord{x: csbi.window.left, y: csbi.cursorPosition.y} - count = dword(csbi.size.x - csbi.cursorPosition.x) - case 2: - cursor = coord{x: csbi.window.left, y: csbi.cursorPosition.y} - count = dword(csbi.size.x) - } - procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) - procFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) - case 'm': - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - attr := csbi.attributes - cs := buf.String() - if cs == "" { - procSetConsoleTextAttribute.Call(uintptr(handle), uintptr(w.oldattr)) - continue - } - token := strings.Split(cs, ";") - for i := 0; i < len(token); i++ { - ns := token[i] - if n, err = strconv.Atoi(ns); err == nil { - switch { - case n == 0 || n == 100: - attr = w.oldattr - case 1 <= n && n <= 5: - attr |= foregroundIntensity - case n == 7: - attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) - case n == 22 || n == 25: - attr |= foregroundIntensity - case n == 27: - attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) - case 30 <= n && n <= 37: - attr &= backgroundMask - if (n-30)&1 != 0 { - attr |= foregroundRed - } - if (n-30)&2 != 0 { - attr |= foregroundGreen - } - if (n-30)&4 != 0 { - attr |= foregroundBlue - } - case n == 38: // set foreground color. - if i < len(token)-2 && (token[i+1] == "5" || token[i+1] == "05") { - if n256, err := strconv.Atoi(token[i+2]); err == nil { - if n256foreAttr == nil { - n256setup() - } - attr &= backgroundMask - attr |= n256foreAttr[n256] - i += 2 - } - } else if len(token) == 5 && token[i+1] == "2" { - var r, g, b int - r, _ = strconv.Atoi(token[i+2]) - g, _ = strconv.Atoi(token[i+3]) - b, _ = strconv.Atoi(token[i+4]) - i += 4 - if r > 127 { - attr |= foregroundRed - } - if g > 127 { - attr |= foregroundGreen - } - if b > 127 { - attr |= foregroundBlue - } - } else { - attr = attr & (w.oldattr & backgroundMask) - } - case n == 39: // reset foreground color. - attr &= backgroundMask - attr |= w.oldattr & foregroundMask - case 40 <= n && n <= 47: - attr &= foregroundMask - if (n-40)&1 != 0 { - attr |= backgroundRed - } - if (n-40)&2 != 0 { - attr |= backgroundGreen - } - if (n-40)&4 != 0 { - attr |= backgroundBlue - } - case n == 48: // set background color. - if i < len(token)-2 && token[i+1] == "5" { - if n256, err := strconv.Atoi(token[i+2]); err == nil { - if n256backAttr == nil { - n256setup() - } - attr &= foregroundMask - attr |= n256backAttr[n256] - i += 2 - } - } else if len(token) == 5 && token[i+1] == "2" { - var r, g, b int - r, _ = strconv.Atoi(token[i+2]) - g, _ = strconv.Atoi(token[i+3]) - b, _ = strconv.Atoi(token[i+4]) - i += 4 - if r > 127 { - attr |= backgroundRed - } - if g > 127 { - attr |= backgroundGreen - } - if b > 127 { - attr |= backgroundBlue - } - } else { - attr = attr & (w.oldattr & foregroundMask) - } - case n == 49: // reset foreground color. - attr &= foregroundMask - attr |= w.oldattr & backgroundMask - case 90 <= n && n <= 97: - attr = (attr & backgroundMask) - attr |= foregroundIntensity - if (n-90)&1 != 0 { - attr |= foregroundRed - } - if (n-90)&2 != 0 { - attr |= foregroundGreen - } - if (n-90)&4 != 0 { - attr |= foregroundBlue - } - case 100 <= n && n <= 107: - attr = (attr & foregroundMask) - attr |= backgroundIntensity - if (n-100)&1 != 0 { - attr |= backgroundRed - } - if (n-100)&2 != 0 { - attr |= backgroundGreen - } - if (n-100)&4 != 0 { - attr |= backgroundBlue - } - } - procSetConsoleTextAttribute.Call(uintptr(handle), uintptr(attr)) - } - } - case 'h': - var ci consoleCursorInfo - cs := buf.String() - if cs == "5>" { - procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) - ci.visible = 0 - procSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) - } else if cs == "?25" { - procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) - ci.visible = 1 - procSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) - } else if cs == "?1049" { - if w.althandle == 0 { - h, _, _ := procCreateConsoleScreenBuffer.Call(uintptr(genericRead|genericWrite), 0, 0, uintptr(consoleTextmodeBuffer), 0, 0) - w.althandle = syscall.Handle(h) - if w.althandle != 0 { - handle = w.althandle - } - } - } - case 'l': - var ci consoleCursorInfo - cs := buf.String() - if cs == "5>" { - procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) - ci.visible = 1 - procSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) - } else if cs == "?25" { - procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) - ci.visible = 0 - procSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) - } else if cs == "?1049" { - if w.althandle != 0 { - syscall.CloseHandle(w.althandle) - w.althandle = 0 - handle = w.handle - } - } - case 's': - procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - w.oldpos = csbi.cursorPosition - case 'u': - procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&w.oldpos))) - } - } - - return len(data), nil -} - -type consoleColor struct { - rgb int - red bool - green bool - blue bool - intensity bool -} - -func (c consoleColor) foregroundAttr() (attr word) { - if c.red { - attr |= foregroundRed - } - if c.green { - attr |= foregroundGreen - } - if c.blue { - attr |= foregroundBlue - } - if c.intensity { - attr |= foregroundIntensity - } - return -} - -func (c consoleColor) backgroundAttr() (attr word) { - if c.red { - attr |= backgroundRed - } - if c.green { - attr |= backgroundGreen - } - if c.blue { - attr |= backgroundBlue - } - if c.intensity { - attr |= backgroundIntensity - } - return -} - -var color16 = []consoleColor{ - {0x000000, false, false, false, false}, - {0x000080, false, false, true, false}, - {0x008000, false, true, false, false}, - {0x008080, false, true, true, false}, - {0x800000, true, false, false, false}, - {0x800080, true, false, true, false}, - {0x808000, true, true, false, false}, - {0xc0c0c0, true, true, true, false}, - {0x808080, false, false, false, true}, - {0x0000ff, false, false, true, true}, - {0x00ff00, false, true, false, true}, - {0x00ffff, false, true, true, true}, - {0xff0000, true, false, false, true}, - {0xff00ff, true, false, true, true}, - {0xffff00, true, true, false, true}, - {0xffffff, true, true, true, true}, -} - -type hsv struct { - h, s, v float32 -} - -func (a hsv) dist(b hsv) float32 { - dh := a.h - b.h - switch { - case dh > 0.5: - dh = 1 - dh - case dh < -0.5: - dh = -1 - dh - } - ds := a.s - b.s - dv := a.v - b.v - return float32(math.Sqrt(float64(dh*dh + ds*ds + dv*dv))) -} - -func toHSV(rgb int) hsv { - r, g, b := float32((rgb&0xFF0000)>>16)/256.0, - float32((rgb&0x00FF00)>>8)/256.0, - float32(rgb&0x0000FF)/256.0 - min, max := minmax3f(r, g, b) - h := max - min - if h > 0 { - if max == r { - h = (g - b) / h - if h < 0 { - h += 6 - } - } else if max == g { - h = 2 + (b-r)/h - } else { - h = 4 + (r-g)/h - } - } - h /= 6.0 - s := max - min - if max != 0 { - s /= max - } - v := max - return hsv{h: h, s: s, v: v} -} - -type hsvTable []hsv - -func toHSVTable(rgbTable []consoleColor) hsvTable { - t := make(hsvTable, len(rgbTable)) - for i, c := range rgbTable { - t[i] = toHSV(c.rgb) - } - return t -} - -func (t hsvTable) find(rgb int) consoleColor { - hsv := toHSV(rgb) - n := 7 - l := float32(5.0) - for i, p := range t { - d := hsv.dist(p) - if d < l { - l, n = d, i - } - } - return color16[n] -} - -func minmax3f(a, b, c float32) (min, max float32) { - if a < b { - if b < c { - return a, c - } else if a < c { - return a, b - } else { - return c, b - } - } else { - if a < c { - return b, c - } else if b < c { - return b, a - } else { - return c, a - } - } -} - -var n256foreAttr []word -var n256backAttr []word - -func n256setup() { - n256foreAttr = make([]word, 256) - n256backAttr = make([]word, 256) - t := toHSVTable(color16) - for i, rgb := range color256 { - c := t.find(rgb) - n256foreAttr[i] = c.foregroundAttr() - n256backAttr[i] = c.backgroundAttr() - } -} diff --git a/vendor/github.com/mattn/go-colorable/go.mod b/vendor/github.com/mattn/go-colorable/go.mod deleted file mode 100644 index ef3ca9d4c3..0000000000 --- a/vendor/github.com/mattn/go-colorable/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/mattn/go-colorable - -require github.com/mattn/go-isatty v0.0.8 diff --git a/vendor/github.com/mattn/go-colorable/go.sum b/vendor/github.com/mattn/go-colorable/go.sum deleted file mode 100644 index 2c12960ec7..0000000000 --- a/vendor/github.com/mattn/go-colorable/go.sum +++ /dev/null @@ -1,4 +0,0 @@ -github.com/mattn/go-isatty v0.0.5 h1:tHXDdz1cpzGaovsTB+TVB8q90WEokoVmfMqoVcrLUgw= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/vendor/github.com/mattn/go-colorable/noncolorable.go b/vendor/github.com/mattn/go-colorable/noncolorable.go deleted file mode 100644 index 9721e16f4b..0000000000 --- a/vendor/github.com/mattn/go-colorable/noncolorable.go +++ /dev/null @@ -1,55 +0,0 @@ -package colorable - -import ( - "bytes" - "io" -) - -// NonColorable hold writer but remove escape sequence. -type NonColorable struct { - out io.Writer -} - -// NewNonColorable return new instance of Writer which remove escape sequence from Writer. -func NewNonColorable(w io.Writer) io.Writer { - return &NonColorable{out: w} -} - -// Write write data on console -func (w *NonColorable) Write(data []byte) (n int, err error) { - er := bytes.NewReader(data) - var bw [1]byte -loop: - for { - c1, err := er.ReadByte() - if err != nil { - break loop - } - if c1 != 0x1b { - bw[0] = c1 - w.out.Write(bw[:]) - continue - } - c2, err := er.ReadByte() - if err != nil { - break loop - } - if c2 != 0x5b { - continue - } - - var buf bytes.Buffer - for { - c, err := er.ReadByte() - if err != nil { - break loop - } - if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' { - break - } - buf.Write([]byte(string(c))) - } - } - - return len(data), nil -} diff --git a/vendor/github.com/mattn/go-isatty/.travis.yml b/vendor/github.com/mattn/go-isatty/.travis.yml deleted file mode 100644 index 5597e026dd..0000000000 --- a/vendor/github.com/mattn/go-isatty/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -language: go -go: - - tip - -os: - - linux - - osx - -before_install: - - go get github.com/mattn/goveralls - - go get golang.org/x/tools/cmd/cover -script: - - $HOME/gopath/bin/goveralls -repotoken 3gHdORO5k5ziZcWMBxnd9LrMZaJs8m9x5 diff --git a/vendor/github.com/mattn/go-isatty/BUILD.bazel b/vendor/github.com/mattn/go-isatty/BUILD.bazel deleted file mode 100644 index eb7e37cec1..0000000000 --- a/vendor/github.com/mattn/go-isatty/BUILD.bazel +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "isatty_android.go", - "isatty_bsd.go", - "isatty_others.go", - "isatty_solaris.go", - "isatty_tcgets.go", - "isatty_windows.go", - ], - importmap = "k8s.io/kops/vendor/github.com/mattn/go-isatty", - importpath = "github.com/mattn/go-isatty", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) diff --git a/vendor/github.com/mattn/go-isatty/LICENSE b/vendor/github.com/mattn/go-isatty/LICENSE deleted file mode 100644 index 65dc692b6b..0000000000 --- a/vendor/github.com/mattn/go-isatty/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -Copyright (c) Yasuhiro MATSUMOTO - -MIT License (Expat) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/mattn/go-isatty/README.md b/vendor/github.com/mattn/go-isatty/README.md deleted file mode 100644 index 1e69004bb0..0000000000 --- a/vendor/github.com/mattn/go-isatty/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# go-isatty - -[![Godoc Reference](https://godoc.org/github.com/mattn/go-isatty?status.svg)](http://godoc.org/github.com/mattn/go-isatty) -[![Build Status](https://travis-ci.org/mattn/go-isatty.svg?branch=master)](https://travis-ci.org/mattn/go-isatty) -[![Coverage Status](https://coveralls.io/repos/github/mattn/go-isatty/badge.svg?branch=master)](https://coveralls.io/github/mattn/go-isatty?branch=master) -[![Go Report Card](https://goreportcard.com/badge/mattn/go-isatty)](https://goreportcard.com/report/mattn/go-isatty) - -isatty for golang - -## Usage - -```go -package main - -import ( - "fmt" - "github.com/mattn/go-isatty" - "os" -) - -func main() { - if isatty.IsTerminal(os.Stdout.Fd()) { - fmt.Println("Is Terminal") - } else if isatty.IsCygwinTerminal(os.Stdout.Fd()) { - fmt.Println("Is Cygwin/MSYS2 Terminal") - } else { - fmt.Println("Is Not Terminal") - } -} -``` - -## Installation - -``` -$ go get github.com/mattn/go-isatty -``` - -## License - -MIT - -## Author - -Yasuhiro Matsumoto (a.k.a mattn) - -## Thanks - -* k-takata: base idea for IsCygwinTerminal - - https://github.com/k-takata/go-iscygpty diff --git a/vendor/github.com/mattn/go-isatty/doc.go b/vendor/github.com/mattn/go-isatty/doc.go deleted file mode 100644 index 17d4f90ebc..0000000000 --- a/vendor/github.com/mattn/go-isatty/doc.go +++ /dev/null @@ -1,2 +0,0 @@ -// Package isatty implements interface to isatty -package isatty diff --git a/vendor/github.com/mattn/go-isatty/go.mod b/vendor/github.com/mattn/go-isatty/go.mod deleted file mode 100644 index f310320c33..0000000000 --- a/vendor/github.com/mattn/go-isatty/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/mattn/go-isatty - -require golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 diff --git a/vendor/github.com/mattn/go-isatty/go.sum b/vendor/github.com/mattn/go-isatty/go.sum deleted file mode 100644 index 426c8973c0..0000000000 --- a/vendor/github.com/mattn/go-isatty/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/vendor/github.com/mattn/go-isatty/isatty_android.go b/vendor/github.com/mattn/go-isatty/isatty_android.go deleted file mode 100644 index d3567cb5bf..0000000000 --- a/vendor/github.com/mattn/go-isatty/isatty_android.go +++ /dev/null @@ -1,23 +0,0 @@ -// +build android - -package isatty - -import ( - "syscall" - "unsafe" -) - -const ioctlReadTermios = syscall.TCGETS - -// IsTerminal return true if the file descriptor is terminal. -func IsTerminal(fd uintptr) bool { - var termios syscall.Termios - _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) - return err == 0 -} - -// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 -// terminal. This is also always false on this environment. -func IsCygwinTerminal(fd uintptr) bool { - return false -} diff --git a/vendor/github.com/mattn/go-isatty/isatty_bsd.go b/vendor/github.com/mattn/go-isatty/isatty_bsd.go deleted file mode 100644 index 07e93039db..0000000000 --- a/vendor/github.com/mattn/go-isatty/isatty_bsd.go +++ /dev/null @@ -1,24 +0,0 @@ -// +build darwin freebsd openbsd netbsd dragonfly -// +build !appengine - -package isatty - -import ( - "syscall" - "unsafe" -) - -const ioctlReadTermios = syscall.TIOCGETA - -// IsTerminal return true if the file descriptor is terminal. -func IsTerminal(fd uintptr) bool { - var termios syscall.Termios - _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) - return err == 0 -} - -// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 -// terminal. This is also always false on this environment. -func IsCygwinTerminal(fd uintptr) bool { - return false -} diff --git a/vendor/github.com/mattn/go-isatty/isatty_others.go b/vendor/github.com/mattn/go-isatty/isatty_others.go deleted file mode 100644 index ff714a3761..0000000000 --- a/vendor/github.com/mattn/go-isatty/isatty_others.go +++ /dev/null @@ -1,15 +0,0 @@ -// +build appengine js nacl - -package isatty - -// IsTerminal returns true if the file descriptor is terminal which -// is always false on js and appengine classic which is a sandboxed PaaS. -func IsTerminal(fd uintptr) bool { - return false -} - -// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2 -// terminal. This is also always false on this environment. -func IsCygwinTerminal(fd uintptr) bool { - return false -} diff --git a/vendor/github.com/mattn/go-isatty/isatty_solaris.go b/vendor/github.com/mattn/go-isatty/isatty_solaris.go deleted file mode 100644 index bdd5c79a07..0000000000 --- a/vendor/github.com/mattn/go-isatty/isatty_solaris.go +++ /dev/null @@ -1,22 +0,0 @@ -// +build solaris -// +build !appengine - -package isatty - -import ( - "golang.org/x/sys/unix" -) - -// IsTerminal returns true if the given file descriptor is a terminal. -// see: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c -func IsTerminal(fd uintptr) bool { - var termio unix.Termio - err := unix.IoctlSetTermio(int(fd), unix.TCGETA, &termio) - return err == nil -} - -// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 -// terminal. This is also always false on this environment. -func IsCygwinTerminal(fd uintptr) bool { - return false -} diff --git a/vendor/github.com/mattn/go-isatty/isatty_tcgets.go b/vendor/github.com/mattn/go-isatty/isatty_tcgets.go deleted file mode 100644 index 453b025d0d..0000000000 --- a/vendor/github.com/mattn/go-isatty/isatty_tcgets.go +++ /dev/null @@ -1,19 +0,0 @@ -// +build linux aix -// +build !appengine -// +build !android - -package isatty - -import "golang.org/x/sys/unix" - -// IsTerminal return true if the file descriptor is terminal. -func IsTerminal(fd uintptr) bool { - _, err := unix.IoctlGetTermios(int(fd), unix.TCGETS) - return err == nil -} - -// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 -// terminal. This is also always false on this environment. -func IsCygwinTerminal(fd uintptr) bool { - return false -} diff --git a/vendor/github.com/mattn/go-isatty/isatty_windows.go b/vendor/github.com/mattn/go-isatty/isatty_windows.go deleted file mode 100644 index af51cbcaa4..0000000000 --- a/vendor/github.com/mattn/go-isatty/isatty_windows.go +++ /dev/null @@ -1,94 +0,0 @@ -// +build windows -// +build !appengine - -package isatty - -import ( - "strings" - "syscall" - "unicode/utf16" - "unsafe" -) - -const ( - fileNameInfo uintptr = 2 - fileTypePipe = 3 -) - -var ( - kernel32 = syscall.NewLazyDLL("kernel32.dll") - procGetConsoleMode = kernel32.NewProc("GetConsoleMode") - procGetFileInformationByHandleEx = kernel32.NewProc("GetFileInformationByHandleEx") - procGetFileType = kernel32.NewProc("GetFileType") -) - -func init() { - // Check if GetFileInformationByHandleEx is available. - if procGetFileInformationByHandleEx.Find() != nil { - procGetFileInformationByHandleEx = nil - } -} - -// IsTerminal return true if the file descriptor is terminal. -func IsTerminal(fd uintptr) bool { - var st uint32 - r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0) - return r != 0 && e == 0 -} - -// Check pipe name is used for cygwin/msys2 pty. -// Cygwin/MSYS2 PTY has a name like: -// \{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master -func isCygwinPipeName(name string) bool { - token := strings.Split(name, "-") - if len(token) < 5 { - return false - } - - if token[0] != `\msys` && token[0] != `\cygwin` { - return false - } - - if token[1] == "" { - return false - } - - if !strings.HasPrefix(token[2], "pty") { - return false - } - - if token[3] != `from` && token[3] != `to` { - return false - } - - if token[4] != "master" { - return false - } - - return true -} - -// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2 -// terminal. -func IsCygwinTerminal(fd uintptr) bool { - if procGetFileInformationByHandleEx == nil { - return false - } - - // Cygwin/msys's pty is a pipe. - ft, _, e := syscall.Syscall(procGetFileType.Addr(), 1, fd, 0, 0) - if ft != fileTypePipe || e != 0 { - return false - } - - var buf [2 + syscall.MAX_PATH]uint16 - r, _, e := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), - 4, fd, fileNameInfo, uintptr(unsafe.Pointer(&buf)), - uintptr(len(buf)*2), 0, 0) - if r == 0 || e != 0 { - return false - } - - l := *(*uint32)(unsafe.Pointer(&buf)) - return isCygwinPipeName(string(utf16.Decode(buf[2 : 2+l/2]))) -} diff --git a/vendor/golang.org/x/sync/AUTHORS b/vendor/golang.org/x/sync/AUTHORS deleted file mode 100644 index 15167cd746..0000000000 --- a/vendor/golang.org/x/sync/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/sync/CONTRIBUTORS b/vendor/golang.org/x/sync/CONTRIBUTORS deleted file mode 100644 index 1c4577e968..0000000000 --- a/vendor/golang.org/x/sync/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/sync/LICENSE b/vendor/golang.org/x/sync/LICENSE deleted file mode 100644 index 6a66aea5ea..0000000000 --- a/vendor/golang.org/x/sync/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/sync/PATENTS b/vendor/golang.org/x/sync/PATENTS deleted file mode 100644 index 733099041f..0000000000 --- a/vendor/golang.org/x/sync/PATENTS +++ /dev/null @@ -1,22 +0,0 @@ -Additional IP Rights Grant (Patents) - -"This implementation" means the copyrightable works distributed by -Google as part of the Go project. - -Google hereby grants to You a perpetual, worldwide, non-exclusive, -no-charge, royalty-free, irrevocable (except as stated in this section) -patent license to make, have made, use, offer to sell, sell, import, -transfer and otherwise run, modify and propagate the contents of this -implementation of Go, where such license applies only to those patent -claims, both currently owned or controlled by Google and acquired in -the future, licensable by Google that are necessarily infringed by this -implementation of Go. This grant does not include claims that would be -infringed only as a consequence of further modification of this -implementation. If you or your agent or exclusive licensee institute or -order or agree to the institution of patent litigation against any -entity (including a cross-claim or counterclaim in a lawsuit) alleging -that this implementation of Go or any code incorporated within this -implementation of Go constitutes direct or contributory patent -infringement, or inducement of patent infringement, then any patent -rights granted to you under this License for this implementation of Go -shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/sync/errgroup/BUILD.bazel b/vendor/golang.org/x/sync/errgroup/BUILD.bazel deleted file mode 100644 index f811c43fe8..0000000000 --- a/vendor/golang.org/x/sync/errgroup/BUILD.bazel +++ /dev/null @@ -1,9 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["errgroup.go"], - importmap = "k8s.io/kops/vendor/golang.org/x/sync/errgroup", - importpath = "golang.org/x/sync/errgroup", - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/sync/errgroup/errgroup.go b/vendor/golang.org/x/sync/errgroup/errgroup.go deleted file mode 100644 index 9857fe53d3..0000000000 --- a/vendor/golang.org/x/sync/errgroup/errgroup.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package errgroup provides synchronization, error propagation, and Context -// cancelation for groups of goroutines working on subtasks of a common task. -package errgroup - -import ( - "context" - "sync" -) - -// A Group is a collection of goroutines working on subtasks that are part of -// the same overall task. -// -// A zero Group is valid and does not cancel on error. -type Group struct { - cancel func() - - wg sync.WaitGroup - - errOnce sync.Once - err error -} - -// WithContext returns a new Group and an associated Context derived from ctx. -// -// The derived Context is canceled the first time a function passed to Go -// returns a non-nil error or the first time Wait returns, whichever occurs -// first. -func WithContext(ctx context.Context) (*Group, context.Context) { - ctx, cancel := context.WithCancel(ctx) - return &Group{cancel: cancel}, ctx -} - -// Wait blocks until all function calls from the Go method have returned, then -// returns the first non-nil error (if any) from them. -func (g *Group) Wait() error { - g.wg.Wait() - if g.cancel != nil { - g.cancel() - } - return g.err -} - -// Go calls the given function in a new goroutine. -// -// The first call to return a non-nil error cancels the group; its error will be -// returned by Wait. -func (g *Group) Go(f func() error) { - g.wg.Add(1) - - go func() { - defer g.wg.Done() - - if err := f(); err != nil { - g.errOnce.Do(func() { - g.err = err - if g.cancel != nil { - g.cancel() - } - }) - } - }() -} diff --git a/vendor/golang.org/x/tools/cmd/goimports/BUILD.bazel b/vendor/golang.org/x/tools/cmd/goimports/BUILD.bazel deleted file mode 100644 index 8566c216ec..0000000000 --- a/vendor/golang.org/x/tools/cmd/goimports/BUILD.bazel +++ /dev/null @@ -1,20 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "goimports.go", - "goimports_gc.go", - ], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/cmd/goimports", - importpath = "golang.org/x/tools/cmd/goimports", - visibility = ["//visibility:private"], - deps = ["//vendor/golang.org/x/tools/internal/imports:go_default_library"], -) - -go_binary( - name = "goimports", - embed = [":go_default_library"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/cmd/goimports/doc.go b/vendor/golang.org/x/tools/cmd/goimports/doc.go deleted file mode 100644 index 7033e4d4cf..0000000000 --- a/vendor/golang.org/x/tools/cmd/goimports/doc.go +++ /dev/null @@ -1,43 +0,0 @@ -/* - -Command goimports updates your Go import lines, -adding missing ones and removing unreferenced ones. - - $ go get golang.org/x/tools/cmd/goimports - -In addition to fixing imports, goimports also formats -your code in the same style as gofmt so it can be used -as a replacement for your editor's gofmt-on-save hook. - -For emacs, make sure you have the latest go-mode.el: - https://github.com/dominikh/go-mode.el -Then in your .emacs file: - (setq gofmt-command "goimports") - (add-hook 'before-save-hook 'gofmt-before-save) - -For vim, set "gofmt_command" to "goimports": - https://golang.org/change/39c724dd7f252 - https://golang.org/wiki/IDEsAndTextEditorPlugins - etc - -For GoSublime, follow the steps described here: - http://michaelwhatcott.com/gosublime-goimports/ - -For other editors, you probably know what to do. - -To exclude directories in your $GOPATH from being scanned for Go -files, goimports respects a configuration file at -$GOPATH/src/.goimportsignore which may contain blank lines, comment -lines (beginning with '#'), or lines naming a directory relative to -the configuration file to ignore when scanning. No globbing or regex -patterns are allowed. Use the "-v" verbose flag to verify it's -working and see what goimports is doing. - -File bugs or feature requests at: - - https://golang.org/issues/new?title=x/tools/cmd/goimports:+ - -Happy hacking! - -*/ -package main // import "golang.org/x/tools/cmd/goimports" diff --git a/vendor/golang.org/x/tools/cmd/goimports/goimports.go b/vendor/golang.org/x/tools/cmd/goimports/goimports.go deleted file mode 100644 index f177b2d9a4..0000000000 --- a/vendor/golang.org/x/tools/cmd/goimports/goimports.go +++ /dev/null @@ -1,377 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -import ( - "bufio" - "bytes" - "errors" - "flag" - "fmt" - "go/scanner" - "io" - "io/ioutil" - "log" - "os" - "os/exec" - "path/filepath" - "runtime" - "runtime/pprof" - "strings" - - "golang.org/x/tools/internal/imports" -) - -var ( - // main operation modes - list = flag.Bool("l", false, "list files whose formatting differs from goimport's") - write = flag.Bool("w", false, "write result to (source) file instead of stdout") - doDiff = flag.Bool("d", false, "display diffs instead of rewriting files") - srcdir = flag.String("srcdir", "", "choose imports as if source code is from `dir`. When operating on a single file, dir may instead be the complete file name.") - - verbose bool // verbose logging - - cpuProfile = flag.String("cpuprofile", "", "CPU profile output") - memProfile = flag.String("memprofile", "", "memory profile output") - memProfileRate = flag.Int("memrate", 0, "if > 0, sets runtime.MemProfileRate") - - options = &imports.Options{ - TabWidth: 8, - TabIndent: true, - Comments: true, - Fragment: true, - Env: &imports.ProcessEnv{}, - } - exitCode = 0 -) - -func init() { - flag.BoolVar(&options.AllErrors, "e", false, "report all errors (not just the first 10 on different lines)") - flag.StringVar(&options.Env.LocalPrefix, "local", "", "put imports beginning with this string after 3rd-party packages; comma-separated list") - flag.BoolVar(&options.FormatOnly, "format-only", false, "if true, don't fix imports and only format. In this mode, goimports is effectively gofmt, with the addition that imports are grouped into sections.") -} - -func report(err error) { - scanner.PrintError(os.Stderr, err) - exitCode = 2 -} - -func usage() { - fmt.Fprintf(os.Stderr, "usage: goimports [flags] [path ...]\n") - flag.PrintDefaults() - os.Exit(2) -} - -func isGoFile(f os.FileInfo) bool { - // ignore non-Go files - name := f.Name() - return !f.IsDir() && !strings.HasPrefix(name, ".") && strings.HasSuffix(name, ".go") -} - -// argumentType is which mode goimports was invoked as. -type argumentType int - -const ( - // fromStdin means the user is piping their source into goimports. - fromStdin argumentType = iota - - // singleArg is the common case from editors, when goimports is run on - // a single file. - singleArg - - // multipleArg is when the user ran "goimports file1.go file2.go" - // or ran goimports on a directory tree. - multipleArg -) - -func processFile(filename string, in io.Reader, out io.Writer, argType argumentType) error { - opt := options - if argType == fromStdin { - nopt := *options - nopt.Fragment = true - opt = &nopt - } - - if in == nil { - f, err := os.Open(filename) - if err != nil { - return err - } - defer f.Close() - in = f - } - - src, err := ioutil.ReadAll(in) - if err != nil { - return err - } - - target := filename - if *srcdir != "" { - // Determine whether the provided -srcdirc is a directory or file - // and then use it to override the target. - // - // See https://github.com/dominikh/go-mode.el/issues/146 - if isFile(*srcdir) { - if argType == multipleArg { - return errors.New("-srcdir value can't be a file when passing multiple arguments or when walking directories") - } - target = *srcdir - } else if argType == singleArg && strings.HasSuffix(*srcdir, ".go") && !isDir(*srcdir) { - // For a file which doesn't exist on disk yet, but might shortly. - // e.g. user in editor opens $DIR/newfile.go and newfile.go doesn't yet exist on disk. - // The goimports on-save hook writes the buffer to a temp file - // first and runs goimports before the actual save to newfile.go. - // The editor's buffer is named "newfile.go" so that is passed to goimports as: - // goimports -srcdir=/gopath/src/pkg/newfile.go /tmp/gofmtXXXXXXXX.go - // and then the editor reloads the result from the tmp file and writes - // it to newfile.go. - target = *srcdir - } else { - // Pretend that file is from *srcdir in order to decide - // visible imports correctly. - target = filepath.Join(*srcdir, filepath.Base(filename)) - } - } - - res, err := imports.Process(target, src, opt) - if err != nil { - return err - } - - if !bytes.Equal(src, res) { - // formatting has changed - if *list { - fmt.Fprintln(out, filename) - } - if *write { - if argType == fromStdin { - // filename is "" - return errors.New("can't use -w on stdin") - } - // On Windows, we need to re-set the permissions from the file. See golang/go#38225. - var perms os.FileMode - if fi, err := os.Stat(filename); err == nil { - perms = fi.Mode() & os.ModePerm - } - err = ioutil.WriteFile(filename, res, perms) - if err != nil { - return err - } - } - if *doDiff { - if argType == fromStdin { - filename = "stdin.go" // because .orig looks silly - } - data, err := diff(src, res, filename) - if err != nil { - return fmt.Errorf("computing diff: %s", err) - } - fmt.Printf("diff -u %s %s\n", filepath.ToSlash(filename+".orig"), filepath.ToSlash(filename)) - out.Write(data) - } - } - - if !*list && !*write && !*doDiff { - _, err = out.Write(res) - } - - return err -} - -func visitFile(path string, f os.FileInfo, err error) error { - if err == nil && isGoFile(f) { - err = processFile(path, nil, os.Stdout, multipleArg) - } - if err != nil { - report(err) - } - return nil -} - -func walkDir(path string) { - filepath.Walk(path, visitFile) -} - -func main() { - runtime.GOMAXPROCS(runtime.NumCPU()) - - // call gofmtMain in a separate function - // so that it can use defer and have them - // run before the exit. - gofmtMain() - os.Exit(exitCode) -} - -// parseFlags parses command line flags and returns the paths to process. -// It's a var so that custom implementations can replace it in other files. -var parseFlags = func() []string { - flag.BoolVar(&verbose, "v", false, "verbose logging") - - flag.Parse() - return flag.Args() -} - -func bufferedFileWriter(dest string) (w io.Writer, close func()) { - f, err := os.Create(dest) - if err != nil { - log.Fatal(err) - } - bw := bufio.NewWriter(f) - return bw, func() { - if err := bw.Flush(); err != nil { - log.Fatalf("error flushing %v: %v", dest, err) - } - if err := f.Close(); err != nil { - log.Fatal(err) - } - } -} - -func gofmtMain() { - flag.Usage = usage - paths := parseFlags() - - if *cpuProfile != "" { - bw, flush := bufferedFileWriter(*cpuProfile) - pprof.StartCPUProfile(bw) - defer flush() - defer pprof.StopCPUProfile() - } - // doTrace is a conditionally compiled wrapper around runtime/trace. It is - // used to allow goimports to compile under gccgo, which does not support - // runtime/trace. See https://golang.org/issue/15544. - defer doTrace()() - if *memProfileRate > 0 { - runtime.MemProfileRate = *memProfileRate - bw, flush := bufferedFileWriter(*memProfile) - defer func() { - runtime.GC() // materialize all statistics - if err := pprof.WriteHeapProfile(bw); err != nil { - log.Fatal(err) - } - flush() - }() - } - - if verbose { - log.SetFlags(log.LstdFlags | log.Lmicroseconds) - options.Env.Logf = log.Printf - } - if options.TabWidth < 0 { - fmt.Fprintf(os.Stderr, "negative tabwidth %d\n", options.TabWidth) - exitCode = 2 - return - } - - if len(paths) == 0 { - if err := processFile("", os.Stdin, os.Stdout, fromStdin); err != nil { - report(err) - } - return - } - - argType := singleArg - if len(paths) > 1 { - argType = multipleArg - } - - for _, path := range paths { - switch dir, err := os.Stat(path); { - case err != nil: - report(err) - case dir.IsDir(): - walkDir(path) - default: - if err := processFile(path, nil, os.Stdout, argType); err != nil { - report(err) - } - } - } -} - -func writeTempFile(dir, prefix string, data []byte) (string, error) { - file, err := ioutil.TempFile(dir, prefix) - if err != nil { - return "", err - } - _, err = file.Write(data) - if err1 := file.Close(); err == nil { - err = err1 - } - if err != nil { - os.Remove(file.Name()) - return "", err - } - return file.Name(), nil -} - -func diff(b1, b2 []byte, filename string) (data []byte, err error) { - f1, err := writeTempFile("", "gofmt", b1) - if err != nil { - return - } - defer os.Remove(f1) - - f2, err := writeTempFile("", "gofmt", b2) - if err != nil { - return - } - defer os.Remove(f2) - - cmd := "diff" - if runtime.GOOS == "plan9" { - cmd = "/bin/ape/diff" - } - - data, err = exec.Command(cmd, "-u", f1, f2).CombinedOutput() - if len(data) > 0 { - // diff exits with a non-zero status when the files don't match. - // Ignore that failure as long as we get output. - return replaceTempFilename(data, filename) - } - return -} - -// replaceTempFilename replaces temporary filenames in diff with actual one. -// -// --- /tmp/gofmt316145376 2017-02-03 19:13:00.280468375 -0500 -// +++ /tmp/gofmt617882815 2017-02-03 19:13:00.280468375 -0500 -// ... -// -> -// --- path/to/file.go.orig 2017-02-03 19:13:00.280468375 -0500 -// +++ path/to/file.go 2017-02-03 19:13:00.280468375 -0500 -// ... -func replaceTempFilename(diff []byte, filename string) ([]byte, error) { - bs := bytes.SplitN(diff, []byte{'\n'}, 3) - if len(bs) < 3 { - return nil, fmt.Errorf("got unexpected diff for %s", filename) - } - // Preserve timestamps. - var t0, t1 []byte - if i := bytes.LastIndexByte(bs[0], '\t'); i != -1 { - t0 = bs[0][i:] - } - if i := bytes.LastIndexByte(bs[1], '\t'); i != -1 { - t1 = bs[1][i:] - } - // Always print filepath with slash separator. - f := filepath.ToSlash(filename) - bs[0] = []byte(fmt.Sprintf("--- %s%s", f+".orig", t0)) - bs[1] = []byte(fmt.Sprintf("+++ %s%s", f, t1)) - return bytes.Join(bs, []byte{'\n'}), nil -} - -// isFile reports whether name is a file. -func isFile(name string) bool { - fi, err := os.Stat(name) - return err == nil && fi.Mode().IsRegular() -} - -// isDir reports whether name is a directory. -func isDir(name string) bool { - fi, err := os.Stat(name) - return err == nil && fi.IsDir() -} diff --git a/vendor/golang.org/x/tools/cmd/goimports/goimports_gc.go b/vendor/golang.org/x/tools/cmd/goimports/goimports_gc.go deleted file mode 100644 index 21d867eaab..0000000000 --- a/vendor/golang.org/x/tools/cmd/goimports/goimports_gc.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build gc - -package main - -import ( - "flag" - "runtime/trace" -) - -var traceProfile = flag.String("trace", "", "trace profile output") - -func doTrace() func() { - if *traceProfile != "" { - bw, flush := bufferedFileWriter(*traceProfile) - trace.Start(bw) - return func() { - flush() - trace.Stop() - } - } - return func() {} -} diff --git a/vendor/golang.org/x/tools/cmd/goimports/goimports_not_gc.go b/vendor/golang.org/x/tools/cmd/goimports/goimports_not_gc.go deleted file mode 100644 index f5531ceb31..0000000000 --- a/vendor/golang.org/x/tools/cmd/goimports/goimports_not_gc.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !gc - -package main - -func doTrace() func() { - return func() {} -} diff --git a/vendor/golang.org/x/tools/go/analysis/BUILD.bazel b/vendor/golang.org/x/tools/go/analysis/BUILD.bazel deleted file mode 100644 index ed4a0022e2..0000000000 --- a/vendor/golang.org/x/tools/go/analysis/BUILD.bazel +++ /dev/null @@ -1,15 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "analysis.go", - "diagnostic.go", - "doc.go", - "validate.go", - ], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/analysis", - importpath = "golang.org/x/tools/go/analysis", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/tools/internal/analysisinternal:go_default_library"], -) diff --git a/vendor/golang.org/x/tools/go/analysis/analysis.go b/vendor/golang.org/x/tools/go/analysis/analysis.go deleted file mode 100644 index 8c9977355c..0000000000 --- a/vendor/golang.org/x/tools/go/analysis/analysis.go +++ /dev/null @@ -1,237 +0,0 @@ -package analysis - -import ( - "flag" - "fmt" - "go/ast" - "go/token" - "go/types" - "reflect" - - "golang.org/x/tools/internal/analysisinternal" -) - -// An Analyzer describes an analysis function and its options. -type Analyzer struct { - // The Name of the analyzer must be a valid Go identifier - // as it may appear in command-line flags, URLs, and so on. - Name string - - // Doc is the documentation for the analyzer. - // The part before the first "\n\n" is the title - // (no capital or period, max ~60 letters). - Doc string - - // Flags defines any flags accepted by the analyzer. - // The manner in which these flags are exposed to the user - // depends on the driver which runs the analyzer. - Flags flag.FlagSet - - // Run applies the analyzer to a package. - // It returns an error if the analyzer failed. - // - // On success, the Run function may return a result - // computed by the Analyzer; its type must match ResultType. - // The driver makes this result available as an input to - // another Analyzer that depends directly on this one (see - // Requires) when it analyzes the same package. - // - // To pass analysis results between packages (and thus - // potentially between address spaces), use Facts, which are - // serializable. - Run func(*Pass) (interface{}, error) - - // RunDespiteErrors allows the driver to invoke - // the Run method of this analyzer even on a - // package that contains parse or type errors. - RunDespiteErrors bool - - // Requires is a set of analyzers that must run successfully - // before this one on a given package. This analyzer may inspect - // the outputs produced by each analyzer in Requires. - // The graph over analyzers implied by Requires edges must be acyclic. - // - // Requires establishes a "horizontal" dependency between - // analysis passes (different analyzers, same package). - Requires []*Analyzer - - // ResultType is the type of the optional result of the Run function. - ResultType reflect.Type - - // FactTypes indicates that this analyzer imports and exports - // Facts of the specified concrete types. - // An analyzer that uses facts may assume that its import - // dependencies have been similarly analyzed before it runs. - // Facts must be pointers. - // - // FactTypes establishes a "vertical" dependency between - // analysis passes (same analyzer, different packages). - FactTypes []Fact -} - -func (a *Analyzer) String() string { return a.Name } - -func init() { - // Set the analysisinternal functions to be able to pass type errors - // to the Pass type without modifying the go/analysis API. - analysisinternal.SetTypeErrors = func(p interface{}, errors []types.Error) { - p.(*Pass).typeErrors = errors - } - analysisinternal.GetTypeErrors = func(p interface{}) []types.Error { - return p.(*Pass).typeErrors - } -} - -// A Pass provides information to the Run function that -// applies a specific analyzer to a single Go package. -// -// It forms the interface between the analysis logic and the driver -// program, and has both input and an output components. -// -// As in a compiler, one pass may depend on the result computed by another. -// -// The Run function should not call any of the Pass functions concurrently. -type Pass struct { - Analyzer *Analyzer // the identity of the current analyzer - - // syntax and type information - Fset *token.FileSet // file position information - Files []*ast.File // the abstract syntax tree of each file - OtherFiles []string // names of non-Go files of this package - Pkg *types.Package // type information about the package - TypesInfo *types.Info // type information about the syntax trees - TypesSizes types.Sizes // function for computing sizes of types - - // Report reports a Diagnostic, a finding about a specific location - // in the analyzed source code such as a potential mistake. - // It may be called by the Run function. - Report func(Diagnostic) - - // ResultOf provides the inputs to this analysis pass, which are - // the corresponding results of its prerequisite analyzers. - // The map keys are the elements of Analysis.Required, - // and the type of each corresponding value is the required - // analysis's ResultType. - ResultOf map[*Analyzer]interface{} - - // -- facts -- - - // ImportObjectFact retrieves a fact associated with obj. - // Given a value ptr of type *T, where *T satisfies Fact, - // ImportObjectFact copies the value to *ptr. - // - // ImportObjectFact panics if called after the pass is complete. - // ImportObjectFact is not concurrency-safe. - ImportObjectFact func(obj types.Object, fact Fact) bool - - // ImportPackageFact retrieves a fact associated with package pkg, - // which must be this package or one of its dependencies. - // See comments for ImportObjectFact. - ImportPackageFact func(pkg *types.Package, fact Fact) bool - - // ExportObjectFact associates a fact of type *T with the obj, - // replacing any previous fact of that type. - // - // ExportObjectFact panics if it is called after the pass is - // complete, or if obj does not belong to the package being analyzed. - // ExportObjectFact is not concurrency-safe. - ExportObjectFact func(obj types.Object, fact Fact) - - // ExportPackageFact associates a fact with the current package. - // See comments for ExportObjectFact. - ExportPackageFact func(fact Fact) - - // AllPackageFacts returns a new slice containing all package facts of the analysis's FactTypes - // in unspecified order. - // WARNING: This is an experimental API and may change in the future. - AllPackageFacts func() []PackageFact - - // AllObjectFacts returns a new slice containing all object facts of the analysis's FactTypes - // in unspecified order. - // WARNING: This is an experimental API and may change in the future. - AllObjectFacts func() []ObjectFact - - // typeErrors contains types.Errors that are associated with the pkg. - typeErrors []types.Error - - /* Further fields may be added in future. */ - // For example, suggested or applied refactorings. -} - -// PackageFact is a package together with an associated fact. -// WARNING: This is an experimental API and may change in the future. -type PackageFact struct { - Package *types.Package - Fact Fact -} - -// ObjectFact is an object together with an associated fact. -// WARNING: This is an experimental API and may change in the future. -type ObjectFact struct { - Object types.Object - Fact Fact -} - -// Reportf is a helper function that reports a Diagnostic using the -// specified position and formatted error message. -func (pass *Pass) Reportf(pos token.Pos, format string, args ...interface{}) { - msg := fmt.Sprintf(format, args...) - pass.Report(Diagnostic{Pos: pos, Message: msg}) -} - -// The Range interface provides a range. It's equivalent to and satisfied by -// ast.Node. -type Range interface { - Pos() token.Pos // position of first character belonging to the node - End() token.Pos // position of first character immediately after the node -} - -// ReportRangef is a helper function that reports a Diagnostic using the -// range provided. ast.Node values can be passed in as the range because -// they satisfy the Range interface. -func (pass *Pass) ReportRangef(rng Range, format string, args ...interface{}) { - msg := fmt.Sprintf(format, args...) - pass.Report(Diagnostic{Pos: rng.Pos(), End: rng.End(), Message: msg}) -} - -func (pass *Pass) String() string { - return fmt.Sprintf("%s@%s", pass.Analyzer.Name, pass.Pkg.Path()) -} - -// A Fact is an intermediate fact produced during analysis. -// -// Each fact is associated with a named declaration (a types.Object) or -// with a package as a whole. A single object or package may have -// multiple associated facts, but only one of any particular fact type. -// -// A Fact represents a predicate such as "never returns", but does not -// represent the subject of the predicate such as "function F" or "package P". -// -// Facts may be produced in one analysis pass and consumed by another -// analysis pass even if these are in different address spaces. -// If package P imports Q, all facts about Q produced during -// analysis of that package will be available during later analysis of P. -// Facts are analogous to type export data in a build system: -// just as export data enables separate compilation of several passes, -// facts enable "separate analysis". -// -// Each pass (a, p) starts with the set of facts produced by the -// same analyzer a applied to the packages directly imported by p. -// The analysis may add facts to the set, and they may be exported in turn. -// An analysis's Run function may retrieve facts by calling -// Pass.Import{Object,Package}Fact and update them using -// Pass.Export{Object,Package}Fact. -// -// A fact is logically private to its Analysis. To pass values -// between different analyzers, use the results mechanism; -// see Analyzer.Requires, Analyzer.ResultType, and Pass.ResultOf. -// -// A Fact type must be a pointer. -// Facts are encoded and decoded using encoding/gob. -// A Fact may implement the GobEncoder/GobDecoder interfaces -// to customize its encoding. Fact encoding should not fail. -// -// A Fact should not be modified once exported. -type Fact interface { - AFact() // dummy method to avoid type errors -} diff --git a/vendor/golang.org/x/tools/go/analysis/diagnostic.go b/vendor/golang.org/x/tools/go/analysis/diagnostic.go deleted file mode 100644 index 57eaf6faa2..0000000000 --- a/vendor/golang.org/x/tools/go/analysis/diagnostic.go +++ /dev/null @@ -1,61 +0,0 @@ -package analysis - -import "go/token" - -// A Diagnostic is a message associated with a source location or range. -// -// An Analyzer may return a variety of diagnostics; the optional Category, -// which should be a constant, may be used to classify them. -// It is primarily intended to make it easy to look up documentation. -// -// If End is provided, the diagnostic is specified to apply to the range between -// Pos and End. -type Diagnostic struct { - Pos token.Pos - End token.Pos // optional - Category string // optional - Message string - - // SuggestedFixes contains suggested fixes for a diagnostic which can be used to perform - // edits to a file that address the diagnostic. - // TODO(matloob): Should multiple SuggestedFixes be allowed for a diagnostic? - // Diagnostics should not contain SuggestedFixes that overlap. - // Experimental: This API is experimental and may change in the future. - SuggestedFixes []SuggestedFix // optional - - // Experimental: This API is experimental and may change in the future. - Related []RelatedInformation // optional -} - -// RelatedInformation contains information related to a diagnostic. -// For example, a diagnostic that flags duplicated declarations of a -// variable may include one RelatedInformation per existing -// declaration. -type RelatedInformation struct { - Pos token.Pos - End token.Pos - Message string -} - -// A SuggestedFix is a code change associated with a Diagnostic that a user can choose -// to apply to their code. Usually the SuggestedFix is meant to fix the issue flagged -// by the diagnostic. -// TextEdits for a SuggestedFix should not overlap. TextEdits for a SuggestedFix -// should not contain edits for other packages. -// Experimental: This API is experimental and may change in the future. -type SuggestedFix struct { - // A description for this suggested fix to be shown to a user deciding - // whether to accept it. - Message string - TextEdits []TextEdit -} - -// A TextEdit represents the replacement of the code between Pos and End with the new text. -// Each TextEdit should apply to a single file. End should not be earlier in the file than Pos. -// Experimental: This API is experimental and may change in the future. -type TextEdit struct { - // For a pure insertion, End can either be set to Pos or token.NoPos. - Pos token.Pos - End token.Pos - NewText []byte -} diff --git a/vendor/golang.org/x/tools/go/analysis/doc.go b/vendor/golang.org/x/tools/go/analysis/doc.go deleted file mode 100644 index fb17a0e415..0000000000 --- a/vendor/golang.org/x/tools/go/analysis/doc.go +++ /dev/null @@ -1,310 +0,0 @@ -/* - -Package analysis defines the interface between a modular static -analysis and an analysis driver program. - - -Background - -A static analysis is a function that inspects a package of Go code and -reports a set of diagnostics (typically mistakes in the code), and -perhaps produces other results as well, such as suggested refactorings -or other facts. An analysis that reports mistakes is informally called a -"checker". For example, the printf checker reports mistakes in -fmt.Printf format strings. - -A "modular" analysis is one that inspects one package at a time but can -save information from a lower-level package and use it when inspecting a -higher-level package, analogous to separate compilation in a toolchain. -The printf checker is modular: when it discovers that a function such as -log.Fatalf delegates to fmt.Printf, it records this fact, and checks -calls to that function too, including calls made from another package. - -By implementing a common interface, checkers from a variety of sources -can be easily selected, incorporated, and reused in a wide range of -driver programs including command-line tools (such as vet), text editors and -IDEs, build and test systems (such as go build, Bazel, or Buck), test -frameworks, code review tools, code-base indexers (such as SourceGraph), -documentation viewers (such as godoc), batch pipelines for large code -bases, and so on. - - -Analyzer - -The primary type in the API is Analyzer. An Analyzer statically -describes an analysis function: its name, documentation, flags, -relationship to other analyzers, and of course, its logic. - -To define an analysis, a user declares a (logically constant) variable -of type Analyzer. Here is a typical example from one of the analyzers in -the go/analysis/passes/ subdirectory: - - package unusedresult - - var Analyzer = &analysis.Analyzer{ - Name: "unusedresult", - Doc: "check for unused results of calls to some functions", - Run: run, - ... - } - - func run(pass *analysis.Pass) (interface{}, error) { - ... - } - -An analysis driver is a program such as vet that runs a set of -analyses and prints the diagnostics that they report. -The driver program must import the list of Analyzers it needs. -Typically each Analyzer resides in a separate package. -To add a new Analyzer to an existing driver, add another item to the list: - - import ( "unusedresult"; "nilness"; "printf" ) - - var analyses = []*analysis.Analyzer{ - unusedresult.Analyzer, - nilness.Analyzer, - printf.Analyzer, - } - -A driver may use the name, flags, and documentation to provide on-line -help that describes the analyses it performs. -The doc comment contains a brief one-line summary, -optionally followed by paragraphs of explanation. - -The Analyzer type has more fields besides those shown above: - - type Analyzer struct { - Name string - Doc string - Flags flag.FlagSet - Run func(*Pass) (interface{}, error) - RunDespiteErrors bool - ResultType reflect.Type - Requires []*Analyzer - FactTypes []Fact - } - -The Flags field declares a set of named (global) flag variables that -control analysis behavior. Unlike vet, analysis flags are not declared -directly in the command line FlagSet; it is up to the driver to set the -flag variables. A driver for a single analysis, a, might expose its flag -f directly on the command line as -f, whereas a driver for multiple -analyses might prefix the flag name by the analysis name (-a.f) to avoid -ambiguity. An IDE might expose the flags through a graphical interface, -and a batch pipeline might configure them from a config file. -See the "findcall" analyzer for an example of flags in action. - -The RunDespiteErrors flag indicates whether the analysis is equipped to -handle ill-typed code. If not, the driver will skip the analysis if -there were parse or type errors. -The optional ResultType field specifies the type of the result value -computed by this analysis and made available to other analyses. -The Requires field specifies a list of analyses upon which -this one depends and whose results it may access, and it constrains the -order in which a driver may run analyses. -The FactTypes field is discussed in the section on Modularity. -The analysis package provides a Validate function to perform basic -sanity checks on an Analyzer, such as that its Requires graph is -acyclic, its fact and result types are unique, and so on. - -Finally, the Run field contains a function to be called by the driver to -execute the analysis on a single package. The driver passes it an -instance of the Pass type. - - -Pass - -A Pass describes a single unit of work: the application of a particular -Analyzer to a particular package of Go code. -The Pass provides information to the Analyzer's Run function about the -package being analyzed, and provides operations to the Run function for -reporting diagnostics and other information back to the driver. - - type Pass struct { - Fset *token.FileSet - Files []*ast.File - OtherFiles []string - Pkg *types.Package - TypesInfo *types.Info - ResultOf map[*Analyzer]interface{} - Report func(Diagnostic) - ... - } - -The Fset, Files, Pkg, and TypesInfo fields provide the syntax trees, -type information, and source positions for a single package of Go code. - -The OtherFiles field provides the names, but not the contents, of non-Go -files such as assembly that are part of this package. See the "asmdecl" -or "buildtags" analyzers for examples of loading non-Go files and reporting -diagnostics against them. - -The ResultOf field provides the results computed by the analyzers -required by this one, as expressed in its Analyzer.Requires field. The -driver runs the required analyzers first and makes their results -available in this map. Each Analyzer must return a value of the type -described in its Analyzer.ResultType field. -For example, the "ctrlflow" analyzer returns a *ctrlflow.CFGs, which -provides a control-flow graph for each function in the package (see -golang.org/x/tools/go/cfg); the "inspect" analyzer returns a value that -enables other Analyzers to traverse the syntax trees of the package more -efficiently; and the "buildssa" analyzer constructs an SSA-form -intermediate representation. -Each of these Analyzers extends the capabilities of later Analyzers -without adding a dependency to the core API, so an analysis tool pays -only for the extensions it needs. - -The Report function emits a diagnostic, a message associated with a -source position. For most analyses, diagnostics are their primary -result. -For convenience, Pass provides a helper method, Reportf, to report a new -diagnostic by formatting a string. -Diagnostic is defined as: - - type Diagnostic struct { - Pos token.Pos - Category string // optional - Message string - } - -The optional Category field is a short identifier that classifies the -kind of message when an analysis produces several kinds of diagnostic. - -Many analyses want to associate diagnostics with a severity level. -Because Diagnostic does not have a severity level field, an Analyzer's -diagnostics effectively all have the same severity level. To separate which -diagnostics are high severity and which are low severity, expose multiple -Analyzers instead. Analyzers should also be separated when their -diagnostics belong in different groups, or could be tagged differently -before being shown to the end user. Analyzers should document their severity -level to help downstream tools surface diagnostics properly. - -Most Analyzers inspect typed Go syntax trees, but a few, such as asmdecl -and buildtag, inspect the raw text of Go source files or even non-Go -files such as assembly. To report a diagnostic against a line of a -raw text file, use the following sequence: - - content, err := ioutil.ReadFile(filename) - if err != nil { ... } - tf := fset.AddFile(filename, -1, len(content)) - tf.SetLinesForContent(content) - ... - pass.Reportf(tf.LineStart(line), "oops") - - -Modular analysis with Facts - -To improve efficiency and scalability, large programs are routinely -built using separate compilation: units of the program are compiled -separately, and recompiled only when one of their dependencies changes; -independent modules may be compiled in parallel. The same technique may -be applied to static analyses, for the same benefits. Such analyses are -described as "modular". - -A compiler’s type checker is an example of a modular static analysis. -Many other checkers we would like to apply to Go programs can be -understood as alternative or non-standard type systems. For example, -vet's printf checker infers whether a function has the "printf wrapper" -type, and it applies stricter checks to calls of such functions. In -addition, it records which functions are printf wrappers for use by -later analysis passes to identify other printf wrappers by induction. -A result such as “f is a printf wrapper” that is not interesting by -itself but serves as a stepping stone to an interesting result (such as -a diagnostic) is called a "fact". - -The analysis API allows an analysis to define new types of facts, to -associate facts of these types with objects (named entities) declared -within the current package, or with the package as a whole, and to query -for an existing fact of a given type associated with an object or -package. - -An Analyzer that uses facts must declare their types: - - var Analyzer = &analysis.Analyzer{ - Name: "printf", - FactTypes: []analysis.Fact{new(isWrapper)}, - ... - } - - type isWrapper struct{} // => *types.Func f “is a printf wrapper” - -The driver program ensures that facts for a pass’s dependencies are -generated before analyzing the package and is responsible for propagating -facts from one package to another, possibly across address spaces. -Consequently, Facts must be serializable. The API requires that drivers -use the gob encoding, an efficient, robust, self-describing binary -protocol. A fact type may implement the GobEncoder/GobDecoder interfaces -if the default encoding is unsuitable. Facts should be stateless. - -The Pass type has functions to import and export facts, -associated either with an object or with a package: - - type Pass struct { - ... - ExportObjectFact func(types.Object, Fact) - ImportObjectFact func(types.Object, Fact) bool - - ExportPackageFact func(fact Fact) - ImportPackageFact func(*types.Package, Fact) bool - } - -An Analyzer may only export facts associated with the current package or -its objects, though it may import facts from any package or object that -is an import dependency of the current package. - -Conceptually, ExportObjectFact(obj, fact) inserts fact into a hidden map keyed by -the pair (obj, TypeOf(fact)), and the ImportObjectFact function -retrieves the entry from this map and copies its value into the variable -pointed to by fact. This scheme assumes that the concrete type of fact -is a pointer; this assumption is checked by the Validate function. -See the "printf" analyzer for an example of object facts in action. - -Some driver implementations (such as those based on Bazel and Blaze) do -not currently apply analyzers to packages of the standard library. -Therefore, for best results, analyzer authors should not rely on -analysis facts being available for standard packages. -For example, although the printf checker is capable of deducing during -analysis of the log package that log.Printf is a printf wrapper, -this fact is built in to the analyzer so that it correctly checks -calls to log.Printf even when run in a driver that does not apply -it to standard packages. We would like to remove this limitation in future. - - -Testing an Analyzer - -The analysistest subpackage provides utilities for testing an Analyzer. -In a few lines of code, it is possible to run an analyzer on a package -of testdata files and check that it reported all the expected -diagnostics and facts (and no more). Expectations are expressed using -"// want ..." comments in the input code. - - -Standalone commands - -Analyzers are provided in the form of packages that a driver program is -expected to import. The vet command imports a set of several analyzers, -but users may wish to define their own analysis commands that perform -additional checks. To simplify the task of creating an analysis command, -either for a single analyzer or for a whole suite, we provide the -singlechecker and multichecker subpackages. - -The singlechecker package provides the main function for a command that -runs one analyzer. By convention, each analyzer such as -go/passes/findcall should be accompanied by a singlechecker-based -command such as go/analysis/passes/findcall/cmd/findcall, defined in its -entirety as: - - package main - - import ( - "golang.org/x/tools/go/analysis/passes/findcall" - "golang.org/x/tools/go/analysis/singlechecker" - ) - - func main() { singlechecker.Main(findcall.Analyzer) } - -A tool that provides multiple analyzers can use multichecker in a -similar way, giving it the list of Analyzers. - -*/ -package analysis diff --git a/vendor/golang.org/x/tools/go/analysis/passes/inspect/BUILD.bazel b/vendor/golang.org/x/tools/go/analysis/passes/inspect/BUILD.bazel deleted file mode 100644 index 19465959ba..0000000000 --- a/vendor/golang.org/x/tools/go/analysis/passes/inspect/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["inspect.go"], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/analysis/passes/inspect", - importpath = "golang.org/x/tools/go/analysis/passes/inspect", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/go/analysis:go_default_library", - "//vendor/golang.org/x/tools/go/ast/inspector:go_default_library", - ], -) diff --git a/vendor/golang.org/x/tools/go/analysis/passes/inspect/inspect.go b/vendor/golang.org/x/tools/go/analysis/passes/inspect/inspect.go deleted file mode 100644 index 2856df137c..0000000000 --- a/vendor/golang.org/x/tools/go/analysis/passes/inspect/inspect.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package inspect defines an Analyzer that provides an AST inspector -// (golang.org/x/tools/go/ast/inspect.Inspect) for the syntax trees of a -// package. It is only a building block for other analyzers. -// -// Example of use in another analysis: -// -// import ( -// "golang.org/x/tools/go/analysis" -// "golang.org/x/tools/go/analysis/passes/inspect" -// "golang.org/x/tools/go/ast/inspector" -// ) -// -// var Analyzer = &analysis.Analyzer{ -// ... -// Requires: []*analysis.Analyzer{inspect.Analyzer}, -// } -// -// func run(pass *analysis.Pass) (interface{}, error) { -// inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector) -// inspect.Preorder(nil, func(n ast.Node) { -// ... -// }) -// return nil -// } -// -package inspect - -import ( - "reflect" - - "golang.org/x/tools/go/analysis" - "golang.org/x/tools/go/ast/inspector" -) - -var Analyzer = &analysis.Analyzer{ - Name: "inspect", - Doc: "optimize AST traversal for later passes", - Run: run, - RunDespiteErrors: true, - ResultType: reflect.TypeOf(new(inspector.Inspector)), -} - -func run(pass *analysis.Pass) (interface{}, error) { - return inspector.New(pass.Files), nil -} diff --git a/vendor/golang.org/x/tools/go/analysis/validate.go b/vendor/golang.org/x/tools/go/analysis/validate.go deleted file mode 100644 index be98143461..0000000000 --- a/vendor/golang.org/x/tools/go/analysis/validate.go +++ /dev/null @@ -1,97 +0,0 @@ -package analysis - -import ( - "fmt" - "reflect" - "unicode" -) - -// Validate reports an error if any of the analyzers are misconfigured. -// Checks include: -// that the name is a valid identifier; -// that the Requires graph is acyclic; -// that analyzer fact types are unique; -// that each fact type is a pointer. -func Validate(analyzers []*Analyzer) error { - // Map each fact type to its sole generating analyzer. - factTypes := make(map[reflect.Type]*Analyzer) - - // Traverse the Requires graph, depth first. - const ( - white = iota - grey - black - finished - ) - color := make(map[*Analyzer]uint8) - var visit func(a *Analyzer) error - visit = func(a *Analyzer) error { - if a == nil { - return fmt.Errorf("nil *Analyzer") - } - if color[a] == white { - color[a] = grey - - // names - if !validIdent(a.Name) { - return fmt.Errorf("invalid analyzer name %q", a) - } - - if a.Doc == "" { - return fmt.Errorf("analyzer %q is undocumented", a) - } - - // fact types - for _, f := range a.FactTypes { - if f == nil { - return fmt.Errorf("analyzer %s has nil FactType", a) - } - t := reflect.TypeOf(f) - if prev := factTypes[t]; prev != nil { - return fmt.Errorf("fact type %s registered by two analyzers: %v, %v", - t, a, prev) - } - if t.Kind() != reflect.Ptr { - return fmt.Errorf("%s: fact type %s is not a pointer", a, t) - } - factTypes[t] = a - } - - // recursion - for i, req := range a.Requires { - if err := visit(req); err != nil { - return fmt.Errorf("%s.Requires[%d]: %v", a.Name, i, err) - } - } - color[a] = black - } - - return nil - } - for _, a := range analyzers { - if err := visit(a); err != nil { - return err - } - } - - // Reject duplicates among analyzers. - // Precondition: color[a] == black. - // Postcondition: color[a] == finished. - for _, a := range analyzers { - if color[a] == finished { - return fmt.Errorf("duplicate analyzer: %s", a.Name) - } - color[a] = finished - } - - return nil -} - -func validIdent(name string) bool { - for i, r := range name { - if !(r == '_' || unicode.IsLetter(r) || i > 0 && unicode.IsDigit(r)) { - return false - } - } - return name != "" -} diff --git a/vendor/golang.org/x/tools/go/ast/inspector/BUILD.bazel b/vendor/golang.org/x/tools/go/ast/inspector/BUILD.bazel deleted file mode 100644 index 516e730560..0000000000 --- a/vendor/golang.org/x/tools/go/ast/inspector/BUILD.bazel +++ /dev/null @@ -1,12 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "inspector.go", - "typeof.go", - ], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/ast/inspector", - importpath = "golang.org/x/tools/go/ast/inspector", - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/go/ast/inspector/inspector.go b/vendor/golang.org/x/tools/go/ast/inspector/inspector.go deleted file mode 100644 index af5e17feee..0000000000 --- a/vendor/golang.org/x/tools/go/ast/inspector/inspector.go +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package inspector provides helper functions for traversal over the -// syntax trees of a package, including node filtering by type, and -// materialization of the traversal stack. -// -// During construction, the inspector does a complete traversal and -// builds a list of push/pop events and their node type. Subsequent -// method calls that request a traversal scan this list, rather than walk -// the AST, and perform type filtering using efficient bit sets. -// -// Experiments suggest the inspector's traversals are about 2.5x faster -// than ast.Inspect, but it may take around 5 traversals for this -// benefit to amortize the inspector's construction cost. -// If efficiency is the primary concern, do not use Inspector for -// one-off traversals. -package inspector - -// There are four orthogonal features in a traversal: -// 1 type filtering -// 2 pruning -// 3 postorder calls to f -// 4 stack -// Rather than offer all of them in the API, -// only a few combinations are exposed: -// - Preorder is the fastest and has fewest features, -// but is the most commonly needed traversal. -// - Nodes and WithStack both provide pruning and postorder calls, -// even though few clients need it, because supporting two versions -// is not justified. -// More combinations could be supported by expressing them as -// wrappers around a more generic traversal, but this was measured -// and found to degrade performance significantly (30%). - -import ( - "go/ast" -) - -// An Inspector provides methods for inspecting -// (traversing) the syntax trees of a package. -type Inspector struct { - events []event -} - -// New returns an Inspector for the specified syntax trees. -func New(files []*ast.File) *Inspector { - return &Inspector{traverse(files)} -} - -// An event represents a push or a pop -// of an ast.Node during a traversal. -type event struct { - node ast.Node - typ uint64 // typeOf(node) - index int // 1 + index of corresponding pop event, or 0 if this is a pop -} - -// Preorder visits all the nodes of the files supplied to New in -// depth-first order. It calls f(n) for each node n before it visits -// n's children. -// -// The types argument, if non-empty, enables type-based filtering of -// events. The function f if is called only for nodes whose type -// matches an element of the types slice. -func (in *Inspector) Preorder(types []ast.Node, f func(ast.Node)) { - // Because it avoids postorder calls to f, and the pruning - // check, Preorder is almost twice as fast as Nodes. The two - // features seem to contribute similar slowdowns (~1.4x each). - - mask := maskOf(types) - for i := 0; i < len(in.events); { - ev := in.events[i] - if ev.typ&mask != 0 { - if ev.index > 0 { - f(ev.node) - } - } - i++ - } -} - -// Nodes visits the nodes of the files supplied to New in depth-first -// order. It calls f(n, true) for each node n before it visits n's -// children. If f returns true, Nodes invokes f recursively for each -// of the non-nil children of the node, followed by a call of -// f(n, false). -// -// The types argument, if non-empty, enables type-based filtering of -// events. The function f if is called only for nodes whose type -// matches an element of the types slice. -func (in *Inspector) Nodes(types []ast.Node, f func(n ast.Node, push bool) (proceed bool)) { - mask := maskOf(types) - for i := 0; i < len(in.events); { - ev := in.events[i] - if ev.typ&mask != 0 { - if ev.index > 0 { - // push - if !f(ev.node, true) { - i = ev.index // jump to corresponding pop + 1 - continue - } - } else { - // pop - f(ev.node, false) - } - } - i++ - } -} - -// WithStack visits nodes in a similar manner to Nodes, but it -// supplies each call to f an additional argument, the current -// traversal stack. The stack's first element is the outermost node, -// an *ast.File; its last is the innermost, n. -func (in *Inspector) WithStack(types []ast.Node, f func(n ast.Node, push bool, stack []ast.Node) (proceed bool)) { - mask := maskOf(types) - var stack []ast.Node - for i := 0; i < len(in.events); { - ev := in.events[i] - if ev.index > 0 { - // push - stack = append(stack, ev.node) - if ev.typ&mask != 0 { - if !f(ev.node, true, stack) { - i = ev.index - stack = stack[:len(stack)-1] - continue - } - } - } else { - // pop - if ev.typ&mask != 0 { - f(ev.node, false, stack) - } - stack = stack[:len(stack)-1] - } - i++ - } -} - -// traverse builds the table of events representing a traversal. -func traverse(files []*ast.File) []event { - // Preallocate approximate number of events - // based on source file extent. - // This makes traverse faster by 4x (!). - var extent int - for _, f := range files { - extent += int(f.End() - f.Pos()) - } - // This estimate is based on the net/http package. - capacity := extent * 33 / 100 - if capacity > 1e6 { - capacity = 1e6 // impose some reasonable maximum - } - events := make([]event, 0, capacity) - - var stack []event - for _, f := range files { - ast.Inspect(f, func(n ast.Node) bool { - if n != nil { - // push - ev := event{ - node: n, - typ: typeOf(n), - index: len(events), // push event temporarily holds own index - } - stack = append(stack, ev) - events = append(events, ev) - } else { - // pop - ev := stack[len(stack)-1] - stack = stack[:len(stack)-1] - - events[ev.index].index = len(events) + 1 // make push refer to pop - - ev.index = 0 // turn ev into a pop event - events = append(events, ev) - } - return true - }) - } - - return events -} diff --git a/vendor/golang.org/x/tools/go/ast/inspector/typeof.go b/vendor/golang.org/x/tools/go/ast/inspector/typeof.go deleted file mode 100644 index d61301b133..0000000000 --- a/vendor/golang.org/x/tools/go/ast/inspector/typeof.go +++ /dev/null @@ -1,216 +0,0 @@ -package inspector - -// This file defines func typeOf(ast.Node) uint64. -// -// The initial map-based implementation was too slow; -// see https://go-review.googlesource.com/c/tools/+/135655/1/go/ast/inspector/inspector.go#196 - -import "go/ast" - -const ( - nArrayType = iota - nAssignStmt - nBadDecl - nBadExpr - nBadStmt - nBasicLit - nBinaryExpr - nBlockStmt - nBranchStmt - nCallExpr - nCaseClause - nChanType - nCommClause - nComment - nCommentGroup - nCompositeLit - nDeclStmt - nDeferStmt - nEllipsis - nEmptyStmt - nExprStmt - nField - nFieldList - nFile - nForStmt - nFuncDecl - nFuncLit - nFuncType - nGenDecl - nGoStmt - nIdent - nIfStmt - nImportSpec - nIncDecStmt - nIndexExpr - nInterfaceType - nKeyValueExpr - nLabeledStmt - nMapType - nPackage - nParenExpr - nRangeStmt - nReturnStmt - nSelectStmt - nSelectorExpr - nSendStmt - nSliceExpr - nStarExpr - nStructType - nSwitchStmt - nTypeAssertExpr - nTypeSpec - nTypeSwitchStmt - nUnaryExpr - nValueSpec -) - -// typeOf returns a distinct single-bit value that represents the type of n. -// -// Various implementations were benchmarked with BenchmarkNewInspector: -// GOGC=off -// - type switch 4.9-5.5ms 2.1ms -// - binary search over a sorted list of types 5.5-5.9ms 2.5ms -// - linear scan, frequency-ordered list 5.9-6.1ms 2.7ms -// - linear scan, unordered list 6.4ms 2.7ms -// - hash table 6.5ms 3.1ms -// A perfect hash seemed like overkill. -// -// The compiler's switch statement is the clear winner -// as it produces a binary tree in code, -// with constant conditions and good branch prediction. -// (Sadly it is the most verbose in source code.) -// Binary search suffered from poor branch prediction. -// -func typeOf(n ast.Node) uint64 { - // Fast path: nearly half of all nodes are identifiers. - if _, ok := n.(*ast.Ident); ok { - return 1 << nIdent - } - - // These cases include all nodes encountered by ast.Inspect. - switch n.(type) { - case *ast.ArrayType: - return 1 << nArrayType - case *ast.AssignStmt: - return 1 << nAssignStmt - case *ast.BadDecl: - return 1 << nBadDecl - case *ast.BadExpr: - return 1 << nBadExpr - case *ast.BadStmt: - return 1 << nBadStmt - case *ast.BasicLit: - return 1 << nBasicLit - case *ast.BinaryExpr: - return 1 << nBinaryExpr - case *ast.BlockStmt: - return 1 << nBlockStmt - case *ast.BranchStmt: - return 1 << nBranchStmt - case *ast.CallExpr: - return 1 << nCallExpr - case *ast.CaseClause: - return 1 << nCaseClause - case *ast.ChanType: - return 1 << nChanType - case *ast.CommClause: - return 1 << nCommClause - case *ast.Comment: - return 1 << nComment - case *ast.CommentGroup: - return 1 << nCommentGroup - case *ast.CompositeLit: - return 1 << nCompositeLit - case *ast.DeclStmt: - return 1 << nDeclStmt - case *ast.DeferStmt: - return 1 << nDeferStmt - case *ast.Ellipsis: - return 1 << nEllipsis - case *ast.EmptyStmt: - return 1 << nEmptyStmt - case *ast.ExprStmt: - return 1 << nExprStmt - case *ast.Field: - return 1 << nField - case *ast.FieldList: - return 1 << nFieldList - case *ast.File: - return 1 << nFile - case *ast.ForStmt: - return 1 << nForStmt - case *ast.FuncDecl: - return 1 << nFuncDecl - case *ast.FuncLit: - return 1 << nFuncLit - case *ast.FuncType: - return 1 << nFuncType - case *ast.GenDecl: - return 1 << nGenDecl - case *ast.GoStmt: - return 1 << nGoStmt - case *ast.Ident: - return 1 << nIdent - case *ast.IfStmt: - return 1 << nIfStmt - case *ast.ImportSpec: - return 1 << nImportSpec - case *ast.IncDecStmt: - return 1 << nIncDecStmt - case *ast.IndexExpr: - return 1 << nIndexExpr - case *ast.InterfaceType: - return 1 << nInterfaceType - case *ast.KeyValueExpr: - return 1 << nKeyValueExpr - case *ast.LabeledStmt: - return 1 << nLabeledStmt - case *ast.MapType: - return 1 << nMapType - case *ast.Package: - return 1 << nPackage - case *ast.ParenExpr: - return 1 << nParenExpr - case *ast.RangeStmt: - return 1 << nRangeStmt - case *ast.ReturnStmt: - return 1 << nReturnStmt - case *ast.SelectStmt: - return 1 << nSelectStmt - case *ast.SelectorExpr: - return 1 << nSelectorExpr - case *ast.SendStmt: - return 1 << nSendStmt - case *ast.SliceExpr: - return 1 << nSliceExpr - case *ast.StarExpr: - return 1 << nStarExpr - case *ast.StructType: - return 1 << nStructType - case *ast.SwitchStmt: - return 1 << nSwitchStmt - case *ast.TypeAssertExpr: - return 1 << nTypeAssertExpr - case *ast.TypeSpec: - return 1 << nTypeSpec - case *ast.TypeSwitchStmt: - return 1 << nTypeSwitchStmt - case *ast.UnaryExpr: - return 1 << nUnaryExpr - case *ast.ValueSpec: - return 1 << nValueSpec - } - return 0 -} - -func maskOf(nodes []ast.Node) uint64 { - if nodes == nil { - return 1<<64 - 1 // match all node types - } - var mask uint64 - for _, n := range nodes { - mask |= typeOf(n) - } - return mask -} diff --git a/vendor/golang.org/x/tools/go/buildutil/BUILD.bazel b/vendor/golang.org/x/tools/go/buildutil/BUILD.bazel deleted file mode 100644 index 1574b3c9e8..0000000000 --- a/vendor/golang.org/x/tools/go/buildutil/BUILD.bazel +++ /dev/null @@ -1,15 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "allpackages.go", - "fakecontext.go", - "overlay.go", - "tags.go", - "util.go", - ], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/buildutil", - importpath = "golang.org/x/tools/go/buildutil", - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/go/buildutil/allpackages.go b/vendor/golang.org/x/tools/go/buildutil/allpackages.go deleted file mode 100644 index c0cb03e7be..0000000000 --- a/vendor/golang.org/x/tools/go/buildutil/allpackages.go +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package buildutil provides utilities related to the go/build -// package in the standard library. -// -// All I/O is done via the build.Context file system interface, which must -// be concurrency-safe. -package buildutil // import "golang.org/x/tools/go/buildutil" - -import ( - "go/build" - "os" - "path/filepath" - "sort" - "strings" - "sync" -) - -// AllPackages returns the package path of each Go package in any source -// directory of the specified build context (e.g. $GOROOT or an element -// of $GOPATH). Errors are ignored. The results are sorted. -// All package paths are canonical, and thus may contain "/vendor/". -// -// The result may include import paths for directories that contain no -// *.go files, such as "archive" (in $GOROOT/src). -// -// All I/O is done via the build.Context file system interface, -// which must be concurrency-safe. -// -func AllPackages(ctxt *build.Context) []string { - var list []string - ForEachPackage(ctxt, func(pkg string, _ error) { - list = append(list, pkg) - }) - sort.Strings(list) - return list -} - -// ForEachPackage calls the found function with the package path of -// each Go package it finds in any source directory of the specified -// build context (e.g. $GOROOT or an element of $GOPATH). -// All package paths are canonical, and thus may contain "/vendor/". -// -// If the package directory exists but could not be read, the second -// argument to the found function provides the error. -// -// All I/O is done via the build.Context file system interface, -// which must be concurrency-safe. -// -func ForEachPackage(ctxt *build.Context, found func(importPath string, err error)) { - ch := make(chan item) - - var wg sync.WaitGroup - for _, root := range ctxt.SrcDirs() { - root := root - wg.Add(1) - go func() { - allPackages(ctxt, root, ch) - wg.Done() - }() - } - go func() { - wg.Wait() - close(ch) - }() - - // All calls to found occur in the caller's goroutine. - for i := range ch { - found(i.importPath, i.err) - } -} - -type item struct { - importPath string - err error // (optional) -} - -// We use a process-wide counting semaphore to limit -// the number of parallel calls to ReadDir. -var ioLimit = make(chan bool, 20) - -func allPackages(ctxt *build.Context, root string, ch chan<- item) { - root = filepath.Clean(root) + string(os.PathSeparator) - - var wg sync.WaitGroup - - var walkDir func(dir string) - walkDir = func(dir string) { - // Avoid .foo, _foo, and testdata directory trees. - base := filepath.Base(dir) - if base == "" || base[0] == '.' || base[0] == '_' || base == "testdata" { - return - } - - pkg := filepath.ToSlash(strings.TrimPrefix(dir, root)) - - // Prune search if we encounter any of these import paths. - switch pkg { - case "builtin": - return - } - - ioLimit <- true - files, err := ReadDir(ctxt, dir) - <-ioLimit - if pkg != "" || err != nil { - ch <- item{pkg, err} - } - for _, fi := range files { - fi := fi - if fi.IsDir() { - wg.Add(1) - go func() { - walkDir(filepath.Join(dir, fi.Name())) - wg.Done() - }() - } - } - } - - walkDir(root) - wg.Wait() -} - -// ExpandPatterns returns the set of packages matched by patterns, -// which may have the following forms: -// -// golang.org/x/tools/cmd/guru # a single package -// golang.org/x/tools/... # all packages beneath dir -// ... # the entire workspace. -// -// Order is significant: a pattern preceded by '-' removes matching -// packages from the set. For example, these patterns match all encoding -// packages except encoding/xml: -// -// encoding/... -encoding/xml -// -// A trailing slash in a pattern is ignored. (Path components of Go -// package names are separated by slash, not the platform's path separator.) -// -func ExpandPatterns(ctxt *build.Context, patterns []string) map[string]bool { - // TODO(adonovan): support other features of 'go list': - // - "std"/"cmd"/"all" meta-packages - // - "..." not at the end of a pattern - // - relative patterns using "./" or "../" prefix - - pkgs := make(map[string]bool) - doPkg := func(pkg string, neg bool) { - if neg { - delete(pkgs, pkg) - } else { - pkgs[pkg] = true - } - } - - // Scan entire workspace if wildcards are present. - // TODO(adonovan): opt: scan only the necessary subtrees of the workspace. - var all []string - for _, arg := range patterns { - if strings.HasSuffix(arg, "...") { - all = AllPackages(ctxt) - break - } - } - - for _, arg := range patterns { - if arg == "" { - continue - } - - neg := arg[0] == '-' - if neg { - arg = arg[1:] - } - - if arg == "..." { - // ... matches all packages - for _, pkg := range all { - doPkg(pkg, neg) - } - } else if dir := strings.TrimSuffix(arg, "/..."); dir != arg { - // dir/... matches all packages beneath dir - for _, pkg := range all { - if strings.HasPrefix(pkg, dir) && - (len(pkg) == len(dir) || pkg[len(dir)] == '/') { - doPkg(pkg, neg) - } - } - } else { - // single package - doPkg(strings.TrimSuffix(arg, "/"), neg) - } - } - - return pkgs -} diff --git a/vendor/golang.org/x/tools/go/buildutil/fakecontext.go b/vendor/golang.org/x/tools/go/buildutil/fakecontext.go deleted file mode 100644 index 8b7f066739..0000000000 --- a/vendor/golang.org/x/tools/go/buildutil/fakecontext.go +++ /dev/null @@ -1,109 +0,0 @@ -package buildutil - -import ( - "fmt" - "go/build" - "io" - "io/ioutil" - "os" - "path" - "path/filepath" - "sort" - "strings" - "time" -) - -// FakeContext returns a build.Context for the fake file tree specified -// by pkgs, which maps package import paths to a mapping from file base -// names to contents. -// -// The fake Context has a GOROOT of "/go" and no GOPATH, and overrides -// the necessary file access methods to read from memory instead of the -// real file system. -// -// Unlike a real file tree, the fake one has only two levels---packages -// and files---so ReadDir("/go/src/") returns all packages under -// /go/src/ including, for instance, "math" and "math/big". -// ReadDir("/go/src/math/big") would return all the files in the -// "math/big" package. -// -func FakeContext(pkgs map[string]map[string]string) *build.Context { - clean := func(filename string) string { - f := path.Clean(filepath.ToSlash(filename)) - // Removing "/go/src" while respecting segment - // boundaries has this unfortunate corner case: - if f == "/go/src" { - return "" - } - return strings.TrimPrefix(f, "/go/src/") - } - - ctxt := build.Default // copy - ctxt.GOROOT = "/go" - ctxt.GOPATH = "" - ctxt.Compiler = "gc" - ctxt.IsDir = func(dir string) bool { - dir = clean(dir) - if dir == "" { - return true // needed by (*build.Context).SrcDirs - } - return pkgs[dir] != nil - } - ctxt.ReadDir = func(dir string) ([]os.FileInfo, error) { - dir = clean(dir) - var fis []os.FileInfo - if dir == "" { - // enumerate packages - for importPath := range pkgs { - fis = append(fis, fakeDirInfo(importPath)) - } - } else { - // enumerate files of package - for basename := range pkgs[dir] { - fis = append(fis, fakeFileInfo(basename)) - } - } - sort.Sort(byName(fis)) - return fis, nil - } - ctxt.OpenFile = func(filename string) (io.ReadCloser, error) { - filename = clean(filename) - dir, base := path.Split(filename) - content, ok := pkgs[path.Clean(dir)][base] - if !ok { - return nil, fmt.Errorf("file not found: %s", filename) - } - return ioutil.NopCloser(strings.NewReader(content)), nil - } - ctxt.IsAbsPath = func(path string) bool { - path = filepath.ToSlash(path) - // Don't rely on the default (filepath.Path) since on - // Windows, it reports virtual paths as non-absolute. - return strings.HasPrefix(path, "/") - } - return &ctxt -} - -type byName []os.FileInfo - -func (s byName) Len() int { return len(s) } -func (s byName) Swap(i, j int) { s[i], s[j] = s[j], s[i] } -func (s byName) Less(i, j int) bool { return s[i].Name() < s[j].Name() } - -type fakeFileInfo string - -func (fi fakeFileInfo) Name() string { return string(fi) } -func (fakeFileInfo) Sys() interface{} { return nil } -func (fakeFileInfo) ModTime() time.Time { return time.Time{} } -func (fakeFileInfo) IsDir() bool { return false } -func (fakeFileInfo) Size() int64 { return 0 } -func (fakeFileInfo) Mode() os.FileMode { return 0644 } - -type fakeDirInfo string - -func (fd fakeDirInfo) Name() string { return string(fd) } -func (fakeDirInfo) Sys() interface{} { return nil } -func (fakeDirInfo) ModTime() time.Time { return time.Time{} } -func (fakeDirInfo) IsDir() bool { return true } -func (fakeDirInfo) Size() int64 { return 0 } -func (fakeDirInfo) Mode() os.FileMode { return 0755 } diff --git a/vendor/golang.org/x/tools/go/buildutil/overlay.go b/vendor/golang.org/x/tools/go/buildutil/overlay.go deleted file mode 100644 index 8e239086bd..0000000000 --- a/vendor/golang.org/x/tools/go/buildutil/overlay.go +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package buildutil - -import ( - "bufio" - "bytes" - "fmt" - "go/build" - "io" - "io/ioutil" - "path/filepath" - "strconv" - "strings" -) - -// OverlayContext overlays a build.Context with additional files from -// a map. Files in the map take precedence over other files. -// -// In addition to plain string comparison, two file names are -// considered equal if their base names match and their directory -// components point at the same directory on the file system. That is, -// symbolic links are followed for directories, but not files. -// -// A common use case for OverlayContext is to allow editors to pass in -// a set of unsaved, modified files. -// -// Currently, only the Context.OpenFile function will respect the -// overlay. This may change in the future. -func OverlayContext(orig *build.Context, overlay map[string][]byte) *build.Context { - // TODO(dominikh): Implement IsDir, HasSubdir and ReadDir - - rc := func(data []byte) (io.ReadCloser, error) { - return ioutil.NopCloser(bytes.NewBuffer(data)), nil - } - - copy := *orig // make a copy - ctxt := © - ctxt.OpenFile = func(path string) (io.ReadCloser, error) { - // Fast path: names match exactly. - if content, ok := overlay[path]; ok { - return rc(content) - } - - // Slow path: check for same file under a different - // alias, perhaps due to a symbolic link. - for filename, content := range overlay { - if sameFile(path, filename) { - return rc(content) - } - } - - return OpenFile(orig, path) - } - return ctxt -} - -// ParseOverlayArchive parses an archive containing Go files and their -// contents. The result is intended to be used with OverlayContext. -// -// -// Archive format -// -// The archive consists of a series of files. Each file consists of a -// name, a decimal file size and the file contents, separated by -// newlines. No newline follows after the file contents. -func ParseOverlayArchive(archive io.Reader) (map[string][]byte, error) { - overlay := make(map[string][]byte) - r := bufio.NewReader(archive) - for { - // Read file name. - filename, err := r.ReadString('\n') - if err != nil { - if err == io.EOF { - break // OK - } - return nil, fmt.Errorf("reading archive file name: %v", err) - } - filename = filepath.Clean(strings.TrimSpace(filename)) - - // Read file size. - sz, err := r.ReadString('\n') - if err != nil { - return nil, fmt.Errorf("reading size of archive file %s: %v", filename, err) - } - sz = strings.TrimSpace(sz) - size, err := strconv.ParseUint(sz, 10, 32) - if err != nil { - return nil, fmt.Errorf("parsing size of archive file %s: %v", filename, err) - } - - // Read file content. - content := make([]byte, size) - if _, err := io.ReadFull(r, content); err != nil { - return nil, fmt.Errorf("reading archive file %s: %v", filename, err) - } - overlay[filename] = content - } - - return overlay, nil -} diff --git a/vendor/golang.org/x/tools/go/buildutil/tags.go b/vendor/golang.org/x/tools/go/buildutil/tags.go deleted file mode 100644 index 486606f376..0000000000 --- a/vendor/golang.org/x/tools/go/buildutil/tags.go +++ /dev/null @@ -1,75 +0,0 @@ -package buildutil - -// This logic was copied from stringsFlag from $GOROOT/src/cmd/go/build.go. - -import "fmt" - -const TagsFlagDoc = "a list of `build tags` to consider satisfied during the build. " + - "For more information about build tags, see the description of " + - "build constraints in the documentation for the go/build package" - -// TagsFlag is an implementation of the flag.Value and flag.Getter interfaces that parses -// a flag value in the same manner as go build's -tags flag and -// populates a []string slice. -// -// See $GOROOT/src/go/build/doc.go for description of build tags. -// See $GOROOT/src/cmd/go/doc.go for description of 'go build -tags' flag. -// -// Example: -// flag.Var((*buildutil.TagsFlag)(&build.Default.BuildTags), "tags", buildutil.TagsFlagDoc) -type TagsFlag []string - -func (v *TagsFlag) Set(s string) error { - var err error - *v, err = splitQuotedFields(s) - if *v == nil { - *v = []string{} - } - return err -} - -func (v *TagsFlag) Get() interface{} { return *v } - -func splitQuotedFields(s string) ([]string, error) { - // Split fields allowing '' or "" around elements. - // Quotes further inside the string do not count. - var f []string - for len(s) > 0 { - for len(s) > 0 && isSpaceByte(s[0]) { - s = s[1:] - } - if len(s) == 0 { - break - } - // Accepted quoted string. No unescaping inside. - if s[0] == '"' || s[0] == '\'' { - quote := s[0] - s = s[1:] - i := 0 - for i < len(s) && s[i] != quote { - i++ - } - if i >= len(s) { - return nil, fmt.Errorf("unterminated %c string", quote) - } - f = append(f, s[:i]) - s = s[i+1:] - continue - } - i := 0 - for i < len(s) && !isSpaceByte(s[i]) { - i++ - } - f = append(f, s[:i]) - s = s[i:] - } - return f, nil -} - -func (v *TagsFlag) String() string { - return "" -} - -func isSpaceByte(c byte) bool { - return c == ' ' || c == '\t' || c == '\n' || c == '\r' -} diff --git a/vendor/golang.org/x/tools/go/buildutil/util.go b/vendor/golang.org/x/tools/go/buildutil/util.go deleted file mode 100644 index fc923d7a70..0000000000 --- a/vendor/golang.org/x/tools/go/buildutil/util.go +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package buildutil - -import ( - "fmt" - "go/ast" - "go/build" - "go/parser" - "go/token" - "io" - "io/ioutil" - "os" - "path" - "path/filepath" - "strings" -) - -// ParseFile behaves like parser.ParseFile, -// but uses the build context's file system interface, if any. -// -// If file is not absolute (as defined by IsAbsPath), the (dir, file) -// components are joined using JoinPath; dir must be absolute. -// -// The displayPath function, if provided, is used to transform the -// filename that will be attached to the ASTs. -// -// TODO(adonovan): call this from go/loader.parseFiles when the tree thaws. -// -func ParseFile(fset *token.FileSet, ctxt *build.Context, displayPath func(string) string, dir string, file string, mode parser.Mode) (*ast.File, error) { - if !IsAbsPath(ctxt, file) { - file = JoinPath(ctxt, dir, file) - } - rd, err := OpenFile(ctxt, file) - if err != nil { - return nil, err - } - defer rd.Close() // ignore error - if displayPath != nil { - file = displayPath(file) - } - return parser.ParseFile(fset, file, rd, mode) -} - -// ContainingPackage returns the package containing filename. -// -// If filename is not absolute, it is interpreted relative to working directory dir. -// All I/O is via the build context's file system interface, if any. -// -// The '...Files []string' fields of the resulting build.Package are not -// populated (build.FindOnly mode). -// -func ContainingPackage(ctxt *build.Context, dir, filename string) (*build.Package, error) { - if !IsAbsPath(ctxt, filename) { - filename = JoinPath(ctxt, dir, filename) - } - - // We must not assume the file tree uses - // "/" always, - // `\` always, - // or os.PathSeparator (which varies by platform), - // but to make any progress, we are forced to assume that - // paths will not use `\` unless the PathSeparator - // is also `\`, thus we can rely on filepath.ToSlash for some sanity. - - dirSlash := path.Dir(filepath.ToSlash(filename)) + "/" - - // We assume that no source root (GOPATH[i] or GOROOT) contains any other. - for _, srcdir := range ctxt.SrcDirs() { - srcdirSlash := filepath.ToSlash(srcdir) + "/" - if importPath, ok := HasSubdir(ctxt, srcdirSlash, dirSlash); ok { - return ctxt.Import(importPath, dir, build.FindOnly) - } - } - - return nil, fmt.Errorf("can't find package containing %s", filename) -} - -// -- Effective methods of file system interface ------------------------- - -// (go/build.Context defines these as methods, but does not export them.) - -// hasSubdir calls ctxt.HasSubdir (if not nil) or else uses -// the local file system to answer the question. -func HasSubdir(ctxt *build.Context, root, dir string) (rel string, ok bool) { - if f := ctxt.HasSubdir; f != nil { - return f(root, dir) - } - - // Try using paths we received. - if rel, ok = hasSubdir(root, dir); ok { - return - } - - // Try expanding symlinks and comparing - // expanded against unexpanded and - // expanded against expanded. - rootSym, _ := filepath.EvalSymlinks(root) - dirSym, _ := filepath.EvalSymlinks(dir) - - if rel, ok = hasSubdir(rootSym, dir); ok { - return - } - if rel, ok = hasSubdir(root, dirSym); ok { - return - } - return hasSubdir(rootSym, dirSym) -} - -func hasSubdir(root, dir string) (rel string, ok bool) { - const sep = string(filepath.Separator) - root = filepath.Clean(root) - if !strings.HasSuffix(root, sep) { - root += sep - } - - dir = filepath.Clean(dir) - if !strings.HasPrefix(dir, root) { - return "", false - } - - return filepath.ToSlash(dir[len(root):]), true -} - -// FileExists returns true if the specified file exists, -// using the build context's file system interface. -func FileExists(ctxt *build.Context, path string) bool { - if ctxt.OpenFile != nil { - r, err := ctxt.OpenFile(path) - if err != nil { - return false - } - r.Close() // ignore error - return true - } - _, err := os.Stat(path) - return err == nil -} - -// OpenFile behaves like os.Open, -// but uses the build context's file system interface, if any. -func OpenFile(ctxt *build.Context, path string) (io.ReadCloser, error) { - if ctxt.OpenFile != nil { - return ctxt.OpenFile(path) - } - return os.Open(path) -} - -// IsAbsPath behaves like filepath.IsAbs, -// but uses the build context's file system interface, if any. -func IsAbsPath(ctxt *build.Context, path string) bool { - if ctxt.IsAbsPath != nil { - return ctxt.IsAbsPath(path) - } - return filepath.IsAbs(path) -} - -// JoinPath behaves like filepath.Join, -// but uses the build context's file system interface, if any. -func JoinPath(ctxt *build.Context, path ...string) string { - if ctxt.JoinPath != nil { - return ctxt.JoinPath(path...) - } - return filepath.Join(path...) -} - -// IsDir behaves like os.Stat plus IsDir, -// but uses the build context's file system interface, if any. -func IsDir(ctxt *build.Context, path string) bool { - if ctxt.IsDir != nil { - return ctxt.IsDir(path) - } - fi, err := os.Stat(path) - return err == nil && fi.IsDir() -} - -// ReadDir behaves like ioutil.ReadDir, -// but uses the build context's file system interface, if any. -func ReadDir(ctxt *build.Context, path string) ([]os.FileInfo, error) { - if ctxt.ReadDir != nil { - return ctxt.ReadDir(path) - } - return ioutil.ReadDir(path) -} - -// SplitPathList behaves like filepath.SplitList, -// but uses the build context's file system interface, if any. -func SplitPathList(ctxt *build.Context, s string) []string { - if ctxt.SplitPathList != nil { - return ctxt.SplitPathList(s) - } - return filepath.SplitList(s) -} - -// sameFile returns true if x and y have the same basename and denote -// the same file. -// -func sameFile(x, y string) bool { - if path.Clean(x) == path.Clean(y) { - return true - } - if filepath.Base(x) == filepath.Base(y) { // (optimisation) - if xi, err := os.Stat(x); err == nil { - if yi, err := os.Stat(y); err == nil { - return os.SameFile(xi, yi) - } - } - } - return false -} diff --git a/vendor/golang.org/x/tools/go/gcexportdata/BUILD.bazel b/vendor/golang.org/x/tools/go/gcexportdata/BUILD.bazel deleted file mode 100644 index 86f5c0e357..0000000000 --- a/vendor/golang.org/x/tools/go/gcexportdata/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "gcexportdata.go", - "importer.go", - ], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/gcexportdata", - importpath = "golang.org/x/tools/go/gcexportdata", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/tools/go/internal/gcimporter:go_default_library"], -) diff --git a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go deleted file mode 100644 index f8363d8faa..0000000000 --- a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package gcexportdata provides functions for locating, reading, and -// writing export data files containing type information produced by the -// gc compiler. This package supports go1.7 export data format and all -// later versions. -// -// Although it might seem convenient for this package to live alongside -// go/types in the standard library, this would cause version skew -// problems for developer tools that use it, since they must be able to -// consume the outputs of the gc compiler both before and after a Go -// update such as from Go 1.7 to Go 1.8. Because this package lives in -// golang.org/x/tools, sites can update their version of this repo some -// time before the Go 1.8 release and rebuild and redeploy their -// developer tools, which will then be able to consume both Go 1.7 and -// Go 1.8 export data files, so they will work before and after the -// Go update. (See discussion at https://golang.org/issue/15651.) -// -package gcexportdata // import "golang.org/x/tools/go/gcexportdata" - -import ( - "bufio" - "bytes" - "fmt" - "go/token" - "go/types" - "io" - "io/ioutil" - - "golang.org/x/tools/go/internal/gcimporter" -) - -// Find returns the name of an object (.o) or archive (.a) file -// containing type information for the specified import path, -// using the workspace layout conventions of go/build. -// If no file was found, an empty filename is returned. -// -// A relative srcDir is interpreted relative to the current working directory. -// -// Find also returns the package's resolved (canonical) import path, -// reflecting the effects of srcDir and vendoring on importPath. -func Find(importPath, srcDir string) (filename, path string) { - return gcimporter.FindPkg(importPath, srcDir) -} - -// NewReader returns a reader for the export data section of an object -// (.o) or archive (.a) file read from r. The new reader may provide -// additional trailing data beyond the end of the export data. -func NewReader(r io.Reader) (io.Reader, error) { - buf := bufio.NewReader(r) - _, err := gcimporter.FindExportData(buf) - // If we ever switch to a zip-like archive format with the ToC - // at the end, we can return the correct portion of export data, - // but for now we must return the entire rest of the file. - return buf, err -} - -// Read reads export data from in, decodes it, and returns type -// information for the package. -// The package name is specified by path. -// File position information is added to fset. -// -// Read may inspect and add to the imports map to ensure that references -// within the export data to other packages are consistent. The caller -// must ensure that imports[path] does not exist, or exists but is -// incomplete (see types.Package.Complete), and Read inserts the -// resulting package into this map entry. -// -// On return, the state of the reader is undefined. -func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, path string) (*types.Package, error) { - data, err := ioutil.ReadAll(in) - if err != nil { - return nil, fmt.Errorf("reading export data for %q: %v", path, err) - } - - if bytes.HasPrefix(data, []byte("!")) { - return nil, fmt.Errorf("can't read export data for %q directly from an archive file (call gcexportdata.NewReader first to extract export data)", path) - } - - // The App Engine Go runtime v1.6 uses the old export data format. - // TODO(adonovan): delete once v1.7 has been around for a while. - if bytes.HasPrefix(data, []byte("package ")) { - return gcimporter.ImportData(imports, path, path, bytes.NewReader(data)) - } - - // The indexed export format starts with an 'i'; the older - // binary export format starts with a 'c', 'd', or 'v' - // (from "version"). Select appropriate importer. - if len(data) > 0 && data[0] == 'i' { - _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path) - return pkg, err - } - - _, pkg, err := gcimporter.BImportData(fset, imports, data, path) - return pkg, err -} - -// Write writes encoded type information for the specified package to out. -// The FileSet provides file position information for named objects. -func Write(out io.Writer, fset *token.FileSet, pkg *types.Package) error { - b, err := gcimporter.IExportData(fset, pkg) - if err != nil { - return err - } - _, err = out.Write(b) - return err -} diff --git a/vendor/golang.org/x/tools/go/gcexportdata/importer.go b/vendor/golang.org/x/tools/go/gcexportdata/importer.go deleted file mode 100644 index efe221e7e1..0000000000 --- a/vendor/golang.org/x/tools/go/gcexportdata/importer.go +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package gcexportdata - -import ( - "fmt" - "go/token" - "go/types" - "os" -) - -// NewImporter returns a new instance of the types.Importer interface -// that reads type information from export data files written by gc. -// The Importer also satisfies types.ImporterFrom. -// -// Export data files are located using "go build" workspace conventions -// and the build.Default context. -// -// Use this importer instead of go/importer.For("gc", ...) to avoid the -// version-skew problems described in the documentation of this package, -// or to control the FileSet or access the imports map populated during -// package loading. -// -func NewImporter(fset *token.FileSet, imports map[string]*types.Package) types.ImporterFrom { - return importer{fset, imports} -} - -type importer struct { - fset *token.FileSet - imports map[string]*types.Package -} - -func (imp importer) Import(importPath string) (*types.Package, error) { - return imp.ImportFrom(importPath, "", 0) -} - -func (imp importer) ImportFrom(importPath, srcDir string, mode types.ImportMode) (_ *types.Package, err error) { - filename, path := Find(importPath, srcDir) - if filename == "" { - if importPath == "unsafe" { - // Even for unsafe, call Find first in case - // the package was vendored. - return types.Unsafe, nil - } - return nil, fmt.Errorf("can't find import: %s", importPath) - } - - if pkg, ok := imp.imports[path]; ok && pkg.Complete() { - return pkg, nil // cache hit - } - - // open file - f, err := os.Open(filename) - if err != nil { - return nil, err - } - defer func() { - f.Close() - if err != nil { - // add file name to error - err = fmt.Errorf("reading export data: %s: %v", filename, err) - } - }() - - r, err := NewReader(f) - if err != nil { - return nil, err - } - - return Read(r, imp.fset, imp.imports, path) -} diff --git a/vendor/golang.org/x/tools/go/internal/cgo/BUILD.bazel b/vendor/golang.org/x/tools/go/internal/cgo/BUILD.bazel deleted file mode 100644 index 757dd557d4..0000000000 --- a/vendor/golang.org/x/tools/go/internal/cgo/BUILD.bazel +++ /dev/null @@ -1,12 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cgo.go", - "cgo_pkgconfig.go", - ], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/internal/cgo", - importpath = "golang.org/x/tools/go/internal/cgo", - visibility = ["//vendor/golang.org/x/tools/go:__subpackages__"], -) diff --git a/vendor/golang.org/x/tools/go/internal/cgo/cgo.go b/vendor/golang.org/x/tools/go/internal/cgo/cgo.go deleted file mode 100644 index 5db8b30967..0000000000 --- a/vendor/golang.org/x/tools/go/internal/cgo/cgo.go +++ /dev/null @@ -1,220 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package cgo handles cgo preprocessing of files containing `import "C"`. -// -// DESIGN -// -// The approach taken is to run the cgo processor on the package's -// CgoFiles and parse the output, faking the filenames of the -// resulting ASTs so that the synthetic file containing the C types is -// called "C" (e.g. "~/go/src/net/C") and the preprocessed files -// have their original names (e.g. "~/go/src/net/cgo_unix.go"), -// not the names of the actual temporary files. -// -// The advantage of this approach is its fidelity to 'go build'. The -// downside is that the token.Position.Offset for each AST node is -// incorrect, being an offset within the temporary file. Line numbers -// should still be correct because of the //line comments. -// -// The logic of this file is mostly plundered from the 'go build' -// tool, which also invokes the cgo preprocessor. -// -// -// REJECTED ALTERNATIVE -// -// An alternative approach that we explored is to extend go/types' -// Importer mechanism to provide the identity of the importing package -// so that each time `import "C"` appears it resolves to a different -// synthetic package containing just the objects needed in that case. -// The loader would invoke cgo but parse only the cgo_types.go file -// defining the package-level objects, discarding the other files -// resulting from preprocessing. -// -// The benefit of this approach would have been that source-level -// syntax information would correspond exactly to the original cgo -// file, with no preprocessing involved, making source tools like -// godoc, guru, and eg happy. However, the approach was rejected -// due to the additional complexity it would impose on go/types. (It -// made for a beautiful demo, though.) -// -// cgo files, despite their *.go extension, are not legal Go source -// files per the specification since they may refer to unexported -// members of package "C" such as C.int. Also, a function such as -// C.getpwent has in effect two types, one matching its C type and one -// which additionally returns (errno C.int). The cgo preprocessor -// uses name mangling to distinguish these two functions in the -// processed code, but go/types would need to duplicate this logic in -// its handling of function calls, analogous to the treatment of map -// lookups in which y=m[k] and y,ok=m[k] are both legal. - -package cgo - -import ( - "fmt" - "go/ast" - "go/build" - "go/parser" - "go/token" - "io/ioutil" - "log" - "os" - "os/exec" - "path/filepath" - "regexp" - "strings" -) - -// ProcessFiles invokes the cgo preprocessor on bp.CgoFiles, parses -// the output and returns the resulting ASTs. -// -func ProcessFiles(bp *build.Package, fset *token.FileSet, DisplayPath func(path string) string, mode parser.Mode) ([]*ast.File, error) { - tmpdir, err := ioutil.TempDir("", strings.Replace(bp.ImportPath, "/", "_", -1)+"_C") - if err != nil { - return nil, err - } - defer os.RemoveAll(tmpdir) - - pkgdir := bp.Dir - if DisplayPath != nil { - pkgdir = DisplayPath(pkgdir) - } - - cgoFiles, cgoDisplayFiles, err := Run(bp, pkgdir, tmpdir, false) - if err != nil { - return nil, err - } - var files []*ast.File - for i := range cgoFiles { - rd, err := os.Open(cgoFiles[i]) - if err != nil { - return nil, err - } - display := filepath.Join(bp.Dir, cgoDisplayFiles[i]) - f, err := parser.ParseFile(fset, display, rd, mode) - rd.Close() - if err != nil { - return nil, err - } - files = append(files, f) - } - return files, nil -} - -var cgoRe = regexp.MustCompile(`[/\\:]`) - -// Run invokes the cgo preprocessor on bp.CgoFiles and returns two -// lists of files: the resulting processed files (in temporary -// directory tmpdir) and the corresponding names of the unprocessed files. -// -// Run is adapted from (*builder).cgo in -// $GOROOT/src/cmd/go/build.go, but these features are unsupported: -// Objective C, CGOPKGPATH, CGO_FLAGS. -// -// If useabs is set to true, absolute paths of the bp.CgoFiles will be passed in -// to the cgo preprocessor. This in turn will set the // line comments -// referring to those files to use absolute paths. This is needed for -// go/packages using the legacy go list support so it is able to find -// the original files. -func Run(bp *build.Package, pkgdir, tmpdir string, useabs bool) (files, displayFiles []string, err error) { - cgoCPPFLAGS, _, _, _ := cflags(bp, true) - _, cgoexeCFLAGS, _, _ := cflags(bp, false) - - if len(bp.CgoPkgConfig) > 0 { - pcCFLAGS, err := pkgConfigFlags(bp) - if err != nil { - return nil, nil, err - } - cgoCPPFLAGS = append(cgoCPPFLAGS, pcCFLAGS...) - } - - // Allows including _cgo_export.h from .[ch] files in the package. - cgoCPPFLAGS = append(cgoCPPFLAGS, "-I", tmpdir) - - // _cgo_gotypes.go (displayed "C") contains the type definitions. - files = append(files, filepath.Join(tmpdir, "_cgo_gotypes.go")) - displayFiles = append(displayFiles, "C") - for _, fn := range bp.CgoFiles { - // "foo.cgo1.go" (displayed "foo.go") is the processed Go source. - f := cgoRe.ReplaceAllString(fn[:len(fn)-len("go")], "_") - files = append(files, filepath.Join(tmpdir, f+"cgo1.go")) - displayFiles = append(displayFiles, fn) - } - - var cgoflags []string - if bp.Goroot && bp.ImportPath == "runtime/cgo" { - cgoflags = append(cgoflags, "-import_runtime_cgo=false") - } - if bp.Goroot && bp.ImportPath == "runtime/race" || bp.ImportPath == "runtime/cgo" { - cgoflags = append(cgoflags, "-import_syscall=false") - } - - var cgoFiles []string = bp.CgoFiles - if useabs { - cgoFiles = make([]string, len(bp.CgoFiles)) - for i := range cgoFiles { - cgoFiles[i] = filepath.Join(pkgdir, bp.CgoFiles[i]) - } - } - - args := stringList( - "go", "tool", "cgo", "-objdir", tmpdir, cgoflags, "--", - cgoCPPFLAGS, cgoexeCFLAGS, cgoFiles, - ) - if false { - log.Printf("Running cgo for package %q: %s (dir=%s)", bp.ImportPath, args, pkgdir) - } - cmd := exec.Command(args[0], args[1:]...) - cmd.Dir = pkgdir - cmd.Stdout = os.Stderr - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - return nil, nil, fmt.Errorf("cgo failed: %s: %s", args, err) - } - - return files, displayFiles, nil -} - -// -- unmodified from 'go build' --------------------------------------- - -// Return the flags to use when invoking the C or C++ compilers, or cgo. -func cflags(p *build.Package, def bool) (cppflags, cflags, cxxflags, ldflags []string) { - var defaults string - if def { - defaults = "-g -O2" - } - - cppflags = stringList(envList("CGO_CPPFLAGS", ""), p.CgoCPPFLAGS) - cflags = stringList(envList("CGO_CFLAGS", defaults), p.CgoCFLAGS) - cxxflags = stringList(envList("CGO_CXXFLAGS", defaults), p.CgoCXXFLAGS) - ldflags = stringList(envList("CGO_LDFLAGS", defaults), p.CgoLDFLAGS) - return -} - -// envList returns the value of the given environment variable broken -// into fields, using the default value when the variable is empty. -func envList(key, def string) []string { - v := os.Getenv(key) - if v == "" { - v = def - } - return strings.Fields(v) -} - -// stringList's arguments should be a sequence of string or []string values. -// stringList flattens them into a single []string. -func stringList(args ...interface{}) []string { - var x []string - for _, arg := range args { - switch arg := arg.(type) { - case []string: - x = append(x, arg...) - case string: - x = append(x, arg) - default: - panic("stringList: invalid argument") - } - } - return x -} diff --git a/vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go b/vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go deleted file mode 100644 index b5bb95a63e..0000000000 --- a/vendor/golang.org/x/tools/go/internal/cgo/cgo_pkgconfig.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cgo - -import ( - "errors" - "fmt" - "go/build" - "os/exec" - "strings" -) - -// pkgConfig runs pkg-config with the specified arguments and returns the flags it prints. -func pkgConfig(mode string, pkgs []string) (flags []string, err error) { - cmd := exec.Command("pkg-config", append([]string{mode}, pkgs...)...) - out, err := cmd.CombinedOutput() - if err != nil { - s := fmt.Sprintf("%s failed: %v", strings.Join(cmd.Args, " "), err) - if len(out) > 0 { - s = fmt.Sprintf("%s: %s", s, out) - } - return nil, errors.New(s) - } - if len(out) > 0 { - flags = strings.Fields(string(out)) - } - return -} - -// pkgConfigFlags calls pkg-config if needed and returns the cflags -// needed to build the package. -func pkgConfigFlags(p *build.Package) (cflags []string, err error) { - if len(p.CgoPkgConfig) == 0 { - return nil, nil - } - return pkgConfig("--cflags", p.CgoPkgConfig) -} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/BUILD.bazel b/vendor/golang.org/x/tools/go/internal/gcimporter/BUILD.bazel deleted file mode 100644 index 7162090ba8..0000000000 --- a/vendor/golang.org/x/tools/go/internal/gcimporter/BUILD.bazel +++ /dev/null @@ -1,18 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bexport.go", - "bimport.go", - "exportdata.go", - "gcimporter.go", - "iexport.go", - "iimport.go", - "newInterface10.go", - "newInterface11.go", - ], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/internal/gcimporter", - importpath = "golang.org/x/tools/go/internal/gcimporter", - visibility = ["//vendor/golang.org/x/tools/go:__subpackages__"], -) diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/bexport.go b/vendor/golang.org/x/tools/go/internal/gcimporter/bexport.go deleted file mode 100644 index a807d0aaa2..0000000000 --- a/vendor/golang.org/x/tools/go/internal/gcimporter/bexport.go +++ /dev/null @@ -1,852 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Binary package export. -// This file was derived from $GOROOT/src/cmd/compile/internal/gc/bexport.go; -// see that file for specification of the format. - -package gcimporter - -import ( - "bytes" - "encoding/binary" - "fmt" - "go/ast" - "go/constant" - "go/token" - "go/types" - "math" - "math/big" - "sort" - "strings" -) - -// If debugFormat is set, each integer and string value is preceded by a marker -// and position information in the encoding. This mechanism permits an importer -// to recognize immediately when it is out of sync. The importer recognizes this -// mode automatically (i.e., it can import export data produced with debugging -// support even if debugFormat is not set at the time of import). This mode will -// lead to massively larger export data (by a factor of 2 to 3) and should only -// be enabled during development and debugging. -// -// NOTE: This flag is the first flag to enable if importing dies because of -// (suspected) format errors, and whenever a change is made to the format. -const debugFormat = false // default: false - -// If trace is set, debugging output is printed to std out. -const trace = false // default: false - -// Current export format version. Increase with each format change. -// Note: The latest binary (non-indexed) export format is at version 6. -// This exporter is still at level 4, but it doesn't matter since -// the binary importer can handle older versions just fine. -// 6: package height (CL 105038) -- NOT IMPLEMENTED HERE -// 5: improved position encoding efficiency (issue 20080, CL 41619) -- NOT IMPLEMEMTED HERE -// 4: type name objects support type aliases, uses aliasTag -// 3: Go1.8 encoding (same as version 2, aliasTag defined but never used) -// 2: removed unused bool in ODCL export (compiler only) -// 1: header format change (more regular), export package for _ struct fields -// 0: Go1.7 encoding -const exportVersion = 4 - -// trackAllTypes enables cycle tracking for all types, not just named -// types. The existing compiler invariants assume that unnamed types -// that are not completely set up are not used, or else there are spurious -// errors. -// If disabled, only named types are tracked, possibly leading to slightly -// less efficient encoding in rare cases. It also prevents the export of -// some corner-case type declarations (but those are not handled correctly -// with with the textual export format either). -// TODO(gri) enable and remove once issues caused by it are fixed -const trackAllTypes = false - -type exporter struct { - fset *token.FileSet - out bytes.Buffer - - // object -> index maps, indexed in order of serialization - strIndex map[string]int - pkgIndex map[*types.Package]int - typIndex map[types.Type]int - - // position encoding - posInfoFormat bool - prevFile string - prevLine int - - // debugging support - written int // bytes written - indent int // for trace -} - -// internalError represents an error generated inside this package. -type internalError string - -func (e internalError) Error() string { return "gcimporter: " + string(e) } - -func internalErrorf(format string, args ...interface{}) error { - return internalError(fmt.Sprintf(format, args...)) -} - -// BExportData returns binary export data for pkg. -// If no file set is provided, position info will be missing. -func BExportData(fset *token.FileSet, pkg *types.Package) (b []byte, err error) { - defer func() { - if e := recover(); e != nil { - if ierr, ok := e.(internalError); ok { - err = ierr - return - } - // Not an internal error; panic again. - panic(e) - } - }() - - p := exporter{ - fset: fset, - strIndex: map[string]int{"": 0}, // empty string is mapped to 0 - pkgIndex: make(map[*types.Package]int), - typIndex: make(map[types.Type]int), - posInfoFormat: true, // TODO(gri) might become a flag, eventually - } - - // write version info - // The version string must start with "version %d" where %d is the version - // number. Additional debugging information may follow after a blank; that - // text is ignored by the importer. - p.rawStringln(fmt.Sprintf("version %d", exportVersion)) - var debug string - if debugFormat { - debug = "debug" - } - p.rawStringln(debug) // cannot use p.bool since it's affected by debugFormat; also want to see this clearly - p.bool(trackAllTypes) - p.bool(p.posInfoFormat) - - // --- generic export data --- - - // populate type map with predeclared "known" types - for index, typ := range predeclared() { - p.typIndex[typ] = index - } - if len(p.typIndex) != len(predeclared()) { - return nil, internalError("duplicate entries in type map?") - } - - // write package data - p.pkg(pkg, true) - if trace { - p.tracef("\n") - } - - // write objects - objcount := 0 - scope := pkg.Scope() - for _, name := range scope.Names() { - if !ast.IsExported(name) { - continue - } - if trace { - p.tracef("\n") - } - p.obj(scope.Lookup(name)) - objcount++ - } - - // indicate end of list - if trace { - p.tracef("\n") - } - p.tag(endTag) - - // for self-verification only (redundant) - p.int(objcount) - - if trace { - p.tracef("\n") - } - - // --- end of export data --- - - return p.out.Bytes(), nil -} - -func (p *exporter) pkg(pkg *types.Package, emptypath bool) { - if pkg == nil { - panic(internalError("unexpected nil pkg")) - } - - // if we saw the package before, write its index (>= 0) - if i, ok := p.pkgIndex[pkg]; ok { - p.index('P', i) - return - } - - // otherwise, remember the package, write the package tag (< 0) and package data - if trace { - p.tracef("P%d = { ", len(p.pkgIndex)) - defer p.tracef("} ") - } - p.pkgIndex[pkg] = len(p.pkgIndex) - - p.tag(packageTag) - p.string(pkg.Name()) - if emptypath { - p.string("") - } else { - p.string(pkg.Path()) - } -} - -func (p *exporter) obj(obj types.Object) { - switch obj := obj.(type) { - case *types.Const: - p.tag(constTag) - p.pos(obj) - p.qualifiedName(obj) - p.typ(obj.Type()) - p.value(obj.Val()) - - case *types.TypeName: - if obj.IsAlias() { - p.tag(aliasTag) - p.pos(obj) - p.qualifiedName(obj) - } else { - p.tag(typeTag) - } - p.typ(obj.Type()) - - case *types.Var: - p.tag(varTag) - p.pos(obj) - p.qualifiedName(obj) - p.typ(obj.Type()) - - case *types.Func: - p.tag(funcTag) - p.pos(obj) - p.qualifiedName(obj) - sig := obj.Type().(*types.Signature) - p.paramList(sig.Params(), sig.Variadic()) - p.paramList(sig.Results(), false) - - default: - panic(internalErrorf("unexpected object %v (%T)", obj, obj)) - } -} - -func (p *exporter) pos(obj types.Object) { - if !p.posInfoFormat { - return - } - - file, line := p.fileLine(obj) - if file == p.prevFile { - // common case: write line delta - // delta == 0 means different file or no line change - delta := line - p.prevLine - p.int(delta) - if delta == 0 { - p.int(-1) // -1 means no file change - } - } else { - // different file - p.int(0) - // Encode filename as length of common prefix with previous - // filename, followed by (possibly empty) suffix. Filenames - // frequently share path prefixes, so this can save a lot - // of space and make export data size less dependent on file - // path length. The suffix is unlikely to be empty because - // file names tend to end in ".go". - n := commonPrefixLen(p.prevFile, file) - p.int(n) // n >= 0 - p.string(file[n:]) // write suffix only - p.prevFile = file - p.int(line) - } - p.prevLine = line -} - -func (p *exporter) fileLine(obj types.Object) (file string, line int) { - if p.fset != nil { - pos := p.fset.Position(obj.Pos()) - file = pos.Filename - line = pos.Line - } - return -} - -func commonPrefixLen(a, b string) int { - if len(a) > len(b) { - a, b = b, a - } - // len(a) <= len(b) - i := 0 - for i < len(a) && a[i] == b[i] { - i++ - } - return i -} - -func (p *exporter) qualifiedName(obj types.Object) { - p.string(obj.Name()) - p.pkg(obj.Pkg(), false) -} - -func (p *exporter) typ(t types.Type) { - if t == nil { - panic(internalError("nil type")) - } - - // Possible optimization: Anonymous pointer types *T where - // T is a named type are common. We could canonicalize all - // such types *T to a single type PT = *T. This would lead - // to at most one *T entry in typIndex, and all future *T's - // would be encoded as the respective index directly. Would - // save 1 byte (pointerTag) per *T and reduce the typIndex - // size (at the cost of a canonicalization map). We can do - // this later, without encoding format change. - - // if we saw the type before, write its index (>= 0) - if i, ok := p.typIndex[t]; ok { - p.index('T', i) - return - } - - // otherwise, remember the type, write the type tag (< 0) and type data - if trackAllTypes { - if trace { - p.tracef("T%d = {>\n", len(p.typIndex)) - defer p.tracef("<\n} ") - } - p.typIndex[t] = len(p.typIndex) - } - - switch t := t.(type) { - case *types.Named: - if !trackAllTypes { - // if we don't track all types, track named types now - p.typIndex[t] = len(p.typIndex) - } - - p.tag(namedTag) - p.pos(t.Obj()) - p.qualifiedName(t.Obj()) - p.typ(t.Underlying()) - if !types.IsInterface(t) { - p.assocMethods(t) - } - - case *types.Array: - p.tag(arrayTag) - p.int64(t.Len()) - p.typ(t.Elem()) - - case *types.Slice: - p.tag(sliceTag) - p.typ(t.Elem()) - - case *dddSlice: - p.tag(dddTag) - p.typ(t.elem) - - case *types.Struct: - p.tag(structTag) - p.fieldList(t) - - case *types.Pointer: - p.tag(pointerTag) - p.typ(t.Elem()) - - case *types.Signature: - p.tag(signatureTag) - p.paramList(t.Params(), t.Variadic()) - p.paramList(t.Results(), false) - - case *types.Interface: - p.tag(interfaceTag) - p.iface(t) - - case *types.Map: - p.tag(mapTag) - p.typ(t.Key()) - p.typ(t.Elem()) - - case *types.Chan: - p.tag(chanTag) - p.int(int(3 - t.Dir())) // hack - p.typ(t.Elem()) - - default: - panic(internalErrorf("unexpected type %T: %s", t, t)) - } -} - -func (p *exporter) assocMethods(named *types.Named) { - // Sort methods (for determinism). - var methods []*types.Func - for i := 0; i < named.NumMethods(); i++ { - methods = append(methods, named.Method(i)) - } - sort.Sort(methodsByName(methods)) - - p.int(len(methods)) - - if trace && methods != nil { - p.tracef("associated methods {>\n") - } - - for i, m := range methods { - if trace && i > 0 { - p.tracef("\n") - } - - p.pos(m) - name := m.Name() - p.string(name) - if !exported(name) { - p.pkg(m.Pkg(), false) - } - - sig := m.Type().(*types.Signature) - p.paramList(types.NewTuple(sig.Recv()), false) - p.paramList(sig.Params(), sig.Variadic()) - p.paramList(sig.Results(), false) - p.int(0) // dummy value for go:nointerface pragma - ignored by importer - } - - if trace && methods != nil { - p.tracef("<\n} ") - } -} - -type methodsByName []*types.Func - -func (x methodsByName) Len() int { return len(x) } -func (x methodsByName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } -func (x methodsByName) Less(i, j int) bool { return x[i].Name() < x[j].Name() } - -func (p *exporter) fieldList(t *types.Struct) { - if trace && t.NumFields() > 0 { - p.tracef("fields {>\n") - defer p.tracef("<\n} ") - } - - p.int(t.NumFields()) - for i := 0; i < t.NumFields(); i++ { - if trace && i > 0 { - p.tracef("\n") - } - p.field(t.Field(i)) - p.string(t.Tag(i)) - } -} - -func (p *exporter) field(f *types.Var) { - if !f.IsField() { - panic(internalError("field expected")) - } - - p.pos(f) - p.fieldName(f) - p.typ(f.Type()) -} - -func (p *exporter) iface(t *types.Interface) { - // TODO(gri): enable importer to load embedded interfaces, - // then emit Embeddeds and ExplicitMethods separately here. - p.int(0) - - n := t.NumMethods() - if trace && n > 0 { - p.tracef("methods {>\n") - defer p.tracef("<\n} ") - } - p.int(n) - for i := 0; i < n; i++ { - if trace && i > 0 { - p.tracef("\n") - } - p.method(t.Method(i)) - } -} - -func (p *exporter) method(m *types.Func) { - sig := m.Type().(*types.Signature) - if sig.Recv() == nil { - panic(internalError("method expected")) - } - - p.pos(m) - p.string(m.Name()) - if m.Name() != "_" && !ast.IsExported(m.Name()) { - p.pkg(m.Pkg(), false) - } - - // interface method; no need to encode receiver. - p.paramList(sig.Params(), sig.Variadic()) - p.paramList(sig.Results(), false) -} - -func (p *exporter) fieldName(f *types.Var) { - name := f.Name() - - if f.Anonymous() { - // anonymous field - we distinguish between 3 cases: - // 1) field name matches base type name and is exported - // 2) field name matches base type name and is not exported - // 3) field name doesn't match base type name (alias name) - bname := basetypeName(f.Type()) - if name == bname { - if ast.IsExported(name) { - name = "" // 1) we don't need to know the field name or package - } else { - name = "?" // 2) use unexported name "?" to force package export - } - } else { - // 3) indicate alias and export name as is - // (this requires an extra "@" but this is a rare case) - p.string("@") - } - } - - p.string(name) - if name != "" && !ast.IsExported(name) { - p.pkg(f.Pkg(), false) - } -} - -func basetypeName(typ types.Type) string { - switch typ := deref(typ).(type) { - case *types.Basic: - return typ.Name() - case *types.Named: - return typ.Obj().Name() - default: - return "" // unnamed type - } -} - -func (p *exporter) paramList(params *types.Tuple, variadic bool) { - // use negative length to indicate unnamed parameters - // (look at the first parameter only since either all - // names are present or all are absent) - n := params.Len() - if n > 0 && params.At(0).Name() == "" { - n = -n - } - p.int(n) - for i := 0; i < params.Len(); i++ { - q := params.At(i) - t := q.Type() - if variadic && i == params.Len()-1 { - t = &dddSlice{t.(*types.Slice).Elem()} - } - p.typ(t) - if n > 0 { - name := q.Name() - p.string(name) - if name != "_" { - p.pkg(q.Pkg(), false) - } - } - p.string("") // no compiler-specific info - } -} - -func (p *exporter) value(x constant.Value) { - if trace { - p.tracef("= ") - } - - switch x.Kind() { - case constant.Bool: - tag := falseTag - if constant.BoolVal(x) { - tag = trueTag - } - p.tag(tag) - - case constant.Int: - if v, exact := constant.Int64Val(x); exact { - // common case: x fits into an int64 - use compact encoding - p.tag(int64Tag) - p.int64(v) - return - } - // uncommon case: large x - use float encoding - // (powers of 2 will be encoded efficiently with exponent) - p.tag(floatTag) - p.float(constant.ToFloat(x)) - - case constant.Float: - p.tag(floatTag) - p.float(x) - - case constant.Complex: - p.tag(complexTag) - p.float(constant.Real(x)) - p.float(constant.Imag(x)) - - case constant.String: - p.tag(stringTag) - p.string(constant.StringVal(x)) - - case constant.Unknown: - // package contains type errors - p.tag(unknownTag) - - default: - panic(internalErrorf("unexpected value %v (%T)", x, x)) - } -} - -func (p *exporter) float(x constant.Value) { - if x.Kind() != constant.Float { - panic(internalErrorf("unexpected constant %v, want float", x)) - } - // extract sign (there is no -0) - sign := constant.Sign(x) - if sign == 0 { - // x == 0 - p.int(0) - return - } - // x != 0 - - var f big.Float - if v, exact := constant.Float64Val(x); exact { - // float64 - f.SetFloat64(v) - } else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int { - // TODO(gri): add big.Rat accessor to constant.Value. - r := valueToRat(num) - f.SetRat(r.Quo(r, valueToRat(denom))) - } else { - // Value too large to represent as a fraction => inaccessible. - // TODO(gri): add big.Float accessor to constant.Value. - f.SetFloat64(math.MaxFloat64) // FIXME - } - - // extract exponent such that 0.5 <= m < 1.0 - var m big.Float - exp := f.MantExp(&m) - - // extract mantissa as *big.Int - // - set exponent large enough so mant satisfies mant.IsInt() - // - get *big.Int from mant - m.SetMantExp(&m, int(m.MinPrec())) - mant, acc := m.Int(nil) - if acc != big.Exact { - panic(internalError("internal error")) - } - - p.int(sign) - p.int(exp) - p.string(string(mant.Bytes())) -} - -func valueToRat(x constant.Value) *big.Rat { - // Convert little-endian to big-endian. - // I can't believe this is necessary. - bytes := constant.Bytes(x) - for i := 0; i < len(bytes)/2; i++ { - bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i] - } - return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes)) -} - -func (p *exporter) bool(b bool) bool { - if trace { - p.tracef("[") - defer p.tracef("= %v] ", b) - } - - x := 0 - if b { - x = 1 - } - p.int(x) - return b -} - -// ---------------------------------------------------------------------------- -// Low-level encoders - -func (p *exporter) index(marker byte, index int) { - if index < 0 { - panic(internalError("invalid index < 0")) - } - if debugFormat { - p.marker('t') - } - if trace { - p.tracef("%c%d ", marker, index) - } - p.rawInt64(int64(index)) -} - -func (p *exporter) tag(tag int) { - if tag >= 0 { - panic(internalError("invalid tag >= 0")) - } - if debugFormat { - p.marker('t') - } - if trace { - p.tracef("%s ", tagString[-tag]) - } - p.rawInt64(int64(tag)) -} - -func (p *exporter) int(x int) { - p.int64(int64(x)) -} - -func (p *exporter) int64(x int64) { - if debugFormat { - p.marker('i') - } - if trace { - p.tracef("%d ", x) - } - p.rawInt64(x) -} - -func (p *exporter) string(s string) { - if debugFormat { - p.marker('s') - } - if trace { - p.tracef("%q ", s) - } - // if we saw the string before, write its index (>= 0) - // (the empty string is mapped to 0) - if i, ok := p.strIndex[s]; ok { - p.rawInt64(int64(i)) - return - } - // otherwise, remember string and write its negative length and bytes - p.strIndex[s] = len(p.strIndex) - p.rawInt64(-int64(len(s))) - for i := 0; i < len(s); i++ { - p.rawByte(s[i]) - } -} - -// marker emits a marker byte and position information which makes -// it easy for a reader to detect if it is "out of sync". Used for -// debugFormat format only. -func (p *exporter) marker(m byte) { - p.rawByte(m) - // Enable this for help tracking down the location - // of an incorrect marker when running in debugFormat. - if false && trace { - p.tracef("#%d ", p.written) - } - p.rawInt64(int64(p.written)) -} - -// rawInt64 should only be used by low-level encoders. -func (p *exporter) rawInt64(x int64) { - var tmp [binary.MaxVarintLen64]byte - n := binary.PutVarint(tmp[:], x) - for i := 0; i < n; i++ { - p.rawByte(tmp[i]) - } -} - -// rawStringln should only be used to emit the initial version string. -func (p *exporter) rawStringln(s string) { - for i := 0; i < len(s); i++ { - p.rawByte(s[i]) - } - p.rawByte('\n') -} - -// rawByte is the bottleneck interface to write to p.out. -// rawByte escapes b as follows (any encoding does that -// hides '$'): -// -// '$' => '|' 'S' -// '|' => '|' '|' -// -// Necessary so other tools can find the end of the -// export data by searching for "$$". -// rawByte should only be used by low-level encoders. -func (p *exporter) rawByte(b byte) { - switch b { - case '$': - // write '$' as '|' 'S' - b = 'S' - fallthrough - case '|': - // write '|' as '|' '|' - p.out.WriteByte('|') - p.written++ - } - p.out.WriteByte(b) - p.written++ -} - -// tracef is like fmt.Printf but it rewrites the format string -// to take care of indentation. -func (p *exporter) tracef(format string, args ...interface{}) { - if strings.ContainsAny(format, "<>\n") { - var buf bytes.Buffer - for i := 0; i < len(format); i++ { - // no need to deal with runes - ch := format[i] - switch ch { - case '>': - p.indent++ - continue - case '<': - p.indent-- - continue - } - buf.WriteByte(ch) - if ch == '\n' { - for j := p.indent; j > 0; j-- { - buf.WriteString(". ") - } - } - } - format = buf.String() - } - fmt.Printf(format, args...) -} - -// Debugging support. -// (tagString is only used when tracing is enabled) -var tagString = [...]string{ - // Packages - -packageTag: "package", - - // Types - -namedTag: "named type", - -arrayTag: "array", - -sliceTag: "slice", - -dddTag: "ddd", - -structTag: "struct", - -pointerTag: "pointer", - -signatureTag: "signature", - -interfaceTag: "interface", - -mapTag: "map", - -chanTag: "chan", - - // Values - -falseTag: "false", - -trueTag: "true", - -int64Tag: "int64", - -floatTag: "float", - -fractionTag: "fraction", - -complexTag: "complex", - -stringTag: "string", - -unknownTag: "unknown", - - // Type aliases - -aliasTag: "alias", -} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/bimport.go b/vendor/golang.org/x/tools/go/internal/gcimporter/bimport.go deleted file mode 100644 index e9f73d14a1..0000000000 --- a/vendor/golang.org/x/tools/go/internal/gcimporter/bimport.go +++ /dev/null @@ -1,1039 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// This file is a copy of $GOROOT/src/go/internal/gcimporter/bimport.go. - -package gcimporter - -import ( - "encoding/binary" - "fmt" - "go/constant" - "go/token" - "go/types" - "sort" - "strconv" - "strings" - "sync" - "unicode" - "unicode/utf8" -) - -type importer struct { - imports map[string]*types.Package - data []byte - importpath string - buf []byte // for reading strings - version int // export format version - - // object lists - strList []string // in order of appearance - pathList []string // in order of appearance - pkgList []*types.Package // in order of appearance - typList []types.Type // in order of appearance - interfaceList []*types.Interface // for delayed completion only - trackAllTypes bool - - // position encoding - posInfoFormat bool - prevFile string - prevLine int - fake fakeFileSet - - // debugging support - debugFormat bool - read int // bytes read -} - -// BImportData imports a package from the serialized package data -// and returns the number of bytes consumed and a reference to the package. -// If the export data version is not recognized or the format is otherwise -// compromised, an error is returned. -func BImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { - // catch panics and return them as errors - const currentVersion = 6 - version := -1 // unknown version - defer func() { - if e := recover(); e != nil { - // Return a (possibly nil or incomplete) package unchanged (see #16088). - if version > currentVersion { - err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) - } else { - err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e) - } - } - }() - - p := importer{ - imports: imports, - data: data, - importpath: path, - version: version, - strList: []string{""}, // empty string is mapped to 0 - pathList: []string{""}, // empty string is mapped to 0 - fake: fakeFileSet{ - fset: fset, - files: make(map[string]*token.File), - }, - } - - // read version info - var versionstr string - if b := p.rawByte(); b == 'c' || b == 'd' { - // Go1.7 encoding; first byte encodes low-level - // encoding format (compact vs debug). - // For backward-compatibility only (avoid problems with - // old installed packages). Newly compiled packages use - // the extensible format string. - // TODO(gri) Remove this support eventually; after Go1.8. - if b == 'd' { - p.debugFormat = true - } - p.trackAllTypes = p.rawByte() == 'a' - p.posInfoFormat = p.int() != 0 - versionstr = p.string() - if versionstr == "v1" { - version = 0 - } - } else { - // Go1.8 extensible encoding - // read version string and extract version number (ignore anything after the version number) - versionstr = p.rawStringln(b) - if s := strings.SplitN(versionstr, " ", 3); len(s) >= 2 && s[0] == "version" { - if v, err := strconv.Atoi(s[1]); err == nil && v > 0 { - version = v - } - } - } - p.version = version - - // read version specific flags - extend as necessary - switch p.version { - // case currentVersion: - // ... - // fallthrough - case currentVersion, 5, 4, 3, 2, 1: - p.debugFormat = p.rawStringln(p.rawByte()) == "debug" - p.trackAllTypes = p.int() != 0 - p.posInfoFormat = p.int() != 0 - case 0: - // Go1.7 encoding format - nothing to do here - default: - errorf("unknown bexport format version %d (%q)", p.version, versionstr) - } - - // --- generic export data --- - - // populate typList with predeclared "known" types - p.typList = append(p.typList, predeclared()...) - - // read package data - pkg = p.pkg() - - // read objects of phase 1 only (see cmd/compile/internal/gc/bexport.go) - objcount := 0 - for { - tag := p.tagOrIndex() - if tag == endTag { - break - } - p.obj(tag) - objcount++ - } - - // self-verification - if count := p.int(); count != objcount { - errorf("got %d objects; want %d", objcount, count) - } - - // ignore compiler-specific import data - - // complete interfaces - // TODO(gri) re-investigate if we still need to do this in a delayed fashion - for _, typ := range p.interfaceList { - typ.Complete() - } - - // record all referenced packages as imports - list := append(([]*types.Package)(nil), p.pkgList[1:]...) - sort.Sort(byPath(list)) - pkg.SetImports(list) - - // package was imported completely and without errors - pkg.MarkComplete() - - return p.read, pkg, nil -} - -func errorf(format string, args ...interface{}) { - panic(fmt.Sprintf(format, args...)) -} - -func (p *importer) pkg() *types.Package { - // if the package was seen before, i is its index (>= 0) - i := p.tagOrIndex() - if i >= 0 { - return p.pkgList[i] - } - - // otherwise, i is the package tag (< 0) - if i != packageTag { - errorf("unexpected package tag %d version %d", i, p.version) - } - - // read package data - name := p.string() - var path string - if p.version >= 5 { - path = p.path() - } else { - path = p.string() - } - if p.version >= 6 { - p.int() // package height; unused by go/types - } - - // we should never see an empty package name - if name == "" { - errorf("empty package name in import") - } - - // an empty path denotes the package we are currently importing; - // it must be the first package we see - if (path == "") != (len(p.pkgList) == 0) { - errorf("package path %q for pkg index %d", path, len(p.pkgList)) - } - - // if the package was imported before, use that one; otherwise create a new one - if path == "" { - path = p.importpath - } - pkg := p.imports[path] - if pkg == nil { - pkg = types.NewPackage(path, name) - p.imports[path] = pkg - } else if pkg.Name() != name { - errorf("conflicting names %s and %s for package %q", pkg.Name(), name, path) - } - p.pkgList = append(p.pkgList, pkg) - - return pkg -} - -// objTag returns the tag value for each object kind. -func objTag(obj types.Object) int { - switch obj.(type) { - case *types.Const: - return constTag - case *types.TypeName: - return typeTag - case *types.Var: - return varTag - case *types.Func: - return funcTag - default: - errorf("unexpected object: %v (%T)", obj, obj) // panics - panic("unreachable") - } -} - -func sameObj(a, b types.Object) bool { - // Because unnamed types are not canonicalized, we cannot simply compare types for - // (pointer) identity. - // Ideally we'd check equality of constant values as well, but this is good enough. - return objTag(a) == objTag(b) && types.Identical(a.Type(), b.Type()) -} - -func (p *importer) declare(obj types.Object) { - pkg := obj.Pkg() - if alt := pkg.Scope().Insert(obj); alt != nil { - // This can only trigger if we import a (non-type) object a second time. - // Excluding type aliases, this cannot happen because 1) we only import a package - // once; and b) we ignore compiler-specific export data which may contain - // functions whose inlined function bodies refer to other functions that - // were already imported. - // However, type aliases require reexporting the original type, so we need - // to allow it (see also the comment in cmd/compile/internal/gc/bimport.go, - // method importer.obj, switch case importing functions). - // TODO(gri) review/update this comment once the gc compiler handles type aliases. - if !sameObj(obj, alt) { - errorf("inconsistent import:\n\t%v\npreviously imported as:\n\t%v\n", obj, alt) - } - } -} - -func (p *importer) obj(tag int) { - switch tag { - case constTag: - pos := p.pos() - pkg, name := p.qualifiedName() - typ := p.typ(nil, nil) - val := p.value() - p.declare(types.NewConst(pos, pkg, name, typ, val)) - - case aliasTag: - // TODO(gri) verify type alias hookup is correct - pos := p.pos() - pkg, name := p.qualifiedName() - typ := p.typ(nil, nil) - p.declare(types.NewTypeName(pos, pkg, name, typ)) - - case typeTag: - p.typ(nil, nil) - - case varTag: - pos := p.pos() - pkg, name := p.qualifiedName() - typ := p.typ(nil, nil) - p.declare(types.NewVar(pos, pkg, name, typ)) - - case funcTag: - pos := p.pos() - pkg, name := p.qualifiedName() - params, isddd := p.paramList() - result, _ := p.paramList() - sig := types.NewSignature(nil, params, result, isddd) - p.declare(types.NewFunc(pos, pkg, name, sig)) - - default: - errorf("unexpected object tag %d", tag) - } -} - -const deltaNewFile = -64 // see cmd/compile/internal/gc/bexport.go - -func (p *importer) pos() token.Pos { - if !p.posInfoFormat { - return token.NoPos - } - - file := p.prevFile - line := p.prevLine - delta := p.int() - line += delta - if p.version >= 5 { - if delta == deltaNewFile { - if n := p.int(); n >= 0 { - // file changed - file = p.path() - line = n - } - } - } else { - if delta == 0 { - if n := p.int(); n >= 0 { - // file changed - file = p.prevFile[:n] + p.string() - line = p.int() - } - } - } - p.prevFile = file - p.prevLine = line - - return p.fake.pos(file, line, 0) -} - -// Synthesize a token.Pos -type fakeFileSet struct { - fset *token.FileSet - files map[string]*token.File -} - -func (s *fakeFileSet) pos(file string, line, column int) token.Pos { - // TODO(mdempsky): Make use of column. - - // Since we don't know the set of needed file positions, we - // reserve maxlines positions per file. - const maxlines = 64 * 1024 - f := s.files[file] - if f == nil { - f = s.fset.AddFile(file, -1, maxlines) - s.files[file] = f - // Allocate the fake linebreak indices on first use. - // TODO(adonovan): opt: save ~512KB using a more complex scheme? - fakeLinesOnce.Do(func() { - fakeLines = make([]int, maxlines) - for i := range fakeLines { - fakeLines[i] = i - } - }) - f.SetLines(fakeLines) - } - - if line > maxlines { - line = 1 - } - - // Treat the file as if it contained only newlines - // and column=1: use the line number as the offset. - return f.Pos(line - 1) -} - -var ( - fakeLines []int - fakeLinesOnce sync.Once -) - -func (p *importer) qualifiedName() (pkg *types.Package, name string) { - name = p.string() - pkg = p.pkg() - return -} - -func (p *importer) record(t types.Type) { - p.typList = append(p.typList, t) -} - -// A dddSlice is a types.Type representing ...T parameters. -// It only appears for parameter types and does not escape -// the importer. -type dddSlice struct { - elem types.Type -} - -func (t *dddSlice) Underlying() types.Type { return t } -func (t *dddSlice) String() string { return "..." + t.elem.String() } - -// parent is the package which declared the type; parent == nil means -// the package currently imported. The parent package is needed for -// exported struct fields and interface methods which don't contain -// explicit package information in the export data. -// -// A non-nil tname is used as the "owner" of the result type; i.e., -// the result type is the underlying type of tname. tname is used -// to give interface methods a named receiver type where possible. -func (p *importer) typ(parent *types.Package, tname *types.Named) types.Type { - // if the type was seen before, i is its index (>= 0) - i := p.tagOrIndex() - if i >= 0 { - return p.typList[i] - } - - // otherwise, i is the type tag (< 0) - switch i { - case namedTag: - // read type object - pos := p.pos() - parent, name := p.qualifiedName() - scope := parent.Scope() - obj := scope.Lookup(name) - - // if the object doesn't exist yet, create and insert it - if obj == nil { - obj = types.NewTypeName(pos, parent, name, nil) - scope.Insert(obj) - } - - if _, ok := obj.(*types.TypeName); !ok { - errorf("pkg = %s, name = %s => %s", parent, name, obj) - } - - // associate new named type with obj if it doesn't exist yet - t0 := types.NewNamed(obj.(*types.TypeName), nil, nil) - - // but record the existing type, if any - tname := obj.Type().(*types.Named) // tname is either t0 or the existing type - p.record(tname) - - // read underlying type - t0.SetUnderlying(p.typ(parent, t0)) - - // interfaces don't have associated methods - if types.IsInterface(t0) { - return tname - } - - // read associated methods - for i := p.int(); i > 0; i-- { - // TODO(gri) replace this with something closer to fieldName - pos := p.pos() - name := p.string() - if !exported(name) { - p.pkg() - } - - recv, _ := p.paramList() // TODO(gri) do we need a full param list for the receiver? - params, isddd := p.paramList() - result, _ := p.paramList() - p.int() // go:nointerface pragma - discarded - - sig := types.NewSignature(recv.At(0), params, result, isddd) - t0.AddMethod(types.NewFunc(pos, parent, name, sig)) - } - - return tname - - case arrayTag: - t := new(types.Array) - if p.trackAllTypes { - p.record(t) - } - - n := p.int64() - *t = *types.NewArray(p.typ(parent, nil), n) - return t - - case sliceTag: - t := new(types.Slice) - if p.trackAllTypes { - p.record(t) - } - - *t = *types.NewSlice(p.typ(parent, nil)) - return t - - case dddTag: - t := new(dddSlice) - if p.trackAllTypes { - p.record(t) - } - - t.elem = p.typ(parent, nil) - return t - - case structTag: - t := new(types.Struct) - if p.trackAllTypes { - p.record(t) - } - - *t = *types.NewStruct(p.fieldList(parent)) - return t - - case pointerTag: - t := new(types.Pointer) - if p.trackAllTypes { - p.record(t) - } - - *t = *types.NewPointer(p.typ(parent, nil)) - return t - - case signatureTag: - t := new(types.Signature) - if p.trackAllTypes { - p.record(t) - } - - params, isddd := p.paramList() - result, _ := p.paramList() - *t = *types.NewSignature(nil, params, result, isddd) - return t - - case interfaceTag: - // Create a dummy entry in the type list. This is safe because we - // cannot expect the interface type to appear in a cycle, as any - // such cycle must contain a named type which would have been - // first defined earlier. - // TODO(gri) Is this still true now that we have type aliases? - // See issue #23225. - n := len(p.typList) - if p.trackAllTypes { - p.record(nil) - } - - var embeddeds []types.Type - for n := p.int(); n > 0; n-- { - p.pos() - embeddeds = append(embeddeds, p.typ(parent, nil)) - } - - t := newInterface(p.methodList(parent, tname), embeddeds) - p.interfaceList = append(p.interfaceList, t) - if p.trackAllTypes { - p.typList[n] = t - } - return t - - case mapTag: - t := new(types.Map) - if p.trackAllTypes { - p.record(t) - } - - key := p.typ(parent, nil) - val := p.typ(parent, nil) - *t = *types.NewMap(key, val) - return t - - case chanTag: - t := new(types.Chan) - if p.trackAllTypes { - p.record(t) - } - - dir := chanDir(p.int()) - val := p.typ(parent, nil) - *t = *types.NewChan(dir, val) - return t - - default: - errorf("unexpected type tag %d", i) // panics - panic("unreachable") - } -} - -func chanDir(d int) types.ChanDir { - // tag values must match the constants in cmd/compile/internal/gc/go.go - switch d { - case 1 /* Crecv */ : - return types.RecvOnly - case 2 /* Csend */ : - return types.SendOnly - case 3 /* Cboth */ : - return types.SendRecv - default: - errorf("unexpected channel dir %d", d) - return 0 - } -} - -func (p *importer) fieldList(parent *types.Package) (fields []*types.Var, tags []string) { - if n := p.int(); n > 0 { - fields = make([]*types.Var, n) - tags = make([]string, n) - for i := range fields { - fields[i], tags[i] = p.field(parent) - } - } - return -} - -func (p *importer) field(parent *types.Package) (*types.Var, string) { - pos := p.pos() - pkg, name, alias := p.fieldName(parent) - typ := p.typ(parent, nil) - tag := p.string() - - anonymous := false - if name == "" { - // anonymous field - typ must be T or *T and T must be a type name - switch typ := deref(typ).(type) { - case *types.Basic: // basic types are named types - pkg = nil // // objects defined in Universe scope have no package - name = typ.Name() - case *types.Named: - name = typ.Obj().Name() - default: - errorf("named base type expected") - } - anonymous = true - } else if alias { - // anonymous field: we have an explicit name because it's an alias - anonymous = true - } - - return types.NewField(pos, pkg, name, typ, anonymous), tag -} - -func (p *importer) methodList(parent *types.Package, baseType *types.Named) (methods []*types.Func) { - if n := p.int(); n > 0 { - methods = make([]*types.Func, n) - for i := range methods { - methods[i] = p.method(parent, baseType) - } - } - return -} - -func (p *importer) method(parent *types.Package, baseType *types.Named) *types.Func { - pos := p.pos() - pkg, name, _ := p.fieldName(parent) - // If we don't have a baseType, use a nil receiver. - // A receiver using the actual interface type (which - // we don't know yet) will be filled in when we call - // types.Interface.Complete. - var recv *types.Var - if baseType != nil { - recv = types.NewVar(token.NoPos, parent, "", baseType) - } - params, isddd := p.paramList() - result, _ := p.paramList() - sig := types.NewSignature(recv, params, result, isddd) - return types.NewFunc(pos, pkg, name, sig) -} - -func (p *importer) fieldName(parent *types.Package) (pkg *types.Package, name string, alias bool) { - name = p.string() - pkg = parent - if pkg == nil { - // use the imported package instead - pkg = p.pkgList[0] - } - if p.version == 0 && name == "_" { - // version 0 didn't export a package for _ fields - return - } - switch name { - case "": - // 1) field name matches base type name and is exported: nothing to do - case "?": - // 2) field name matches base type name and is not exported: need package - name = "" - pkg = p.pkg() - case "@": - // 3) field name doesn't match type name (alias) - name = p.string() - alias = true - fallthrough - default: - if !exported(name) { - pkg = p.pkg() - } - } - return -} - -func (p *importer) paramList() (*types.Tuple, bool) { - n := p.int() - if n == 0 { - return nil, false - } - // negative length indicates unnamed parameters - named := true - if n < 0 { - n = -n - named = false - } - // n > 0 - params := make([]*types.Var, n) - isddd := false - for i := range params { - params[i], isddd = p.param(named) - } - return types.NewTuple(params...), isddd -} - -func (p *importer) param(named bool) (*types.Var, bool) { - t := p.typ(nil, nil) - td, isddd := t.(*dddSlice) - if isddd { - t = types.NewSlice(td.elem) - } - - var pkg *types.Package - var name string - if named { - name = p.string() - if name == "" { - errorf("expected named parameter") - } - if name != "_" { - pkg = p.pkg() - } - if i := strings.Index(name, "·"); i > 0 { - name = name[:i] // cut off gc-specific parameter numbering - } - } - - // read and discard compiler-specific info - p.string() - - return types.NewVar(token.NoPos, pkg, name, t), isddd -} - -func exported(name string) bool { - ch, _ := utf8.DecodeRuneInString(name) - return unicode.IsUpper(ch) -} - -func (p *importer) value() constant.Value { - switch tag := p.tagOrIndex(); tag { - case falseTag: - return constant.MakeBool(false) - case trueTag: - return constant.MakeBool(true) - case int64Tag: - return constant.MakeInt64(p.int64()) - case floatTag: - return p.float() - case complexTag: - re := p.float() - im := p.float() - return constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) - case stringTag: - return constant.MakeString(p.string()) - case unknownTag: - return constant.MakeUnknown() - default: - errorf("unexpected value tag %d", tag) // panics - panic("unreachable") - } -} - -func (p *importer) float() constant.Value { - sign := p.int() - if sign == 0 { - return constant.MakeInt64(0) - } - - exp := p.int() - mant := []byte(p.string()) // big endian - - // remove leading 0's if any - for len(mant) > 0 && mant[0] == 0 { - mant = mant[1:] - } - - // convert to little endian - // TODO(gri) go/constant should have a more direct conversion function - // (e.g., once it supports a big.Float based implementation) - for i, j := 0, len(mant)-1; i < j; i, j = i+1, j-1 { - mant[i], mant[j] = mant[j], mant[i] - } - - // adjust exponent (constant.MakeFromBytes creates an integer value, - // but mant represents the mantissa bits such that 0.5 <= mant < 1.0) - exp -= len(mant) << 3 - if len(mant) > 0 { - for msd := mant[len(mant)-1]; msd&0x80 == 0; msd <<= 1 { - exp++ - } - } - - x := constant.MakeFromBytes(mant) - switch { - case exp < 0: - d := constant.Shift(constant.MakeInt64(1), token.SHL, uint(-exp)) - x = constant.BinaryOp(x, token.QUO, d) - case exp > 0: - x = constant.Shift(x, token.SHL, uint(exp)) - } - - if sign < 0 { - x = constant.UnaryOp(token.SUB, x, 0) - } - return x -} - -// ---------------------------------------------------------------------------- -// Low-level decoders - -func (p *importer) tagOrIndex() int { - if p.debugFormat { - p.marker('t') - } - - return int(p.rawInt64()) -} - -func (p *importer) int() int { - x := p.int64() - if int64(int(x)) != x { - errorf("exported integer too large") - } - return int(x) -} - -func (p *importer) int64() int64 { - if p.debugFormat { - p.marker('i') - } - - return p.rawInt64() -} - -func (p *importer) path() string { - if p.debugFormat { - p.marker('p') - } - // if the path was seen before, i is its index (>= 0) - // (the empty string is at index 0) - i := p.rawInt64() - if i >= 0 { - return p.pathList[i] - } - // otherwise, i is the negative path length (< 0) - a := make([]string, -i) - for n := range a { - a[n] = p.string() - } - s := strings.Join(a, "/") - p.pathList = append(p.pathList, s) - return s -} - -func (p *importer) string() string { - if p.debugFormat { - p.marker('s') - } - // if the string was seen before, i is its index (>= 0) - // (the empty string is at index 0) - i := p.rawInt64() - if i >= 0 { - return p.strList[i] - } - // otherwise, i is the negative string length (< 0) - if n := int(-i); n <= cap(p.buf) { - p.buf = p.buf[:n] - } else { - p.buf = make([]byte, n) - } - for i := range p.buf { - p.buf[i] = p.rawByte() - } - s := string(p.buf) - p.strList = append(p.strList, s) - return s -} - -func (p *importer) marker(want byte) { - if got := p.rawByte(); got != want { - errorf("incorrect marker: got %c; want %c (pos = %d)", got, want, p.read) - } - - pos := p.read - if n := int(p.rawInt64()); n != pos { - errorf("incorrect position: got %d; want %d", n, pos) - } -} - -// rawInt64 should only be used by low-level decoders. -func (p *importer) rawInt64() int64 { - i, err := binary.ReadVarint(p) - if err != nil { - errorf("read error: %v", err) - } - return i -} - -// rawStringln should only be used to read the initial version string. -func (p *importer) rawStringln(b byte) string { - p.buf = p.buf[:0] - for b != '\n' { - p.buf = append(p.buf, b) - b = p.rawByte() - } - return string(p.buf) -} - -// needed for binary.ReadVarint in rawInt64 -func (p *importer) ReadByte() (byte, error) { - return p.rawByte(), nil -} - -// byte is the bottleneck interface for reading p.data. -// It unescapes '|' 'S' to '$' and '|' '|' to '|'. -// rawByte should only be used by low-level decoders. -func (p *importer) rawByte() byte { - b := p.data[0] - r := 1 - if b == '|' { - b = p.data[1] - r = 2 - switch b { - case 'S': - b = '$' - case '|': - // nothing to do - default: - errorf("unexpected escape sequence in export data") - } - } - p.data = p.data[r:] - p.read += r - return b - -} - -// ---------------------------------------------------------------------------- -// Export format - -// Tags. Must be < 0. -const ( - // Objects - packageTag = -(iota + 1) - constTag - typeTag - varTag - funcTag - endTag - - // Types - namedTag - arrayTag - sliceTag - dddTag - structTag - pointerTag - signatureTag - interfaceTag - mapTag - chanTag - - // Values - falseTag - trueTag - int64Tag - floatTag - fractionTag // not used by gc - complexTag - stringTag - nilTag // only used by gc (appears in exported inlined function bodies) - unknownTag // not used by gc (only appears in packages with errors) - - // Type aliases - aliasTag -) - -var predeclOnce sync.Once -var predecl []types.Type // initialized lazily - -func predeclared() []types.Type { - predeclOnce.Do(func() { - // initialize lazily to be sure that all - // elements have been initialized before - predecl = []types.Type{ // basic types - types.Typ[types.Bool], - types.Typ[types.Int], - types.Typ[types.Int8], - types.Typ[types.Int16], - types.Typ[types.Int32], - types.Typ[types.Int64], - types.Typ[types.Uint], - types.Typ[types.Uint8], - types.Typ[types.Uint16], - types.Typ[types.Uint32], - types.Typ[types.Uint64], - types.Typ[types.Uintptr], - types.Typ[types.Float32], - types.Typ[types.Float64], - types.Typ[types.Complex64], - types.Typ[types.Complex128], - types.Typ[types.String], - - // basic type aliases - types.Universe.Lookup("byte").Type(), - types.Universe.Lookup("rune").Type(), - - // error - types.Universe.Lookup("error").Type(), - - // untyped types - types.Typ[types.UntypedBool], - types.Typ[types.UntypedInt], - types.Typ[types.UntypedRune], - types.Typ[types.UntypedFloat], - types.Typ[types.UntypedComplex], - types.Typ[types.UntypedString], - types.Typ[types.UntypedNil], - - // package unsafe - types.Typ[types.UnsafePointer], - - // invalid type - types.Typ[types.Invalid], // only appears in packages with errors - - // used internally by gc; never used by this package or in .a files - anyType{}, - } - }) - return predecl -} - -type anyType struct{} - -func (t anyType) Underlying() types.Type { return t } -func (t anyType) String() string { return "any" } diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/exportdata.go b/vendor/golang.org/x/tools/go/internal/gcimporter/exportdata.go deleted file mode 100644 index f33dc5613e..0000000000 --- a/vendor/golang.org/x/tools/go/internal/gcimporter/exportdata.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// This file is a copy of $GOROOT/src/go/internal/gcimporter/exportdata.go. - -// This file implements FindExportData. - -package gcimporter - -import ( - "bufio" - "fmt" - "io" - "strconv" - "strings" -) - -func readGopackHeader(r *bufio.Reader) (name string, size int, err error) { - // See $GOROOT/include/ar.h. - hdr := make([]byte, 16+12+6+6+8+10+2) - _, err = io.ReadFull(r, hdr) - if err != nil { - return - } - // leave for debugging - if false { - fmt.Printf("header: %s", hdr) - } - s := strings.TrimSpace(string(hdr[16+12+6+6+8:][:10])) - size, err = strconv.Atoi(s) - if err != nil || hdr[len(hdr)-2] != '`' || hdr[len(hdr)-1] != '\n' { - err = fmt.Errorf("invalid archive header") - return - } - name = strings.TrimSpace(string(hdr[:16])) - return -} - -// FindExportData positions the reader r at the beginning of the -// export data section of an underlying GC-created object/archive -// file by reading from it. The reader must be positioned at the -// start of the file before calling this function. The hdr result -// is the string before the export data, either "$$" or "$$B". -// -func FindExportData(r *bufio.Reader) (hdr string, err error) { - // Read first line to make sure this is an object file. - line, err := r.ReadSlice('\n') - if err != nil { - err = fmt.Errorf("can't find export data (%v)", err) - return - } - - if string(line) == "!\n" { - // Archive file. Scan to __.PKGDEF. - var name string - if name, _, err = readGopackHeader(r); err != nil { - return - } - - // First entry should be __.PKGDEF. - if name != "__.PKGDEF" { - err = fmt.Errorf("go archive is missing __.PKGDEF") - return - } - - // Read first line of __.PKGDEF data, so that line - // is once again the first line of the input. - if line, err = r.ReadSlice('\n'); err != nil { - err = fmt.Errorf("can't find export data (%v)", err) - return - } - } - - // Now at __.PKGDEF in archive or still at beginning of file. - // Either way, line should begin with "go object ". - if !strings.HasPrefix(string(line), "go object ") { - err = fmt.Errorf("not a Go object file") - return - } - - // Skip over object header to export data. - // Begins after first line starting with $$. - for line[0] != '$' { - if line, err = r.ReadSlice('\n'); err != nil { - err = fmt.Errorf("can't find export data (%v)", err) - return - } - } - hdr = string(line) - - return -} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go b/vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go deleted file mode 100644 index 8dcd8bbb71..0000000000 --- a/vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go +++ /dev/null @@ -1,1078 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// This file is a modified copy of $GOROOT/src/go/internal/gcimporter/gcimporter.go, -// but it also contains the original source-based importer code for Go1.6. -// Once we stop supporting 1.6, we can remove that code. - -// Package gcimporter provides various functions for reading -// gc-generated object files that can be used to implement the -// Importer interface defined by the Go 1.5 standard library package. -package gcimporter // import "golang.org/x/tools/go/internal/gcimporter" - -import ( - "bufio" - "errors" - "fmt" - "go/build" - "go/constant" - "go/token" - "go/types" - "io" - "io/ioutil" - "os" - "path/filepath" - "sort" - "strconv" - "strings" - "text/scanner" -) - -// debugging/development support -const debug = false - -var pkgExts = [...]string{".a", ".o"} - -// FindPkg returns the filename and unique package id for an import -// path based on package information provided by build.Import (using -// the build.Default build.Context). A relative srcDir is interpreted -// relative to the current working directory. -// If no file was found, an empty filename is returned. -// -func FindPkg(path, srcDir string) (filename, id string) { - if path == "" { - return - } - - var noext string - switch { - default: - // "x" -> "$GOPATH/pkg/$GOOS_$GOARCH/x.ext", "x" - // Don't require the source files to be present. - if abs, err := filepath.Abs(srcDir); err == nil { // see issue 14282 - srcDir = abs - } - bp, _ := build.Import(path, srcDir, build.FindOnly|build.AllowBinary) - if bp.PkgObj == "" { - id = path // make sure we have an id to print in error message - return - } - noext = strings.TrimSuffix(bp.PkgObj, ".a") - id = bp.ImportPath - - case build.IsLocalImport(path): - // "./x" -> "/this/directory/x.ext", "/this/directory/x" - noext = filepath.Join(srcDir, path) - id = noext - - case filepath.IsAbs(path): - // for completeness only - go/build.Import - // does not support absolute imports - // "/x" -> "/x.ext", "/x" - noext = path - id = path - } - - if false { // for debugging - if path != id { - fmt.Printf("%s -> %s\n", path, id) - } - } - - // try extensions - for _, ext := range pkgExts { - filename = noext + ext - if f, err := os.Stat(filename); err == nil && !f.IsDir() { - return - } - } - - filename = "" // not found - return -} - -// ImportData imports a package by reading the gc-generated export data, -// adds the corresponding package object to the packages map indexed by id, -// and returns the object. -// -// The packages map must contains all packages already imported. The data -// reader position must be the beginning of the export data section. The -// filename is only used in error messages. -// -// If packages[id] contains the completely imported package, that package -// can be used directly, and there is no need to call this function (but -// there is also no harm but for extra time used). -// -func ImportData(packages map[string]*types.Package, filename, id string, data io.Reader) (pkg *types.Package, err error) { - // support for parser error handling - defer func() { - switch r := recover().(type) { - case nil: - // nothing to do - case importError: - err = r - default: - panic(r) // internal error - } - }() - - var p parser - p.init(filename, id, data, packages) - pkg = p.parseExport() - - return -} - -// Import imports a gc-generated package given its import path and srcDir, adds -// the corresponding package object to the packages map, and returns the object. -// The packages map must contain all packages already imported. -// -func Import(packages map[string]*types.Package, path, srcDir string, lookup func(path string) (io.ReadCloser, error)) (pkg *types.Package, err error) { - var rc io.ReadCloser - var filename, id string - if lookup != nil { - // With custom lookup specified, assume that caller has - // converted path to a canonical import path for use in the map. - if path == "unsafe" { - return types.Unsafe, nil - } - id = path - - // No need to re-import if the package was imported completely before. - if pkg = packages[id]; pkg != nil && pkg.Complete() { - return - } - f, err := lookup(path) - if err != nil { - return nil, err - } - rc = f - } else { - filename, id = FindPkg(path, srcDir) - if filename == "" { - if path == "unsafe" { - return types.Unsafe, nil - } - return nil, fmt.Errorf("can't find import: %q", id) - } - - // no need to re-import if the package was imported completely before - if pkg = packages[id]; pkg != nil && pkg.Complete() { - return - } - - // open file - f, err := os.Open(filename) - if err != nil { - return nil, err - } - defer func() { - if err != nil { - // add file name to error - err = fmt.Errorf("%s: %v", filename, err) - } - }() - rc = f - } - defer rc.Close() - - var hdr string - buf := bufio.NewReader(rc) - if hdr, err = FindExportData(buf); err != nil { - return - } - - switch hdr { - case "$$\n": - // Work-around if we don't have a filename; happens only if lookup != nil. - // Either way, the filename is only needed for importer error messages, so - // this is fine. - if filename == "" { - filename = path - } - return ImportData(packages, filename, id, buf) - - case "$$B\n": - var data []byte - data, err = ioutil.ReadAll(buf) - if err != nil { - break - } - - // TODO(gri): allow clients of go/importer to provide a FileSet. - // Or, define a new standard go/types/gcexportdata package. - fset := token.NewFileSet() - - // The indexed export format starts with an 'i'; the older - // binary export format starts with a 'c', 'd', or 'v' - // (from "version"). Select appropriate importer. - if len(data) > 0 && data[0] == 'i' { - _, pkg, err = IImportData(fset, packages, data[1:], id) - } else { - _, pkg, err = BImportData(fset, packages, data, id) - } - - default: - err = fmt.Errorf("unknown export data header: %q", hdr) - } - - return -} - -// ---------------------------------------------------------------------------- -// Parser - -// TODO(gri) Imported objects don't have position information. -// Ideally use the debug table line info; alternatively -// create some fake position (or the position of the -// import). That way error messages referring to imported -// objects can print meaningful information. - -// parser parses the exports inside a gc compiler-produced -// object/archive file and populates its scope with the results. -type parser struct { - scanner scanner.Scanner - tok rune // current token - lit string // literal string; only valid for Ident, Int, String tokens - id string // package id of imported package - sharedPkgs map[string]*types.Package // package id -> package object (across importer) - localPkgs map[string]*types.Package // package id -> package object (just this package) -} - -func (p *parser) init(filename, id string, src io.Reader, packages map[string]*types.Package) { - p.scanner.Init(src) - p.scanner.Error = func(_ *scanner.Scanner, msg string) { p.error(msg) } - p.scanner.Mode = scanner.ScanIdents | scanner.ScanInts | scanner.ScanChars | scanner.ScanStrings | scanner.ScanComments | scanner.SkipComments - p.scanner.Whitespace = 1<<'\t' | 1<<' ' - p.scanner.Filename = filename // for good error messages - p.next() - p.id = id - p.sharedPkgs = packages - if debug { - // check consistency of packages map - for _, pkg := range packages { - if pkg.Name() == "" { - fmt.Printf("no package name for %s\n", pkg.Path()) - } - } - } -} - -func (p *parser) next() { - p.tok = p.scanner.Scan() - switch p.tok { - case scanner.Ident, scanner.Int, scanner.Char, scanner.String, '·': - p.lit = p.scanner.TokenText() - default: - p.lit = "" - } - if debug { - fmt.Printf("%s: %q -> %q\n", scanner.TokenString(p.tok), p.scanner.TokenText(), p.lit) - } -} - -func declTypeName(pkg *types.Package, name string) *types.TypeName { - scope := pkg.Scope() - if obj := scope.Lookup(name); obj != nil { - return obj.(*types.TypeName) - } - obj := types.NewTypeName(token.NoPos, pkg, name, nil) - // a named type may be referred to before the underlying type - // is known - set it up - types.NewNamed(obj, nil, nil) - scope.Insert(obj) - return obj -} - -// ---------------------------------------------------------------------------- -// Error handling - -// Internal errors are boxed as importErrors. -type importError struct { - pos scanner.Position - err error -} - -func (e importError) Error() string { - return fmt.Sprintf("import error %s (byte offset = %d): %s", e.pos, e.pos.Offset, e.err) -} - -func (p *parser) error(err interface{}) { - if s, ok := err.(string); ok { - err = errors.New(s) - } - // panic with a runtime.Error if err is not an error - panic(importError{p.scanner.Pos(), err.(error)}) -} - -func (p *parser) errorf(format string, args ...interface{}) { - p.error(fmt.Sprintf(format, args...)) -} - -func (p *parser) expect(tok rune) string { - lit := p.lit - if p.tok != tok { - p.errorf("expected %s, got %s (%s)", scanner.TokenString(tok), scanner.TokenString(p.tok), lit) - } - p.next() - return lit -} - -func (p *parser) expectSpecial(tok string) { - sep := 'x' // not white space - i := 0 - for i < len(tok) && p.tok == rune(tok[i]) && sep > ' ' { - sep = p.scanner.Peek() // if sep <= ' ', there is white space before the next token - p.next() - i++ - } - if i < len(tok) { - p.errorf("expected %q, got %q", tok, tok[0:i]) - } -} - -func (p *parser) expectKeyword(keyword string) { - lit := p.expect(scanner.Ident) - if lit != keyword { - p.errorf("expected keyword %s, got %q", keyword, lit) - } -} - -// ---------------------------------------------------------------------------- -// Qualified and unqualified names - -// PackageId = string_lit . -// -func (p *parser) parsePackageID() string { - id, err := strconv.Unquote(p.expect(scanner.String)) - if err != nil { - p.error(err) - } - // id == "" stands for the imported package id - // (only known at time of package installation) - if id == "" { - id = p.id - } - return id -} - -// PackageName = ident . -// -func (p *parser) parsePackageName() string { - return p.expect(scanner.Ident) -} - -// dotIdentifier = ( ident | '·' ) { ident | int | '·' } . -func (p *parser) parseDotIdent() string { - ident := "" - if p.tok != scanner.Int { - sep := 'x' // not white space - for (p.tok == scanner.Ident || p.tok == scanner.Int || p.tok == '·') && sep > ' ' { - ident += p.lit - sep = p.scanner.Peek() // if sep <= ' ', there is white space before the next token - p.next() - } - } - if ident == "" { - p.expect(scanner.Ident) // use expect() for error handling - } - return ident -} - -// QualifiedName = "@" PackageId "." ( "?" | dotIdentifier ) . -// -func (p *parser) parseQualifiedName() (id, name string) { - p.expect('@') - id = p.parsePackageID() - p.expect('.') - // Per rev f280b8a485fd (10/2/2013), qualified names may be used for anonymous fields. - if p.tok == '?' { - p.next() - } else { - name = p.parseDotIdent() - } - return -} - -// getPkg returns the package for a given id. If the package is -// not found, create the package and add it to the p.localPkgs -// and p.sharedPkgs maps. name is the (expected) name of the -// package. If name == "", the package name is expected to be -// set later via an import clause in the export data. -// -// id identifies a package, usually by a canonical package path like -// "encoding/json" but possibly by a non-canonical import path like -// "./json". -// -func (p *parser) getPkg(id, name string) *types.Package { - // package unsafe is not in the packages maps - handle explicitly - if id == "unsafe" { - return types.Unsafe - } - - pkg := p.localPkgs[id] - if pkg == nil { - // first import of id from this package - pkg = p.sharedPkgs[id] - if pkg == nil { - // first import of id by this importer; - // add (possibly unnamed) pkg to shared packages - pkg = types.NewPackage(id, name) - p.sharedPkgs[id] = pkg - } - // add (possibly unnamed) pkg to local packages - if p.localPkgs == nil { - p.localPkgs = make(map[string]*types.Package) - } - p.localPkgs[id] = pkg - } else if name != "" { - // package exists already and we have an expected package name; - // make sure names match or set package name if necessary - if pname := pkg.Name(); pname == "" { - pkg.SetName(name) - } else if pname != name { - p.errorf("%s package name mismatch: %s (given) vs %s (expected)", id, pname, name) - } - } - return pkg -} - -// parseExportedName is like parseQualifiedName, but -// the package id is resolved to an imported *types.Package. -// -func (p *parser) parseExportedName() (pkg *types.Package, name string) { - id, name := p.parseQualifiedName() - pkg = p.getPkg(id, "") - return -} - -// ---------------------------------------------------------------------------- -// Types - -// BasicType = identifier . -// -func (p *parser) parseBasicType() types.Type { - id := p.expect(scanner.Ident) - obj := types.Universe.Lookup(id) - if obj, ok := obj.(*types.TypeName); ok { - return obj.Type() - } - p.errorf("not a basic type: %s", id) - return nil -} - -// ArrayType = "[" int_lit "]" Type . -// -func (p *parser) parseArrayType(parent *types.Package) types.Type { - // "[" already consumed and lookahead known not to be "]" - lit := p.expect(scanner.Int) - p.expect(']') - elem := p.parseType(parent) - n, err := strconv.ParseInt(lit, 10, 64) - if err != nil { - p.error(err) - } - return types.NewArray(elem, n) -} - -// MapType = "map" "[" Type "]" Type . -// -func (p *parser) parseMapType(parent *types.Package) types.Type { - p.expectKeyword("map") - p.expect('[') - key := p.parseType(parent) - p.expect(']') - elem := p.parseType(parent) - return types.NewMap(key, elem) -} - -// Name = identifier | "?" | QualifiedName . -// -// For unqualified and anonymous names, the returned package is the parent -// package unless parent == nil, in which case the returned package is the -// package being imported. (The parent package is not nil if the the name -// is an unqualified struct field or interface method name belonging to a -// type declared in another package.) -// -// For qualified names, the returned package is nil (and not created if -// it doesn't exist yet) unless materializePkg is set (which creates an -// unnamed package with valid package path). In the latter case, a -// subsequent import clause is expected to provide a name for the package. -// -func (p *parser) parseName(parent *types.Package, materializePkg bool) (pkg *types.Package, name string) { - pkg = parent - if pkg == nil { - pkg = p.sharedPkgs[p.id] - } - switch p.tok { - case scanner.Ident: - name = p.lit - p.next() - case '?': - // anonymous - p.next() - case '@': - // exported name prefixed with package path - pkg = nil - var id string - id, name = p.parseQualifiedName() - if materializePkg { - pkg = p.getPkg(id, "") - } - default: - p.error("name expected") - } - return -} - -func deref(typ types.Type) types.Type { - if p, _ := typ.(*types.Pointer); p != nil { - return p.Elem() - } - return typ -} - -// Field = Name Type [ string_lit ] . -// -func (p *parser) parseField(parent *types.Package) (*types.Var, string) { - pkg, name := p.parseName(parent, true) - - if name == "_" { - // Blank fields should be package-qualified because they - // are unexported identifiers, but gc does not qualify them. - // Assuming that the ident belongs to the current package - // causes types to change during re-exporting, leading - // to spurious "can't assign A to B" errors from go/types. - // As a workaround, pretend all blank fields belong - // to the same unique dummy package. - const blankpkg = "<_>" - pkg = p.getPkg(blankpkg, blankpkg) - } - - typ := p.parseType(parent) - anonymous := false - if name == "" { - // anonymous field - typ must be T or *T and T must be a type name - switch typ := deref(typ).(type) { - case *types.Basic: // basic types are named types - pkg = nil // objects defined in Universe scope have no package - name = typ.Name() - case *types.Named: - name = typ.Obj().Name() - default: - p.errorf("anonymous field expected") - } - anonymous = true - } - tag := "" - if p.tok == scanner.String { - s := p.expect(scanner.String) - var err error - tag, err = strconv.Unquote(s) - if err != nil { - p.errorf("invalid struct tag %s: %s", s, err) - } - } - return types.NewField(token.NoPos, pkg, name, typ, anonymous), tag -} - -// StructType = "struct" "{" [ FieldList ] "}" . -// FieldList = Field { ";" Field } . -// -func (p *parser) parseStructType(parent *types.Package) types.Type { - var fields []*types.Var - var tags []string - - p.expectKeyword("struct") - p.expect('{') - for i := 0; p.tok != '}' && p.tok != scanner.EOF; i++ { - if i > 0 { - p.expect(';') - } - fld, tag := p.parseField(parent) - if tag != "" && tags == nil { - tags = make([]string, i) - } - if tags != nil { - tags = append(tags, tag) - } - fields = append(fields, fld) - } - p.expect('}') - - return types.NewStruct(fields, tags) -} - -// Parameter = ( identifier | "?" ) [ "..." ] Type [ string_lit ] . -// -func (p *parser) parseParameter() (par *types.Var, isVariadic bool) { - _, name := p.parseName(nil, false) - // remove gc-specific parameter numbering - if i := strings.Index(name, "·"); i >= 0 { - name = name[:i] - } - if p.tok == '.' { - p.expectSpecial("...") - isVariadic = true - } - typ := p.parseType(nil) - if isVariadic { - typ = types.NewSlice(typ) - } - // ignore argument tag (e.g. "noescape") - if p.tok == scanner.String { - p.next() - } - // TODO(gri) should we provide a package? - par = types.NewVar(token.NoPos, nil, name, typ) - return -} - -// Parameters = "(" [ ParameterList ] ")" . -// ParameterList = { Parameter "," } Parameter . -// -func (p *parser) parseParameters() (list []*types.Var, isVariadic bool) { - p.expect('(') - for p.tok != ')' && p.tok != scanner.EOF { - if len(list) > 0 { - p.expect(',') - } - par, variadic := p.parseParameter() - list = append(list, par) - if variadic { - if isVariadic { - p.error("... not on final argument") - } - isVariadic = true - } - } - p.expect(')') - - return -} - -// Signature = Parameters [ Result ] . -// Result = Type | Parameters . -// -func (p *parser) parseSignature(recv *types.Var) *types.Signature { - params, isVariadic := p.parseParameters() - - // optional result type - var results []*types.Var - if p.tok == '(' { - var variadic bool - results, variadic = p.parseParameters() - if variadic { - p.error("... not permitted on result type") - } - } - - return types.NewSignature(recv, types.NewTuple(params...), types.NewTuple(results...), isVariadic) -} - -// InterfaceType = "interface" "{" [ MethodList ] "}" . -// MethodList = Method { ";" Method } . -// Method = Name Signature . -// -// The methods of embedded interfaces are always "inlined" -// by the compiler and thus embedded interfaces are never -// visible in the export data. -// -func (p *parser) parseInterfaceType(parent *types.Package) types.Type { - var methods []*types.Func - - p.expectKeyword("interface") - p.expect('{') - for i := 0; p.tok != '}' && p.tok != scanner.EOF; i++ { - if i > 0 { - p.expect(';') - } - pkg, name := p.parseName(parent, true) - sig := p.parseSignature(nil) - methods = append(methods, types.NewFunc(token.NoPos, pkg, name, sig)) - } - p.expect('}') - - // Complete requires the type's embedded interfaces to be fully defined, - // but we do not define any - return newInterface(methods, nil).Complete() -} - -// ChanType = ( "chan" [ "<-" ] | "<-" "chan" ) Type . -// -func (p *parser) parseChanType(parent *types.Package) types.Type { - dir := types.SendRecv - if p.tok == scanner.Ident { - p.expectKeyword("chan") - if p.tok == '<' { - p.expectSpecial("<-") - dir = types.SendOnly - } - } else { - p.expectSpecial("<-") - p.expectKeyword("chan") - dir = types.RecvOnly - } - elem := p.parseType(parent) - return types.NewChan(dir, elem) -} - -// Type = -// BasicType | TypeName | ArrayType | SliceType | StructType | -// PointerType | FuncType | InterfaceType | MapType | ChanType | -// "(" Type ")" . -// -// BasicType = ident . -// TypeName = ExportedName . -// SliceType = "[" "]" Type . -// PointerType = "*" Type . -// FuncType = "func" Signature . -// -func (p *parser) parseType(parent *types.Package) types.Type { - switch p.tok { - case scanner.Ident: - switch p.lit { - default: - return p.parseBasicType() - case "struct": - return p.parseStructType(parent) - case "func": - // FuncType - p.next() - return p.parseSignature(nil) - case "interface": - return p.parseInterfaceType(parent) - case "map": - return p.parseMapType(parent) - case "chan": - return p.parseChanType(parent) - } - case '@': - // TypeName - pkg, name := p.parseExportedName() - return declTypeName(pkg, name).Type() - case '[': - p.next() // look ahead - if p.tok == ']' { - // SliceType - p.next() - return types.NewSlice(p.parseType(parent)) - } - return p.parseArrayType(parent) - case '*': - // PointerType - p.next() - return types.NewPointer(p.parseType(parent)) - case '<': - return p.parseChanType(parent) - case '(': - // "(" Type ")" - p.next() - typ := p.parseType(parent) - p.expect(')') - return typ - } - p.errorf("expected type, got %s (%q)", scanner.TokenString(p.tok), p.lit) - return nil -} - -// ---------------------------------------------------------------------------- -// Declarations - -// ImportDecl = "import" PackageName PackageId . -// -func (p *parser) parseImportDecl() { - p.expectKeyword("import") - name := p.parsePackageName() - p.getPkg(p.parsePackageID(), name) -} - -// int_lit = [ "+" | "-" ] { "0" ... "9" } . -// -func (p *parser) parseInt() string { - s := "" - switch p.tok { - case '-': - s = "-" - p.next() - case '+': - p.next() - } - return s + p.expect(scanner.Int) -} - -// number = int_lit [ "p" int_lit ] . -// -func (p *parser) parseNumber() (typ *types.Basic, val constant.Value) { - // mantissa - mant := constant.MakeFromLiteral(p.parseInt(), token.INT, 0) - if mant == nil { - panic("invalid mantissa") - } - - if p.lit == "p" { - // exponent (base 2) - p.next() - exp, err := strconv.ParseInt(p.parseInt(), 10, 0) - if err != nil { - p.error(err) - } - if exp < 0 { - denom := constant.MakeInt64(1) - denom = constant.Shift(denom, token.SHL, uint(-exp)) - typ = types.Typ[types.UntypedFloat] - val = constant.BinaryOp(mant, token.QUO, denom) - return - } - if exp > 0 { - mant = constant.Shift(mant, token.SHL, uint(exp)) - } - typ = types.Typ[types.UntypedFloat] - val = mant - return - } - - typ = types.Typ[types.UntypedInt] - val = mant - return -} - -// ConstDecl = "const" ExportedName [ Type ] "=" Literal . -// Literal = bool_lit | int_lit | float_lit | complex_lit | rune_lit | string_lit . -// bool_lit = "true" | "false" . -// complex_lit = "(" float_lit "+" float_lit "i" ")" . -// rune_lit = "(" int_lit "+" int_lit ")" . -// string_lit = `"` { unicode_char } `"` . -// -func (p *parser) parseConstDecl() { - p.expectKeyword("const") - pkg, name := p.parseExportedName() - - var typ0 types.Type - if p.tok != '=' { - // constant types are never structured - no need for parent type - typ0 = p.parseType(nil) - } - - p.expect('=') - var typ types.Type - var val constant.Value - switch p.tok { - case scanner.Ident: - // bool_lit - if p.lit != "true" && p.lit != "false" { - p.error("expected true or false") - } - typ = types.Typ[types.UntypedBool] - val = constant.MakeBool(p.lit == "true") - p.next() - - case '-', scanner.Int: - // int_lit - typ, val = p.parseNumber() - - case '(': - // complex_lit or rune_lit - p.next() - if p.tok == scanner.Char { - p.next() - p.expect('+') - typ = types.Typ[types.UntypedRune] - _, val = p.parseNumber() - p.expect(')') - break - } - _, re := p.parseNumber() - p.expect('+') - _, im := p.parseNumber() - p.expectKeyword("i") - p.expect(')') - typ = types.Typ[types.UntypedComplex] - val = constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) - - case scanner.Char: - // rune_lit - typ = types.Typ[types.UntypedRune] - val = constant.MakeFromLiteral(p.lit, token.CHAR, 0) - p.next() - - case scanner.String: - // string_lit - typ = types.Typ[types.UntypedString] - val = constant.MakeFromLiteral(p.lit, token.STRING, 0) - p.next() - - default: - p.errorf("expected literal got %s", scanner.TokenString(p.tok)) - } - - if typ0 == nil { - typ0 = typ - } - - pkg.Scope().Insert(types.NewConst(token.NoPos, pkg, name, typ0, val)) -} - -// TypeDecl = "type" ExportedName Type . -// -func (p *parser) parseTypeDecl() { - p.expectKeyword("type") - pkg, name := p.parseExportedName() - obj := declTypeName(pkg, name) - - // The type object may have been imported before and thus already - // have a type associated with it. We still need to parse the type - // structure, but throw it away if the object already has a type. - // This ensures that all imports refer to the same type object for - // a given type declaration. - typ := p.parseType(pkg) - - if name := obj.Type().(*types.Named); name.Underlying() == nil { - name.SetUnderlying(typ) - } -} - -// VarDecl = "var" ExportedName Type . -// -func (p *parser) parseVarDecl() { - p.expectKeyword("var") - pkg, name := p.parseExportedName() - typ := p.parseType(pkg) - pkg.Scope().Insert(types.NewVar(token.NoPos, pkg, name, typ)) -} - -// Func = Signature [ Body ] . -// Body = "{" ... "}" . -// -func (p *parser) parseFunc(recv *types.Var) *types.Signature { - sig := p.parseSignature(recv) - if p.tok == '{' { - p.next() - for i := 1; i > 0; p.next() { - switch p.tok { - case '{': - i++ - case '}': - i-- - } - } - } - return sig -} - -// MethodDecl = "func" Receiver Name Func . -// Receiver = "(" ( identifier | "?" ) [ "*" ] ExportedName ")" . -// -func (p *parser) parseMethodDecl() { - // "func" already consumed - p.expect('(') - recv, _ := p.parseParameter() // receiver - p.expect(')') - - // determine receiver base type object - base := deref(recv.Type()).(*types.Named) - - // parse method name, signature, and possibly inlined body - _, name := p.parseName(nil, false) - sig := p.parseFunc(recv) - - // methods always belong to the same package as the base type object - pkg := base.Obj().Pkg() - - // add method to type unless type was imported before - // and method exists already - // TODO(gri) This leads to a quadratic algorithm - ok for now because method counts are small. - base.AddMethod(types.NewFunc(token.NoPos, pkg, name, sig)) -} - -// FuncDecl = "func" ExportedName Func . -// -func (p *parser) parseFuncDecl() { - // "func" already consumed - pkg, name := p.parseExportedName() - typ := p.parseFunc(nil) - pkg.Scope().Insert(types.NewFunc(token.NoPos, pkg, name, typ)) -} - -// Decl = [ ImportDecl | ConstDecl | TypeDecl | VarDecl | FuncDecl | MethodDecl ] "\n" . -// -func (p *parser) parseDecl() { - if p.tok == scanner.Ident { - switch p.lit { - case "import": - p.parseImportDecl() - case "const": - p.parseConstDecl() - case "type": - p.parseTypeDecl() - case "var": - p.parseVarDecl() - case "func": - p.next() // look ahead - if p.tok == '(' { - p.parseMethodDecl() - } else { - p.parseFuncDecl() - } - } - } - p.expect('\n') -} - -// ---------------------------------------------------------------------------- -// Export - -// Export = "PackageClause { Decl } "$$" . -// PackageClause = "package" PackageName [ "safe" ] "\n" . -// -func (p *parser) parseExport() *types.Package { - p.expectKeyword("package") - name := p.parsePackageName() - if p.tok == scanner.Ident && p.lit == "safe" { - // package was compiled with -u option - ignore - p.next() - } - p.expect('\n') - - pkg := p.getPkg(p.id, name) - - for p.tok != '$' && p.tok != scanner.EOF { - p.parseDecl() - } - - if ch := p.scanner.Peek(); p.tok != '$' || ch != '$' { - // don't call next()/expect() since reading past the - // export data may cause scanner errors (e.g. NUL chars) - p.errorf("expected '$$', got %s %c", scanner.TokenString(p.tok), ch) - } - - if n := p.scanner.ErrorCount; n != 0 { - p.errorf("expected no scanner errors, got %d", n) - } - - // Record all locally referenced packages as imports. - var imports []*types.Package - for id, pkg2 := range p.localPkgs { - if pkg2.Name() == "" { - p.errorf("%s package has no name", id) - } - if id == p.id { - continue // avoid self-edge - } - imports = append(imports, pkg2) - } - sort.Sort(byPath(imports)) - pkg.SetImports(imports) - - // package was imported completely and without errors - pkg.MarkComplete() - - return pkg -} - -type byPath []*types.Package - -func (a byPath) Len() int { return len(a) } -func (a byPath) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a byPath) Less(i, j int) bool { return a[i].Path() < a[j].Path() } diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go b/vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go deleted file mode 100644 index 4be32a2e55..0000000000 --- a/vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go +++ /dev/null @@ -1,739 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Indexed binary package export. -// This file was derived from $GOROOT/src/cmd/compile/internal/gc/iexport.go; -// see that file for specification of the format. - -package gcimporter - -import ( - "bytes" - "encoding/binary" - "go/ast" - "go/constant" - "go/token" - "go/types" - "io" - "math/big" - "reflect" - "sort" -) - -// Current indexed export format version. Increase with each format change. -// 0: Go1.11 encoding -const iexportVersion = 0 - -// IExportData returns the binary export data for pkg. -// -// If no file set is provided, position info will be missing. -// The package path of the top-level package will not be recorded, -// so that calls to IImportData can override with a provided package path. -func IExportData(fset *token.FileSet, pkg *types.Package) (b []byte, err error) { - defer func() { - if e := recover(); e != nil { - if ierr, ok := e.(internalError); ok { - err = ierr - return - } - // Not an internal error; panic again. - panic(e) - } - }() - - p := iexporter{ - out: bytes.NewBuffer(nil), - fset: fset, - allPkgs: map[*types.Package]bool{}, - stringIndex: map[string]uint64{}, - declIndex: map[types.Object]uint64{}, - typIndex: map[types.Type]uint64{}, - localpkg: pkg, - } - - for i, pt := range predeclared() { - p.typIndex[pt] = uint64(i) - } - if len(p.typIndex) > predeclReserved { - panic(internalErrorf("too many predeclared types: %d > %d", len(p.typIndex), predeclReserved)) - } - - // Initialize work queue with exported declarations. - scope := pkg.Scope() - for _, name := range scope.Names() { - if ast.IsExported(name) { - p.pushDecl(scope.Lookup(name)) - } - } - - // Loop until no more work. - for !p.declTodo.empty() { - p.doDecl(p.declTodo.popHead()) - } - - // Append indices to data0 section. - dataLen := uint64(p.data0.Len()) - w := p.newWriter() - w.writeIndex(p.declIndex) - w.flush() - - // Assemble header. - var hdr intWriter - hdr.WriteByte('i') - hdr.uint64(iexportVersion) - hdr.uint64(uint64(p.strings.Len())) - hdr.uint64(dataLen) - - // Flush output. - io.Copy(p.out, &hdr) - io.Copy(p.out, &p.strings) - io.Copy(p.out, &p.data0) - - return p.out.Bytes(), nil -} - -// writeIndex writes out an object index. mainIndex indicates whether -// we're writing out the main index, which is also read by -// non-compiler tools and includes a complete package description -// (i.e., name and height). -func (w *exportWriter) writeIndex(index map[types.Object]uint64) { - // Build a map from packages to objects from that package. - pkgObjs := map[*types.Package][]types.Object{} - - // For the main index, make sure to include every package that - // we reference, even if we're not exporting (or reexporting) - // any symbols from it. - pkgObjs[w.p.localpkg] = nil - for pkg := range w.p.allPkgs { - pkgObjs[pkg] = nil - } - - for obj := range index { - pkgObjs[obj.Pkg()] = append(pkgObjs[obj.Pkg()], obj) - } - - var pkgs []*types.Package - for pkg, objs := range pkgObjs { - pkgs = append(pkgs, pkg) - - sort.Slice(objs, func(i, j int) bool { - return objs[i].Name() < objs[j].Name() - }) - } - - sort.Slice(pkgs, func(i, j int) bool { - return w.exportPath(pkgs[i]) < w.exportPath(pkgs[j]) - }) - - w.uint64(uint64(len(pkgs))) - for _, pkg := range pkgs { - w.string(w.exportPath(pkg)) - w.string(pkg.Name()) - w.uint64(uint64(0)) // package height is not needed for go/types - - objs := pkgObjs[pkg] - w.uint64(uint64(len(objs))) - for _, obj := range objs { - w.string(obj.Name()) - w.uint64(index[obj]) - } - } -} - -type iexporter struct { - fset *token.FileSet - out *bytes.Buffer - - localpkg *types.Package - - // allPkgs tracks all packages that have been referenced by - // the export data, so we can ensure to include them in the - // main index. - allPkgs map[*types.Package]bool - - declTodo objQueue - - strings intWriter - stringIndex map[string]uint64 - - data0 intWriter - declIndex map[types.Object]uint64 - typIndex map[types.Type]uint64 -} - -// stringOff returns the offset of s within the string section. -// If not already present, it's added to the end. -func (p *iexporter) stringOff(s string) uint64 { - off, ok := p.stringIndex[s] - if !ok { - off = uint64(p.strings.Len()) - p.stringIndex[s] = off - - p.strings.uint64(uint64(len(s))) - p.strings.WriteString(s) - } - return off -} - -// pushDecl adds n to the declaration work queue, if not already present. -func (p *iexporter) pushDecl(obj types.Object) { - // Package unsafe is known to the compiler and predeclared. - assert(obj.Pkg() != types.Unsafe) - - if _, ok := p.declIndex[obj]; ok { - return - } - - p.declIndex[obj] = ^uint64(0) // mark n present in work queue - p.declTodo.pushTail(obj) -} - -// exportWriter handles writing out individual data section chunks. -type exportWriter struct { - p *iexporter - - data intWriter - currPkg *types.Package - prevFile string - prevLine int64 -} - -func (w *exportWriter) exportPath(pkg *types.Package) string { - if pkg == w.p.localpkg { - return "" - } - return pkg.Path() -} - -func (p *iexporter) doDecl(obj types.Object) { - w := p.newWriter() - w.setPkg(obj.Pkg(), false) - - switch obj := obj.(type) { - case *types.Var: - w.tag('V') - w.pos(obj.Pos()) - w.typ(obj.Type(), obj.Pkg()) - - case *types.Func: - sig, _ := obj.Type().(*types.Signature) - if sig.Recv() != nil { - panic(internalErrorf("unexpected method: %v", sig)) - } - w.tag('F') - w.pos(obj.Pos()) - w.signature(sig) - - case *types.Const: - w.tag('C') - w.pos(obj.Pos()) - w.value(obj.Type(), obj.Val()) - - case *types.TypeName: - if obj.IsAlias() { - w.tag('A') - w.pos(obj.Pos()) - w.typ(obj.Type(), obj.Pkg()) - break - } - - // Defined type. - w.tag('T') - w.pos(obj.Pos()) - - underlying := obj.Type().Underlying() - w.typ(underlying, obj.Pkg()) - - t := obj.Type() - if types.IsInterface(t) { - break - } - - named, ok := t.(*types.Named) - if !ok { - panic(internalErrorf("%s is not a defined type", t)) - } - - n := named.NumMethods() - w.uint64(uint64(n)) - for i := 0; i < n; i++ { - m := named.Method(i) - w.pos(m.Pos()) - w.string(m.Name()) - sig, _ := m.Type().(*types.Signature) - w.param(sig.Recv()) - w.signature(sig) - } - - default: - panic(internalErrorf("unexpected object: %v", obj)) - } - - p.declIndex[obj] = w.flush() -} - -func (w *exportWriter) tag(tag byte) { - w.data.WriteByte(tag) -} - -func (w *exportWriter) pos(pos token.Pos) { - if w.p.fset == nil { - w.int64(0) - return - } - - p := w.p.fset.Position(pos) - file := p.Filename - line := int64(p.Line) - - // When file is the same as the last position (common case), - // we can save a few bytes by delta encoding just the line - // number. - // - // Note: Because data objects may be read out of order (or not - // at all), we can only apply delta encoding within a single - // object. This is handled implicitly by tracking prevFile and - // prevLine as fields of exportWriter. - - if file == w.prevFile { - delta := line - w.prevLine - w.int64(delta) - if delta == deltaNewFile { - w.int64(-1) - } - } else { - w.int64(deltaNewFile) - w.int64(line) // line >= 0 - w.string(file) - w.prevFile = file - } - w.prevLine = line -} - -func (w *exportWriter) pkg(pkg *types.Package) { - // Ensure any referenced packages are declared in the main index. - w.p.allPkgs[pkg] = true - - w.string(w.exportPath(pkg)) -} - -func (w *exportWriter) qualifiedIdent(obj types.Object) { - // Ensure any referenced declarations are written out too. - w.p.pushDecl(obj) - - w.string(obj.Name()) - w.pkg(obj.Pkg()) -} - -func (w *exportWriter) typ(t types.Type, pkg *types.Package) { - w.data.uint64(w.p.typOff(t, pkg)) -} - -func (p *iexporter) newWriter() *exportWriter { - return &exportWriter{p: p} -} - -func (w *exportWriter) flush() uint64 { - off := uint64(w.p.data0.Len()) - io.Copy(&w.p.data0, &w.data) - return off -} - -func (p *iexporter) typOff(t types.Type, pkg *types.Package) uint64 { - off, ok := p.typIndex[t] - if !ok { - w := p.newWriter() - w.doTyp(t, pkg) - off = predeclReserved + w.flush() - p.typIndex[t] = off - } - return off -} - -func (w *exportWriter) startType(k itag) { - w.data.uint64(uint64(k)) -} - -func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { - switch t := t.(type) { - case *types.Named: - w.startType(definedType) - w.qualifiedIdent(t.Obj()) - - case *types.Pointer: - w.startType(pointerType) - w.typ(t.Elem(), pkg) - - case *types.Slice: - w.startType(sliceType) - w.typ(t.Elem(), pkg) - - case *types.Array: - w.startType(arrayType) - w.uint64(uint64(t.Len())) - w.typ(t.Elem(), pkg) - - case *types.Chan: - w.startType(chanType) - // 1 RecvOnly; 2 SendOnly; 3 SendRecv - var dir uint64 - switch t.Dir() { - case types.RecvOnly: - dir = 1 - case types.SendOnly: - dir = 2 - case types.SendRecv: - dir = 3 - } - w.uint64(dir) - w.typ(t.Elem(), pkg) - - case *types.Map: - w.startType(mapType) - w.typ(t.Key(), pkg) - w.typ(t.Elem(), pkg) - - case *types.Signature: - w.startType(signatureType) - w.setPkg(pkg, true) - w.signature(t) - - case *types.Struct: - w.startType(structType) - w.setPkg(pkg, true) - - n := t.NumFields() - w.uint64(uint64(n)) - for i := 0; i < n; i++ { - f := t.Field(i) - w.pos(f.Pos()) - w.string(f.Name()) - w.typ(f.Type(), pkg) - w.bool(f.Anonymous()) - w.string(t.Tag(i)) // note (or tag) - } - - case *types.Interface: - w.startType(interfaceType) - w.setPkg(pkg, true) - - n := t.NumEmbeddeds() - w.uint64(uint64(n)) - for i := 0; i < n; i++ { - f := t.Embedded(i) - w.pos(f.Obj().Pos()) - w.typ(f.Obj().Type(), f.Obj().Pkg()) - } - - n = t.NumExplicitMethods() - w.uint64(uint64(n)) - for i := 0; i < n; i++ { - m := t.ExplicitMethod(i) - w.pos(m.Pos()) - w.string(m.Name()) - sig, _ := m.Type().(*types.Signature) - w.signature(sig) - } - - default: - panic(internalErrorf("unexpected type: %v, %v", t, reflect.TypeOf(t))) - } -} - -func (w *exportWriter) setPkg(pkg *types.Package, write bool) { - if write { - w.pkg(pkg) - } - - w.currPkg = pkg -} - -func (w *exportWriter) signature(sig *types.Signature) { - w.paramList(sig.Params()) - w.paramList(sig.Results()) - if sig.Params().Len() > 0 { - w.bool(sig.Variadic()) - } -} - -func (w *exportWriter) paramList(tup *types.Tuple) { - n := tup.Len() - w.uint64(uint64(n)) - for i := 0; i < n; i++ { - w.param(tup.At(i)) - } -} - -func (w *exportWriter) param(obj types.Object) { - w.pos(obj.Pos()) - w.localIdent(obj) - w.typ(obj.Type(), obj.Pkg()) -} - -func (w *exportWriter) value(typ types.Type, v constant.Value) { - w.typ(typ, nil) - - switch v.Kind() { - case constant.Bool: - w.bool(constant.BoolVal(v)) - case constant.Int: - var i big.Int - if i64, exact := constant.Int64Val(v); exact { - i.SetInt64(i64) - } else if ui64, exact := constant.Uint64Val(v); exact { - i.SetUint64(ui64) - } else { - i.SetString(v.ExactString(), 10) - } - w.mpint(&i, typ) - case constant.Float: - f := constantToFloat(v) - w.mpfloat(f, typ) - case constant.Complex: - w.mpfloat(constantToFloat(constant.Real(v)), typ) - w.mpfloat(constantToFloat(constant.Imag(v)), typ) - case constant.String: - w.string(constant.StringVal(v)) - case constant.Unknown: - // package contains type errors - default: - panic(internalErrorf("unexpected value %v (%T)", v, v)) - } -} - -// constantToFloat converts a constant.Value with kind constant.Float to a -// big.Float. -func constantToFloat(x constant.Value) *big.Float { - assert(x.Kind() == constant.Float) - // Use the same floating-point precision (512) as cmd/compile - // (see Mpprec in cmd/compile/internal/gc/mpfloat.go). - const mpprec = 512 - var f big.Float - f.SetPrec(mpprec) - if v, exact := constant.Float64Val(x); exact { - // float64 - f.SetFloat64(v) - } else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int { - // TODO(gri): add big.Rat accessor to constant.Value. - n := valueToRat(num) - d := valueToRat(denom) - f.SetRat(n.Quo(n, d)) - } else { - // Value too large to represent as a fraction => inaccessible. - // TODO(gri): add big.Float accessor to constant.Value. - _, ok := f.SetString(x.ExactString()) - assert(ok) - } - return &f -} - -// mpint exports a multi-precision integer. -// -// For unsigned types, small values are written out as a single -// byte. Larger values are written out as a length-prefixed big-endian -// byte string, where the length prefix is encoded as its complement. -// For example, bytes 0, 1, and 2 directly represent the integer -// values 0, 1, and 2; while bytes 255, 254, and 253 indicate a 1-, -// 2-, and 3-byte big-endian string follow. -// -// Encoding for signed types use the same general approach as for -// unsigned types, except small values use zig-zag encoding and the -// bottom bit of length prefix byte for large values is reserved as a -// sign bit. -// -// The exact boundary between small and large encodings varies -// according to the maximum number of bytes needed to encode a value -// of type typ. As a special case, 8-bit types are always encoded as a -// single byte. -// -// TODO(mdempsky): Is this level of complexity really worthwhile? -func (w *exportWriter) mpint(x *big.Int, typ types.Type) { - basic, ok := typ.Underlying().(*types.Basic) - if !ok { - panic(internalErrorf("unexpected type %v (%T)", typ.Underlying(), typ.Underlying())) - } - - signed, maxBytes := intSize(basic) - - negative := x.Sign() < 0 - if !signed && negative { - panic(internalErrorf("negative unsigned integer; type %v, value %v", typ, x)) - } - - b := x.Bytes() - if len(b) > 0 && b[0] == 0 { - panic(internalErrorf("leading zeros")) - } - if uint(len(b)) > maxBytes { - panic(internalErrorf("bad mpint length: %d > %d (type %v, value %v)", len(b), maxBytes, typ, x)) - } - - maxSmall := 256 - maxBytes - if signed { - maxSmall = 256 - 2*maxBytes - } - if maxBytes == 1 { - maxSmall = 256 - } - - // Check if x can use small value encoding. - if len(b) <= 1 { - var ux uint - if len(b) == 1 { - ux = uint(b[0]) - } - if signed { - ux <<= 1 - if negative { - ux-- - } - } - if ux < maxSmall { - w.data.WriteByte(byte(ux)) - return - } - } - - n := 256 - uint(len(b)) - if signed { - n = 256 - 2*uint(len(b)) - if negative { - n |= 1 - } - } - if n < maxSmall || n >= 256 { - panic(internalErrorf("encoding mistake: %d, %v, %v => %d", len(b), signed, negative, n)) - } - - w.data.WriteByte(byte(n)) - w.data.Write(b) -} - -// mpfloat exports a multi-precision floating point number. -// -// The number's value is decomposed into mantissa × 2**exponent, where -// mantissa is an integer. The value is written out as mantissa (as a -// multi-precision integer) and then the exponent, except exponent is -// omitted if mantissa is zero. -func (w *exportWriter) mpfloat(f *big.Float, typ types.Type) { - if f.IsInf() { - panic("infinite constant") - } - - // Break into f = mant × 2**exp, with 0.5 <= mant < 1. - var mant big.Float - exp := int64(f.MantExp(&mant)) - - // Scale so that mant is an integer. - prec := mant.MinPrec() - mant.SetMantExp(&mant, int(prec)) - exp -= int64(prec) - - manti, acc := mant.Int(nil) - if acc != big.Exact { - panic(internalErrorf("mantissa scaling failed for %f (%s)", f, acc)) - } - w.mpint(manti, typ) - if manti.Sign() != 0 { - w.int64(exp) - } -} - -func (w *exportWriter) bool(b bool) bool { - var x uint64 - if b { - x = 1 - } - w.uint64(x) - return b -} - -func (w *exportWriter) int64(x int64) { w.data.int64(x) } -func (w *exportWriter) uint64(x uint64) { w.data.uint64(x) } -func (w *exportWriter) string(s string) { w.uint64(w.p.stringOff(s)) } - -func (w *exportWriter) localIdent(obj types.Object) { - // Anonymous parameters. - if obj == nil { - w.string("") - return - } - - name := obj.Name() - if name == "_" { - w.string("_") - return - } - - w.string(name) -} - -type intWriter struct { - bytes.Buffer -} - -func (w *intWriter) int64(x int64) { - var buf [binary.MaxVarintLen64]byte - n := binary.PutVarint(buf[:], x) - w.Write(buf[:n]) -} - -func (w *intWriter) uint64(x uint64) { - var buf [binary.MaxVarintLen64]byte - n := binary.PutUvarint(buf[:], x) - w.Write(buf[:n]) -} - -func assert(cond bool) { - if !cond { - panic("internal error: assertion failed") - } -} - -// The below is copied from go/src/cmd/compile/internal/gc/syntax.go. - -// objQueue is a FIFO queue of types.Object. The zero value of objQueue is -// a ready-to-use empty queue. -type objQueue struct { - ring []types.Object - head, tail int -} - -// empty returns true if q contains no Nodes. -func (q *objQueue) empty() bool { - return q.head == q.tail -} - -// pushTail appends n to the tail of the queue. -func (q *objQueue) pushTail(obj types.Object) { - if len(q.ring) == 0 { - q.ring = make([]types.Object, 16) - } else if q.head+len(q.ring) == q.tail { - // Grow the ring. - nring := make([]types.Object, len(q.ring)*2) - // Copy the old elements. - part := q.ring[q.head%len(q.ring):] - if q.tail-q.head <= len(part) { - part = part[:q.tail-q.head] - copy(nring, part) - } else { - pos := copy(nring, part) - copy(nring[pos:], q.ring[:q.tail%len(q.ring)]) - } - q.ring, q.head, q.tail = nring, 0, q.tail-q.head - } - - q.ring[q.tail%len(q.ring)] = obj - q.tail++ -} - -// popHead pops a node from the head of the queue. It panics if q is empty. -func (q *objQueue) popHead() types.Object { - if q.empty() { - panic("dequeue empty") - } - obj := q.ring[q.head%len(q.ring)] - q.head++ - return obj -} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go b/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go deleted file mode 100644 index a31a880263..0000000000 --- a/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go +++ /dev/null @@ -1,630 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Indexed package import. -// See cmd/compile/internal/gc/iexport.go for the export data format. - -// This file is a copy of $GOROOT/src/go/internal/gcimporter/iimport.go. - -package gcimporter - -import ( - "bytes" - "encoding/binary" - "fmt" - "go/constant" - "go/token" - "go/types" - "io" - "sort" -) - -type intReader struct { - *bytes.Reader - path string -} - -func (r *intReader) int64() int64 { - i, err := binary.ReadVarint(r.Reader) - if err != nil { - errorf("import %q: read varint error: %v", r.path, err) - } - return i -} - -func (r *intReader) uint64() uint64 { - i, err := binary.ReadUvarint(r.Reader) - if err != nil { - errorf("import %q: read varint error: %v", r.path, err) - } - return i -} - -const predeclReserved = 32 - -type itag uint64 - -const ( - // Types - definedType itag = iota - pointerType - sliceType - arrayType - chanType - mapType - signatureType - structType - interfaceType -) - -// IImportData imports a package from the serialized package data -// and returns the number of bytes consumed and a reference to the package. -// If the export data version is not recognized or the format is otherwise -// compromised, an error is returned. -func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { - const currentVersion = 1 - version := int64(-1) - defer func() { - if e := recover(); e != nil { - if version > currentVersion { - err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) - } else { - err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e) - } - } - }() - - r := &intReader{bytes.NewReader(data), path} - - version = int64(r.uint64()) - switch version { - case currentVersion, 0: - default: - errorf("unknown iexport format version %d", version) - } - - sLen := int64(r.uint64()) - dLen := int64(r.uint64()) - - whence, _ := r.Seek(0, io.SeekCurrent) - stringData := data[whence : whence+sLen] - declData := data[whence+sLen : whence+sLen+dLen] - r.Seek(sLen+dLen, io.SeekCurrent) - - p := iimporter{ - ipath: path, - version: int(version), - - stringData: stringData, - stringCache: make(map[uint64]string), - pkgCache: make(map[uint64]*types.Package), - - declData: declData, - pkgIndex: make(map[*types.Package]map[string]uint64), - typCache: make(map[uint64]types.Type), - - fake: fakeFileSet{ - fset: fset, - files: make(map[string]*token.File), - }, - } - - for i, pt := range predeclared() { - p.typCache[uint64(i)] = pt - } - - pkgList := make([]*types.Package, r.uint64()) - for i := range pkgList { - pkgPathOff := r.uint64() - pkgPath := p.stringAt(pkgPathOff) - pkgName := p.stringAt(r.uint64()) - _ = r.uint64() // package height; unused by go/types - - if pkgPath == "" { - pkgPath = path - } - pkg := imports[pkgPath] - if pkg == nil { - pkg = types.NewPackage(pkgPath, pkgName) - imports[pkgPath] = pkg - } else if pkg.Name() != pkgName { - errorf("conflicting names %s and %s for package %q", pkg.Name(), pkgName, path) - } - - p.pkgCache[pkgPathOff] = pkg - - nameIndex := make(map[string]uint64) - for nSyms := r.uint64(); nSyms > 0; nSyms-- { - name := p.stringAt(r.uint64()) - nameIndex[name] = r.uint64() - } - - p.pkgIndex[pkg] = nameIndex - pkgList[i] = pkg - } - if len(pkgList) == 0 { - errorf("no packages found for %s", path) - panic("unreachable") - } - p.ipkg = pkgList[0] - names := make([]string, 0, len(p.pkgIndex[p.ipkg])) - for name := range p.pkgIndex[p.ipkg] { - names = append(names, name) - } - sort.Strings(names) - for _, name := range names { - p.doDecl(p.ipkg, name) - } - - for _, typ := range p.interfaceList { - typ.Complete() - } - - // record all referenced packages as imports - list := append(([]*types.Package)(nil), pkgList[1:]...) - sort.Sort(byPath(list)) - p.ipkg.SetImports(list) - - // package was imported completely and without errors - p.ipkg.MarkComplete() - - consumed, _ := r.Seek(0, io.SeekCurrent) - return int(consumed), p.ipkg, nil -} - -type iimporter struct { - ipath string - ipkg *types.Package - version int - - stringData []byte - stringCache map[uint64]string - pkgCache map[uint64]*types.Package - - declData []byte - pkgIndex map[*types.Package]map[string]uint64 - typCache map[uint64]types.Type - - fake fakeFileSet - interfaceList []*types.Interface -} - -func (p *iimporter) doDecl(pkg *types.Package, name string) { - // See if we've already imported this declaration. - if obj := pkg.Scope().Lookup(name); obj != nil { - return - } - - off, ok := p.pkgIndex[pkg][name] - if !ok { - errorf("%v.%v not in index", pkg, name) - } - - r := &importReader{p: p, currPkg: pkg} - r.declReader.Reset(p.declData[off:]) - - r.obj(name) -} - -func (p *iimporter) stringAt(off uint64) string { - if s, ok := p.stringCache[off]; ok { - return s - } - - slen, n := binary.Uvarint(p.stringData[off:]) - if n <= 0 { - errorf("varint failed") - } - spos := off + uint64(n) - s := string(p.stringData[spos : spos+slen]) - p.stringCache[off] = s - return s -} - -func (p *iimporter) pkgAt(off uint64) *types.Package { - if pkg, ok := p.pkgCache[off]; ok { - return pkg - } - path := p.stringAt(off) - if path == p.ipath { - return p.ipkg - } - errorf("missing package %q in %q", path, p.ipath) - return nil -} - -func (p *iimporter) typAt(off uint64, base *types.Named) types.Type { - if t, ok := p.typCache[off]; ok && (base == nil || !isInterface(t)) { - return t - } - - if off < predeclReserved { - errorf("predeclared type missing from cache: %v", off) - } - - r := &importReader{p: p} - r.declReader.Reset(p.declData[off-predeclReserved:]) - t := r.doType(base) - - if base == nil || !isInterface(t) { - p.typCache[off] = t - } - return t -} - -type importReader struct { - p *iimporter - declReader bytes.Reader - currPkg *types.Package - prevFile string - prevLine int64 - prevColumn int64 -} - -func (r *importReader) obj(name string) { - tag := r.byte() - pos := r.pos() - - switch tag { - case 'A': - typ := r.typ() - - r.declare(types.NewTypeName(pos, r.currPkg, name, typ)) - - case 'C': - typ, val := r.value() - - r.declare(types.NewConst(pos, r.currPkg, name, typ, val)) - - case 'F': - sig := r.signature(nil) - - r.declare(types.NewFunc(pos, r.currPkg, name, sig)) - - case 'T': - // Types can be recursive. We need to setup a stub - // declaration before recursing. - obj := types.NewTypeName(pos, r.currPkg, name, nil) - named := types.NewNamed(obj, nil, nil) - r.declare(obj) - - underlying := r.p.typAt(r.uint64(), named).Underlying() - named.SetUnderlying(underlying) - - if !isInterface(underlying) { - for n := r.uint64(); n > 0; n-- { - mpos := r.pos() - mname := r.ident() - recv := r.param() - msig := r.signature(recv) - - named.AddMethod(types.NewFunc(mpos, r.currPkg, mname, msig)) - } - } - - case 'V': - typ := r.typ() - - r.declare(types.NewVar(pos, r.currPkg, name, typ)) - - default: - errorf("unexpected tag: %v", tag) - } -} - -func (r *importReader) declare(obj types.Object) { - obj.Pkg().Scope().Insert(obj) -} - -func (r *importReader) value() (typ types.Type, val constant.Value) { - typ = r.typ() - - switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType { - case types.IsBoolean: - val = constant.MakeBool(r.bool()) - - case types.IsString: - val = constant.MakeString(r.string()) - - case types.IsInteger: - val = r.mpint(b) - - case types.IsFloat: - val = r.mpfloat(b) - - case types.IsComplex: - re := r.mpfloat(b) - im := r.mpfloat(b) - val = constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) - - default: - if b.Kind() == types.Invalid { - val = constant.MakeUnknown() - return - } - errorf("unexpected type %v", typ) // panics - panic("unreachable") - } - - return -} - -func intSize(b *types.Basic) (signed bool, maxBytes uint) { - if (b.Info() & types.IsUntyped) != 0 { - return true, 64 - } - - switch b.Kind() { - case types.Float32, types.Complex64: - return true, 3 - case types.Float64, types.Complex128: - return true, 7 - } - - signed = (b.Info() & types.IsUnsigned) == 0 - switch b.Kind() { - case types.Int8, types.Uint8: - maxBytes = 1 - case types.Int16, types.Uint16: - maxBytes = 2 - case types.Int32, types.Uint32: - maxBytes = 4 - default: - maxBytes = 8 - } - - return -} - -func (r *importReader) mpint(b *types.Basic) constant.Value { - signed, maxBytes := intSize(b) - - maxSmall := 256 - maxBytes - if signed { - maxSmall = 256 - 2*maxBytes - } - if maxBytes == 1 { - maxSmall = 256 - } - - n, _ := r.declReader.ReadByte() - if uint(n) < maxSmall { - v := int64(n) - if signed { - v >>= 1 - if n&1 != 0 { - v = ^v - } - } - return constant.MakeInt64(v) - } - - v := -n - if signed { - v = -(n &^ 1) >> 1 - } - if v < 1 || uint(v) > maxBytes { - errorf("weird decoding: %v, %v => %v", n, signed, v) - } - - buf := make([]byte, v) - io.ReadFull(&r.declReader, buf) - - // convert to little endian - // TODO(gri) go/constant should have a more direct conversion function - // (e.g., once it supports a big.Float based implementation) - for i, j := 0, len(buf)-1; i < j; i, j = i+1, j-1 { - buf[i], buf[j] = buf[j], buf[i] - } - - x := constant.MakeFromBytes(buf) - if signed && n&1 != 0 { - x = constant.UnaryOp(token.SUB, x, 0) - } - return x -} - -func (r *importReader) mpfloat(b *types.Basic) constant.Value { - x := r.mpint(b) - if constant.Sign(x) == 0 { - return x - } - - exp := r.int64() - switch { - case exp > 0: - x = constant.Shift(x, token.SHL, uint(exp)) - case exp < 0: - d := constant.Shift(constant.MakeInt64(1), token.SHL, uint(-exp)) - x = constant.BinaryOp(x, token.QUO, d) - } - return x -} - -func (r *importReader) ident() string { - return r.string() -} - -func (r *importReader) qualifiedIdent() (*types.Package, string) { - name := r.string() - pkg := r.pkg() - return pkg, name -} - -func (r *importReader) pos() token.Pos { - if r.p.version >= 1 { - r.posv1() - } else { - r.posv0() - } - - if r.prevFile == "" && r.prevLine == 0 && r.prevColumn == 0 { - return token.NoPos - } - return r.p.fake.pos(r.prevFile, int(r.prevLine), int(r.prevColumn)) -} - -func (r *importReader) posv0() { - delta := r.int64() - if delta != deltaNewFile { - r.prevLine += delta - } else if l := r.int64(); l == -1 { - r.prevLine += deltaNewFile - } else { - r.prevFile = r.string() - r.prevLine = l - } -} - -func (r *importReader) posv1() { - delta := r.int64() - r.prevColumn += delta >> 1 - if delta&1 != 0 { - delta = r.int64() - r.prevLine += delta >> 1 - if delta&1 != 0 { - r.prevFile = r.string() - } - } -} - -func (r *importReader) typ() types.Type { - return r.p.typAt(r.uint64(), nil) -} - -func isInterface(t types.Type) bool { - _, ok := t.(*types.Interface) - return ok -} - -func (r *importReader) pkg() *types.Package { return r.p.pkgAt(r.uint64()) } -func (r *importReader) string() string { return r.p.stringAt(r.uint64()) } - -func (r *importReader) doType(base *types.Named) types.Type { - switch k := r.kind(); k { - default: - errorf("unexpected kind tag in %q: %v", r.p.ipath, k) - return nil - - case definedType: - pkg, name := r.qualifiedIdent() - r.p.doDecl(pkg, name) - return pkg.Scope().Lookup(name).(*types.TypeName).Type() - case pointerType: - return types.NewPointer(r.typ()) - case sliceType: - return types.NewSlice(r.typ()) - case arrayType: - n := r.uint64() - return types.NewArray(r.typ(), int64(n)) - case chanType: - dir := chanDir(int(r.uint64())) - return types.NewChan(dir, r.typ()) - case mapType: - return types.NewMap(r.typ(), r.typ()) - case signatureType: - r.currPkg = r.pkg() - return r.signature(nil) - - case structType: - r.currPkg = r.pkg() - - fields := make([]*types.Var, r.uint64()) - tags := make([]string, len(fields)) - for i := range fields { - fpos := r.pos() - fname := r.ident() - ftyp := r.typ() - emb := r.bool() - tag := r.string() - - fields[i] = types.NewField(fpos, r.currPkg, fname, ftyp, emb) - tags[i] = tag - } - return types.NewStruct(fields, tags) - - case interfaceType: - r.currPkg = r.pkg() - - embeddeds := make([]types.Type, r.uint64()) - for i := range embeddeds { - _ = r.pos() - embeddeds[i] = r.typ() - } - - methods := make([]*types.Func, r.uint64()) - for i := range methods { - mpos := r.pos() - mname := r.ident() - - // TODO(mdempsky): Matches bimport.go, but I - // don't agree with this. - var recv *types.Var - if base != nil { - recv = types.NewVar(token.NoPos, r.currPkg, "", base) - } - - msig := r.signature(recv) - methods[i] = types.NewFunc(mpos, r.currPkg, mname, msig) - } - - typ := newInterface(methods, embeddeds) - r.p.interfaceList = append(r.p.interfaceList, typ) - return typ - } -} - -func (r *importReader) kind() itag { - return itag(r.uint64()) -} - -func (r *importReader) signature(recv *types.Var) *types.Signature { - params := r.paramList() - results := r.paramList() - variadic := params.Len() > 0 && r.bool() - return types.NewSignature(recv, params, results, variadic) -} - -func (r *importReader) paramList() *types.Tuple { - xs := make([]*types.Var, r.uint64()) - for i := range xs { - xs[i] = r.param() - } - return types.NewTuple(xs...) -} - -func (r *importReader) param() *types.Var { - pos := r.pos() - name := r.ident() - typ := r.typ() - return types.NewParam(pos, r.currPkg, name, typ) -} - -func (r *importReader) bool() bool { - return r.uint64() != 0 -} - -func (r *importReader) int64() int64 { - n, err := binary.ReadVarint(&r.declReader) - if err != nil { - errorf("readVarint: %v", err) - } - return n -} - -func (r *importReader) uint64() uint64 { - n, err := binary.ReadUvarint(&r.declReader) - if err != nil { - errorf("readUvarint: %v", err) - } - return n -} - -func (r *importReader) byte() byte { - x, err := r.declReader.ReadByte() - if err != nil { - errorf("declReader.ReadByte: %v", err) - } - return x -} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface10.go b/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface10.go deleted file mode 100644 index 463f252271..0000000000 --- a/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface10.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !go1.11 - -package gcimporter - -import "go/types" - -func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { - named := make([]*types.Named, len(embeddeds)) - for i, e := range embeddeds { - var ok bool - named[i], ok = e.(*types.Named) - if !ok { - panic("embedding of non-defined interfaces in interfaces is not supported before Go 1.11") - } - } - return types.NewInterface(methods, named) -} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface11.go b/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface11.go deleted file mode 100644 index ab28b95cbb..0000000000 --- a/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface11.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.11 - -package gcimporter - -import "go/types" - -func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { - return types.NewInterfaceType(methods, embeddeds) -} diff --git a/vendor/golang.org/x/tools/go/internal/packagesdriver/BUILD.bazel b/vendor/golang.org/x/tools/go/internal/packagesdriver/BUILD.bazel deleted file mode 100644 index 7ab4225d91..0000000000 --- a/vendor/golang.org/x/tools/go/internal/packagesdriver/BUILD.bazel +++ /dev/null @@ -1,10 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["sizes.go"], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/internal/packagesdriver", - importpath = "golang.org/x/tools/go/internal/packagesdriver", - visibility = ["//vendor/golang.org/x/tools/go:__subpackages__"], - deps = ["//vendor/golang.org/x/tools/internal/gocommand:go_default_library"], -) diff --git a/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go b/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go deleted file mode 100644 index dc6177c122..0000000000 --- a/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package packagesdriver fetches type sizes for go/packages and go/analysis. -package packagesdriver - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "go/types" - "os/exec" - "strings" - - "golang.org/x/tools/internal/gocommand" -) - -var debug = false - -func GetSizes(ctx context.Context, buildFlags, env []string, gocmdRunner *gocommand.Runner, dir string) (types.Sizes, error) { - // TODO(matloob): Clean this up. This code is mostly a copy of packages.findExternalDriver. - const toolPrefix = "GOPACKAGESDRIVER=" - tool := "" - for _, env := range env { - if val := strings.TrimPrefix(env, toolPrefix); val != env { - tool = val - } - } - - if tool == "" { - var err error - tool, err = exec.LookPath("gopackagesdriver") - if err != nil { - // We did not find the driver, so use "go list". - tool = "off" - } - } - - if tool == "off" { - return GetSizesGolist(ctx, buildFlags, env, gocmdRunner, dir) - } - - req, err := json.Marshal(struct { - Command string `json:"command"` - Env []string `json:"env"` - BuildFlags []string `json:"build_flags"` - }{ - Command: "sizes", - Env: env, - BuildFlags: buildFlags, - }) - if err != nil { - return nil, fmt.Errorf("failed to encode message to driver tool: %v", err) - } - - buf := new(bytes.Buffer) - cmd := exec.CommandContext(ctx, tool) - cmd.Dir = dir - cmd.Env = env - cmd.Stdin = bytes.NewReader(req) - cmd.Stdout = buf - cmd.Stderr = new(bytes.Buffer) - if err := cmd.Run(); err != nil { - return nil, fmt.Errorf("%v: %v: %s", tool, err, cmd.Stderr) - } - var response struct { - // Sizes, if not nil, is the types.Sizes to use when type checking. - Sizes *types.StdSizes - } - if err := json.Unmarshal(buf.Bytes(), &response); err != nil { - return nil, err - } - return response.Sizes, nil -} - -func GetSizesGolist(ctx context.Context, buildFlags, env []string, gocmdRunner *gocommand.Runner, dir string) (types.Sizes, error) { - inv := gocommand.Invocation{ - Verb: "list", - Args: []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"}, - Env: env, - BuildFlags: buildFlags, - WorkingDir: dir, - } - stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv) - var goarch, compiler string - if rawErr != nil { - if strings.Contains(rawErr.Error(), "cannot find main module") { - // User's running outside of a module. All bets are off. Get GOARCH and guess compiler is gc. - // TODO(matloob): Is this a problem in practice? - inv := gocommand.Invocation{ - Verb: "env", - Args: []string{"GOARCH"}, - Env: env, - WorkingDir: dir, - } - envout, enverr := gocmdRunner.Run(ctx, inv) - if enverr != nil { - return nil, enverr - } - goarch = strings.TrimSpace(envout.String()) - compiler = "gc" - } else { - return nil, friendlyErr - } - } else { - fields := strings.Fields(stdout.String()) - if len(fields) < 2 { - return nil, fmt.Errorf("could not parse GOARCH and Go compiler in format \" \":\nstdout: <<%s>>\nstderr: <<%s>>", - stdout.String(), stderr.String()) - } - goarch = fields[0] - compiler = fields[1] - } - return types.SizesFor(compiler, goarch), nil -} diff --git a/vendor/golang.org/x/tools/go/loader/BUILD.bazel b/vendor/golang.org/x/tools/go/loader/BUILD.bazel deleted file mode 100644 index e34320856d..0000000000 --- a/vendor/golang.org/x/tools/go/loader/BUILD.bazel +++ /dev/null @@ -1,18 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "loader.go", - "util.go", - ], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/loader", - importpath = "golang.org/x/tools/go/loader", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/go/ast/astutil:go_default_library", - "//vendor/golang.org/x/tools/go/buildutil:go_default_library", - "//vendor/golang.org/x/tools/go/internal/cgo:go_default_library", - ], -) diff --git a/vendor/golang.org/x/tools/go/loader/doc.go b/vendor/golang.org/x/tools/go/loader/doc.go deleted file mode 100644 index c5aa31c1a0..0000000000 --- a/vendor/golang.org/x/tools/go/loader/doc.go +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package loader loads a complete Go program from source code, parsing -// and type-checking the initial packages plus their transitive closure -// of dependencies. The ASTs and the derived facts are retained for -// later use. -// -// Deprecated: This is an older API and does not have support -// for modules. Use golang.org/x/tools/go/packages instead. -// -// The package defines two primary types: Config, which specifies a -// set of initial packages to load and various other options; and -// Program, which is the result of successfully loading the packages -// specified by a configuration. -// -// The configuration can be set directly, but *Config provides various -// convenience methods to simplify the common cases, each of which can -// be called any number of times. Finally, these are followed by a -// call to Load() to actually load and type-check the program. -// -// var conf loader.Config -// -// // Use the command-line arguments to specify -// // a set of initial packages to load from source. -// // See FromArgsUsage for help. -// rest, err := conf.FromArgs(os.Args[1:], wantTests) -// -// // Parse the specified files and create an ad hoc package with path "foo". -// // All files must have the same 'package' declaration. -// conf.CreateFromFilenames("foo", "foo.go", "bar.go") -// -// // Create an ad hoc package with path "foo" from -// // the specified already-parsed files. -// // All ASTs must have the same 'package' declaration. -// conf.CreateFromFiles("foo", parsedFiles) -// -// // Add "runtime" to the set of packages to be loaded. -// conf.Import("runtime") -// -// // Adds "fmt" and "fmt_test" to the set of packages -// // to be loaded. "fmt" will include *_test.go files. -// conf.ImportWithTests("fmt") -// -// // Finally, load all the packages specified by the configuration. -// prog, err := conf.Load() -// -// See examples_test.go for examples of API usage. -// -// -// CONCEPTS AND TERMINOLOGY -// -// The WORKSPACE is the set of packages accessible to the loader. The -// workspace is defined by Config.Build, a *build.Context. The -// default context treats subdirectories of $GOROOT and $GOPATH as -// packages, but this behavior may be overridden. -// -// An AD HOC package is one specified as a set of source files on the -// command line. In the simplest case, it may consist of a single file -// such as $GOROOT/src/net/http/triv.go. -// -// EXTERNAL TEST packages are those comprised of a set of *_test.go -// files all with the same 'package foo_test' declaration, all in the -// same directory. (go/build.Package calls these files XTestFiles.) -// -// An IMPORTABLE package is one that can be referred to by some import -// spec. Every importable package is uniquely identified by its -// PACKAGE PATH or just PATH, a string such as "fmt", "encoding/json", -// or "cmd/vendor/golang.org/x/arch/x86/x86asm". A package path -// typically denotes a subdirectory of the workspace. -// -// An import declaration uses an IMPORT PATH to refer to a package. -// Most import declarations use the package path as the import path. -// -// Due to VENDORING (https://golang.org/s/go15vendor), the -// interpretation of an import path may depend on the directory in which -// it appears. To resolve an import path to a package path, go/build -// must search the enclosing directories for a subdirectory named -// "vendor". -// -// ad hoc packages and external test packages are NON-IMPORTABLE. The -// path of an ad hoc package is inferred from the package -// declarations of its files and is therefore not a unique package key. -// For example, Config.CreatePkgs may specify two initial ad hoc -// packages, both with path "main". -// -// An AUGMENTED package is an importable package P plus all the -// *_test.go files with same 'package foo' declaration as P. -// (go/build.Package calls these files TestFiles.) -// -// The INITIAL packages are those specified in the configuration. A -// DEPENDENCY is a package loaded to satisfy an import in an initial -// package or another dependency. -// -package loader - -// IMPLEMENTATION NOTES -// -// 'go test', in-package test files, and import cycles -// --------------------------------------------------- -// -// An external test package may depend upon members of the augmented -// package that are not in the unaugmented package, such as functions -// that expose internals. (See bufio/export_test.go for an example.) -// So, the loader must ensure that for each external test package -// it loads, it also augments the corresponding non-test package. -// -// The import graph over n unaugmented packages must be acyclic; the -// import graph over n-1 unaugmented packages plus one augmented -// package must also be acyclic. ('go test' relies on this.) But the -// import graph over n augmented packages may contain cycles. -// -// First, all the (unaugmented) non-test packages and their -// dependencies are imported in the usual way; the loader reports an -// error if it detects an import cycle. -// -// Then, each package P for which testing is desired is augmented by -// the list P' of its in-package test files, by calling -// (*types.Checker).Files. This arrangement ensures that P' may -// reference definitions within P, but P may not reference definitions -// within P'. Furthermore, P' may import any other package, including -// ones that depend upon P, without an import cycle error. -// -// Consider two packages A and B, both of which have lists of -// in-package test files we'll call A' and B', and which have the -// following import graph edges: -// B imports A -// B' imports A -// A' imports B -// This last edge would be expected to create an error were it not -// for the special type-checking discipline above. -// Cycles of size greater than two are possible. For example: -// compress/bzip2/bzip2_test.go (package bzip2) imports "io/ioutil" -// io/ioutil/tempfile_test.go (package ioutil) imports "regexp" -// regexp/exec_test.go (package regexp) imports "compress/bzip2" -// -// -// Concurrency -// ----------- -// -// Let us define the import dependency graph as follows. Each node is a -// list of files passed to (Checker).Files at once. Many of these lists -// are the production code of an importable Go package, so those nodes -// are labelled by the package's path. The remaining nodes are -// ad hoc packages and lists of in-package *_test.go files that augment -// an importable package; those nodes have no label. -// -// The edges of the graph represent import statements appearing within a -// file. An edge connects a node (a list of files) to the node it -// imports, which is importable and thus always labelled. -// -// Loading is controlled by this dependency graph. -// -// To reduce I/O latency, we start loading a package's dependencies -// asynchronously as soon as we've parsed its files and enumerated its -// imports (scanImports). This performs a preorder traversal of the -// import dependency graph. -// -// To exploit hardware parallelism, we type-check unrelated packages in -// parallel, where "unrelated" means not ordered by the partial order of -// the import dependency graph. -// -// We use a concurrency-safe non-blocking cache (importer.imported) to -// record the results of type-checking, whether success or failure. An -// entry is created in this cache by startLoad the first time the -// package is imported. The first goroutine to request an entry becomes -// responsible for completing the task and broadcasting completion to -// subsequent requestors, which block until then. -// -// Type checking occurs in (parallel) postorder: we cannot type-check a -// set of files until we have loaded and type-checked all of their -// immediate dependencies (and thus all of their transitive -// dependencies). If the input were guaranteed free of import cycles, -// this would be trivial: we could simply wait for completion of the -// dependencies and then invoke the typechecker. -// -// But as we saw in the 'go test' section above, some cycles in the -// import graph over packages are actually legal, so long as the -// cycle-forming edge originates in the in-package test files that -// augment the package. This explains why the nodes of the import -// dependency graph are not packages, but lists of files: the unlabelled -// nodes avoid the cycles. Consider packages A and B where B imports A -// and A's in-package tests AT import B. The naively constructed import -// graph over packages would contain a cycle (A+AT) --> B --> (A+AT) but -// the graph over lists of files is AT --> B --> A, where AT is an -// unlabelled node. -// -// Awaiting completion of the dependencies in a cyclic graph would -// deadlock, so we must materialize the import dependency graph (as -// importer.graph) and check whether each import edge forms a cycle. If -// x imports y, and the graph already contains a path from y to x, then -// there is an import cycle, in which case the processing of x must not -// wait for the completion of processing of y. -// -// When the type-checker makes a callback (doImport) to the loader for a -// given import edge, there are two possible cases. In the normal case, -// the dependency has already been completely type-checked; doImport -// does a cache lookup and returns it. In the cyclic case, the entry in -// the cache is still necessarily incomplete, indicating a cycle. We -// perform the cycle check again to obtain the error message, and return -// the error. -// -// The result of using concurrency is about a 2.5x speedup for stdlib_test. diff --git a/vendor/golang.org/x/tools/go/loader/loader.go b/vendor/golang.org/x/tools/go/loader/loader.go deleted file mode 100644 index bc12ca33d1..0000000000 --- a/vendor/golang.org/x/tools/go/loader/loader.go +++ /dev/null @@ -1,1086 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package loader - -// See doc.go for package documentation and implementation notes. - -import ( - "errors" - "fmt" - "go/ast" - "go/build" - "go/parser" - "go/token" - "go/types" - "os" - "path/filepath" - "sort" - "strings" - "sync" - "time" - - "golang.org/x/tools/go/ast/astutil" - "golang.org/x/tools/go/internal/cgo" -) - -var ignoreVendor build.ImportMode - -const trace = false // show timing info for type-checking - -// Config specifies the configuration for loading a whole program from -// Go source code. -// The zero value for Config is a ready-to-use default configuration. -type Config struct { - // Fset is the file set for the parser to use when loading the - // program. If nil, it may be lazily initialized by any - // method of Config. - Fset *token.FileSet - - // ParserMode specifies the mode to be used by the parser when - // loading source packages. - ParserMode parser.Mode - - // TypeChecker contains options relating to the type checker. - // - // The supplied IgnoreFuncBodies is not used; the effective - // value comes from the TypeCheckFuncBodies func below. - // The supplied Import function is not used either. - TypeChecker types.Config - - // TypeCheckFuncBodies is a predicate over package paths. - // A package for which the predicate is false will - // have its package-level declarations type checked, but not - // its function bodies; this can be used to quickly load - // dependencies from source. If nil, all func bodies are type - // checked. - TypeCheckFuncBodies func(path string) bool - - // If Build is non-nil, it is used to locate source packages. - // Otherwise &build.Default is used. - // - // By default, cgo is invoked to preprocess Go files that - // import the fake package "C". This behaviour can be - // disabled by setting CGO_ENABLED=0 in the environment prior - // to startup, or by setting Build.CgoEnabled=false. - Build *build.Context - - // The current directory, used for resolving relative package - // references such as "./go/loader". If empty, os.Getwd will be - // used instead. - Cwd string - - // If DisplayPath is non-nil, it is used to transform each - // file name obtained from Build.Import(). This can be used - // to prevent a virtualized build.Config's file names from - // leaking into the user interface. - DisplayPath func(path string) string - - // If AllowErrors is true, Load will return a Program even - // if some of the its packages contained I/O, parser or type - // errors; such errors are accessible via PackageInfo.Errors. If - // false, Load will fail if any package had an error. - AllowErrors bool - - // CreatePkgs specifies a list of non-importable initial - // packages to create. The resulting packages will appear in - // the corresponding elements of the Program.Created slice. - CreatePkgs []PkgSpec - - // ImportPkgs specifies a set of initial packages to load. - // The map keys are package paths. - // - // The map value indicates whether to load tests. If true, Load - // will add and type-check two lists of files to the package: - // non-test files followed by in-package *_test.go files. In - // addition, it will append the external test package (if any) - // to Program.Created. - ImportPkgs map[string]bool - - // FindPackage is called during Load to create the build.Package - // for a given import path from a given directory. - // If FindPackage is nil, (*build.Context).Import is used. - // A client may use this hook to adapt to a proprietary build - // system that does not follow the "go build" layout - // conventions, for example. - // - // It must be safe to call concurrently from multiple goroutines. - FindPackage func(ctxt *build.Context, importPath, fromDir string, mode build.ImportMode) (*build.Package, error) - - // AfterTypeCheck is called immediately after a list of files - // has been type-checked and appended to info.Files. - // - // This optional hook function is the earliest opportunity for - // the client to observe the output of the type checker, - // which may be useful to reduce analysis latency when loading - // a large program. - // - // The function is permitted to modify info.Info, for instance - // to clear data structures that are no longer needed, which can - // dramatically reduce peak memory consumption. - // - // The function may be called twice for the same PackageInfo: - // once for the files of the package and again for the - // in-package test files. - // - // It must be safe to call concurrently from multiple goroutines. - AfterTypeCheck func(info *PackageInfo, files []*ast.File) -} - -// A PkgSpec specifies a non-importable package to be created by Load. -// Files are processed first, but typically only one of Files and -// Filenames is provided. The path needn't be globally unique. -// -// For vendoring purposes, the package's directory is the one that -// contains the first file. -type PkgSpec struct { - Path string // package path ("" => use package declaration) - Files []*ast.File // ASTs of already-parsed files - Filenames []string // names of files to be parsed -} - -// A Program is a Go program loaded from source as specified by a Config. -type Program struct { - Fset *token.FileSet // the file set for this program - - // Created[i] contains the initial package whose ASTs or - // filenames were supplied by Config.CreatePkgs[i], followed by - // the external test package, if any, of each package in - // Config.ImportPkgs ordered by ImportPath. - // - // NOTE: these files must not import "C". Cgo preprocessing is - // only performed on imported packages, not ad hoc packages. - // - // TODO(adonovan): we need to copy and adapt the logic of - // goFilesPackage (from $GOROOT/src/cmd/go/build.go) and make - // Config.Import and Config.Create methods return the same kind - // of entity, essentially a build.Package. - // Perhaps we can even reuse that type directly. - Created []*PackageInfo - - // Imported contains the initially imported packages, - // as specified by Config.ImportPkgs. - Imported map[string]*PackageInfo - - // AllPackages contains the PackageInfo of every package - // encountered by Load: all initial packages and all - // dependencies, including incomplete ones. - AllPackages map[*types.Package]*PackageInfo - - // importMap is the canonical mapping of package paths to - // packages. It contains all Imported initial packages, but not - // Created ones, and all imported dependencies. - importMap map[string]*types.Package -} - -// PackageInfo holds the ASTs and facts derived by the type-checker -// for a single package. -// -// Not mutated once exposed via the API. -// -type PackageInfo struct { - Pkg *types.Package - Importable bool // true if 'import "Pkg.Path()"' would resolve to this - TransitivelyErrorFree bool // true if Pkg and all its dependencies are free of errors - Files []*ast.File // syntax trees for the package's files - Errors []error // non-nil if the package had errors - types.Info // type-checker deductions. - dir string // package directory - - checker *types.Checker // transient type-checker state - errorFunc func(error) -} - -func (info *PackageInfo) String() string { return info.Pkg.Path() } - -func (info *PackageInfo) appendError(err error) { - if info.errorFunc != nil { - info.errorFunc(err) - } else { - fmt.Fprintln(os.Stderr, err) - } - info.Errors = append(info.Errors, err) -} - -func (conf *Config) fset() *token.FileSet { - if conf.Fset == nil { - conf.Fset = token.NewFileSet() - } - return conf.Fset -} - -// ParseFile is a convenience function (intended for testing) that invokes -// the parser using the Config's FileSet, which is initialized if nil. -// -// src specifies the parser input as a string, []byte, or io.Reader, and -// filename is its apparent name. If src is nil, the contents of -// filename are read from the file system. -// -func (conf *Config) ParseFile(filename string, src interface{}) (*ast.File, error) { - // TODO(adonovan): use conf.build() etc like parseFiles does. - return parser.ParseFile(conf.fset(), filename, src, conf.ParserMode) -} - -// FromArgsUsage is a partial usage message that applications calling -// FromArgs may wish to include in their -help output. -const FromArgsUsage = ` - is a list of arguments denoting a set of initial packages. -It may take one of two forms: - -1. A list of *.go source files. - - All of the specified files are loaded, parsed and type-checked - as a single package. All the files must belong to the same directory. - -2. A list of import paths, each denoting a package. - - The package's directory is found relative to the $GOROOT and - $GOPATH using similar logic to 'go build', and the *.go files in - that directory are loaded, parsed and type-checked as a single - package. - - In addition, all *_test.go files in the directory are then loaded - and parsed. Those files whose package declaration equals that of - the non-*_test.go files are included in the primary package. Test - files whose package declaration ends with "_test" are type-checked - as another package, the 'external' test package, so that a single - import path may denote two packages. (Whether this behaviour is - enabled is tool-specific, and may depend on additional flags.) - -A '--' argument terminates the list of packages. -` - -// FromArgs interprets args as a set of initial packages to load from -// source and updates the configuration. It returns the list of -// unconsumed arguments. -// -// It is intended for use in command-line interfaces that require a -// set of initial packages to be specified; see FromArgsUsage message -// for details. -// -// Only superficial errors are reported at this stage; errors dependent -// on I/O are detected during Load. -// -func (conf *Config) FromArgs(args []string, xtest bool) ([]string, error) { - var rest []string - for i, arg := range args { - if arg == "--" { - rest = args[i+1:] - args = args[:i] - break // consume "--" and return the remaining args - } - } - - if len(args) > 0 && strings.HasSuffix(args[0], ".go") { - // Assume args is a list of a *.go files - // denoting a single ad hoc package. - for _, arg := range args { - if !strings.HasSuffix(arg, ".go") { - return nil, fmt.Errorf("named files must be .go files: %s", arg) - } - } - conf.CreateFromFilenames("", args...) - } else { - // Assume args are directories each denoting a - // package and (perhaps) an external test, iff xtest. - for _, arg := range args { - if xtest { - conf.ImportWithTests(arg) - } else { - conf.Import(arg) - } - } - } - - return rest, nil -} - -// CreateFromFilenames is a convenience function that adds -// a conf.CreatePkgs entry to create a package of the specified *.go -// files. -// -func (conf *Config) CreateFromFilenames(path string, filenames ...string) { - conf.CreatePkgs = append(conf.CreatePkgs, PkgSpec{Path: path, Filenames: filenames}) -} - -// CreateFromFiles is a convenience function that adds a conf.CreatePkgs -// entry to create package of the specified path and parsed files. -// -func (conf *Config) CreateFromFiles(path string, files ...*ast.File) { - conf.CreatePkgs = append(conf.CreatePkgs, PkgSpec{Path: path, Files: files}) -} - -// ImportWithTests is a convenience function that adds path to -// ImportPkgs, the set of initial source packages located relative to -// $GOPATH. The package will be augmented by any *_test.go files in -// its directory that contain a "package x" (not "package x_test") -// declaration. -// -// In addition, if any *_test.go files contain a "package x_test" -// declaration, an additional package comprising just those files will -// be added to CreatePkgs. -// -func (conf *Config) ImportWithTests(path string) { conf.addImport(path, true) } - -// Import is a convenience function that adds path to ImportPkgs, the -// set of initial packages that will be imported from source. -// -func (conf *Config) Import(path string) { conf.addImport(path, false) } - -func (conf *Config) addImport(path string, tests bool) { - if path == "C" { - return // ignore; not a real package - } - if conf.ImportPkgs == nil { - conf.ImportPkgs = make(map[string]bool) - } - conf.ImportPkgs[path] = conf.ImportPkgs[path] || tests -} - -// PathEnclosingInterval returns the PackageInfo and ast.Node that -// contain source interval [start, end), and all the node's ancestors -// up to the AST root. It searches all ast.Files of all packages in prog. -// exact is defined as for astutil.PathEnclosingInterval. -// -// The zero value is returned if not found. -// -func (prog *Program) PathEnclosingInterval(start, end token.Pos) (pkg *PackageInfo, path []ast.Node, exact bool) { - for _, info := range prog.AllPackages { - for _, f := range info.Files { - if f.Pos() == token.NoPos { - // This can happen if the parser saw - // too many errors and bailed out. - // (Use parser.AllErrors to prevent that.) - continue - } - if !tokenFileContainsPos(prog.Fset.File(f.Pos()), start) { - continue - } - if path, exact := astutil.PathEnclosingInterval(f, start, end); path != nil { - return info, path, exact - } - } - } - return nil, nil, false -} - -// InitialPackages returns a new slice containing the set of initial -// packages (Created + Imported) in unspecified order. -// -func (prog *Program) InitialPackages() []*PackageInfo { - infos := make([]*PackageInfo, 0, len(prog.Created)+len(prog.Imported)) - infos = append(infos, prog.Created...) - for _, info := range prog.Imported { - infos = append(infos, info) - } - return infos -} - -// Package returns the ASTs and results of type checking for the -// specified package. -func (prog *Program) Package(path string) *PackageInfo { - if info, ok := prog.AllPackages[prog.importMap[path]]; ok { - return info - } - for _, info := range prog.Created { - if path == info.Pkg.Path() { - return info - } - } - return nil -} - -// ---------- Implementation ---------- - -// importer holds the working state of the algorithm. -type importer struct { - conf *Config // the client configuration - start time.Time // for logging - - progMu sync.Mutex // guards prog - prog *Program // the resulting program - - // findpkg is a memoization of FindPackage. - findpkgMu sync.Mutex // guards findpkg - findpkg map[findpkgKey]*findpkgValue - - importedMu sync.Mutex // guards imported - imported map[string]*importInfo // all imported packages (incl. failures) by import path - - // import dependency graph: graph[x][y] => x imports y - // - // Since non-importable packages cannot be cyclic, we ignore - // their imports, thus we only need the subgraph over importable - // packages. Nodes are identified by their import paths. - graphMu sync.Mutex - graph map[string]map[string]bool -} - -type findpkgKey struct { - importPath string - fromDir string - mode build.ImportMode -} - -type findpkgValue struct { - ready chan struct{} // closed to broadcast readiness - bp *build.Package - err error -} - -// importInfo tracks the success or failure of a single import. -// -// Upon completion, exactly one of info and err is non-nil: -// info on successful creation of a package, err otherwise. -// A successful package may still contain type errors. -// -type importInfo struct { - path string // import path - info *PackageInfo // results of typechecking (including errors) - complete chan struct{} // closed to broadcast that info is set. -} - -// awaitCompletion blocks until ii is complete, -// i.e. the info field is safe to inspect. -func (ii *importInfo) awaitCompletion() { - <-ii.complete // wait for close -} - -// Complete marks ii as complete. -// Its info and err fields will not be subsequently updated. -func (ii *importInfo) Complete(info *PackageInfo) { - if info == nil { - panic("info == nil") - } - ii.info = info - close(ii.complete) -} - -type importError struct { - path string // import path - err error // reason for failure to create a package -} - -// Load creates the initial packages specified by conf.{Create,Import}Pkgs, -// loading their dependencies packages as needed. -// -// On success, Load returns a Program containing a PackageInfo for -// each package. On failure, it returns an error. -// -// If AllowErrors is true, Load will return a Program even if some -// packages contained I/O, parser or type errors, or if dependencies -// were missing. (Such errors are accessible via PackageInfo.Errors. If -// false, Load will fail if any package had an error. -// -// It is an error if no packages were loaded. -// -func (conf *Config) Load() (*Program, error) { - // Create a simple default error handler for parse/type errors. - if conf.TypeChecker.Error == nil { - conf.TypeChecker.Error = func(e error) { fmt.Fprintln(os.Stderr, e) } - } - - // Set default working directory for relative package references. - if conf.Cwd == "" { - var err error - conf.Cwd, err = os.Getwd() - if err != nil { - return nil, err - } - } - - // Install default FindPackage hook using go/build logic. - if conf.FindPackage == nil { - conf.FindPackage = (*build.Context).Import - } - - prog := &Program{ - Fset: conf.fset(), - Imported: make(map[string]*PackageInfo), - importMap: make(map[string]*types.Package), - AllPackages: make(map[*types.Package]*PackageInfo), - } - - imp := importer{ - conf: conf, - prog: prog, - findpkg: make(map[findpkgKey]*findpkgValue), - imported: make(map[string]*importInfo), - start: time.Now(), - graph: make(map[string]map[string]bool), - } - - // -- loading proper (concurrent phase) -------------------------------- - - var errpkgs []string // packages that contained errors - - // Load the initially imported packages and their dependencies, - // in parallel. - // No vendor check on packages imported from the command line. - infos, importErrors := imp.importAll("", conf.Cwd, conf.ImportPkgs, ignoreVendor) - for _, ie := range importErrors { - conf.TypeChecker.Error(ie.err) // failed to create package - errpkgs = append(errpkgs, ie.path) - } - for _, info := range infos { - prog.Imported[info.Pkg.Path()] = info - } - - // Augment the designated initial packages by their tests. - // Dependencies are loaded in parallel. - var xtestPkgs []*build.Package - for importPath, augment := range conf.ImportPkgs { - if !augment { - continue - } - - // No vendor check on packages imported from command line. - bp, err := imp.findPackage(importPath, conf.Cwd, ignoreVendor) - if err != nil { - // Package not found, or can't even parse package declaration. - // Already reported by previous loop; ignore it. - continue - } - - // Needs external test package? - if len(bp.XTestGoFiles) > 0 { - xtestPkgs = append(xtestPkgs, bp) - } - - // Consult the cache using the canonical package path. - path := bp.ImportPath - imp.importedMu.Lock() // (unnecessary, we're sequential here) - ii, ok := imp.imported[path] - // Paranoid checks added due to issue #11012. - if !ok { - // Unreachable. - // The previous loop called importAll and thus - // startLoad for each path in ImportPkgs, which - // populates imp.imported[path] with a non-zero value. - panic(fmt.Sprintf("imported[%q] not found", path)) - } - if ii == nil { - // Unreachable. - // The ii values in this loop are the same as in - // the previous loop, which enforced the invariant - // that at least one of ii.err and ii.info is non-nil. - panic(fmt.Sprintf("imported[%q] == nil", path)) - } - if ii.info == nil { - // Unreachable. - // awaitCompletion has the postcondition - // ii.info != nil. - panic(fmt.Sprintf("imported[%q].info = nil", path)) - } - info := ii.info - imp.importedMu.Unlock() - - // Parse the in-package test files. - files, errs := imp.conf.parsePackageFiles(bp, 't') - for _, err := range errs { - info.appendError(err) - } - - // The test files augmenting package P cannot be imported, - // but may import packages that import P, - // so we must disable the cycle check. - imp.addFiles(info, files, false) - } - - createPkg := func(path, dir string, files []*ast.File, errs []error) { - info := imp.newPackageInfo(path, dir) - for _, err := range errs { - info.appendError(err) - } - - // Ad hoc packages are non-importable, - // so no cycle check is needed. - // addFiles loads dependencies in parallel. - imp.addFiles(info, files, false) - prog.Created = append(prog.Created, info) - } - - // Create packages specified by conf.CreatePkgs. - for _, cp := range conf.CreatePkgs { - files, errs := parseFiles(conf.fset(), conf.build(), nil, conf.Cwd, cp.Filenames, conf.ParserMode) - files = append(files, cp.Files...) - - path := cp.Path - if path == "" { - if len(files) > 0 { - path = files[0].Name.Name - } else { - path = "(unnamed)" - } - } - - dir := conf.Cwd - if len(files) > 0 && files[0].Pos().IsValid() { - dir = filepath.Dir(conf.fset().File(files[0].Pos()).Name()) - } - createPkg(path, dir, files, errs) - } - - // Create external test packages. - sort.Sort(byImportPath(xtestPkgs)) - for _, bp := range xtestPkgs { - files, errs := imp.conf.parsePackageFiles(bp, 'x') - createPkg(bp.ImportPath+"_test", bp.Dir, files, errs) - } - - // -- finishing up (sequential) ---------------------------------------- - - if len(prog.Imported)+len(prog.Created) == 0 { - return nil, errors.New("no initial packages were loaded") - } - - // Create infos for indirectly imported packages. - // e.g. incomplete packages without syntax, loaded from export data. - for _, obj := range prog.importMap { - info := prog.AllPackages[obj] - if info == nil { - prog.AllPackages[obj] = &PackageInfo{Pkg: obj, Importable: true} - } else { - // finished - info.checker = nil - info.errorFunc = nil - } - } - - if !conf.AllowErrors { - // Report errors in indirectly imported packages. - for _, info := range prog.AllPackages { - if len(info.Errors) > 0 { - errpkgs = append(errpkgs, info.Pkg.Path()) - } - } - if errpkgs != nil { - var more string - if len(errpkgs) > 3 { - more = fmt.Sprintf(" and %d more", len(errpkgs)-3) - errpkgs = errpkgs[:3] - } - return nil, fmt.Errorf("couldn't load packages due to errors: %s%s", - strings.Join(errpkgs, ", "), more) - } - } - - markErrorFreePackages(prog.AllPackages) - - return prog, nil -} - -type byImportPath []*build.Package - -func (b byImportPath) Len() int { return len(b) } -func (b byImportPath) Less(i, j int) bool { return b[i].ImportPath < b[j].ImportPath } -func (b byImportPath) Swap(i, j int) { b[i], b[j] = b[j], b[i] } - -// markErrorFreePackages sets the TransitivelyErrorFree flag on all -// applicable packages. -func markErrorFreePackages(allPackages map[*types.Package]*PackageInfo) { - // Build the transpose of the import graph. - importedBy := make(map[*types.Package]map[*types.Package]bool) - for P := range allPackages { - for _, Q := range P.Imports() { - clients, ok := importedBy[Q] - if !ok { - clients = make(map[*types.Package]bool) - importedBy[Q] = clients - } - clients[P] = true - } - } - - // Find all packages reachable from some error package. - reachable := make(map[*types.Package]bool) - var visit func(*types.Package) - visit = func(p *types.Package) { - if !reachable[p] { - reachable[p] = true - for q := range importedBy[p] { - visit(q) - } - } - } - for _, info := range allPackages { - if len(info.Errors) > 0 { - visit(info.Pkg) - } - } - - // Mark the others as "transitively error-free". - for _, info := range allPackages { - if !reachable[info.Pkg] { - info.TransitivelyErrorFree = true - } - } -} - -// build returns the effective build context. -func (conf *Config) build() *build.Context { - if conf.Build != nil { - return conf.Build - } - return &build.Default -} - -// parsePackageFiles enumerates the files belonging to package path, -// then loads, parses and returns them, plus a list of I/O or parse -// errors that were encountered. -// -// 'which' indicates which files to include: -// 'g': include non-test *.go source files (GoFiles + processed CgoFiles) -// 't': include in-package *_test.go source files (TestGoFiles) -// 'x': include external *_test.go source files. (XTestGoFiles) -// -func (conf *Config) parsePackageFiles(bp *build.Package, which rune) ([]*ast.File, []error) { - if bp.ImportPath == "unsafe" { - return nil, nil - } - var filenames []string - switch which { - case 'g': - filenames = bp.GoFiles - case 't': - filenames = bp.TestGoFiles - case 'x': - filenames = bp.XTestGoFiles - default: - panic(which) - } - - files, errs := parseFiles(conf.fset(), conf.build(), conf.DisplayPath, bp.Dir, filenames, conf.ParserMode) - - // Preprocess CgoFiles and parse the outputs (sequentially). - if which == 'g' && bp.CgoFiles != nil { - cgofiles, err := cgo.ProcessFiles(bp, conf.fset(), conf.DisplayPath, conf.ParserMode) - if err != nil { - errs = append(errs, err) - } else { - files = append(files, cgofiles...) - } - } - - return files, errs -} - -// doImport imports the package denoted by path. -// It implements the types.Importer signature. -// -// It returns an error if a package could not be created -// (e.g. go/build or parse error), but type errors are reported via -// the types.Config.Error callback (the first of which is also saved -// in the package's PackageInfo). -// -// Idempotent. -// -func (imp *importer) doImport(from *PackageInfo, to string) (*types.Package, error) { - if to == "C" { - // This should be unreachable, but ad hoc packages are - // not currently subject to cgo preprocessing. - // See https://golang.org/issue/11627. - return nil, fmt.Errorf(`the loader doesn't cgo-process ad hoc packages like %q; see Go issue 11627`, - from.Pkg.Path()) - } - - bp, err := imp.findPackage(to, from.dir, 0) - if err != nil { - return nil, err - } - - // The standard unsafe package is handled specially, - // and has no PackageInfo. - if bp.ImportPath == "unsafe" { - return types.Unsafe, nil - } - - // Look for the package in the cache using its canonical path. - path := bp.ImportPath - imp.importedMu.Lock() - ii := imp.imported[path] - imp.importedMu.Unlock() - if ii == nil { - panic("internal error: unexpected import: " + path) - } - if ii.info != nil { - return ii.info.Pkg, nil - } - - // Import of incomplete package: this indicates a cycle. - fromPath := from.Pkg.Path() - if cycle := imp.findPath(path, fromPath); cycle != nil { - // Normalize cycle: start from alphabetically largest node. - pos, start := -1, "" - for i, s := range cycle { - if pos < 0 || s > start { - pos, start = i, s - } - } - cycle = append(cycle, cycle[:pos]...)[pos:] // rotate cycle to start from largest - cycle = append(cycle, cycle[0]) // add start node to end to show cycliness - return nil, fmt.Errorf("import cycle: %s", strings.Join(cycle, " -> ")) - } - - panic("internal error: import of incomplete (yet acyclic) package: " + fromPath) -} - -// findPackage locates the package denoted by the importPath in the -// specified directory. -func (imp *importer) findPackage(importPath, fromDir string, mode build.ImportMode) (*build.Package, error) { - // We use a non-blocking duplicate-suppressing cache (gopl.io §9.7) - // to avoid holding the lock around FindPackage. - key := findpkgKey{importPath, fromDir, mode} - imp.findpkgMu.Lock() - v, ok := imp.findpkg[key] - if ok { - // cache hit - imp.findpkgMu.Unlock() - - <-v.ready // wait for entry to become ready - } else { - // Cache miss: this goroutine becomes responsible for - // populating the map entry and broadcasting its readiness. - v = &findpkgValue{ready: make(chan struct{})} - imp.findpkg[key] = v - imp.findpkgMu.Unlock() - - ioLimit <- true - v.bp, v.err = imp.conf.FindPackage(imp.conf.build(), importPath, fromDir, mode) - <-ioLimit - - if _, ok := v.err.(*build.NoGoError); ok { - v.err = nil // empty directory is not an error - } - - close(v.ready) // broadcast ready condition - } - return v.bp, v.err -} - -// importAll loads, parses, and type-checks the specified packages in -// parallel and returns their completed importInfos in unspecified order. -// -// fromPath is the package path of the importing package, if it is -// importable, "" otherwise. It is used for cycle detection. -// -// fromDir is the directory containing the import declaration that -// caused these imports. -// -func (imp *importer) importAll(fromPath, fromDir string, imports map[string]bool, mode build.ImportMode) (infos []*PackageInfo, errors []importError) { - // TODO(adonovan): opt: do the loop in parallel once - // findPackage is non-blocking. - var pending []*importInfo - for importPath := range imports { - bp, err := imp.findPackage(importPath, fromDir, mode) - if err != nil { - errors = append(errors, importError{ - path: importPath, - err: err, - }) - continue - } - pending = append(pending, imp.startLoad(bp)) - } - - if fromPath != "" { - // We're loading a set of imports. - // - // We must record graph edges from the importing package - // to its dependencies, and check for cycles. - imp.graphMu.Lock() - deps, ok := imp.graph[fromPath] - if !ok { - deps = make(map[string]bool) - imp.graph[fromPath] = deps - } - for _, ii := range pending { - deps[ii.path] = true - } - imp.graphMu.Unlock() - } - - for _, ii := range pending { - if fromPath != "" { - if cycle := imp.findPath(ii.path, fromPath); cycle != nil { - // Cycle-forming import: we must not await its - // completion since it would deadlock. - // - // We don't record the error in ii since - // the error is really associated with the - // cycle-forming edge, not the package itself. - // (Also it would complicate the - // invariants of importPath completion.) - if trace { - fmt.Fprintf(os.Stderr, "import cycle: %q\n", cycle) - } - continue - } - } - ii.awaitCompletion() - infos = append(infos, ii.info) - } - - return infos, errors -} - -// findPath returns an arbitrary path from 'from' to 'to' in the import -// graph, or nil if there was none. -func (imp *importer) findPath(from, to string) []string { - imp.graphMu.Lock() - defer imp.graphMu.Unlock() - - seen := make(map[string]bool) - var search func(stack []string, importPath string) []string - search = func(stack []string, importPath string) []string { - if !seen[importPath] { - seen[importPath] = true - stack = append(stack, importPath) - if importPath == to { - return stack - } - for x := range imp.graph[importPath] { - if p := search(stack, x); p != nil { - return p - } - } - } - return nil - } - return search(make([]string, 0, 20), from) -} - -// startLoad initiates the loading, parsing and type-checking of the -// specified package and its dependencies, if it has not already begun. -// -// It returns an importInfo, not necessarily in a completed state. The -// caller must call awaitCompletion() before accessing its info field. -// -// startLoad is concurrency-safe and idempotent. -// -func (imp *importer) startLoad(bp *build.Package) *importInfo { - path := bp.ImportPath - imp.importedMu.Lock() - ii, ok := imp.imported[path] - if !ok { - ii = &importInfo{path: path, complete: make(chan struct{})} - imp.imported[path] = ii - go func() { - info := imp.load(bp) - ii.Complete(info) - }() - } - imp.importedMu.Unlock() - - return ii -} - -// load implements package loading by parsing Go source files -// located by go/build. -func (imp *importer) load(bp *build.Package) *PackageInfo { - info := imp.newPackageInfo(bp.ImportPath, bp.Dir) - info.Importable = true - files, errs := imp.conf.parsePackageFiles(bp, 'g') - for _, err := range errs { - info.appendError(err) - } - - imp.addFiles(info, files, true) - - imp.progMu.Lock() - imp.prog.importMap[bp.ImportPath] = info.Pkg - imp.progMu.Unlock() - - return info -} - -// addFiles adds and type-checks the specified files to info, loading -// their dependencies if needed. The order of files determines the -// package initialization order. It may be called multiple times on the -// same package. Errors are appended to the info.Errors field. -// -// cycleCheck determines whether the imports within files create -// dependency edges that should be checked for potential cycles. -// -func (imp *importer) addFiles(info *PackageInfo, files []*ast.File, cycleCheck bool) { - // Ensure the dependencies are loaded, in parallel. - var fromPath string - if cycleCheck { - fromPath = info.Pkg.Path() - } - // TODO(adonovan): opt: make the caller do scanImports. - // Callers with a build.Package can skip it. - imp.importAll(fromPath, info.dir, scanImports(files), 0) - - if trace { - fmt.Fprintf(os.Stderr, "%s: start %q (%d)\n", - time.Since(imp.start), info.Pkg.Path(), len(files)) - } - - // Don't call checker.Files on Unsafe, even with zero files, - // because it would mutate the package, which is a global. - if info.Pkg == types.Unsafe { - if len(files) > 0 { - panic(`"unsafe" package contains unexpected files`) - } - } else { - // Ignore the returned (first) error since we - // already collect them all in the PackageInfo. - info.checker.Files(files) - info.Files = append(info.Files, files...) - } - - if imp.conf.AfterTypeCheck != nil { - imp.conf.AfterTypeCheck(info, files) - } - - if trace { - fmt.Fprintf(os.Stderr, "%s: stop %q\n", - time.Since(imp.start), info.Pkg.Path()) - } -} - -func (imp *importer) newPackageInfo(path, dir string) *PackageInfo { - var pkg *types.Package - if path == "unsafe" { - pkg = types.Unsafe - } else { - pkg = types.NewPackage(path, "") - } - info := &PackageInfo{ - Pkg: pkg, - Info: types.Info{ - Types: make(map[ast.Expr]types.TypeAndValue), - Defs: make(map[*ast.Ident]types.Object), - Uses: make(map[*ast.Ident]types.Object), - Implicits: make(map[ast.Node]types.Object), - Scopes: make(map[ast.Node]*types.Scope), - Selections: make(map[*ast.SelectorExpr]*types.Selection), - }, - errorFunc: imp.conf.TypeChecker.Error, - dir: dir, - } - - // Copy the types.Config so we can vary it across PackageInfos. - tc := imp.conf.TypeChecker - tc.IgnoreFuncBodies = false - if f := imp.conf.TypeCheckFuncBodies; f != nil { - tc.IgnoreFuncBodies = !f(path) - } - tc.Importer = closure{imp, info} - tc.Error = info.appendError // appendError wraps the user's Error function - - info.checker = types.NewChecker(&tc, imp.conf.fset(), pkg, &info.Info) - imp.progMu.Lock() - imp.prog.AllPackages[pkg] = info - imp.progMu.Unlock() - return info -} - -type closure struct { - imp *importer - info *PackageInfo -} - -func (c closure) Import(to string) (*types.Package, error) { return c.imp.doImport(c.info, to) } diff --git a/vendor/golang.org/x/tools/go/loader/util.go b/vendor/golang.org/x/tools/go/loader/util.go deleted file mode 100644 index 7f38dd7407..0000000000 --- a/vendor/golang.org/x/tools/go/loader/util.go +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package loader - -import ( - "go/ast" - "go/build" - "go/parser" - "go/token" - "io" - "os" - "strconv" - "sync" - - "golang.org/x/tools/go/buildutil" -) - -// We use a counting semaphore to limit -// the number of parallel I/O calls per process. -var ioLimit = make(chan bool, 10) - -// parseFiles parses the Go source files within directory dir and -// returns the ASTs of the ones that could be at least partially parsed, -// along with a list of I/O and parse errors encountered. -// -// I/O is done via ctxt, which may specify a virtual file system. -// displayPath is used to transform the filenames attached to the ASTs. -// -func parseFiles(fset *token.FileSet, ctxt *build.Context, displayPath func(string) string, dir string, files []string, mode parser.Mode) ([]*ast.File, []error) { - if displayPath == nil { - displayPath = func(path string) string { return path } - } - var wg sync.WaitGroup - n := len(files) - parsed := make([]*ast.File, n) - errors := make([]error, n) - for i, file := range files { - if !buildutil.IsAbsPath(ctxt, file) { - file = buildutil.JoinPath(ctxt, dir, file) - } - wg.Add(1) - go func(i int, file string) { - ioLimit <- true // wait - defer func() { - wg.Done() - <-ioLimit // signal - }() - var rd io.ReadCloser - var err error - if ctxt.OpenFile != nil { - rd, err = ctxt.OpenFile(file) - } else { - rd, err = os.Open(file) - } - if err != nil { - errors[i] = err // open failed - return - } - - // ParseFile may return both an AST and an error. - parsed[i], errors[i] = parser.ParseFile(fset, displayPath(file), rd, mode) - rd.Close() - }(i, file) - } - wg.Wait() - - // Eliminate nils, preserving order. - var o int - for _, f := range parsed { - if f != nil { - parsed[o] = f - o++ - } - } - parsed = parsed[:o] - - o = 0 - for _, err := range errors { - if err != nil { - errors[o] = err - o++ - } - } - errors = errors[:o] - - return parsed, errors -} - -// scanImports returns the set of all import paths from all -// import specs in the specified files. -func scanImports(files []*ast.File) map[string]bool { - imports := make(map[string]bool) - for _, f := range files { - for _, decl := range f.Decls { - if decl, ok := decl.(*ast.GenDecl); ok && decl.Tok == token.IMPORT { - for _, spec := range decl.Specs { - spec := spec.(*ast.ImportSpec) - - // NB: do not assume the program is well-formed! - path, err := strconv.Unquote(spec.Path.Value) - if err != nil { - continue // quietly ignore the error - } - if path == "C" { - continue // skip pseudopackage - } - imports[path] = true - } - } - } - } - return imports -} - -// ---------- Internal helpers ---------- - -// TODO(adonovan): make this a method: func (*token.File) Contains(token.Pos) -func tokenFileContainsPos(f *token.File, pos token.Pos) bool { - p := int(pos) - base := f.Base() - return base <= p && p < base+f.Size() -} diff --git a/vendor/golang.org/x/tools/go/packages/BUILD.bazel b/vendor/golang.org/x/tools/go/packages/BUILD.bazel deleted file mode 100644 index 50c449e713..0000000000 --- a/vendor/golang.org/x/tools/go/packages/BUILD.bazel +++ /dev/null @@ -1,25 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "external.go", - "golist.go", - "golist_overlay.go", - "loadmode_string.go", - "packages.go", - "visit.go", - ], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/packages", - importpath = "golang.org/x/tools/go/packages", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/go/gcexportdata:go_default_library", - "//vendor/golang.org/x/tools/go/internal/packagesdriver:go_default_library", - "//vendor/golang.org/x/tools/internal/gocommand:go_default_library", - "//vendor/golang.org/x/tools/internal/packagesinternal:go_default_library", - "//vendor/golang.org/x/tools/internal/typesinternal:go_default_library", - "//vendor/golang.org/x/xerrors:go_default_library", - ], -) diff --git a/vendor/golang.org/x/tools/go/packages/doc.go b/vendor/golang.org/x/tools/go/packages/doc.go deleted file mode 100644 index 4bfe28a51f..0000000000 --- a/vendor/golang.org/x/tools/go/packages/doc.go +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -/* -Package packages loads Go packages for inspection and analysis. - -The Load function takes as input a list of patterns and return a list of Package -structs describing individual packages matched by those patterns. -The LoadMode controls the amount of detail in the loaded packages. - -Load passes most patterns directly to the underlying build tool, -but all patterns with the prefix "query=", where query is a -non-empty string of letters from [a-z], are reserved and may be -interpreted as query operators. - -Two query operators are currently supported: "file" and "pattern". - -The query "file=path/to/file.go" matches the package or packages enclosing -the Go source file path/to/file.go. For example "file=~/go/src/fmt/print.go" -might return the packages "fmt" and "fmt [fmt.test]". - -The query "pattern=string" causes "string" to be passed directly to -the underlying build tool. In most cases this is unnecessary, -but an application can use Load("pattern=" + x) as an escaping mechanism -to ensure that x is not interpreted as a query operator if it contains '='. - -All other query operators are reserved for future use and currently -cause Load to report an error. - -The Package struct provides basic information about the package, including - - - ID, a unique identifier for the package in the returned set; - - GoFiles, the names of the package's Go source files; - - Imports, a map from source import strings to the Packages they name; - - Types, the type information for the package's exported symbols; - - Syntax, the parsed syntax trees for the package's source code; and - - TypeInfo, the result of a complete type-check of the package syntax trees. - -(See the documentation for type Package for the complete list of fields -and more detailed descriptions.) - -For example, - - Load(nil, "bytes", "unicode...") - -returns four Package structs describing the standard library packages -bytes, unicode, unicode/utf16, and unicode/utf8. Note that one pattern -can match multiple packages and that a package might be matched by -multiple patterns: in general it is not possible to determine which -packages correspond to which patterns. - -Note that the list returned by Load contains only the packages matched -by the patterns. Their dependencies can be found by walking the import -graph using the Imports fields. - -The Load function can be configured by passing a pointer to a Config as -the first argument. A nil Config is equivalent to the zero Config, which -causes Load to run in LoadFiles mode, collecting minimal information. -See the documentation for type Config for details. - -As noted earlier, the Config.Mode controls the amount of detail -reported about the loaded packages. See the documentation for type LoadMode -for details. - -Most tools should pass their command-line arguments (after any flags) -uninterpreted to the loader, so that the loader can interpret them -according to the conventions of the underlying build system. -See the Example function for typical usage. - -*/ -package packages // import "golang.org/x/tools/go/packages" - -/* - -Motivation and design considerations - -The new package's design solves problems addressed by two existing -packages: go/build, which locates and describes packages, and -golang.org/x/tools/go/loader, which loads, parses and type-checks them. -The go/build.Package structure encodes too much of the 'go build' way -of organizing projects, leaving us in need of a data type that describes a -package of Go source code independent of the underlying build system. -We wanted something that works equally well with go build and vgo, and -also other build systems such as Bazel and Blaze, making it possible to -construct analysis tools that work in all these environments. -Tools such as errcheck and staticcheck were essentially unavailable to -the Go community at Google, and some of Google's internal tools for Go -are unavailable externally. -This new package provides a uniform way to obtain package metadata by -querying each of these build systems, optionally supporting their -preferred command-line notations for packages, so that tools integrate -neatly with users' build environments. The Metadata query function -executes an external query tool appropriate to the current workspace. - -Loading packages always returns the complete import graph "all the way down", -even if all you want is information about a single package, because the query -mechanisms of all the build systems we currently support ({go,vgo} list, and -blaze/bazel aspect-based query) cannot provide detailed information -about one package without visiting all its dependencies too, so there is -no additional asymptotic cost to providing transitive information. -(This property might not be true of a hypothetical 5th build system.) - -In calls to TypeCheck, all initial packages, and any package that -transitively depends on one of them, must be loaded from source. -Consider A->B->C->D->E: if A,C are initial, A,B,C must be loaded from -source; D may be loaded from export data, and E may not be loaded at all -(though it's possible that D's export data mentions it, so a -types.Package may be created for it and exposed.) - -The old loader had a feature to suppress type-checking of function -bodies on a per-package basis, primarily intended to reduce the work of -obtaining type information for imported packages. Now that imports are -satisfied by export data, the optimization no longer seems necessary. - -Despite some early attempts, the old loader did not exploit export data, -instead always using the equivalent of WholeProgram mode. This was due -to the complexity of mixing source and export data packages (now -resolved by the upward traversal mentioned above), and because export data -files were nearly always missing or stale. Now that 'go build' supports -caching, all the underlying build systems can guarantee to produce -export data in a reasonable (amortized) time. - -Test "main" packages synthesized by the build system are now reported as -first-class packages, avoiding the need for clients (such as go/ssa) to -reinvent this generation logic. - -One way in which go/packages is simpler than the old loader is in its -treatment of in-package tests. In-package tests are packages that -consist of all the files of the library under test, plus the test files. -The old loader constructed in-package tests by a two-phase process of -mutation called "augmentation": first it would construct and type check -all the ordinary library packages and type-check the packages that -depend on them; then it would add more (test) files to the package and -type-check again. This two-phase approach had four major problems: -1) in processing the tests, the loader modified the library package, - leaving no way for a client application to see both the test - package and the library package; one would mutate into the other. -2) because test files can declare additional methods on types defined in - the library portion of the package, the dispatch of method calls in - the library portion was affected by the presence of the test files. - This should have been a clue that the packages were logically - different. -3) this model of "augmentation" assumed at most one in-package test - per library package, which is true of projects using 'go build', - but not other build systems. -4) because of the two-phase nature of test processing, all packages that - import the library package had to be processed before augmentation, - forcing a "one-shot" API and preventing the client from calling Load - in several times in sequence as is now possible in WholeProgram mode. - (TypeCheck mode has a similar one-shot restriction for a different reason.) - -Early drafts of this package supported "multi-shot" operation. -Although it allowed clients to make a sequence of calls (or concurrent -calls) to Load, building up the graph of Packages incrementally, -it was of marginal value: it complicated the API -(since it allowed some options to vary across calls but not others), -it complicated the implementation, -it cannot be made to work in Types mode, as explained above, -and it was less efficient than making one combined call (when this is possible). -Among the clients we have inspected, none made multiple calls to load -but could not be easily and satisfactorily modified to make only a single call. -However, applications changes may be required. -For example, the ssadump command loads the user-specified packages -and in addition the runtime package. It is tempting to simply append -"runtime" to the user-provided list, but that does not work if the user -specified an ad-hoc package such as [a.go b.go]. -Instead, ssadump no longer requests the runtime package, -but seeks it among the dependencies of the user-specified packages, -and emits an error if it is not found. - -Overlays: The Overlay field in the Config allows providing alternate contents -for Go source files, by providing a mapping from file path to contents. -go/packages will pull in new imports added in overlay files when go/packages -is run in LoadImports mode or greater. -Overlay support for the go list driver isn't complete yet: if the file doesn't -exist on disk, it will only be recognized in an overlay if it is a non-test file -and the package would be reported even without the overlay. - -Questions & Tasks - -- Add GOARCH/GOOS? - They are not portable concepts, but could be made portable. - Our goal has been to allow users to express themselves using the conventions - of the underlying build system: if the build system honors GOARCH - during a build and during a metadata query, then so should - applications built atop that query mechanism. - Conversely, if the target architecture of the build is determined by - command-line flags, the application can pass the relevant - flags through to the build system using a command such as: - myapp -query_flag="--cpu=amd64" -query_flag="--os=darwin" - However, this approach is low-level, unwieldy, and non-portable. - GOOS and GOARCH seem important enough to warrant a dedicated option. - -- How should we handle partial failures such as a mixture of good and - malformed patterns, existing and non-existent packages, successful and - failed builds, import failures, import cycles, and so on, in a call to - Load? - -- Support bazel, blaze, and go1.10 list, not just go1.11 list. - -- Handle (and test) various partial success cases, e.g. - a mixture of good packages and: - invalid patterns - nonexistent packages - empty packages - packages with malformed package or import declarations - unreadable files - import cycles - other parse errors - type errors - Make sure we record errors at the correct place in the graph. - -- Missing packages among initial arguments are not reported. - Return bogus packages for them, like golist does. - -- "undeclared name" errors (for example) are reported out of source file - order. I suspect this is due to the breadth-first resolution now used - by go/types. Is that a bug? Discuss with gri. - -*/ diff --git a/vendor/golang.org/x/tools/go/packages/external.go b/vendor/golang.org/x/tools/go/packages/external.go deleted file mode 100644 index 8c8473fd0b..0000000000 --- a/vendor/golang.org/x/tools/go/packages/external.go +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// This file enables an external tool to intercept package requests. -// If the tool is present then its results are used in preference to -// the go list command. - -package packages - -import ( - "bytes" - "encoding/json" - "fmt" - "os" - "os/exec" - "strings" -) - -// The Driver Protocol -// -// The driver, given the inputs to a call to Load, returns metadata about the packages specified. -// This allows for different build systems to support go/packages by telling go/packages how the -// packages' source is organized. -// The driver is a binary, either specified by the GOPACKAGESDRIVER environment variable or in -// the path as gopackagesdriver. It's given the inputs to load in its argv. See the package -// documentation in doc.go for the full description of the patterns that need to be supported. -// A driver receives as a JSON-serialized driverRequest struct in standard input and will -// produce a JSON-serialized driverResponse (see definition in packages.go) in its standard output. - -// driverRequest is used to provide the portion of Load's Config that is needed by a driver. -type driverRequest struct { - Mode LoadMode `json:"mode"` - // Env specifies the environment the underlying build system should be run in. - Env []string `json:"env"` - // BuildFlags are flags that should be passed to the underlying build system. - BuildFlags []string `json:"build_flags"` - // Tests specifies whether the patterns should also return test packages. - Tests bool `json:"tests"` - // Overlay maps file paths (relative to the driver's working directory) to the byte contents - // of overlay files. - Overlay map[string][]byte `json:"overlay"` -} - -// findExternalDriver returns the file path of a tool that supplies -// the build system package structure, or "" if not found." -// If GOPACKAGESDRIVER is set in the environment findExternalTool returns its -// value, otherwise it searches for a binary named gopackagesdriver on the PATH. -func findExternalDriver(cfg *Config) driver { - const toolPrefix = "GOPACKAGESDRIVER=" - tool := "" - for _, env := range cfg.Env { - if val := strings.TrimPrefix(env, toolPrefix); val != env { - tool = val - } - } - if tool != "" && tool == "off" { - return nil - } - if tool == "" { - var err error - tool, err = exec.LookPath("gopackagesdriver") - if err != nil { - return nil - } - } - return func(cfg *Config, words ...string) (*driverResponse, error) { - req, err := json.Marshal(driverRequest{ - Mode: cfg.Mode, - Env: cfg.Env, - BuildFlags: cfg.BuildFlags, - Tests: cfg.Tests, - Overlay: cfg.Overlay, - }) - if err != nil { - return nil, fmt.Errorf("failed to encode message to driver tool: %v", err) - } - - buf := new(bytes.Buffer) - stderr := new(bytes.Buffer) - cmd := exec.CommandContext(cfg.Context, tool, words...) - cmd.Dir = cfg.Dir - cmd.Env = cfg.Env - cmd.Stdin = bytes.NewReader(req) - cmd.Stdout = buf - cmd.Stderr = stderr - - if err := cmd.Run(); err != nil { - return nil, fmt.Errorf("%v: %v: %s", tool, err, cmd.Stderr) - } - if len(stderr.Bytes()) != 0 && os.Getenv("GOPACKAGESPRINTDRIVERERRORS") != "" { - fmt.Fprintf(os.Stderr, "%s stderr: <<%s>>\n", cmdDebugStr(cmd, words...), stderr) - } - - var response driverResponse - if err := json.Unmarshal(buf.Bytes(), &response); err != nil { - return nil, err - } - return &response, nil - } -} diff --git a/vendor/golang.org/x/tools/go/packages/golist.go b/vendor/golang.org/x/tools/go/packages/golist.go deleted file mode 100644 index 6e91391ce2..0000000000 --- a/vendor/golang.org/x/tools/go/packages/golist.go +++ /dev/null @@ -1,907 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packages - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "go/types" - "log" - "os" - "os/exec" - "path" - "path/filepath" - "reflect" - "sort" - "strconv" - "strings" - "sync" - "unicode" - - "golang.org/x/tools/go/internal/packagesdriver" - "golang.org/x/tools/internal/gocommand" - "golang.org/x/xerrors" -) - -// debug controls verbose logging. -var debug, _ = strconv.ParseBool(os.Getenv("GOPACKAGESDEBUG")) - -// A goTooOldError reports that the go command -// found by exec.LookPath is too old to use the new go list behavior. -type goTooOldError struct { - error -} - -// responseDeduper wraps a driverResponse, deduplicating its contents. -type responseDeduper struct { - seenRoots map[string]bool - seenPackages map[string]*Package - dr *driverResponse -} - -func newDeduper() *responseDeduper { - return &responseDeduper{ - dr: &driverResponse{}, - seenRoots: map[string]bool{}, - seenPackages: map[string]*Package{}, - } -} - -// addAll fills in r with a driverResponse. -func (r *responseDeduper) addAll(dr *driverResponse) { - for _, pkg := range dr.Packages { - r.addPackage(pkg) - } - for _, root := range dr.Roots { - r.addRoot(root) - } -} - -func (r *responseDeduper) addPackage(p *Package) { - if r.seenPackages[p.ID] != nil { - return - } - r.seenPackages[p.ID] = p - r.dr.Packages = append(r.dr.Packages, p) -} - -func (r *responseDeduper) addRoot(id string) { - if r.seenRoots[id] { - return - } - r.seenRoots[id] = true - r.dr.Roots = append(r.dr.Roots, id) -} - -type golistState struct { - cfg *Config - ctx context.Context - - envOnce sync.Once - goEnvError error - goEnv map[string]string - - rootsOnce sync.Once - rootDirsError error - rootDirs map[string]string - - // vendorDirs caches the (non)existence of vendor directories. - vendorDirs map[string]bool -} - -// getEnv returns Go environment variables. Only specific variables are -// populated -- computing all of them is slow. -func (state *golistState) getEnv() (map[string]string, error) { - state.envOnce.Do(func() { - var b *bytes.Buffer - b, state.goEnvError = state.invokeGo("env", "-json", "GOMOD", "GOPATH") - if state.goEnvError != nil { - return - } - - state.goEnv = make(map[string]string) - decoder := json.NewDecoder(b) - if state.goEnvError = decoder.Decode(&state.goEnv); state.goEnvError != nil { - return - } - }) - return state.goEnv, state.goEnvError -} - -// mustGetEnv is a convenience function that can be used if getEnv has already succeeded. -func (state *golistState) mustGetEnv() map[string]string { - env, err := state.getEnv() - if err != nil { - panic(fmt.Sprintf("mustGetEnv: %v", err)) - } - return env -} - -// goListDriver uses the go list command to interpret the patterns and produce -// the build system package structure. -// See driver for more details. -func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) { - // Make sure that any asynchronous go commands are killed when we return. - parentCtx := cfg.Context - if parentCtx == nil { - parentCtx = context.Background() - } - ctx, cancel := context.WithCancel(parentCtx) - defer cancel() - - response := newDeduper() - - // Fill in response.Sizes asynchronously if necessary. - var sizeserr error - var sizeswg sync.WaitGroup - if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 { - sizeswg.Add(1) - go func() { - var sizes types.Sizes - sizes, sizeserr = packagesdriver.GetSizesGolist(ctx, cfg.BuildFlags, cfg.Env, cfg.gocmdRunner, cfg.Dir) - // types.SizesFor always returns nil or a *types.StdSizes. - response.dr.Sizes, _ = sizes.(*types.StdSizes) - sizeswg.Done() - }() - } - - state := &golistState{ - cfg: cfg, - ctx: ctx, - vendorDirs: map[string]bool{}, - } - - // Determine files requested in contains patterns - var containFiles []string - restPatterns := make([]string, 0, len(patterns)) - // Extract file= and other [querytype]= patterns. Report an error if querytype - // doesn't exist. -extractQueries: - for _, pattern := range patterns { - eqidx := strings.Index(pattern, "=") - if eqidx < 0 { - restPatterns = append(restPatterns, pattern) - } else { - query, value := pattern[:eqidx], pattern[eqidx+len("="):] - switch query { - case "file": - containFiles = append(containFiles, value) - case "pattern": - restPatterns = append(restPatterns, value) - case "": // not a reserved query - restPatterns = append(restPatterns, pattern) - default: - for _, rune := range query { - if rune < 'a' || rune > 'z' { // not a reserved query - restPatterns = append(restPatterns, pattern) - continue extractQueries - } - } - // Reject all other patterns containing "=" - return nil, fmt.Errorf("invalid query type %q in query pattern %q", query, pattern) - } - } - } - - // See if we have any patterns to pass through to go list. Zero initial - // patterns also requires a go list call, since it's the equivalent of - // ".". - if len(restPatterns) > 0 || len(patterns) == 0 { - dr, err := state.createDriverResponse(restPatterns...) - if err != nil { - return nil, err - } - response.addAll(dr) - } - - if len(containFiles) != 0 { - if err := state.runContainsQueries(response, containFiles); err != nil { - return nil, err - } - } - - modifiedPkgs, needPkgs, err := state.processGolistOverlay(response) - if err != nil { - return nil, err - } - - var containsCandidates []string - if len(containFiles) > 0 { - containsCandidates = append(containsCandidates, modifiedPkgs...) - containsCandidates = append(containsCandidates, needPkgs...) - } - if err := state.addNeededOverlayPackages(response, needPkgs); err != nil { - return nil, err - } - // Check candidate packages for containFiles. - if len(containFiles) > 0 { - for _, id := range containsCandidates { - pkg, ok := response.seenPackages[id] - if !ok { - response.addPackage(&Package{ - ID: id, - Errors: []Error{ - { - Kind: ListError, - Msg: fmt.Sprintf("package %s expected but not seen", id), - }, - }, - }) - continue - } - for _, f := range containFiles { - for _, g := range pkg.GoFiles { - if sameFile(f, g) { - response.addRoot(id) - } - } - } - } - } - - sizeswg.Wait() - if sizeserr != nil { - return nil, sizeserr - } - return response.dr, nil -} - -func (state *golistState) addNeededOverlayPackages(response *responseDeduper, pkgs []string) error { - if len(pkgs) == 0 { - return nil - } - dr, err := state.createDriverResponse(pkgs...) - if err != nil { - return err - } - for _, pkg := range dr.Packages { - response.addPackage(pkg) - } - _, needPkgs, err := state.processGolistOverlay(response) - if err != nil { - return err - } - return state.addNeededOverlayPackages(response, needPkgs) -} - -func (state *golistState) runContainsQueries(response *responseDeduper, queries []string) error { - for _, query := range queries { - // TODO(matloob): Do only one query per directory. - fdir := filepath.Dir(query) - // Pass absolute path of directory to go list so that it knows to treat it as a directory, - // not a package path. - pattern, err := filepath.Abs(fdir) - if err != nil { - return fmt.Errorf("could not determine absolute path of file= query path %q: %v", query, err) - } - dirResponse, err := state.createDriverResponse(pattern) - - // If there was an error loading the package, or the package is returned - // with errors, try to load the file as an ad-hoc package. - // Usually the error will appear in a returned package, but may not if we're - // in module mode and the ad-hoc is located outside a module. - if err != nil || len(dirResponse.Packages) == 1 && len(dirResponse.Packages[0].GoFiles) == 0 && - len(dirResponse.Packages[0].Errors) == 1 { - var queryErr error - if dirResponse, queryErr = state.adhocPackage(pattern, query); queryErr != nil { - return err // return the original error - } - } - isRoot := make(map[string]bool, len(dirResponse.Roots)) - for _, root := range dirResponse.Roots { - isRoot[root] = true - } - for _, pkg := range dirResponse.Packages { - // Add any new packages to the main set - // We don't bother to filter packages that will be dropped by the changes of roots, - // that will happen anyway during graph construction outside this function. - // Over-reporting packages is not a problem. - response.addPackage(pkg) - // if the package was not a root one, it cannot have the file - if !isRoot[pkg.ID] { - continue - } - for _, pkgFile := range pkg.GoFiles { - if filepath.Base(query) == filepath.Base(pkgFile) { - response.addRoot(pkg.ID) - break - } - } - } - } - return nil -} - -// adhocPackage attempts to load or construct an ad-hoc package for a given -// query, if the original call to the driver produced inadequate results. -func (state *golistState) adhocPackage(pattern, query string) (*driverResponse, error) { - response, err := state.createDriverResponse(query) - if err != nil { - return nil, err - } - // If we get nothing back from `go list`, - // try to make this file into its own ad-hoc package. - // TODO(rstambler): Should this check against the original response? - if len(response.Packages) == 0 { - response.Packages = append(response.Packages, &Package{ - ID: "command-line-arguments", - PkgPath: query, - GoFiles: []string{query}, - CompiledGoFiles: []string{query}, - Imports: make(map[string]*Package), - }) - response.Roots = append(response.Roots, "command-line-arguments") - } - // Handle special cases. - if len(response.Packages) == 1 { - // golang/go#33482: If this is a file= query for ad-hoc packages where - // the file only exists on an overlay, and exists outside of a module, - // add the file to the package and remove the errors. - if response.Packages[0].ID == "command-line-arguments" || - filepath.ToSlash(response.Packages[0].PkgPath) == filepath.ToSlash(query) { - if len(response.Packages[0].GoFiles) == 0 { - filename := filepath.Join(pattern, filepath.Base(query)) // avoid recomputing abspath - // TODO(matloob): check if the file is outside of a root dir? - for path := range state.cfg.Overlay { - if path == filename { - response.Packages[0].Errors = nil - response.Packages[0].GoFiles = []string{path} - response.Packages[0].CompiledGoFiles = []string{path} - } - } - } - } - } - return response, nil -} - -// Fields must match go list; -// see $GOROOT/src/cmd/go/internal/load/pkg.go. -type jsonPackage struct { - ImportPath string - Dir string - Name string - Export string - GoFiles []string - CompiledGoFiles []string - CFiles []string - CgoFiles []string - CXXFiles []string - MFiles []string - HFiles []string - FFiles []string - SFiles []string - SwigFiles []string - SwigCXXFiles []string - SysoFiles []string - Imports []string - ImportMap map[string]string - Deps []string - Module *Module - TestGoFiles []string - TestImports []string - XTestGoFiles []string - XTestImports []string - ForTest string // q in a "p [q.test]" package, else "" - DepOnly bool - - Error *jsonPackageError -} - -type jsonPackageError struct { - ImportStack []string - Pos string - Err string -} - -func otherFiles(p *jsonPackage) [][]string { - return [][]string{p.CFiles, p.CXXFiles, p.MFiles, p.HFiles, p.FFiles, p.SFiles, p.SwigFiles, p.SwigCXXFiles, p.SysoFiles} -} - -// createDriverResponse uses the "go list" command to expand the pattern -// words and return a response for the specified packages. -func (state *golistState) createDriverResponse(words ...string) (*driverResponse, error) { - // go list uses the following identifiers in ImportPath and Imports: - // - // "p" -- importable package or main (command) - // "q.test" -- q's test executable - // "p [q.test]" -- variant of p as built for q's test executable - // "q_test [q.test]" -- q's external test package - // - // The packages p that are built differently for a test q.test - // are q itself, plus any helpers used by the external test q_test, - // typically including "testing" and all its dependencies. - - // Run "go list" for complete - // information on the specified packages. - buf, err := state.invokeGo("list", golistargs(state.cfg, words)...) - if err != nil { - return nil, err - } - seen := make(map[string]*jsonPackage) - pkgs := make(map[string]*Package) - additionalErrors := make(map[string][]Error) - // Decode the JSON and convert it to Package form. - var response driverResponse - for dec := json.NewDecoder(buf); dec.More(); { - p := new(jsonPackage) - if err := dec.Decode(p); err != nil { - return nil, fmt.Errorf("JSON decoding failed: %v", err) - } - - if p.ImportPath == "" { - // The documentation for go list says that “[e]rroneous packages will have - // a non-empty ImportPath”. If for some reason it comes back empty, we - // prefer to error out rather than silently discarding data or handing - // back a package without any way to refer to it. - if p.Error != nil { - return nil, Error{ - Pos: p.Error.Pos, - Msg: p.Error.Err, - } - } - return nil, fmt.Errorf("package missing import path: %+v", p) - } - - // Work around https://golang.org/issue/33157: - // go list -e, when given an absolute path, will find the package contained at - // that directory. But when no package exists there, it will return a fake package - // with an error and the ImportPath set to the absolute path provided to go list. - // Try to convert that absolute path to what its package path would be if it's - // contained in a known module or GOPATH entry. This will allow the package to be - // properly "reclaimed" when overlays are processed. - if filepath.IsAbs(p.ImportPath) && p.Error != nil { - pkgPath, ok, err := state.getPkgPath(p.ImportPath) - if err != nil { - return nil, err - } - if ok { - p.ImportPath = pkgPath - } - } - - if old, found := seen[p.ImportPath]; found { - // If one version of the package has an error, and the other doesn't, assume - // that this is a case where go list is reporting a fake dependency variant - // of the imported package: When a package tries to invalidly import another - // package, go list emits a variant of the imported package (with the same - // import path, but with an error on it, and the package will have a - // DepError set on it). An example of when this can happen is for imports of - // main packages: main packages can not be imported, but they may be - // separately matched and listed by another pattern. - // See golang.org/issue/36188 for more details. - - // The plan is that eventually, hopefully in Go 1.15, the error will be - // reported on the importing package rather than the duplicate "fake" - // version of the imported package. Once all supported versions of Go - // have the new behavior this logic can be deleted. - // TODO(matloob): delete the workaround logic once all supported versions of - // Go return the errors on the proper package. - - // There should be exactly one version of a package that doesn't have an - // error. - if old.Error == nil && p.Error == nil { - if !reflect.DeepEqual(p, old) { - return nil, fmt.Errorf("internal error: go list gives conflicting information for package %v", p.ImportPath) - } - continue - } - - // Determine if this package's error needs to be bubbled up. - // This is a hack, and we expect for go list to eventually set the error - // on the package. - if old.Error != nil { - var errkind string - if strings.Contains(old.Error.Err, "not an importable package") { - errkind = "not an importable package" - } else if strings.Contains(old.Error.Err, "use of internal package") && strings.Contains(old.Error.Err, "not allowed") { - errkind = "use of internal package not allowed" - } - if errkind != "" { - if len(old.Error.ImportStack) < 1 { - return nil, fmt.Errorf(`internal error: go list gave a %q error with empty import stack`, errkind) - } - importingPkg := old.Error.ImportStack[len(old.Error.ImportStack)-1] - if importingPkg == old.ImportPath { - // Using an older version of Go which put this package itself on top of import - // stack, instead of the importer. Look for importer in second from top - // position. - if len(old.Error.ImportStack) < 2 { - return nil, fmt.Errorf(`internal error: go list gave a %q error with an import stack without importing package`, errkind) - } - importingPkg = old.Error.ImportStack[len(old.Error.ImportStack)-2] - } - additionalErrors[importingPkg] = append(additionalErrors[importingPkg], Error{ - Pos: old.Error.Pos, - Msg: old.Error.Err, - Kind: ListError, - }) - } - } - - // Make sure that if there's a version of the package without an error, - // that's the one reported to the user. - if old.Error == nil { - continue - } - - // This package will replace the old one at the end of the loop. - } - seen[p.ImportPath] = p - - pkg := &Package{ - Name: p.Name, - ID: p.ImportPath, - GoFiles: absJoin(p.Dir, p.GoFiles, p.CgoFiles), - CompiledGoFiles: absJoin(p.Dir, p.CompiledGoFiles), - OtherFiles: absJoin(p.Dir, otherFiles(p)...), - forTest: p.ForTest, - Module: p.Module, - } - - if (state.cfg.Mode&typecheckCgo) != 0 && len(p.CgoFiles) != 0 { - if len(p.CompiledGoFiles) > len(p.GoFiles) { - // We need the cgo definitions, which are in the first - // CompiledGoFile after the non-cgo ones. This is a hack but there - // isn't currently a better way to find it. We also need the pure - // Go files and unprocessed cgo files, all of which are already - // in pkg.GoFiles. - cgoTypes := p.CompiledGoFiles[len(p.GoFiles)] - pkg.CompiledGoFiles = append([]string{cgoTypes}, pkg.GoFiles...) - } else { - // golang/go#38990: go list silently fails to do cgo processing - pkg.CompiledGoFiles = nil - pkg.Errors = append(pkg.Errors, Error{ - Msg: "go list failed to return CompiledGoFiles; https://golang.org/issue/38990?", - Kind: ListError, - }) - } - } - - // Work around https://golang.org/issue/28749: - // cmd/go puts assembly, C, and C++ files in CompiledGoFiles. - // Filter out any elements of CompiledGoFiles that are also in OtherFiles. - // We have to keep this workaround in place until go1.12 is a distant memory. - if len(pkg.OtherFiles) > 0 { - other := make(map[string]bool, len(pkg.OtherFiles)) - for _, f := range pkg.OtherFiles { - other[f] = true - } - - out := pkg.CompiledGoFiles[:0] - for _, f := range pkg.CompiledGoFiles { - if other[f] { - continue - } - out = append(out, f) - } - pkg.CompiledGoFiles = out - } - - // Extract the PkgPath from the package's ID. - if i := strings.IndexByte(pkg.ID, ' '); i >= 0 { - pkg.PkgPath = pkg.ID[:i] - } else { - pkg.PkgPath = pkg.ID - } - - if pkg.PkgPath == "unsafe" { - pkg.GoFiles = nil // ignore fake unsafe.go file - } - - // Assume go list emits only absolute paths for Dir. - if p.Dir != "" && !filepath.IsAbs(p.Dir) { - log.Fatalf("internal error: go list returned non-absolute Package.Dir: %s", p.Dir) - } - - if p.Export != "" && !filepath.IsAbs(p.Export) { - pkg.ExportFile = filepath.Join(p.Dir, p.Export) - } else { - pkg.ExportFile = p.Export - } - - // imports - // - // Imports contains the IDs of all imported packages. - // ImportsMap records (path, ID) only where they differ. - ids := make(map[string]bool) - for _, id := range p.Imports { - ids[id] = true - } - pkg.Imports = make(map[string]*Package) - for path, id := range p.ImportMap { - pkg.Imports[path] = &Package{ID: id} // non-identity import - delete(ids, id) - } - for id := range ids { - if id == "C" { - continue - } - - pkg.Imports[id] = &Package{ID: id} // identity import - } - if !p.DepOnly { - response.Roots = append(response.Roots, pkg.ID) - } - - // Work around for pre-go.1.11 versions of go list. - // TODO(matloob): they should be handled by the fallback. - // Can we delete this? - if len(pkg.CompiledGoFiles) == 0 { - pkg.CompiledGoFiles = pkg.GoFiles - } - - if p.Error != nil { - msg := strings.TrimSpace(p.Error.Err) // Trim to work around golang.org/issue/32363. - // Address golang.org/issue/35964 by appending import stack to error message. - if msg == "import cycle not allowed" && len(p.Error.ImportStack) != 0 { - msg += fmt.Sprintf(": import stack: %v", p.Error.ImportStack) - } - pkg.Errors = append(pkg.Errors, Error{ - Pos: p.Error.Pos, - Msg: msg, - Kind: ListError, - }) - } - - pkgs[pkg.ID] = pkg - } - - for id, errs := range additionalErrors { - if p, ok := pkgs[id]; ok { - p.Errors = append(p.Errors, errs...) - } - } - for _, pkg := range pkgs { - response.Packages = append(response.Packages, pkg) - } - sort.Slice(response.Packages, func(i, j int) bool { return response.Packages[i].ID < response.Packages[j].ID }) - - return &response, nil -} - -// getPkgPath finds the package path of a directory if it's relative to a root directory. -func (state *golistState) getPkgPath(dir string) (string, bool, error) { - absDir, err := filepath.Abs(dir) - if err != nil { - return "", false, err - } - roots, err := state.determineRootDirs() - if err != nil { - return "", false, err - } - - for rdir, rpath := range roots { - // Make sure that the directory is in the module, - // to avoid creating a path relative to another module. - if !strings.HasPrefix(absDir, rdir) { - continue - } - // TODO(matloob): This doesn't properly handle symlinks. - r, err := filepath.Rel(rdir, dir) - if err != nil { - continue - } - if rpath != "" { - // We choose only one root even though the directory even it can belong in multiple modules - // or GOPATH entries. This is okay because we only need to work with absolute dirs when a - // file is missing from disk, for instance when gopls calls go/packages in an overlay. - // Once the file is saved, gopls, or the next invocation of the tool will get the correct - // result straight from golist. - // TODO(matloob): Implement module tiebreaking? - return path.Join(rpath, filepath.ToSlash(r)), true, nil - } - return filepath.ToSlash(r), true, nil - } - return "", false, nil -} - -// absJoin absolutizes and flattens the lists of files. -func absJoin(dir string, fileses ...[]string) (res []string) { - for _, files := range fileses { - for _, file := range files { - if !filepath.IsAbs(file) { - file = filepath.Join(dir, file) - } - res = append(res, file) - } - } - return res -} - -func golistargs(cfg *Config, words []string) []string { - const findFlags = NeedImports | NeedTypes | NeedSyntax | NeedTypesInfo - fullargs := []string{ - "-e", "-json", - fmt.Sprintf("-compiled=%t", cfg.Mode&(NeedCompiledGoFiles|NeedSyntax|NeedTypes|NeedTypesInfo|NeedTypesSizes) != 0), - fmt.Sprintf("-test=%t", cfg.Tests), - fmt.Sprintf("-export=%t", usesExportData(cfg)), - fmt.Sprintf("-deps=%t", cfg.Mode&NeedImports != 0), - // go list doesn't let you pass -test and -find together, - // probably because you'd just get the TestMain. - fmt.Sprintf("-find=%t", !cfg.Tests && cfg.Mode&findFlags == 0), - } - fullargs = append(fullargs, cfg.BuildFlags...) - fullargs = append(fullargs, "--") - fullargs = append(fullargs, words...) - return fullargs -} - -// invokeGo returns the stdout of a go command invocation. -func (state *golistState) invokeGo(verb string, args ...string) (*bytes.Buffer, error) { - cfg := state.cfg - - inv := gocommand.Invocation{ - Verb: verb, - Args: args, - BuildFlags: cfg.BuildFlags, - Env: cfg.Env, - Logf: cfg.Logf, - WorkingDir: cfg.Dir, - } - gocmdRunner := cfg.gocmdRunner - if gocmdRunner == nil { - gocmdRunner = &gocommand.Runner{} - } - stdout, stderr, _, err := gocmdRunner.RunRaw(cfg.Context, inv) - if err != nil { - // Check for 'go' executable not being found. - if ee, ok := err.(*exec.Error); ok && ee.Err == exec.ErrNotFound { - return nil, fmt.Errorf("'go list' driver requires 'go', but %s", exec.ErrNotFound) - } - - exitErr, ok := err.(*exec.ExitError) - if !ok { - // Catastrophic error: - // - context cancellation - return nil, xerrors.Errorf("couldn't run 'go': %w", err) - } - - // Old go version? - if strings.Contains(stderr.String(), "flag provided but not defined") { - return nil, goTooOldError{fmt.Errorf("unsupported version of go: %s: %s", exitErr, stderr)} - } - - // Related to #24854 - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "unexpected directory layout") { - return nil, fmt.Errorf("%s", stderr.String()) - } - - // Is there an error running the C compiler in cgo? This will be reported in the "Error" field - // and should be suppressed by go list -e. - // - // This condition is not perfect yet because the error message can include other error messages than runtime/cgo. - isPkgPathRune := func(r rune) bool { - // From https://golang.org/ref/spec#Import_declarations: - // Implementation restriction: A compiler may restrict ImportPaths to non-empty strings - // using only characters belonging to Unicode's L, M, N, P, and S general categories - // (the Graphic characters without spaces) and may also exclude the - // characters !"#$%&'()*,:;<=>?[\]^`{|} and the Unicode replacement character U+FFFD. - return unicode.IsOneOf([]*unicode.RangeTable{unicode.L, unicode.M, unicode.N, unicode.P, unicode.S}, r) && - !strings.ContainsRune("!\"#$%&'()*,:;<=>?[\\]^`{|}\uFFFD", r) - } - if len(stderr.String()) > 0 && strings.HasPrefix(stderr.String(), "# ") { - msg := stderr.String()[len("# "):] - if strings.HasPrefix(strings.TrimLeftFunc(msg, isPkgPathRune), "\n") { - return stdout, nil - } - // Treat pkg-config errors as a special case (golang.org/issue/36770). - if strings.HasPrefix(msg, "pkg-config") { - return stdout, nil - } - } - - // This error only appears in stderr. See golang.org/cl/166398 for a fix in go list to show - // the error in the Err section of stdout in case -e option is provided. - // This fix is provided for backwards compatibility. - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "named files must be .go files") { - output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Similar to the previous error, but currently lacks a fix in Go. - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "named files must all be in one directory") { - output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Backwards compatibility for Go 1.11 because 1.12 and 1.13 put the directory in the ImportPath. - // If the package doesn't exist, put the absolute path of the directory into the error message, - // as Go 1.13 list does. - const noSuchDirectory = "no such directory" - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), noSuchDirectory) { - errstr := stderr.String() - abspath := strings.TrimSpace(errstr[strings.Index(errstr, noSuchDirectory)+len(noSuchDirectory):]) - output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - abspath, strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Workaround for #29280: go list -e has incorrect behavior when an ad-hoc package doesn't exist. - // Note that the error message we look for in this case is different that the one looked for above. - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "no such file or directory") { - output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Workaround for #34273. go list -e with GO111MODULE=on has incorrect behavior when listing a - // directory outside any module. - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "outside available modules") { - output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - // TODO(matloob): command-line-arguments isn't correct here. - "command-line-arguments", strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Another variation of the previous error - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "outside module root") { - output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - // TODO(matloob): command-line-arguments isn't correct here. - "command-line-arguments", strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Workaround for an instance of golang.org/issue/26755: go list -e will return a non-zero exit - // status if there's a dependency on a package that doesn't exist. But it should return - // a zero exit status and set an error on that package. - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "no Go files in") { - // Don't clobber stdout if `go list` actually returned something. - if len(stdout.String()) > 0 { - return stdout, nil - } - // try to extract package name from string - stderrStr := stderr.String() - var importPath string - colon := strings.Index(stderrStr, ":") - if colon > 0 && strings.HasPrefix(stderrStr, "go build ") { - importPath = stderrStr[len("go build "):colon] - } - output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - importPath, strings.Trim(stderrStr, "\n")) - return bytes.NewBufferString(output), nil - } - - // Export mode entails a build. - // If that build fails, errors appear on stderr - // (despite the -e flag) and the Export field is blank. - // Do not fail in that case. - // The same is true if an ad-hoc package given to go list doesn't exist. - // TODO(matloob): Remove these once we can depend on go list to exit with a zero status with -e even when - // packages don't exist or a build fails. - if !usesExportData(cfg) && !containsGoFile(args) { - return nil, fmt.Errorf("go %v: %s: %s", args, exitErr, stderr) - } - } - return stdout, nil -} - -func containsGoFile(s []string) bool { - for _, f := range s { - if strings.HasSuffix(f, ".go") { - return true - } - } - return false -} - -func cmdDebugStr(cmd *exec.Cmd, args ...string) string { - env := make(map[string]string) - for _, kv := range cmd.Env { - split := strings.Split(kv, "=") - k, v := split[0], split[1] - env[k] = v - } - var quotedArgs []string - for _, arg := range args { - quotedArgs = append(quotedArgs, strconv.Quote(arg)) - } - - return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v PWD=%v go %s", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["PWD"], strings.Join(quotedArgs, " ")) -} diff --git a/vendor/golang.org/x/tools/go/packages/golist_overlay.go b/vendor/golang.org/x/tools/go/packages/golist_overlay.go deleted file mode 100644 index 338d6f6232..0000000000 --- a/vendor/golang.org/x/tools/go/packages/golist_overlay.go +++ /dev/null @@ -1,465 +0,0 @@ -package packages - -import ( - "encoding/json" - "fmt" - "go/parser" - "go/token" - "log" - "os" - "path/filepath" - "sort" - "strconv" - "strings" -) - -// processGolistOverlay provides rudimentary support for adding -// files that don't exist on disk to an overlay. The results can be -// sometimes incorrect. -// TODO(matloob): Handle unsupported cases, including the following: -// - determining the correct package to add given a new import path -func (state *golistState) processGolistOverlay(response *responseDeduper) (modifiedPkgs, needPkgs []string, err error) { - havePkgs := make(map[string]string) // importPath -> non-test package ID - needPkgsSet := make(map[string]bool) - modifiedPkgsSet := make(map[string]bool) - - pkgOfDir := make(map[string][]*Package) - for _, pkg := range response.dr.Packages { - // This is an approximation of import path to id. This can be - // wrong for tests, vendored packages, and a number of other cases. - havePkgs[pkg.PkgPath] = pkg.ID - x := commonDir(pkg.GoFiles) - if x != "" { - pkgOfDir[x] = append(pkgOfDir[x], pkg) - } - } - - // If no new imports are added, it is safe to avoid loading any needPkgs. - // Otherwise, it's hard to tell which package is actually being loaded - // (due to vendoring) and whether any modified package will show up - // in the transitive set of dependencies (because new imports are added, - // potentially modifying the transitive set of dependencies). - var overlayAddsImports bool - - // If both a package and its test package are created by the overlay, we - // need the real package first. Process all non-test files before test - // files, and make the whole process deterministic while we're at it. - var overlayFiles []string - for opath := range state.cfg.Overlay { - overlayFiles = append(overlayFiles, opath) - } - sort.Slice(overlayFiles, func(i, j int) bool { - iTest := strings.HasSuffix(overlayFiles[i], "_test.go") - jTest := strings.HasSuffix(overlayFiles[j], "_test.go") - if iTest != jTest { - return !iTest // non-tests are before tests. - } - return overlayFiles[i] < overlayFiles[j] - }) - for _, opath := range overlayFiles { - contents := state.cfg.Overlay[opath] - base := filepath.Base(opath) - dir := filepath.Dir(opath) - var pkg *Package // if opath belongs to both a package and its test variant, this will be the test variant - var testVariantOf *Package // if opath is a test file, this is the package it is testing - var fileExists bool - isTestFile := strings.HasSuffix(opath, "_test.go") - pkgName, ok := extractPackageName(opath, contents) - if !ok { - // Don't bother adding a file that doesn't even have a parsable package statement - // to the overlay. - continue - } - // If all the overlay files belong to a different package, change the - // package name to that package. - maybeFixPackageName(pkgName, isTestFile, pkgOfDir[dir]) - nextPackage: - for _, p := range response.dr.Packages { - if pkgName != p.Name && p.ID != "command-line-arguments" { - continue - } - for _, f := range p.GoFiles { - if !sameFile(filepath.Dir(f), dir) { - continue - } - // Make sure to capture information on the package's test variant, if needed. - if isTestFile && !hasTestFiles(p) { - // TODO(matloob): Are there packages other than the 'production' variant - // of a package that this can match? This shouldn't match the test main package - // because the file is generated in another directory. - testVariantOf = p - continue nextPackage - } - // We must have already seen the package of which this is a test variant. - if pkg != nil && p != pkg && pkg.PkgPath == p.PkgPath { - if hasTestFiles(p) { - testVariantOf = pkg - } - } - pkg = p - if filepath.Base(f) == base { - fileExists = true - } - } - } - // The overlay could have included an entirely new package. - if pkg == nil { - // Try to find the module or gopath dir the file is contained in. - // Then for modules, add the module opath to the beginning. - pkgPath, ok, err := state.getPkgPath(dir) - if err != nil { - return nil, nil, err - } - if !ok { - break - } - var forTest string // only set for x tests - isXTest := strings.HasSuffix(pkgName, "_test") - if isXTest { - forTest = pkgPath - pkgPath += "_test" - } - id := pkgPath - if isTestFile { - if isXTest { - id = fmt.Sprintf("%s [%s.test]", pkgPath, forTest) - } else { - id = fmt.Sprintf("%s [%s.test]", pkgPath, pkgPath) - } - } - // Try to reclaim a package with the same ID, if it exists in the response. - for _, p := range response.dr.Packages { - if reclaimPackage(p, id, opath, contents) { - pkg = p - break - } - } - // Otherwise, create a new package. - if pkg == nil { - pkg = &Package{ - PkgPath: pkgPath, - ID: id, - Name: pkgName, - Imports: make(map[string]*Package), - } - response.addPackage(pkg) - havePkgs[pkg.PkgPath] = id - // Add the production package's sources for a test variant. - if isTestFile && !isXTest && testVariantOf != nil { - pkg.GoFiles = append(pkg.GoFiles, testVariantOf.GoFiles...) - pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, testVariantOf.CompiledGoFiles...) - // Add the package under test and its imports to the test variant. - pkg.forTest = testVariantOf.PkgPath - for k, v := range testVariantOf.Imports { - pkg.Imports[k] = &Package{ID: v.ID} - } - } - if isXTest { - pkg.forTest = forTest - } - } - } - if !fileExists { - pkg.GoFiles = append(pkg.GoFiles, opath) - // TODO(matloob): Adding the file to CompiledGoFiles can exhibit the wrong behavior - // if the file will be ignored due to its build tags. - pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, opath) - modifiedPkgsSet[pkg.ID] = true - } - imports, err := extractImports(opath, contents) - if err != nil { - // Let the parser or type checker report errors later. - continue - } - for _, imp := range imports { - // TODO(rstambler): If the package is an x test and the import has - // a test variant, make sure to replace it. - if _, found := pkg.Imports[imp]; found { - continue - } - overlayAddsImports = true - id, ok := havePkgs[imp] - if !ok { - var err error - id, err = state.resolveImport(dir, imp) - if err != nil { - return nil, nil, err - } - } - pkg.Imports[imp] = &Package{ID: id} - // Add dependencies to the non-test variant version of this package as well. - if testVariantOf != nil { - testVariantOf.Imports[imp] = &Package{ID: id} - } - } - } - - // toPkgPath guesses the package path given the id. - toPkgPath := func(sourceDir, id string) (string, error) { - if i := strings.IndexByte(id, ' '); i >= 0 { - return state.resolveImport(sourceDir, id[:i]) - } - return state.resolveImport(sourceDir, id) - } - - // Now that new packages have been created, do another pass to determine - // the new set of missing packages. - for _, pkg := range response.dr.Packages { - for _, imp := range pkg.Imports { - if len(pkg.GoFiles) == 0 { - return nil, nil, fmt.Errorf("cannot resolve imports for package %q with no Go files", pkg.PkgPath) - } - pkgPath, err := toPkgPath(filepath.Dir(pkg.GoFiles[0]), imp.ID) - if err != nil { - return nil, nil, err - } - if _, ok := havePkgs[pkgPath]; !ok { - needPkgsSet[pkgPath] = true - } - } - } - - if overlayAddsImports { - needPkgs = make([]string, 0, len(needPkgsSet)) - for pkg := range needPkgsSet { - needPkgs = append(needPkgs, pkg) - } - } - modifiedPkgs = make([]string, 0, len(modifiedPkgsSet)) - for pkg := range modifiedPkgsSet { - modifiedPkgs = append(modifiedPkgs, pkg) - } - return modifiedPkgs, needPkgs, err -} - -// resolveImport finds the the ID of a package given its import path. -// In particular, it will find the right vendored copy when in GOPATH mode. -func (state *golistState) resolveImport(sourceDir, importPath string) (string, error) { - env, err := state.getEnv() - if err != nil { - return "", err - } - if env["GOMOD"] != "" { - return importPath, nil - } - - searchDir := sourceDir - for { - vendorDir := filepath.Join(searchDir, "vendor") - exists, ok := state.vendorDirs[vendorDir] - if !ok { - info, err := os.Stat(vendorDir) - exists = err == nil && info.IsDir() - state.vendorDirs[vendorDir] = exists - } - - if exists { - vendoredPath := filepath.Join(vendorDir, importPath) - if info, err := os.Stat(vendoredPath); err == nil && info.IsDir() { - // We should probably check for .go files here, but shame on anyone who fools us. - path, ok, err := state.getPkgPath(vendoredPath) - if err != nil { - return "", err - } - if ok { - return path, nil - } - } - } - - // We know we've hit the top of the filesystem when we Dir / and get /, - // or C:\ and get C:\, etc. - next := filepath.Dir(searchDir) - if next == searchDir { - break - } - searchDir = next - } - return importPath, nil -} - -func hasTestFiles(p *Package) bool { - for _, f := range p.GoFiles { - if strings.HasSuffix(f, "_test.go") { - return true - } - } - return false -} - -// determineRootDirs returns a mapping from absolute directories that could -// contain code to their corresponding import path prefixes. -func (state *golistState) determineRootDirs() (map[string]string, error) { - env, err := state.getEnv() - if err != nil { - return nil, err - } - if env["GOMOD"] != "" { - state.rootsOnce.Do(func() { - state.rootDirs, state.rootDirsError = state.determineRootDirsModules() - }) - } else { - state.rootsOnce.Do(func() { - state.rootDirs, state.rootDirsError = state.determineRootDirsGOPATH() - }) - } - return state.rootDirs, state.rootDirsError -} - -func (state *golistState) determineRootDirsModules() (map[string]string, error) { - // This will only return the root directory for the main module. - // For now we only support overlays in main modules. - // Editing files in the module cache isn't a great idea, so we don't - // plan to ever support that, but editing files in replaced modules - // is something we may want to support. To do that, we'll want to - // do a go list -m to determine the replaced module's module path and - // directory, and then a go list -m {{with .Replace}}{{.Dir}}{{end}} - // from the main module to determine if that module is actually a replacement. - // See bcmills's comment here: https://github.com/golang/go/issues/37629#issuecomment-594179751 - // for more information. - out, err := state.invokeGo("list", "-m", "-json") - if err != nil { - return nil, err - } - m := map[string]string{} - type jsonMod struct{ Path, Dir string } - for dec := json.NewDecoder(out); dec.More(); { - mod := new(jsonMod) - if err := dec.Decode(mod); err != nil { - return nil, err - } - if mod.Dir != "" && mod.Path != "" { - // This is a valid module; add it to the map. - absDir, err := filepath.Abs(mod.Dir) - if err != nil { - return nil, err - } - m[absDir] = mod.Path - } - } - return m, nil -} - -func (state *golistState) determineRootDirsGOPATH() (map[string]string, error) { - m := map[string]string{} - for _, dir := range filepath.SplitList(state.mustGetEnv()["GOPATH"]) { - absDir, err := filepath.Abs(dir) - if err != nil { - return nil, err - } - m[filepath.Join(absDir, "src")] = "" - } - return m, nil -} - -func extractImports(filename string, contents []byte) ([]string, error) { - f, err := parser.ParseFile(token.NewFileSet(), filename, contents, parser.ImportsOnly) // TODO(matloob): reuse fileset? - if err != nil { - return nil, err - } - var res []string - for _, imp := range f.Imports { - quotedPath := imp.Path.Value - path, err := strconv.Unquote(quotedPath) - if err != nil { - return nil, err - } - res = append(res, path) - } - return res, nil -} - -// reclaimPackage attempts to reuse a package that failed to load in an overlay. -// -// If the package has errors and has no Name, GoFiles, or Imports, -// then it's possible that it doesn't yet exist on disk. -func reclaimPackage(pkg *Package, id string, filename string, contents []byte) bool { - // TODO(rstambler): Check the message of the actual error? - // It differs between $GOPATH and module mode. - if pkg.ID != id { - return false - } - if len(pkg.Errors) != 1 { - return false - } - if pkg.Name != "" || pkg.ExportFile != "" { - return false - } - if len(pkg.GoFiles) > 0 || len(pkg.CompiledGoFiles) > 0 || len(pkg.OtherFiles) > 0 { - return false - } - if len(pkg.Imports) > 0 { - return false - } - pkgName, ok := extractPackageName(filename, contents) - if !ok { - return false - } - pkg.Name = pkgName - pkg.Errors = nil - return true -} - -func extractPackageName(filename string, contents []byte) (string, bool) { - // TODO(rstambler): Check the message of the actual error? - // It differs between $GOPATH and module mode. - f, err := parser.ParseFile(token.NewFileSet(), filename, contents, parser.PackageClauseOnly) // TODO(matloob): reuse fileset? - if err != nil { - return "", false - } - return f.Name.Name, true -} - -func commonDir(a []string) string { - seen := make(map[string]bool) - x := append([]string{}, a...) - for _, f := range x { - seen[filepath.Dir(f)] = true - } - if len(seen) > 1 { - log.Fatalf("commonDir saw %v for %v", seen, x) - } - for k := range seen { - // len(seen) == 1 - return k - } - return "" // no files -} - -// It is possible that the files in the disk directory dir have a different package -// name from newName, which is deduced from the overlays. If they all have a different -// package name, and they all have the same package name, then that name becomes -// the package name. -// It returns true if it changes the package name, false otherwise. -func maybeFixPackageName(newName string, isTestFile bool, pkgsOfDir []*Package) { - names := make(map[string]int) - for _, p := range pkgsOfDir { - names[p.Name]++ - } - if len(names) != 1 { - // some files are in different packages - return - } - var oldName string - for k := range names { - oldName = k - } - if newName == oldName { - return - } - // We might have a case where all of the package names in the directory are - // the same, but the overlay file is for an x test, which belongs to its - // own package. If the x test does not yet exist on disk, we may not yet - // have its package name on disk, but we should not rename the packages. - // - // We use a heuristic to determine if this file belongs to an x test: - // The test file should have a package name whose package name has a _test - // suffix or looks like "newName_test". - maybeXTest := strings.HasPrefix(oldName+"_test", newName) || strings.HasSuffix(newName, "_test") - if isTestFile && maybeXTest { - return - } - for _, p := range pkgsOfDir { - p.Name = newName - } -} diff --git a/vendor/golang.org/x/tools/go/packages/loadmode_string.go b/vendor/golang.org/x/tools/go/packages/loadmode_string.go deleted file mode 100644 index 7ea37e7eea..0000000000 --- a/vendor/golang.org/x/tools/go/packages/loadmode_string.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packages - -import ( - "fmt" - "strings" -) - -var allModes = []LoadMode{ - NeedName, - NeedFiles, - NeedCompiledGoFiles, - NeedImports, - NeedDeps, - NeedExportsFile, - NeedTypes, - NeedSyntax, - NeedTypesInfo, - NeedTypesSizes, -} - -var modeStrings = []string{ - "NeedName", - "NeedFiles", - "NeedCompiledGoFiles", - "NeedImports", - "NeedDeps", - "NeedExportsFile", - "NeedTypes", - "NeedSyntax", - "NeedTypesInfo", - "NeedTypesSizes", -} - -func (mod LoadMode) String() string { - m := mod - if m == 0 { - return "LoadMode(0)" - } - var out []string - for i, x := range allModes { - if x > m { - break - } - if (m & x) != 0 { - out = append(out, modeStrings[i]) - m = m ^ x - } - } - if m != 0 { - out = append(out, "Unknown") - } - return fmt.Sprintf("LoadMode(%s)", strings.Join(out, "|")) -} diff --git a/vendor/golang.org/x/tools/go/packages/packages.go b/vendor/golang.org/x/tools/go/packages/packages.go deleted file mode 100644 index 04053f1e7d..0000000000 --- a/vendor/golang.org/x/tools/go/packages/packages.go +++ /dev/null @@ -1,1212 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packages - -// See doc.go for package documentation and implementation notes. - -import ( - "context" - "encoding/json" - "fmt" - "go/ast" - "go/parser" - "go/scanner" - "go/token" - "go/types" - "io/ioutil" - "log" - "os" - "path/filepath" - "strings" - "sync" - "time" - - "golang.org/x/tools/go/gcexportdata" - "golang.org/x/tools/internal/gocommand" - "golang.org/x/tools/internal/packagesinternal" - "golang.org/x/tools/internal/typesinternal" -) - -// A LoadMode controls the amount of detail to return when loading. -// The bits below can be combined to specify which fields should be -// filled in the result packages. -// The zero value is a special case, equivalent to combining -// the NeedName, NeedFiles, and NeedCompiledGoFiles bits. -// ID and Errors (if present) will always be filled. -// Load may return more information than requested. -type LoadMode int - -// TODO(matloob): When a V2 of go/packages is released, rename NeedExportsFile to -// NeedExportFile to make it consistent with the Package field it's adding. - -const ( - // NeedName adds Name and PkgPath. - NeedName LoadMode = 1 << iota - - // NeedFiles adds GoFiles and OtherFiles. - NeedFiles - - // NeedCompiledGoFiles adds CompiledGoFiles. - NeedCompiledGoFiles - - // NeedImports adds Imports. If NeedDeps is not set, the Imports field will contain - // "placeholder" Packages with only the ID set. - NeedImports - - // NeedDeps adds the fields requested by the LoadMode in the packages in Imports. - NeedDeps - - // NeedExportsFile adds ExportFile. - NeedExportsFile - - // NeedTypes adds Types, Fset, and IllTyped. - NeedTypes - - // NeedSyntax adds Syntax. - NeedSyntax - - // NeedTypesInfo adds TypesInfo. - NeedTypesInfo - - // NeedTypesSizes adds TypesSizes. - NeedTypesSizes - - // typecheckCgo enables full support for type checking cgo. Requires Go 1.15+. - // Modifies CompiledGoFiles and Types, and has no effect on its own. - typecheckCgo - - // NeedModule adds Module. - NeedModule -) - -const ( - // Deprecated: LoadFiles exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. - LoadFiles = NeedName | NeedFiles | NeedCompiledGoFiles - - // Deprecated: LoadImports exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. - LoadImports = LoadFiles | NeedImports - - // Deprecated: LoadTypes exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. - LoadTypes = LoadImports | NeedTypes | NeedTypesSizes - - // Deprecated: LoadSyntax exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. - LoadSyntax = LoadTypes | NeedSyntax | NeedTypesInfo - - // Deprecated: LoadAllSyntax exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. - LoadAllSyntax = LoadSyntax | NeedDeps -) - -// A Config specifies details about how packages should be loaded. -// The zero value is a valid configuration. -// Calls to Load do not modify this struct. -type Config struct { - // Mode controls the level of information returned for each package. - Mode LoadMode - - // Context specifies the context for the load operation. - // If the context is cancelled, the loader may stop early - // and return an ErrCancelled error. - // If Context is nil, the load cannot be cancelled. - Context context.Context - - // Logf is the logger for the config. - // If the user provides a logger, debug logging is enabled. - // If the GOPACKAGESDEBUG environment variable is set to true, - // but the logger is nil, default to log.Printf. - Logf func(format string, args ...interface{}) - - // Dir is the directory in which to run the build system's query tool - // that provides information about the packages. - // If Dir is empty, the tool is run in the current directory. - Dir string - - // Env is the environment to use when invoking the build system's query tool. - // If Env is nil, the current environment is used. - // As in os/exec's Cmd, only the last value in the slice for - // each environment key is used. To specify the setting of only - // a few variables, append to the current environment, as in: - // - // opt.Env = append(os.Environ(), "GOOS=plan9", "GOARCH=386") - // - Env []string - - // gocmdRunner guards go command calls from concurrency errors. - gocmdRunner *gocommand.Runner - - // BuildFlags is a list of command-line flags to be passed through to - // the build system's query tool. - BuildFlags []string - - // Fset provides source position information for syntax trees and types. - // If Fset is nil, Load will use a new fileset, but preserve Fset's value. - Fset *token.FileSet - - // ParseFile is called to read and parse each file - // when preparing a package's type-checked syntax tree. - // It must be safe to call ParseFile simultaneously from multiple goroutines. - // If ParseFile is nil, the loader will uses parser.ParseFile. - // - // ParseFile should parse the source from src and use filename only for - // recording position information. - // - // An application may supply a custom implementation of ParseFile - // to change the effective file contents or the behavior of the parser, - // or to modify the syntax tree. For example, selectively eliminating - // unwanted function bodies can significantly accelerate type checking. - ParseFile func(fset *token.FileSet, filename string, src []byte) (*ast.File, error) - - // If Tests is set, the loader includes not just the packages - // matching a particular pattern but also any related test packages, - // including test-only variants of the package and the test executable. - // - // For example, when using the go command, loading "fmt" with Tests=true - // returns four packages, with IDs "fmt" (the standard package), - // "fmt [fmt.test]" (the package as compiled for the test), - // "fmt_test" (the test functions from source files in package fmt_test), - // and "fmt.test" (the test binary). - // - // In build systems with explicit names for tests, - // setting Tests may have no effect. - Tests bool - - // Overlay provides a mapping of absolute file paths to file contents. - // If the file with the given path already exists, the parser will use the - // alternative file contents provided by the map. - // - // Overlays provide incomplete support for when a given file doesn't - // already exist on disk. See the package doc above for more details. - Overlay map[string][]byte -} - -// driver is the type for functions that query the build system for the -// packages named by the patterns. -type driver func(cfg *Config, patterns ...string) (*driverResponse, error) - -// driverResponse contains the results for a driver query. -type driverResponse struct { - // NotHandled is returned if the request can't be handled by the current - // driver. If an external driver returns a response with NotHandled, the - // rest of the driverResponse is ignored, and go/packages will fallback - // to the next driver. If go/packages is extended in the future to support - // lists of multiple drivers, go/packages will fall back to the next driver. - NotHandled bool - - // Sizes, if not nil, is the types.Sizes to use when type checking. - Sizes *types.StdSizes - - // Roots is the set of package IDs that make up the root packages. - // We have to encode this separately because when we encode a single package - // we cannot know if it is one of the roots as that requires knowledge of the - // graph it is part of. - Roots []string `json:",omitempty"` - - // Packages is the full set of packages in the graph. - // The packages are not connected into a graph. - // The Imports if populated will be stubs that only have their ID set. - // Imports will be connected and then type and syntax information added in a - // later pass (see refine). - Packages []*Package -} - -// Load loads and returns the Go packages named by the given patterns. -// -// Config specifies loading options; -// nil behaves the same as an empty Config. -// -// Load returns an error if any of the patterns was invalid -// as defined by the underlying build system. -// It may return an empty list of packages without an error, -// for instance for an empty expansion of a valid wildcard. -// Errors associated with a particular package are recorded in the -// corresponding Package's Errors list, and do not cause Load to -// return an error. Clients may need to handle such errors before -// proceeding with further analysis. The PrintErrors function is -// provided for convenient display of all errors. -func Load(cfg *Config, patterns ...string) ([]*Package, error) { - l := newLoader(cfg) - response, err := defaultDriver(&l.Config, patterns...) - if err != nil { - return nil, err - } - l.sizes = response.Sizes - return l.refine(response.Roots, response.Packages...) -} - -// defaultDriver is a driver that implements go/packages' fallback behavior. -// It will try to request to an external driver, if one exists. If there's -// no external driver, or the driver returns a response with NotHandled set, -// defaultDriver will fall back to the go list driver. -func defaultDriver(cfg *Config, patterns ...string) (*driverResponse, error) { - driver := findExternalDriver(cfg) - if driver == nil { - driver = goListDriver - } - response, err := driver(cfg, patterns...) - if err != nil { - return response, err - } else if response.NotHandled { - return goListDriver(cfg, patterns...) - } - return response, nil -} - -// A Package describes a loaded Go package. -type Package struct { - // ID is a unique identifier for a package, - // in a syntax provided by the underlying build system. - // - // Because the syntax varies based on the build system, - // clients should treat IDs as opaque and not attempt to - // interpret them. - ID string - - // Name is the package name as it appears in the package source code. - Name string - - // PkgPath is the package path as used by the go/types package. - PkgPath string - - // Errors contains any errors encountered querying the metadata - // of the package, or while parsing or type-checking its files. - Errors []Error - - // GoFiles lists the absolute file paths of the package's Go source files. - GoFiles []string - - // CompiledGoFiles lists the absolute file paths of the package's source - // files that are suitable for type checking. - // This may differ from GoFiles if files are processed before compilation. - CompiledGoFiles []string - - // OtherFiles lists the absolute file paths of the package's non-Go source files, - // including assembly, C, C++, Fortran, Objective-C, SWIG, and so on. - OtherFiles []string - - // ExportFile is the absolute path to a file containing type - // information for the package as provided by the build system. - ExportFile string - - // Imports maps import paths appearing in the package's Go source files - // to corresponding loaded Packages. - Imports map[string]*Package - - // Types provides type information for the package. - // The NeedTypes LoadMode bit sets this field for packages matching the - // patterns; type information for dependencies may be missing or incomplete, - // unless NeedDeps and NeedImports are also set. - Types *types.Package - - // Fset provides position information for Types, TypesInfo, and Syntax. - // It is set only when Types is set. - Fset *token.FileSet - - // IllTyped indicates whether the package or any dependency contains errors. - // It is set only when Types is set. - IllTyped bool - - // Syntax is the package's syntax trees, for the files listed in CompiledGoFiles. - // - // The NeedSyntax LoadMode bit populates this field for packages matching the patterns. - // If NeedDeps and NeedImports are also set, this field will also be populated - // for dependencies. - Syntax []*ast.File - - // TypesInfo provides type information about the package's syntax trees. - // It is set only when Syntax is set. - TypesInfo *types.Info - - // TypesSizes provides the effective size function for types in TypesInfo. - TypesSizes types.Sizes - - // forTest is the package under test, if any. - forTest string - - // module is the module information for the package if it exists. - Module *Module -} - -// Module provides module information for a package. -type Module struct { - Path string // module path - Version string // module version - Replace *Module // replaced by this module - Time *time.Time // time version was created - Main bool // is this the main module? - Indirect bool // is this module only an indirect dependency of main module? - Dir string // directory holding files for this module, if any - GoMod string // path to go.mod file used when loading this module, if any - GoVersion string // go version used in module - Error *ModuleError // error loading module -} - -// ModuleError holds errors loading a module. -type ModuleError struct { - Err string // the error itself -} - -func init() { - packagesinternal.GetForTest = func(p interface{}) string { - return p.(*Package).forTest - } - packagesinternal.GetGoCmdRunner = func(config interface{}) *gocommand.Runner { - return config.(*Config).gocmdRunner - } - packagesinternal.SetGoCmdRunner = func(config interface{}, runner *gocommand.Runner) { - config.(*Config).gocmdRunner = runner - } - packagesinternal.TypecheckCgo = int(typecheckCgo) -} - -// An Error describes a problem with a package's metadata, syntax, or types. -type Error struct { - Pos string // "file:line:col" or "file:line" or "" or "-" - Msg string - Kind ErrorKind -} - -// ErrorKind describes the source of the error, allowing the user to -// differentiate between errors generated by the driver, the parser, or the -// type-checker. -type ErrorKind int - -const ( - UnknownError ErrorKind = iota - ListError - ParseError - TypeError -) - -func (err Error) Error() string { - pos := err.Pos - if pos == "" { - pos = "-" // like token.Position{}.String() - } - return pos + ": " + err.Msg -} - -// flatPackage is the JSON form of Package -// It drops all the type and syntax fields, and transforms the Imports -// -// TODO(adonovan): identify this struct with Package, effectively -// publishing the JSON protocol. -type flatPackage struct { - ID string - Name string `json:",omitempty"` - PkgPath string `json:",omitempty"` - Errors []Error `json:",omitempty"` - GoFiles []string `json:",omitempty"` - CompiledGoFiles []string `json:",omitempty"` - OtherFiles []string `json:",omitempty"` - ExportFile string `json:",omitempty"` - Imports map[string]string `json:",omitempty"` -} - -// MarshalJSON returns the Package in its JSON form. -// For the most part, the structure fields are written out unmodified, and -// the type and syntax fields are skipped. -// The imports are written out as just a map of path to package id. -// The errors are written using a custom type that tries to preserve the -// structure of error types we know about. -// -// This method exists to enable support for additional build systems. It is -// not intended for use by clients of the API and we may change the format. -func (p *Package) MarshalJSON() ([]byte, error) { - flat := &flatPackage{ - ID: p.ID, - Name: p.Name, - PkgPath: p.PkgPath, - Errors: p.Errors, - GoFiles: p.GoFiles, - CompiledGoFiles: p.CompiledGoFiles, - OtherFiles: p.OtherFiles, - ExportFile: p.ExportFile, - } - if len(p.Imports) > 0 { - flat.Imports = make(map[string]string, len(p.Imports)) - for path, ipkg := range p.Imports { - flat.Imports[path] = ipkg.ID - } - } - return json.Marshal(flat) -} - -// UnmarshalJSON reads in a Package from its JSON format. -// See MarshalJSON for details about the format accepted. -func (p *Package) UnmarshalJSON(b []byte) error { - flat := &flatPackage{} - if err := json.Unmarshal(b, &flat); err != nil { - return err - } - *p = Package{ - ID: flat.ID, - Name: flat.Name, - PkgPath: flat.PkgPath, - Errors: flat.Errors, - GoFiles: flat.GoFiles, - CompiledGoFiles: flat.CompiledGoFiles, - OtherFiles: flat.OtherFiles, - ExportFile: flat.ExportFile, - } - if len(flat.Imports) > 0 { - p.Imports = make(map[string]*Package, len(flat.Imports)) - for path, id := range flat.Imports { - p.Imports[path] = &Package{ID: id} - } - } - return nil -} - -func (p *Package) String() string { return p.ID } - -// loaderPackage augments Package with state used during the loading phase -type loaderPackage struct { - *Package - importErrors map[string]error // maps each bad import to its error - loadOnce sync.Once - color uint8 // for cycle detection - needsrc bool // load from source (Mode >= LoadTypes) - needtypes bool // type information is either requested or depended on - initial bool // package was matched by a pattern -} - -// loader holds the working state of a single call to load. -type loader struct { - pkgs map[string]*loaderPackage - Config - sizes types.Sizes - parseCache map[string]*parseValue - parseCacheMu sync.Mutex - exportMu sync.Mutex // enforces mutual exclusion of exportdata operations - - // Config.Mode contains the implied mode (see impliedLoadMode). - // Implied mode contains all the fields we need the data for. - // In requestedMode there are the actually requested fields. - // We'll zero them out before returning packages to the user. - // This makes it easier for us to get the conditions where - // we need certain modes right. - requestedMode LoadMode -} - -type parseValue struct { - f *ast.File - err error - ready chan struct{} -} - -func newLoader(cfg *Config) *loader { - ld := &loader{ - parseCache: map[string]*parseValue{}, - } - if cfg != nil { - ld.Config = *cfg - // If the user has provided a logger, use it. - ld.Config.Logf = cfg.Logf - } - if ld.Config.Logf == nil { - // If the GOPACKAGESDEBUG environment variable is set to true, - // but the user has not provided a logger, default to log.Printf. - if debug { - ld.Config.Logf = log.Printf - } else { - ld.Config.Logf = func(format string, args ...interface{}) {} - } - } - if ld.Config.Mode == 0 { - ld.Config.Mode = NeedName | NeedFiles | NeedCompiledGoFiles // Preserve zero behavior of Mode for backwards compatibility. - } - if ld.Config.Env == nil { - ld.Config.Env = os.Environ() - } - if ld.Config.gocmdRunner == nil { - ld.Config.gocmdRunner = &gocommand.Runner{} - } - if ld.Context == nil { - ld.Context = context.Background() - } - if ld.Dir == "" { - if dir, err := os.Getwd(); err == nil { - ld.Dir = dir - } - } - - // Save the actually requested fields. We'll zero them out before returning packages to the user. - ld.requestedMode = ld.Mode - ld.Mode = impliedLoadMode(ld.Mode) - - if ld.Mode&NeedTypes != 0 || ld.Mode&NeedSyntax != 0 { - if ld.Fset == nil { - ld.Fset = token.NewFileSet() - } - - // ParseFile is required even in LoadTypes mode - // because we load source if export data is missing. - if ld.ParseFile == nil { - ld.ParseFile = func(fset *token.FileSet, filename string, src []byte) (*ast.File, error) { - const mode = parser.AllErrors | parser.ParseComments - return parser.ParseFile(fset, filename, src, mode) - } - } - } - - return ld -} - -// refine connects the supplied packages into a graph and then adds type and -// and syntax information as requested by the LoadMode. -func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) { - rootMap := make(map[string]int, len(roots)) - for i, root := range roots { - rootMap[root] = i - } - ld.pkgs = make(map[string]*loaderPackage) - // first pass, fixup and build the map and roots - var initial = make([]*loaderPackage, len(roots)) - for _, pkg := range list { - rootIndex := -1 - if i, found := rootMap[pkg.ID]; found { - rootIndex = i - } - - // Overlays can invalidate export data. - // TODO(matloob): make this check fine-grained based on dependencies on overlaid files - exportDataInvalid := len(ld.Overlay) > 0 || pkg.ExportFile == "" && pkg.PkgPath != "unsafe" - // This package needs type information if the caller requested types and the package is - // either a root, or it's a non-root and the user requested dependencies ... - needtypes := (ld.Mode&NeedTypes|NeedTypesInfo != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) - // This package needs source if the call requested source (or types info, which implies source) - // and the package is either a root, or itas a non- root and the user requested dependencies... - needsrc := ((ld.Mode&(NeedSyntax|NeedTypesInfo) != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) || - // ... or if we need types and the exportData is invalid. We fall back to (incompletely) - // typechecking packages from source if they fail to compile. - (ld.Mode&NeedTypes|NeedTypesInfo != 0 && exportDataInvalid)) && pkg.PkgPath != "unsafe" - lpkg := &loaderPackage{ - Package: pkg, - needtypes: needtypes, - needsrc: needsrc, - } - ld.pkgs[lpkg.ID] = lpkg - if rootIndex >= 0 { - initial[rootIndex] = lpkg - lpkg.initial = true - } - } - for i, root := range roots { - if initial[i] == nil { - return nil, fmt.Errorf("root package %v is missing", root) - } - } - - // Materialize the import graph. - - const ( - white = 0 // new - grey = 1 // in progress - black = 2 // complete - ) - - // visit traverses the import graph, depth-first, - // and materializes the graph as Packages.Imports. - // - // Valid imports are saved in the Packages.Import map. - // Invalid imports (cycles and missing nodes) are saved in the importErrors map. - // Thus, even in the presence of both kinds of errors, the Import graph remains a DAG. - // - // visit returns whether the package needs src or has a transitive - // dependency on a package that does. These are the only packages - // for which we load source code. - var stack []*loaderPackage - var visit func(lpkg *loaderPackage) bool - var srcPkgs []*loaderPackage - visit = func(lpkg *loaderPackage) bool { - switch lpkg.color { - case black: - return lpkg.needsrc - case grey: - panic("internal error: grey node") - } - lpkg.color = grey - stack = append(stack, lpkg) // push - stubs := lpkg.Imports // the structure form has only stubs with the ID in the Imports - // If NeedImports isn't set, the imports fields will all be zeroed out. - if ld.Mode&NeedImports != 0 { - lpkg.Imports = make(map[string]*Package, len(stubs)) - for importPath, ipkg := range stubs { - var importErr error - imp := ld.pkgs[ipkg.ID] - if imp == nil { - // (includes package "C" when DisableCgo) - importErr = fmt.Errorf("missing package: %q", ipkg.ID) - } else if imp.color == grey { - importErr = fmt.Errorf("import cycle: %s", stack) - } - if importErr != nil { - if lpkg.importErrors == nil { - lpkg.importErrors = make(map[string]error) - } - lpkg.importErrors[importPath] = importErr - continue - } - - if visit(imp) { - lpkg.needsrc = true - } - lpkg.Imports[importPath] = imp.Package - } - } - if lpkg.needsrc { - srcPkgs = append(srcPkgs, lpkg) - } - if ld.Mode&NeedTypesSizes != 0 { - lpkg.TypesSizes = ld.sizes - } - stack = stack[:len(stack)-1] // pop - lpkg.color = black - - return lpkg.needsrc - } - - if ld.Mode&NeedImports == 0 { - // We do this to drop the stub import packages that we are not even going to try to resolve. - for _, lpkg := range initial { - lpkg.Imports = nil - } - } else { - // For each initial package, create its import DAG. - for _, lpkg := range initial { - visit(lpkg) - } - } - if ld.Mode&NeedImports != 0 && ld.Mode&NeedTypes != 0 { - for _, lpkg := range srcPkgs { - // Complete type information is required for the - // immediate dependencies of each source package. - for _, ipkg := range lpkg.Imports { - imp := ld.pkgs[ipkg.ID] - imp.needtypes = true - } - } - } - // Load type data and syntax if needed, starting at - // the initial packages (roots of the import DAG). - if ld.Mode&NeedTypes != 0 || ld.Mode&NeedSyntax != 0 { - var wg sync.WaitGroup - for _, lpkg := range initial { - wg.Add(1) - go func(lpkg *loaderPackage) { - ld.loadRecursive(lpkg) - wg.Done() - }(lpkg) - } - wg.Wait() - } - - result := make([]*Package, len(initial)) - for i, lpkg := range initial { - result[i] = lpkg.Package - } - for i := range ld.pkgs { - // Clear all unrequested fields, for extra de-Hyrum-ization. - if ld.requestedMode&NeedName == 0 { - ld.pkgs[i].Name = "" - ld.pkgs[i].PkgPath = "" - } - if ld.requestedMode&NeedFiles == 0 { - ld.pkgs[i].GoFiles = nil - ld.pkgs[i].OtherFiles = nil - } - if ld.requestedMode&NeedCompiledGoFiles == 0 { - ld.pkgs[i].CompiledGoFiles = nil - } - if ld.requestedMode&NeedImports == 0 { - ld.pkgs[i].Imports = nil - } - if ld.requestedMode&NeedExportsFile == 0 { - ld.pkgs[i].ExportFile = "" - } - if ld.requestedMode&NeedTypes == 0 { - ld.pkgs[i].Types = nil - ld.pkgs[i].Fset = nil - ld.pkgs[i].IllTyped = false - } - if ld.requestedMode&NeedSyntax == 0 { - ld.pkgs[i].Syntax = nil - } - if ld.requestedMode&NeedTypesInfo == 0 { - ld.pkgs[i].TypesInfo = nil - } - if ld.requestedMode&NeedTypesSizes == 0 { - ld.pkgs[i].TypesSizes = nil - } - if ld.requestedMode&NeedModule == 0 { - ld.pkgs[i].Module = nil - } - } - - return result, nil -} - -// loadRecursive loads the specified package and its dependencies, -// recursively, in parallel, in topological order. -// It is atomic and idempotent. -// Precondition: ld.Mode&NeedTypes. -func (ld *loader) loadRecursive(lpkg *loaderPackage) { - lpkg.loadOnce.Do(func() { - // Load the direct dependencies, in parallel. - var wg sync.WaitGroup - for _, ipkg := range lpkg.Imports { - imp := ld.pkgs[ipkg.ID] - wg.Add(1) - go func(imp *loaderPackage) { - ld.loadRecursive(imp) - wg.Done() - }(imp) - } - wg.Wait() - ld.loadPackage(lpkg) - }) -} - -// loadPackage loads the specified package. -// It must be called only once per Package, -// after immediate dependencies are loaded. -// Precondition: ld.Mode & NeedTypes. -func (ld *loader) loadPackage(lpkg *loaderPackage) { - if lpkg.PkgPath == "unsafe" { - // Fill in the blanks to avoid surprises. - lpkg.Types = types.Unsafe - lpkg.Fset = ld.Fset - lpkg.Syntax = []*ast.File{} - lpkg.TypesInfo = new(types.Info) - lpkg.TypesSizes = ld.sizes - return - } - - // Call NewPackage directly with explicit name. - // This avoids skew between golist and go/types when the files' - // package declarations are inconsistent. - lpkg.Types = types.NewPackage(lpkg.PkgPath, lpkg.Name) - lpkg.Fset = ld.Fset - - // Subtle: we populate all Types fields with an empty Package - // before loading export data so that export data processing - // never has to create a types.Package for an indirect dependency, - // which would then require that such created packages be explicitly - // inserted back into the Import graph as a final step after export data loading. - // The Diamond test exercises this case. - if !lpkg.needtypes && !lpkg.needsrc { - return - } - if !lpkg.needsrc { - ld.loadFromExportData(lpkg) - return // not a source package, don't get syntax trees - } - - appendError := func(err error) { - // Convert various error types into the one true Error. - var errs []Error - switch err := err.(type) { - case Error: - // from driver - errs = append(errs, err) - - case *os.PathError: - // from parser - errs = append(errs, Error{ - Pos: err.Path + ":1", - Msg: err.Err.Error(), - Kind: ParseError, - }) - - case scanner.ErrorList: - // from parser - for _, err := range err { - errs = append(errs, Error{ - Pos: err.Pos.String(), - Msg: err.Msg, - Kind: ParseError, - }) - } - - case types.Error: - // from type checker - errs = append(errs, Error{ - Pos: err.Fset.Position(err.Pos).String(), - Msg: err.Msg, - Kind: TypeError, - }) - - default: - // unexpected impoverished error from parser? - errs = append(errs, Error{ - Pos: "-", - Msg: err.Error(), - Kind: UnknownError, - }) - - // If you see this error message, please file a bug. - log.Printf("internal error: error %q (%T) without position", err, err) - } - - lpkg.Errors = append(lpkg.Errors, errs...) - } - - if ld.Config.Mode&NeedTypes != 0 && len(lpkg.CompiledGoFiles) == 0 && lpkg.ExportFile != "" { - // The config requested loading sources and types, but sources are missing. - // Add an error to the package and fall back to loading from export data. - appendError(Error{"-", fmt.Sprintf("sources missing for package %s", lpkg.ID), ParseError}) - ld.loadFromExportData(lpkg) - return // can't get syntax trees for this package - } - - files, errs := ld.parseFiles(lpkg.CompiledGoFiles) - for _, err := range errs { - appendError(err) - } - - lpkg.Syntax = files - if ld.Config.Mode&NeedTypes == 0 { - return - } - - lpkg.TypesInfo = &types.Info{ - Types: make(map[ast.Expr]types.TypeAndValue), - Defs: make(map[*ast.Ident]types.Object), - Uses: make(map[*ast.Ident]types.Object), - Implicits: make(map[ast.Node]types.Object), - Scopes: make(map[ast.Node]*types.Scope), - Selections: make(map[*ast.SelectorExpr]*types.Selection), - } - lpkg.TypesSizes = ld.sizes - - importer := importerFunc(func(path string) (*types.Package, error) { - if path == "unsafe" { - return types.Unsafe, nil - } - - // The imports map is keyed by import path. - ipkg := lpkg.Imports[path] - if ipkg == nil { - if err := lpkg.importErrors[path]; err != nil { - return nil, err - } - // There was skew between the metadata and the - // import declarations, likely due to an edit - // race, or because the ParseFile feature was - // used to supply alternative file contents. - return nil, fmt.Errorf("no metadata for %s", path) - } - - if ipkg.Types != nil && ipkg.Types.Complete() { - return ipkg.Types, nil - } - log.Fatalf("internal error: package %q without types was imported from %q", path, lpkg) - panic("unreachable") - }) - - // type-check - tc := &types.Config{ - Importer: importer, - - // Type-check bodies of functions only in non-initial packages. - // Example: for import graph A->B->C and initial packages {A,C}, - // we can ignore function bodies in B. - IgnoreFuncBodies: ld.Mode&NeedDeps == 0 && !lpkg.initial, - - Error: appendError, - Sizes: ld.sizes, - } - if (ld.Mode & typecheckCgo) != 0 { - if !typesinternal.SetUsesCgo(tc) { - appendError(Error{ - Msg: "typecheckCgo requires Go 1.15+", - Kind: ListError, - }) - return - } - } - types.NewChecker(tc, ld.Fset, lpkg.Types, lpkg.TypesInfo).Files(lpkg.Syntax) - - lpkg.importErrors = nil // no longer needed - - // If !Cgo, the type-checker uses FakeImportC mode, so - // it doesn't invoke the importer for import "C", - // nor report an error for the import, - // or for any undefined C.f reference. - // We must detect this explicitly and correctly - // mark the package as IllTyped (by reporting an error). - // TODO(adonovan): if these errors are annoying, - // we could just set IllTyped quietly. - if tc.FakeImportC { - outer: - for _, f := range lpkg.Syntax { - for _, imp := range f.Imports { - if imp.Path.Value == `"C"` { - err := types.Error{Fset: ld.Fset, Pos: imp.Pos(), Msg: `import "C" ignored`} - appendError(err) - break outer - } - } - } - } - - // Record accumulated errors. - illTyped := len(lpkg.Errors) > 0 - if !illTyped { - for _, imp := range lpkg.Imports { - if imp.IllTyped { - illTyped = true - break - } - } - } - lpkg.IllTyped = illTyped -} - -// An importFunc is an implementation of the single-method -// types.Importer interface based on a function value. -type importerFunc func(path string) (*types.Package, error) - -func (f importerFunc) Import(path string) (*types.Package, error) { return f(path) } - -// We use a counting semaphore to limit -// the number of parallel I/O calls per process. -var ioLimit = make(chan bool, 20) - -func (ld *loader) parseFile(filename string) (*ast.File, error) { - ld.parseCacheMu.Lock() - v, ok := ld.parseCache[filename] - if ok { - // cache hit - ld.parseCacheMu.Unlock() - <-v.ready - } else { - // cache miss - v = &parseValue{ready: make(chan struct{})} - ld.parseCache[filename] = v - ld.parseCacheMu.Unlock() - - var src []byte - for f, contents := range ld.Config.Overlay { - if sameFile(f, filename) { - src = contents - } - } - var err error - if src == nil { - ioLimit <- true // wait - src, err = ioutil.ReadFile(filename) - <-ioLimit // signal - } - if err != nil { - v.err = err - } else { - v.f, v.err = ld.ParseFile(ld.Fset, filename, src) - } - - close(v.ready) - } - return v.f, v.err -} - -// parseFiles reads and parses the Go source files and returns the ASTs -// of the ones that could be at least partially parsed, along with a -// list of I/O and parse errors encountered. -// -// Because files are scanned in parallel, the token.Pos -// positions of the resulting ast.Files are not ordered. -// -func (ld *loader) parseFiles(filenames []string) ([]*ast.File, []error) { - var wg sync.WaitGroup - n := len(filenames) - parsed := make([]*ast.File, n) - errors := make([]error, n) - for i, file := range filenames { - if ld.Config.Context.Err() != nil { - parsed[i] = nil - errors[i] = ld.Config.Context.Err() - continue - } - wg.Add(1) - go func(i int, filename string) { - parsed[i], errors[i] = ld.parseFile(filename) - wg.Done() - }(i, file) - } - wg.Wait() - - // Eliminate nils, preserving order. - var o int - for _, f := range parsed { - if f != nil { - parsed[o] = f - o++ - } - } - parsed = parsed[:o] - - o = 0 - for _, err := range errors { - if err != nil { - errors[o] = err - o++ - } - } - errors = errors[:o] - - return parsed, errors -} - -// sameFile returns true if x and y have the same basename and denote -// the same file. -// -func sameFile(x, y string) bool { - if x == y { - // It could be the case that y doesn't exist. - // For instance, it may be an overlay file that - // hasn't been written to disk. To handle that case - // let x == y through. (We added the exact absolute path - // string to the CompiledGoFiles list, so the unwritten - // overlay case implies x==y.) - return true - } - if strings.EqualFold(filepath.Base(x), filepath.Base(y)) { // (optimisation) - if xi, err := os.Stat(x); err == nil { - if yi, err := os.Stat(y); err == nil { - return os.SameFile(xi, yi) - } - } - } - return false -} - -// loadFromExportData returns type information for the specified -// package, loading it from an export data file on the first request. -func (ld *loader) loadFromExportData(lpkg *loaderPackage) (*types.Package, error) { - if lpkg.PkgPath == "" { - log.Fatalf("internal error: Package %s has no PkgPath", lpkg) - } - - // Because gcexportdata.Read has the potential to create or - // modify the types.Package for each node in the transitive - // closure of dependencies of lpkg, all exportdata operations - // must be sequential. (Finer-grained locking would require - // changes to the gcexportdata API.) - // - // The exportMu lock guards the Package.Pkg field and the - // types.Package it points to, for each Package in the graph. - // - // Not all accesses to Package.Pkg need to be protected by exportMu: - // graph ordering ensures that direct dependencies of source - // packages are fully loaded before the importer reads their Pkg field. - ld.exportMu.Lock() - defer ld.exportMu.Unlock() - - if tpkg := lpkg.Types; tpkg != nil && tpkg.Complete() { - return tpkg, nil // cache hit - } - - lpkg.IllTyped = true // fail safe - - if lpkg.ExportFile == "" { - // Errors while building export data will have been printed to stderr. - return nil, fmt.Errorf("no export data file") - } - f, err := os.Open(lpkg.ExportFile) - if err != nil { - return nil, err - } - defer f.Close() - - // Read gc export data. - // - // We don't currently support gccgo export data because all - // underlying workspaces use the gc toolchain. (Even build - // systems that support gccgo don't use it for workspace - // queries.) - r, err := gcexportdata.NewReader(f) - if err != nil { - return nil, fmt.Errorf("reading %s: %v", lpkg.ExportFile, err) - } - - // Build the view. - // - // The gcexportdata machinery has no concept of package ID. - // It identifies packages by their PkgPath, which although not - // globally unique is unique within the scope of one invocation - // of the linker, type-checker, or gcexportdata. - // - // So, we must build a PkgPath-keyed view of the global - // (conceptually ID-keyed) cache of packages and pass it to - // gcexportdata. The view must contain every existing - // package that might possibly be mentioned by the - // current package---its transitive closure. - // - // In loadPackage, we unconditionally create a types.Package for - // each dependency so that export data loading does not - // create new ones. - // - // TODO(adonovan): it would be simpler and more efficient - // if the export data machinery invoked a callback to - // get-or-create a package instead of a map. - // - view := make(map[string]*types.Package) // view seen by gcexportdata - seen := make(map[*loaderPackage]bool) // all visited packages - var visit func(pkgs map[string]*Package) - visit = func(pkgs map[string]*Package) { - for _, p := range pkgs { - lpkg := ld.pkgs[p.ID] - if !seen[lpkg] { - seen[lpkg] = true - view[lpkg.PkgPath] = lpkg.Types - visit(lpkg.Imports) - } - } - } - visit(lpkg.Imports) - - viewLen := len(view) + 1 // adding the self package - // Parse the export data. - // (May modify incomplete packages in view but not create new ones.) - tpkg, err := gcexportdata.Read(r, ld.Fset, view, lpkg.PkgPath) - if err != nil { - return nil, fmt.Errorf("reading %s: %v", lpkg.ExportFile, err) - } - if viewLen != len(view) { - log.Fatalf("Unexpected package creation during export data loading") - } - - lpkg.Types = tpkg - lpkg.IllTyped = false - - return tpkg, nil -} - -// impliedLoadMode returns loadMode with its dependencies. -func impliedLoadMode(loadMode LoadMode) LoadMode { - if loadMode&NeedTypesInfo != 0 && loadMode&NeedImports == 0 { - // If NeedTypesInfo, go/packages needs to do typechecking itself so it can - // associate type info with the AST. To do so, we need the export data - // for dependencies, which means we need to ask for the direct dependencies. - // NeedImports is used to ask for the direct dependencies. - loadMode |= NeedImports - } - - if loadMode&NeedDeps != 0 && loadMode&NeedImports == 0 { - // With NeedDeps we need to load at least direct dependencies. - // NeedImports is used to ask for the direct dependencies. - loadMode |= NeedImports - } - - return loadMode -} - -func usesExportData(cfg *Config) bool { - return cfg.Mode&NeedExportsFile != 0 || cfg.Mode&NeedTypes != 0 && cfg.Mode&NeedDeps == 0 -} diff --git a/vendor/golang.org/x/tools/go/packages/visit.go b/vendor/golang.org/x/tools/go/packages/visit.go deleted file mode 100644 index b13cb081fc..0000000000 --- a/vendor/golang.org/x/tools/go/packages/visit.go +++ /dev/null @@ -1,55 +0,0 @@ -package packages - -import ( - "fmt" - "os" - "sort" -) - -// Visit visits all the packages in the import graph whose roots are -// pkgs, calling the optional pre function the first time each package -// is encountered (preorder), and the optional post function after a -// package's dependencies have been visited (postorder). -// The boolean result of pre(pkg) determines whether -// the imports of package pkg are visited. -func Visit(pkgs []*Package, pre func(*Package) bool, post func(*Package)) { - seen := make(map[*Package]bool) - var visit func(*Package) - visit = func(pkg *Package) { - if !seen[pkg] { - seen[pkg] = true - - if pre == nil || pre(pkg) { - paths := make([]string, 0, len(pkg.Imports)) - for path := range pkg.Imports { - paths = append(paths, path) - } - sort.Strings(paths) // Imports is a map, this makes visit stable - for _, path := range paths { - visit(pkg.Imports[path]) - } - } - - if post != nil { - post(pkg) - } - } - } - for _, pkg := range pkgs { - visit(pkg) - } -} - -// PrintErrors prints to os.Stderr the accumulated errors of all -// packages in the import graph rooted at pkgs, dependencies first. -// PrintErrors returns the number of errors printed. -func PrintErrors(pkgs []*Package) int { - var n int - Visit(pkgs, nil, func(pkg *Package) { - for _, err := range pkg.Errors { - fmt.Fprintln(os.Stderr, err) - n++ - } - }) - return n -} diff --git a/vendor/golang.org/x/tools/go/types/objectpath/BUILD.bazel b/vendor/golang.org/x/tools/go/types/objectpath/BUILD.bazel deleted file mode 100644 index 02c1a0eb7e..0000000000 --- a/vendor/golang.org/x/tools/go/types/objectpath/BUILD.bazel +++ /dev/null @@ -1,9 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["objectpath.go"], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/types/objectpath", - importpath = "golang.org/x/tools/go/types/objectpath", - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go deleted file mode 100644 index cffd7acbee..0000000000 --- a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go +++ /dev/null @@ -1,524 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package objectpath defines a naming scheme for types.Objects -// (that is, named entities in Go programs) relative to their enclosing -// package. -// -// Type-checker objects are canonical, so they are usually identified by -// their address in memory (a pointer), but a pointer has meaning only -// within one address space. By contrast, objectpath names allow the -// identity of an object to be sent from one program to another, -// establishing a correspondence between types.Object variables that are -// distinct but logically equivalent. -// -// A single object may have multiple paths. In this example, -// type A struct{ X int } -// type B A -// the field X has two paths due to its membership of both A and B. -// The For(obj) function always returns one of these paths, arbitrarily -// but consistently. -package objectpath - -import ( - "fmt" - "strconv" - "strings" - - "go/types" -) - -// A Path is an opaque name that identifies a types.Object -// relative to its package. Conceptually, the name consists of a -// sequence of destructuring operations applied to the package scope -// to obtain the original object. -// The name does not include the package itself. -type Path string - -// Encoding -// -// An object path is a textual and (with training) human-readable encoding -// of a sequence of destructuring operators, starting from a types.Package. -// The sequences represent a path through the package/object/type graph. -// We classify these operators by their type: -// -// PO package->object Package.Scope.Lookup -// OT object->type Object.Type -// TT type->type Type.{Elem,Key,Params,Results,Underlying} [EKPRU] -// TO type->object Type.{At,Field,Method,Obj} [AFMO] -// -// All valid paths start with a package and end at an object -// and thus may be defined by the regular language: -// -// objectpath = PO (OT TT* TO)* -// -// The concrete encoding follows directly: -// - The only PO operator is Package.Scope.Lookup, which requires an identifier. -// - The only OT operator is Object.Type, -// which we encode as '.' because dot cannot appear in an identifier. -// - The TT operators are encoded as [EKPRU]. -// - The OT operators are encoded as [AFMO]; -// three of these (At,Field,Method) require an integer operand, -// which is encoded as a string of decimal digits. -// These indices are stable across different representations -// of the same package, even source and export data. -// -// In the example below, -// -// package p -// -// type T interface { -// f() (a string, b struct{ X int }) -// } -// -// field X has the path "T.UM0.RA1.F0", -// representing the following sequence of operations: -// -// p.Lookup("T") T -// .Type().Underlying().Method(0). f -// .Type().Results().At(1) b -// .Type().Field(0) X -// -// The encoding is not maximally compact---every R or P is -// followed by an A, for example---but this simplifies the -// encoder and decoder. -// -const ( - // object->type operators - opType = '.' // .Type() (Object) - - // type->type operators - opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map) - opKey = 'K' // .Key() (Map) - opParams = 'P' // .Params() (Signature) - opResults = 'R' // .Results() (Signature) - opUnderlying = 'U' // .Underlying() (Named) - - // type->object operators - opAt = 'A' // .At(i) (Tuple) - opField = 'F' // .Field(i) (Struct) - opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored) - opObj = 'O' // .Obj() (Named) -) - -// The For function returns the path to an object relative to its package, -// or an error if the object is not accessible from the package's Scope. -// -// The For function guarantees to return a path only for the following objects: -// - package-level types -// - exported package-level non-types -// - methods -// - parameter and result variables -// - struct fields -// These objects are sufficient to define the API of their package. -// The objects described by a package's export data are drawn from this set. -// -// For does not return a path for predeclared names, imported package -// names, local names, and unexported package-level names (except -// types). -// -// Example: given this definition, -// -// package p -// -// type T interface { -// f() (a string, b struct{ X int }) -// } -// -// For(X) would return a path that denotes the following sequence of operations: -// -// p.Scope().Lookup("T") (TypeName T) -// .Type().Underlying().Method(0). (method Func f) -// .Type().Results().At(1) (field Var b) -// .Type().Field(0) (field Var X) -// -// where p is the package (*types.Package) to which X belongs. -func For(obj types.Object) (Path, error) { - pkg := obj.Pkg() - - // This table lists the cases of interest. - // - // Object Action - // ------ ------ - // nil reject - // builtin reject - // pkgname reject - // label reject - // var - // package-level accept - // func param/result accept - // local reject - // struct field accept - // const - // package-level accept - // local reject - // func - // package-level accept - // init functions reject - // concrete method accept - // interface method accept - // type - // package-level accept - // local reject - // - // The only accessible package-level objects are members of pkg itself. - // - // The cases are handled in four steps: - // - // 1. reject nil and builtin - // 2. accept package-level objects - // 3. reject obviously invalid objects - // 4. search the API for the path to the param/result/field/method. - - // 1. reference to nil or builtin? - if pkg == nil { - return "", fmt.Errorf("predeclared %s has no path", obj) - } - scope := pkg.Scope() - - // 2. package-level object? - if scope.Lookup(obj.Name()) == obj { - // Only exported objects (and non-exported types) have a path. - // Non-exported types may be referenced by other objects. - if _, ok := obj.(*types.TypeName); !ok && !obj.Exported() { - return "", fmt.Errorf("no path for non-exported %v", obj) - } - return Path(obj.Name()), nil - } - - // 3. Not a package-level object. - // Reject obviously non-viable cases. - switch obj := obj.(type) { - case *types.Const, // Only package-level constants have a path. - *types.TypeName, // Only package-level types have a path. - *types.Label, // Labels are function-local. - *types.PkgName: // PkgNames are file-local. - return "", fmt.Errorf("no path for %v", obj) - - case *types.Var: - // Could be: - // - a field (obj.IsField()) - // - a func parameter or result - // - a local var. - // Sadly there is no way to distinguish - // a param/result from a local - // so we must proceed to the find. - - case *types.Func: - // A func, if not package-level, must be a method. - if recv := obj.Type().(*types.Signature).Recv(); recv == nil { - return "", fmt.Errorf("func is not a method: %v", obj) - } - // TODO(adonovan): opt: if the method is concrete, - // do a specialized version of the rest of this function so - // that it's O(1) not O(|scope|). Basically 'find' is needed - // only for struct fields and interface methods. - - default: - panic(obj) - } - - // 4. Search the API for the path to the var (field/param/result) or method. - - // First inspect package-level named types. - // In the presence of path aliases, these give - // the best paths because non-types may - // refer to types, but not the reverse. - empty := make([]byte, 0, 48) // initial space - names := scope.Names() - for _, name := range names { - o := scope.Lookup(name) - tname, ok := o.(*types.TypeName) - if !ok { - continue // handle non-types in second pass - } - - path := append(empty, name...) - path = append(path, opType) - - T := o.Type() - - if tname.IsAlias() { - // type alias - if r := find(obj, T, path); r != nil { - return Path(r), nil - } - } else { - // defined (named) type - if r := find(obj, T.Underlying(), append(path, opUnderlying)); r != nil { - return Path(r), nil - } - } - } - - // Then inspect everything else: - // non-types, and declared methods of defined types. - for _, name := range names { - o := scope.Lookup(name) - path := append(empty, name...) - if _, ok := o.(*types.TypeName); !ok { - if o.Exported() { - // exported non-type (const, var, func) - if r := find(obj, o.Type(), append(path, opType)); r != nil { - return Path(r), nil - } - } - continue - } - - // Inspect declared methods of defined types. - if T, ok := o.Type().(*types.Named); ok { - path = append(path, opType) - for i := 0; i < T.NumMethods(); i++ { - m := T.Method(i) - path2 := appendOpArg(path, opMethod, i) - if m == obj { - return Path(path2), nil // found declared method - } - if r := find(obj, m.Type(), append(path2, opType)); r != nil { - return Path(r), nil - } - } - } - } - - return "", fmt.Errorf("can't find path for %v in %s", obj, pkg.Path()) -} - -func appendOpArg(path []byte, op byte, arg int) []byte { - path = append(path, op) - path = strconv.AppendInt(path, int64(arg), 10) - return path -} - -// find finds obj within type T, returning the path to it, or nil if not found. -func find(obj types.Object, T types.Type, path []byte) []byte { - switch T := T.(type) { - case *types.Basic, *types.Named: - // Named types belonging to pkg were handled already, - // so T must belong to another package. No path. - return nil - case *types.Pointer: - return find(obj, T.Elem(), append(path, opElem)) - case *types.Slice: - return find(obj, T.Elem(), append(path, opElem)) - case *types.Array: - return find(obj, T.Elem(), append(path, opElem)) - case *types.Chan: - return find(obj, T.Elem(), append(path, opElem)) - case *types.Map: - if r := find(obj, T.Key(), append(path, opKey)); r != nil { - return r - } - return find(obj, T.Elem(), append(path, opElem)) - case *types.Signature: - if r := find(obj, T.Params(), append(path, opParams)); r != nil { - return r - } - return find(obj, T.Results(), append(path, opResults)) - case *types.Struct: - for i := 0; i < T.NumFields(); i++ { - f := T.Field(i) - path2 := appendOpArg(path, opField, i) - if f == obj { - return path2 // found field var - } - if r := find(obj, f.Type(), append(path2, opType)); r != nil { - return r - } - } - return nil - case *types.Tuple: - for i := 0; i < T.Len(); i++ { - v := T.At(i) - path2 := appendOpArg(path, opAt, i) - if v == obj { - return path2 // found param/result var - } - if r := find(obj, v.Type(), append(path2, opType)); r != nil { - return r - } - } - return nil - case *types.Interface: - for i := 0; i < T.NumMethods(); i++ { - m := T.Method(i) - path2 := appendOpArg(path, opMethod, i) - if m == obj { - return path2 // found interface method - } - if r := find(obj, m.Type(), append(path2, opType)); r != nil { - return r - } - } - return nil - } - panic(T) -} - -// Object returns the object denoted by path p within the package pkg. -func Object(pkg *types.Package, p Path) (types.Object, error) { - if p == "" { - return nil, fmt.Errorf("empty path") - } - - pathstr := string(p) - var pkgobj, suffix string - if dot := strings.IndexByte(pathstr, opType); dot < 0 { - pkgobj = pathstr - } else { - pkgobj = pathstr[:dot] - suffix = pathstr[dot:] // suffix starts with "." - } - - obj := pkg.Scope().Lookup(pkgobj) - if obj == nil { - return nil, fmt.Errorf("package %s does not contain %q", pkg.Path(), pkgobj) - } - - // abstraction of *types.{Pointer,Slice,Array,Chan,Map} - type hasElem interface { - Elem() types.Type - } - // abstraction of *types.{Interface,Named} - type hasMethods interface { - Method(int) *types.Func - NumMethods() int - } - - // The loop state is the pair (t, obj), - // exactly one of which is non-nil, initially obj. - // All suffixes start with '.' (the only object->type operation), - // followed by optional type->type operations, - // then a type->object operation. - // The cycle then repeats. - var t types.Type - for suffix != "" { - code := suffix[0] - suffix = suffix[1:] - - // Codes [AFM] have an integer operand. - var index int - switch code { - case opAt, opField, opMethod: - rest := strings.TrimLeft(suffix, "0123456789") - numerals := suffix[:len(suffix)-len(rest)] - suffix = rest - i, err := strconv.Atoi(numerals) - if err != nil { - return nil, fmt.Errorf("invalid path: bad numeric operand %q for code %q", numerals, code) - } - index = int(i) - case opObj: - // no operand - default: - // The suffix must end with a type->object operation. - if suffix == "" { - return nil, fmt.Errorf("invalid path: ends with %q, want [AFMO]", code) - } - } - - if code == opType { - if t != nil { - return nil, fmt.Errorf("invalid path: unexpected %q in type context", opType) - } - t = obj.Type() - obj = nil - continue - } - - if t == nil { - return nil, fmt.Errorf("invalid path: code %q in object context", code) - } - - // Inv: t != nil, obj == nil - - switch code { - case opElem: - hasElem, ok := t.(hasElem) // Pointer, Slice, Array, Chan, Map - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want pointer, slice, array, chan or map)", code, t, t) - } - t = hasElem.Elem() - - case opKey: - mapType, ok := t.(*types.Map) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want map)", code, t, t) - } - t = mapType.Key() - - case opParams: - sig, ok := t.(*types.Signature) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) - } - t = sig.Params() - - case opResults: - sig, ok := t.(*types.Signature) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) - } - t = sig.Results() - - case opUnderlying: - named, ok := t.(*types.Named) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %s, want named)", code, t, t) - } - t = named.Underlying() - - case opAt: - tuple, ok := t.(*types.Tuple) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %s, want tuple)", code, t, t) - } - if n := tuple.Len(); index >= n { - return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) - } - obj = tuple.At(index) - t = nil - - case opField: - structType, ok := t.(*types.Struct) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want struct)", code, t, t) - } - if n := structType.NumFields(); index >= n { - return nil, fmt.Errorf("field index %d out of range [0-%d)", index, n) - } - obj = structType.Field(index) - t = nil - - case opMethod: - hasMethods, ok := t.(hasMethods) // Interface or Named - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %s, want interface or named)", code, t, t) - } - if n := hasMethods.NumMethods(); index >= n { - return nil, fmt.Errorf("method index %d out of range [0-%d)", index, n) - } - obj = hasMethods.Method(index) - t = nil - - case opObj: - named, ok := t.(*types.Named) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %s, want named)", code, t, t) - } - obj = named.Obj() - t = nil - - default: - return nil, fmt.Errorf("invalid path: unknown code %q", code) - } - } - - if obj.Pkg() != pkg { - return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj) - } - - return obj, nil // success -} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/BUILD.bazel b/vendor/golang.org/x/tools/go/types/typeutil/BUILD.bazel deleted file mode 100644 index 55f70cbdd7..0000000000 --- a/vendor/golang.org/x/tools/go/types/typeutil/BUILD.bazel +++ /dev/null @@ -1,16 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "callee.go", - "imports.go", - "map.go", - "methodsetcache.go", - "ui.go", - ], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/types/typeutil", - importpath = "golang.org/x/tools/go/types/typeutil", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/tools/go/ast/astutil:go_default_library"], -) diff --git a/vendor/golang.org/x/tools/go/types/typeutil/callee.go b/vendor/golang.org/x/tools/go/types/typeutil/callee.go deleted file mode 100644 index 38f596daf9..0000000000 --- a/vendor/golang.org/x/tools/go/types/typeutil/callee.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package typeutil - -import ( - "go/ast" - "go/types" - - "golang.org/x/tools/go/ast/astutil" -) - -// Callee returns the named target of a function call, if any: -// a function, method, builtin, or variable. -func Callee(info *types.Info, call *ast.CallExpr) types.Object { - var obj types.Object - switch fun := astutil.Unparen(call.Fun).(type) { - case *ast.Ident: - obj = info.Uses[fun] // type, var, builtin, or declared func - case *ast.SelectorExpr: - if sel, ok := info.Selections[fun]; ok { - obj = sel.Obj() // method or field - } else { - obj = info.Uses[fun.Sel] // qualified identifier? - } - } - if _, ok := obj.(*types.TypeName); ok { - return nil // T(x) is a conversion, not a call - } - return obj -} - -// StaticCallee returns the target (function or method) of a static -// function call, if any. It returns nil for calls to builtins. -func StaticCallee(info *types.Info, call *ast.CallExpr) *types.Func { - if f, ok := Callee(info, call).(*types.Func); ok && !interfaceMethod(f) { - return f - } - return nil -} - -func interfaceMethod(f *types.Func) bool { - recv := f.Type().(*types.Signature).Recv() - return recv != nil && types.IsInterface(recv.Type()) -} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/imports.go b/vendor/golang.org/x/tools/go/types/typeutil/imports.go deleted file mode 100644 index 9c441dba9c..0000000000 --- a/vendor/golang.org/x/tools/go/types/typeutil/imports.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package typeutil - -import "go/types" - -// Dependencies returns all dependencies of the specified packages. -// -// Dependent packages appear in topological order: if package P imports -// package Q, Q appears earlier than P in the result. -// The algorithm follows import statements in the order they -// appear in the source code, so the result is a total order. -// -func Dependencies(pkgs ...*types.Package) []*types.Package { - var result []*types.Package - seen := make(map[*types.Package]bool) - var visit func(pkgs []*types.Package) - visit = func(pkgs []*types.Package) { - for _, p := range pkgs { - if !seen[p] { - seen[p] = true - visit(p.Imports()) - result = append(result, p) - } - } - } - visit(pkgs) - return result -} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/map.go b/vendor/golang.org/x/tools/go/types/typeutil/map.go deleted file mode 100644 index c7f7545006..0000000000 --- a/vendor/golang.org/x/tools/go/types/typeutil/map.go +++ /dev/null @@ -1,313 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package typeutil defines various utilities for types, such as Map, -// a mapping from types.Type to interface{} values. -package typeutil // import "golang.org/x/tools/go/types/typeutil" - -import ( - "bytes" - "fmt" - "go/types" - "reflect" -) - -// Map is a hash-table-based mapping from types (types.Type) to -// arbitrary interface{} values. The concrete types that implement -// the Type interface are pointers. Since they are not canonicalized, -// == cannot be used to check for equivalence, and thus we cannot -// simply use a Go map. -// -// Just as with map[K]V, a nil *Map is a valid empty map. -// -// Not thread-safe. -// -type Map struct { - hasher Hasher // shared by many Maps - table map[uint32][]entry // maps hash to bucket; entry.key==nil means unused - length int // number of map entries -} - -// entry is an entry (key/value association) in a hash bucket. -type entry struct { - key types.Type - value interface{} -} - -// SetHasher sets the hasher used by Map. -// -// All Hashers are functionally equivalent but contain internal state -// used to cache the results of hashing previously seen types. -// -// A single Hasher created by MakeHasher() may be shared among many -// Maps. This is recommended if the instances have many keys in -// common, as it will amortize the cost of hash computation. -// -// A Hasher may grow without bound as new types are seen. Even when a -// type is deleted from the map, the Hasher never shrinks, since other -// types in the map may reference the deleted type indirectly. -// -// Hashers are not thread-safe, and read-only operations such as -// Map.Lookup require updates to the hasher, so a full Mutex lock (not a -// read-lock) is require around all Map operations if a shared -// hasher is accessed from multiple threads. -// -// If SetHasher is not called, the Map will create a private hasher at -// the first call to Insert. -// -func (m *Map) SetHasher(hasher Hasher) { - m.hasher = hasher -} - -// Delete removes the entry with the given key, if any. -// It returns true if the entry was found. -// -func (m *Map) Delete(key types.Type) bool { - if m != nil && m.table != nil { - hash := m.hasher.Hash(key) - bucket := m.table[hash] - for i, e := range bucket { - if e.key != nil && types.Identical(key, e.key) { - // We can't compact the bucket as it - // would disturb iterators. - bucket[i] = entry{} - m.length-- - return true - } - } - } - return false -} - -// At returns the map entry for the given key. -// The result is nil if the entry is not present. -// -func (m *Map) At(key types.Type) interface{} { - if m != nil && m.table != nil { - for _, e := range m.table[m.hasher.Hash(key)] { - if e.key != nil && types.Identical(key, e.key) { - return e.value - } - } - } - return nil -} - -// Set sets the map entry for key to val, -// and returns the previous entry, if any. -func (m *Map) Set(key types.Type, value interface{}) (prev interface{}) { - if m.table != nil { - hash := m.hasher.Hash(key) - bucket := m.table[hash] - var hole *entry - for i, e := range bucket { - if e.key == nil { - hole = &bucket[i] - } else if types.Identical(key, e.key) { - prev = e.value - bucket[i].value = value - return - } - } - - if hole != nil { - *hole = entry{key, value} // overwrite deleted entry - } else { - m.table[hash] = append(bucket, entry{key, value}) - } - } else { - if m.hasher.memo == nil { - m.hasher = MakeHasher() - } - hash := m.hasher.Hash(key) - m.table = map[uint32][]entry{hash: {entry{key, value}}} - } - - m.length++ - return -} - -// Len returns the number of map entries. -func (m *Map) Len() int { - if m != nil { - return m.length - } - return 0 -} - -// Iterate calls function f on each entry in the map in unspecified order. -// -// If f should mutate the map, Iterate provides the same guarantees as -// Go maps: if f deletes a map entry that Iterate has not yet reached, -// f will not be invoked for it, but if f inserts a map entry that -// Iterate has not yet reached, whether or not f will be invoked for -// it is unspecified. -// -func (m *Map) Iterate(f func(key types.Type, value interface{})) { - if m != nil { - for _, bucket := range m.table { - for _, e := range bucket { - if e.key != nil { - f(e.key, e.value) - } - } - } - } -} - -// Keys returns a new slice containing the set of map keys. -// The order is unspecified. -func (m *Map) Keys() []types.Type { - keys := make([]types.Type, 0, m.Len()) - m.Iterate(func(key types.Type, _ interface{}) { - keys = append(keys, key) - }) - return keys -} - -func (m *Map) toString(values bool) string { - if m == nil { - return "{}" - } - var buf bytes.Buffer - fmt.Fprint(&buf, "{") - sep := "" - m.Iterate(func(key types.Type, value interface{}) { - fmt.Fprint(&buf, sep) - sep = ", " - fmt.Fprint(&buf, key) - if values { - fmt.Fprintf(&buf, ": %q", value) - } - }) - fmt.Fprint(&buf, "}") - return buf.String() -} - -// String returns a string representation of the map's entries. -// Values are printed using fmt.Sprintf("%v", v). -// Order is unspecified. -// -func (m *Map) String() string { - return m.toString(true) -} - -// KeysString returns a string representation of the map's key set. -// Order is unspecified. -// -func (m *Map) KeysString() string { - return m.toString(false) -} - -//////////////////////////////////////////////////////////////////////// -// Hasher - -// A Hasher maps each type to its hash value. -// For efficiency, a hasher uses memoization; thus its memory -// footprint grows monotonically over time. -// Hashers are not thread-safe. -// Hashers have reference semantics. -// Call MakeHasher to create a Hasher. -type Hasher struct { - memo map[types.Type]uint32 -} - -// MakeHasher returns a new Hasher instance. -func MakeHasher() Hasher { - return Hasher{make(map[types.Type]uint32)} -} - -// Hash computes a hash value for the given type t such that -// Identical(t, t') => Hash(t) == Hash(t'). -func (h Hasher) Hash(t types.Type) uint32 { - hash, ok := h.memo[t] - if !ok { - hash = h.hashFor(t) - h.memo[t] = hash - } - return hash -} - -// hashString computes the Fowler–Noll–Vo hash of s. -func hashString(s string) uint32 { - var h uint32 - for i := 0; i < len(s); i++ { - h ^= uint32(s[i]) - h *= 16777619 - } - return h -} - -// hashFor computes the hash of t. -func (h Hasher) hashFor(t types.Type) uint32 { - // See Identical for rationale. - switch t := t.(type) { - case *types.Basic: - return uint32(t.Kind()) - - case *types.Array: - return 9043 + 2*uint32(t.Len()) + 3*h.Hash(t.Elem()) - - case *types.Slice: - return 9049 + 2*h.Hash(t.Elem()) - - case *types.Struct: - var hash uint32 = 9059 - for i, n := 0, t.NumFields(); i < n; i++ { - f := t.Field(i) - if f.Anonymous() { - hash += 8861 - } - hash += hashString(t.Tag(i)) - hash += hashString(f.Name()) // (ignore f.Pkg) - hash += h.Hash(f.Type()) - } - return hash - - case *types.Pointer: - return 9067 + 2*h.Hash(t.Elem()) - - case *types.Signature: - var hash uint32 = 9091 - if t.Variadic() { - hash *= 8863 - } - return hash + 3*h.hashTuple(t.Params()) + 5*h.hashTuple(t.Results()) - - case *types.Interface: - var hash uint32 = 9103 - for i, n := 0, t.NumMethods(); i < n; i++ { - // See go/types.identicalMethods for rationale. - // Method order is not significant. - // Ignore m.Pkg(). - m := t.Method(i) - hash += 3*hashString(m.Name()) + 5*h.Hash(m.Type()) - } - return hash - - case *types.Map: - return 9109 + 2*h.Hash(t.Key()) + 3*h.Hash(t.Elem()) - - case *types.Chan: - return 9127 + 2*uint32(t.Dir()) + 3*h.Hash(t.Elem()) - - case *types.Named: - // Not safe with a copying GC; objects may move. - return uint32(reflect.ValueOf(t.Obj()).Pointer()) - - case *types.Tuple: - return h.hashTuple(t) - } - panic(t) -} - -func (h Hasher) hashTuple(tuple *types.Tuple) uint32 { - // See go/types.identicalTypes for rationale. - n := tuple.Len() - var hash uint32 = 9137 + 2*uint32(n) - for i := 0; i < n; i++ { - hash += 3 * h.Hash(tuple.At(i).Type()) - } - return hash -} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go b/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go deleted file mode 100644 index 32084610f4..0000000000 --- a/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// This file implements a cache of method sets. - -package typeutil - -import ( - "go/types" - "sync" -) - -// A MethodSetCache records the method set of each type T for which -// MethodSet(T) is called so that repeat queries are fast. -// The zero value is a ready-to-use cache instance. -type MethodSetCache struct { - mu sync.Mutex - named map[*types.Named]struct{ value, pointer *types.MethodSet } // method sets for named N and *N - others map[types.Type]*types.MethodSet // all other types -} - -// MethodSet returns the method set of type T. It is thread-safe. -// -// If cache is nil, this function is equivalent to types.NewMethodSet(T). -// Utility functions can thus expose an optional *MethodSetCache -// parameter to clients that care about performance. -// -func (cache *MethodSetCache) MethodSet(T types.Type) *types.MethodSet { - if cache == nil { - return types.NewMethodSet(T) - } - cache.mu.Lock() - defer cache.mu.Unlock() - - switch T := T.(type) { - case *types.Named: - return cache.lookupNamed(T).value - - case *types.Pointer: - if N, ok := T.Elem().(*types.Named); ok { - return cache.lookupNamed(N).pointer - } - } - - // all other types - // (The map uses pointer equivalence, not type identity.) - mset := cache.others[T] - if mset == nil { - mset = types.NewMethodSet(T) - if cache.others == nil { - cache.others = make(map[types.Type]*types.MethodSet) - } - cache.others[T] = mset - } - return mset -} - -func (cache *MethodSetCache) lookupNamed(named *types.Named) struct{ value, pointer *types.MethodSet } { - if cache.named == nil { - cache.named = make(map[*types.Named]struct{ value, pointer *types.MethodSet }) - } - // Avoid recomputing mset(*T) for each distinct Pointer - // instance whose underlying type is a named type. - msets, ok := cache.named[named] - if !ok { - msets.value = types.NewMethodSet(named) - msets.pointer = types.NewMethodSet(types.NewPointer(named)) - cache.named[named] = msets - } - return msets -} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/ui.go b/vendor/golang.org/x/tools/go/types/typeutil/ui.go deleted file mode 100644 index 9849c24cef..0000000000 --- a/vendor/golang.org/x/tools/go/types/typeutil/ui.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package typeutil - -// This file defines utilities for user interfaces that display types. - -import "go/types" - -// IntuitiveMethodSet returns the intuitive method set of a type T, -// which is the set of methods you can call on an addressable value of -// that type. -// -// The result always contains MethodSet(T), and is exactly MethodSet(T) -// for interface types and for pointer-to-concrete types. -// For all other concrete types T, the result additionally -// contains each method belonging to *T if there is no identically -// named method on T itself. -// -// This corresponds to user intuition about method sets; -// this function is intended only for user interfaces. -// -// The order of the result is as for types.MethodSet(T). -// -func IntuitiveMethodSet(T types.Type, msets *MethodSetCache) []*types.Selection { - isPointerToConcrete := func(T types.Type) bool { - ptr, ok := T.(*types.Pointer) - return ok && !types.IsInterface(ptr.Elem()) - } - - var result []*types.Selection - mset := msets.MethodSet(T) - if types.IsInterface(T) || isPointerToConcrete(T) { - for i, n := 0, mset.Len(); i < n; i++ { - result = append(result, mset.At(i)) - } - } else { - // T is some other concrete type. - // Report methods of T and *T, preferring those of T. - pmset := msets.MethodSet(types.NewPointer(T)) - for i, n := 0, pmset.Len(); i < n; i++ { - meth := pmset.At(i) - if m := mset.Lookup(meth.Obj().Pkg(), meth.Obj().Name()); m != nil { - meth = m - } - result = append(result, meth) - } - - } - return result -} diff --git a/vendor/golang.org/x/tools/go/vcs/BUILD.bazel b/vendor/golang.org/x/tools/go/vcs/BUILD.bazel deleted file mode 100644 index 5287831ecc..0000000000 --- a/vendor/golang.org/x/tools/go/vcs/BUILD.bazel +++ /dev/null @@ -1,14 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "discovery.go", - "env.go", - "http.go", - "vcs.go", - ], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/go/vcs", - importpath = "golang.org/x/tools/go/vcs", - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/go/vcs/discovery.go b/vendor/golang.org/x/tools/go/vcs/discovery.go deleted file mode 100644 index 2428d88852..0000000000 --- a/vendor/golang.org/x/tools/go/vcs/discovery.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package vcs - -import ( - "encoding/xml" - "fmt" - "io" - "strings" -) - -// charsetReader returns a reader for the given charset. Currently -// it only supports UTF-8 and ASCII. Otherwise, it returns a meaningful -// error which is printed by go get, so the user can find why the package -// wasn't downloaded if the encoding is not supported. Note that, in -// order to reduce potential errors, ASCII is treated as UTF-8 (i.e. characters -// greater than 0x7f are not rejected). -func charsetReader(charset string, input io.Reader) (io.Reader, error) { - switch strings.ToLower(charset) { - case "ascii": - return input, nil - default: - return nil, fmt.Errorf("can't decode XML document using charset %q", charset) - } -} - -// parseMetaGoImports returns meta imports from the HTML in r. -// Parsing ends at the end of the section or the beginning of the . -// -// This copy of cmd/go/internal/vcs.parseMetaGoImports always operates -// in IgnoreMod ModuleMode. -func parseMetaGoImports(r io.Reader) (imports []metaImport, err error) { - d := xml.NewDecoder(r) - d.CharsetReader = charsetReader - d.Strict = false - var t xml.Token - for { - t, err = d.RawToken() - if err != nil { - if err == io.EOF || len(imports) > 0 { - err = nil - } - return - } - if e, ok := t.(xml.StartElement); ok && strings.EqualFold(e.Name.Local, "body") { - return - } - if e, ok := t.(xml.EndElement); ok && strings.EqualFold(e.Name.Local, "head") { - return - } - e, ok := t.(xml.StartElement) - if !ok || !strings.EqualFold(e.Name.Local, "meta") { - continue - } - if attrValue(e.Attr, "name") != "go-import" { - continue - } - if f := strings.Fields(attrValue(e.Attr, "content")); len(f) == 3 { - // Ignore VCS type "mod", which is applicable only in module mode. - if f[1] == "mod" { - continue - } - imports = append(imports, metaImport{ - Prefix: f[0], - VCS: f[1], - RepoRoot: f[2], - }) - } - } -} - -// attrValue returns the attribute value for the case-insensitive key -// `name', or the empty string if nothing is found. -func attrValue(attrs []xml.Attr, name string) string { - for _, a := range attrs { - if strings.EqualFold(a.Name.Local, name) { - return a.Value - } - } - return "" -} diff --git a/vendor/golang.org/x/tools/go/vcs/env.go b/vendor/golang.org/x/tools/go/vcs/env.go deleted file mode 100644 index e846f5b3b8..0000000000 --- a/vendor/golang.org/x/tools/go/vcs/env.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package vcs - -import ( - "os" - "strings" -) - -// envForDir returns a copy of the environment -// suitable for running in the given directory. -// The environment is the current process's environment -// but with an updated $PWD, so that an os.Getwd in the -// child will be faster. -func envForDir(dir string) []string { - env := os.Environ() - // Internally we only use rooted paths, so dir is rooted. - // Even if dir is not rooted, no harm done. - return mergeEnvLists([]string{"PWD=" + dir}, env) -} - -// mergeEnvLists merges the two environment lists such that -// variables with the same name in "in" replace those in "out". -func mergeEnvLists(in, out []string) []string { -NextVar: - for _, inkv := range in { - k := strings.SplitAfterN(inkv, "=", 2)[0] - for i, outkv := range out { - if strings.HasPrefix(outkv, k) { - out[i] = inkv - continue NextVar - } - } - out = append(out, inkv) - } - return out -} diff --git a/vendor/golang.org/x/tools/go/vcs/http.go b/vendor/golang.org/x/tools/go/vcs/http.go deleted file mode 100644 index 96188185cb..0000000000 --- a/vendor/golang.org/x/tools/go/vcs/http.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package vcs - -import ( - "fmt" - "io" - "io/ioutil" - "log" - "net/http" - "net/url" -) - -// httpClient is the default HTTP client, but a variable so it can be -// changed by tests, without modifying http.DefaultClient. -var httpClient = http.DefaultClient - -// httpGET returns the data from an HTTP GET request for the given URL. -func httpGET(url string) ([]byte, error) { - resp, err := httpClient.Get(url) - if err != nil { - return nil, err - } - defer resp.Body.Close() - if resp.StatusCode != 200 { - return nil, fmt.Errorf("%s: %s", url, resp.Status) - } - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, fmt.Errorf("%s: %v", url, err) - } - return b, nil -} - -// httpsOrHTTP returns the body of either the importPath's -// https resource or, if unavailable, the http resource. -func httpsOrHTTP(importPath string) (urlStr string, body io.ReadCloser, err error) { - fetch := func(scheme string) (urlStr string, res *http.Response, err error) { - u, err := url.Parse(scheme + "://" + importPath) - if err != nil { - return "", nil, err - } - u.RawQuery = "go-get=1" - urlStr = u.String() - if Verbose { - log.Printf("Fetching %s", urlStr) - } - res, err = httpClient.Get(urlStr) - return - } - closeBody := func(res *http.Response) { - if res != nil { - res.Body.Close() - } - } - urlStr, res, err := fetch("https") - if err != nil || res.StatusCode != 200 { - if Verbose { - if err != nil { - log.Printf("https fetch failed.") - } else { - log.Printf("ignoring https fetch with status code %d", res.StatusCode) - } - } - closeBody(res) - urlStr, res, err = fetch("http") - } - if err != nil { - closeBody(res) - return "", nil, err - } - // Note: accepting a non-200 OK here, so people can serve a - // meta import in their http 404 page. - if Verbose { - log.Printf("Parsing meta tags from %s (status code %d)", urlStr, res.StatusCode) - } - return urlStr, res.Body, nil -} diff --git a/vendor/golang.org/x/tools/go/vcs/vcs.go b/vendor/golang.org/x/tools/go/vcs/vcs.go deleted file mode 100644 index 6e58ac7491..0000000000 --- a/vendor/golang.org/x/tools/go/vcs/vcs.go +++ /dev/null @@ -1,759 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package vcs exposes functions for resolving import paths -// and using version control systems, which can be used to -// implement behavior similar to the standard "go get" command. -// -// This package is a copy of internal code in package cmd/go/internal/get, -// modified to make the identifiers exported. It's provided here -// for developers who want to write tools with similar semantics. -// It needs to be manually kept in sync with upstream when changes are -// made to cmd/go/internal/get; see https://golang.org/issue/11490. -// -package vcs // import "golang.org/x/tools/go/vcs" - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "log" - "net/url" - "os" - "os/exec" - "path/filepath" - "regexp" - "strconv" - "strings" -) - -// Verbose enables verbose operation logging. -var Verbose bool - -// ShowCmd controls whether VCS commands are printed. -var ShowCmd bool - -// A Cmd describes how to use a version control system -// like Mercurial, Git, or Subversion. -type Cmd struct { - Name string - Cmd string // name of binary to invoke command - - CreateCmd string // command to download a fresh copy of a repository - DownloadCmd string // command to download updates into an existing repository - - TagCmd []TagCmd // commands to list tags - TagLookupCmd []TagCmd // commands to lookup tags before running tagSyncCmd - TagSyncCmd string // command to sync to specific tag - TagSyncDefault string // command to sync to default tag - - LogCmd string // command to list repository changelogs in an XML format - - Scheme []string - PingCmd string -} - -// A TagCmd describes a command to list available tags -// that can be passed to Cmd.TagSyncCmd. -type TagCmd struct { - Cmd string // command to list tags - Pattern string // regexp to extract tags from list -} - -// vcsList lists the known version control systems -var vcsList = []*Cmd{ - vcsHg, - vcsGit, - vcsSvn, - vcsBzr, -} - -// ByCmd returns the version control system for the given -// command name (hg, git, svn, bzr). -func ByCmd(cmd string) *Cmd { - for _, vcs := range vcsList { - if vcs.Cmd == cmd { - return vcs - } - } - return nil -} - -// vcsHg describes how to use Mercurial. -var vcsHg = &Cmd{ - Name: "Mercurial", - Cmd: "hg", - - CreateCmd: "clone -U {repo} {dir}", - DownloadCmd: "pull", - - // We allow both tag and branch names as 'tags' - // for selecting a version. This lets people have - // a go.release.r60 branch and a go1 branch - // and make changes in both, without constantly - // editing .hgtags. - TagCmd: []TagCmd{ - {"tags", `^(\S+)`}, - {"branches", `^(\S+)`}, - }, - TagSyncCmd: "update -r {tag}", - TagSyncDefault: "update default", - - LogCmd: "log --encoding=utf-8 --limit={limit} --template={template}", - - Scheme: []string{"https", "http", "ssh"}, - PingCmd: "identify {scheme}://{repo}", -} - -// vcsGit describes how to use Git. -var vcsGit = &Cmd{ - Name: "Git", - Cmd: "git", - - CreateCmd: "clone {repo} {dir}", - DownloadCmd: "pull --ff-only", - - TagCmd: []TagCmd{ - // tags/xxx matches a git tag named xxx - // origin/xxx matches a git branch named xxx on the default remote repository - {"show-ref", `(?:tags|origin)/(\S+)$`}, - }, - TagLookupCmd: []TagCmd{ - {"show-ref tags/{tag} origin/{tag}", `((?:tags|origin)/\S+)$`}, - }, - TagSyncCmd: "checkout {tag}", - TagSyncDefault: "checkout master", - - Scheme: []string{"git", "https", "http", "git+ssh"}, - PingCmd: "ls-remote {scheme}://{repo}", -} - -// vcsBzr describes how to use Bazaar. -var vcsBzr = &Cmd{ - Name: "Bazaar", - Cmd: "bzr", - - CreateCmd: "branch {repo} {dir}", - - // Without --overwrite bzr will not pull tags that changed. - // Replace by --overwrite-tags after http://pad.lv/681792 goes in. - DownloadCmd: "pull --overwrite", - - TagCmd: []TagCmd{{"tags", `^(\S+)`}}, - TagSyncCmd: "update -r {tag}", - TagSyncDefault: "update -r revno:-1", - - Scheme: []string{"https", "http", "bzr", "bzr+ssh"}, - PingCmd: "info {scheme}://{repo}", -} - -// vcsSvn describes how to use Subversion. -var vcsSvn = &Cmd{ - Name: "Subversion", - Cmd: "svn", - - CreateCmd: "checkout {repo} {dir}", - DownloadCmd: "update", - - // There is no tag command in subversion. - // The branch information is all in the path names. - - LogCmd: "log --xml --limit={limit}", - - Scheme: []string{"https", "http", "svn", "svn+ssh"}, - PingCmd: "info {scheme}://{repo}", -} - -func (v *Cmd) String() string { - return v.Name -} - -// run runs the command line cmd in the given directory. -// keyval is a list of key, value pairs. run expands -// instances of {key} in cmd into value, but only after -// splitting cmd into individual arguments. -// If an error occurs, run prints the command line and the -// command's combined stdout+stderr to standard error. -// Otherwise run discards the command's output. -func (v *Cmd) run(dir string, cmd string, keyval ...string) error { - _, err := v.run1(dir, cmd, keyval, true) - return err -} - -// runVerboseOnly is like run but only generates error output to standard error in verbose mode. -func (v *Cmd) runVerboseOnly(dir string, cmd string, keyval ...string) error { - _, err := v.run1(dir, cmd, keyval, false) - return err -} - -// runOutput is like run but returns the output of the command. -func (v *Cmd) runOutput(dir string, cmd string, keyval ...string) ([]byte, error) { - return v.run1(dir, cmd, keyval, true) -} - -// run1 is the generalized implementation of run and runOutput. -func (v *Cmd) run1(dir string, cmdline string, keyval []string, verbose bool) ([]byte, error) { - m := make(map[string]string) - for i := 0; i < len(keyval); i += 2 { - m[keyval[i]] = keyval[i+1] - } - args := strings.Fields(cmdline) - for i, arg := range args { - args[i] = expand(m, arg) - } - - _, err := exec.LookPath(v.Cmd) - if err != nil { - fmt.Fprintf(os.Stderr, - "go: missing %s command. See http://golang.org/s/gogetcmd\n", - v.Name) - return nil, err - } - - cmd := exec.Command(v.Cmd, args...) - cmd.Dir = dir - cmd.Env = envForDir(cmd.Dir) - if ShowCmd { - fmt.Printf("cd %s\n", dir) - fmt.Printf("%s %s\n", v.Cmd, strings.Join(args, " ")) - } - var buf bytes.Buffer - cmd.Stdout = &buf - cmd.Stderr = &buf - err = cmd.Run() - out := buf.Bytes() - if err != nil { - if verbose || Verbose { - fmt.Fprintf(os.Stderr, "# cd %s; %s %s\n", dir, v.Cmd, strings.Join(args, " ")) - os.Stderr.Write(out) - } - return nil, err - } - return out, nil -} - -// Ping pings the repo to determine if scheme used is valid. -// This repo must be pingable with this scheme and VCS. -func (v *Cmd) Ping(scheme, repo string) error { - return v.runVerboseOnly(".", v.PingCmd, "scheme", scheme, "repo", repo) -} - -// Create creates a new copy of repo in dir. -// The parent of dir must exist; dir must not. -func (v *Cmd) Create(dir, repo string) error { - return v.run(".", v.CreateCmd, "dir", dir, "repo", repo) -} - -// CreateAtRev creates a new copy of repo in dir at revision rev. -// The parent of dir must exist; dir must not. -// rev must be a valid revision in repo. -func (v *Cmd) CreateAtRev(dir, repo, rev string) error { - if err := v.Create(dir, repo); err != nil { - return err - } - return v.run(dir, v.TagSyncCmd, "tag", rev) -} - -// Download downloads any new changes for the repo in dir. -// dir must be a valid VCS repo compatible with v. -func (v *Cmd) Download(dir string) error { - return v.run(dir, v.DownloadCmd) -} - -// Tags returns the list of available tags for the repo in dir. -// dir must be a valid VCS repo compatible with v. -func (v *Cmd) Tags(dir string) ([]string, error) { - var tags []string - for _, tc := range v.TagCmd { - out, err := v.runOutput(dir, tc.Cmd) - if err != nil { - return nil, err - } - re := regexp.MustCompile(`(?m-s)` + tc.Pattern) - for _, m := range re.FindAllStringSubmatch(string(out), -1) { - tags = append(tags, m[1]) - } - } - return tags, nil -} - -// TagSync syncs the repo in dir to the named tag, which is either a -// tag returned by Tags or the empty string (the default tag). -// dir must be a valid VCS repo compatible with v and the tag must exist. -func (v *Cmd) TagSync(dir, tag string) error { - if v.TagSyncCmd == "" { - return nil - } - if tag != "" { - for _, tc := range v.TagLookupCmd { - out, err := v.runOutput(dir, tc.Cmd, "tag", tag) - if err != nil { - return err - } - re := regexp.MustCompile(`(?m-s)` + tc.Pattern) - m := re.FindStringSubmatch(string(out)) - if len(m) > 1 { - tag = m[1] - break - } - } - } - if tag == "" && v.TagSyncDefault != "" { - return v.run(dir, v.TagSyncDefault) - } - return v.run(dir, v.TagSyncCmd, "tag", tag) -} - -// Log logs the changes for the repo in dir. -// dir must be a valid VCS repo compatible with v. -func (v *Cmd) Log(dir, logTemplate string) ([]byte, error) { - if err := v.Download(dir); err != nil { - return []byte{}, err - } - - const N = 50 // how many revisions to grab - return v.runOutput(dir, v.LogCmd, "limit", strconv.Itoa(N), "template", logTemplate) -} - -// LogAtRev logs the change for repo in dir at the rev revision. -// dir must be a valid VCS repo compatible with v. -// rev must be a valid revision for the repo in dir. -func (v *Cmd) LogAtRev(dir, rev, logTemplate string) ([]byte, error) { - if err := v.Download(dir); err != nil { - return []byte{}, err - } - - // Append revision flag to LogCmd. - logAtRevCmd := v.LogCmd + " --rev=" + rev - return v.runOutput(dir, logAtRevCmd, "limit", strconv.Itoa(1), "template", logTemplate) -} - -// A vcsPath describes how to convert an import path into a -// version control system and repository name. -type vcsPath struct { - prefix string // prefix this description applies to - re string // pattern for import path - repo string // repository to use (expand with match of re) - vcs string // version control system to use (expand with match of re) - check func(match map[string]string) error // additional checks - ping bool // ping for scheme to use to download repo - - regexp *regexp.Regexp // cached compiled form of re -} - -// FromDir inspects dir and its parents to determine the -// version control system and code repository to use. -// On return, root is the import path -// corresponding to the root of the repository. -func FromDir(dir, srcRoot string) (vcs *Cmd, root string, err error) { - // Clean and double-check that dir is in (a subdirectory of) srcRoot. - dir = filepath.Clean(dir) - srcRoot = filepath.Clean(srcRoot) - if len(dir) <= len(srcRoot) || dir[len(srcRoot)] != filepath.Separator { - return nil, "", fmt.Errorf("directory %q is outside source root %q", dir, srcRoot) - } - - var vcsRet *Cmd - var rootRet string - - origDir := dir - for len(dir) > len(srcRoot) { - for _, vcs := range vcsList { - if _, err := os.Stat(filepath.Join(dir, "."+vcs.Cmd)); err == nil { - root := filepath.ToSlash(dir[len(srcRoot)+1:]) - // Record first VCS we find, but keep looking, - // to detect mistakes like one kind of VCS inside another. - if vcsRet == nil { - vcsRet = vcs - rootRet = root - continue - } - // Allow .git inside .git, which can arise due to submodules. - if vcsRet == vcs && vcs.Cmd == "git" { - continue - } - // Otherwise, we have one VCS inside a different VCS. - return nil, "", fmt.Errorf("directory %q uses %s, but parent %q uses %s", - filepath.Join(srcRoot, rootRet), vcsRet.Cmd, filepath.Join(srcRoot, root), vcs.Cmd) - } - } - - // Move to parent. - ndir := filepath.Dir(dir) - if len(ndir) >= len(dir) { - // Shouldn't happen, but just in case, stop. - break - } - dir = ndir - } - - if vcsRet != nil { - return vcsRet, rootRet, nil - } - - return nil, "", fmt.Errorf("directory %q is not using a known version control system", origDir) -} - -// RepoRoot represents a version control system, a repo, and a root of -// where to put it on disk. -type RepoRoot struct { - VCS *Cmd - - // Repo is the repository URL, including scheme. - Repo string - - // Root is the import path corresponding to the root of the - // repository. - Root string -} - -// RepoRootForImportPath analyzes importPath to determine the -// version control system, and code repository to use. -func RepoRootForImportPath(importPath string, verbose bool) (*RepoRoot, error) { - rr, err := RepoRootForImportPathStatic(importPath, "") - if err == errUnknownSite { - rr, err = RepoRootForImportDynamic(importPath, verbose) - - // RepoRootForImportDynamic returns error detail - // that is irrelevant if the user didn't intend to use a - // dynamic import in the first place. - // Squelch it. - if err != nil { - if Verbose { - log.Printf("import %q: %v", importPath, err) - } - err = fmt.Errorf("unrecognized import path %q", importPath) - } - } - - if err == nil && strings.Contains(importPath, "...") && strings.Contains(rr.Root, "...") { - // Do not allow wildcards in the repo root. - rr = nil - err = fmt.Errorf("cannot expand ... in %q", importPath) - } - return rr, err -} - -var errUnknownSite = errors.New("dynamic lookup required to find mapping") - -// RepoRootForImportPathStatic attempts to map importPath to a -// RepoRoot using the commonly-used VCS hosting sites in vcsPaths -// (github.com/user/dir), or from a fully-qualified importPath already -// containing its VCS type (foo.com/repo.git/dir) -// -// If scheme is non-empty, that scheme is forced. -func RepoRootForImportPathStatic(importPath, scheme string) (*RepoRoot, error) { - if strings.Contains(importPath, "://") { - return nil, fmt.Errorf("invalid import path %q", importPath) - } - for _, srv := range vcsPaths { - if !strings.HasPrefix(importPath, srv.prefix) { - continue - } - m := srv.regexp.FindStringSubmatch(importPath) - if m == nil { - if srv.prefix != "" { - return nil, fmt.Errorf("invalid %s import path %q", srv.prefix, importPath) - } - continue - } - - // Build map of named subexpression matches for expand. - match := map[string]string{ - "prefix": srv.prefix, - "import": importPath, - } - for i, name := range srv.regexp.SubexpNames() { - if name != "" && match[name] == "" { - match[name] = m[i] - } - } - if srv.vcs != "" { - match["vcs"] = expand(match, srv.vcs) - } - if srv.repo != "" { - match["repo"] = expand(match, srv.repo) - } - if srv.check != nil { - if err := srv.check(match); err != nil { - return nil, err - } - } - vcs := ByCmd(match["vcs"]) - if vcs == nil { - return nil, fmt.Errorf("unknown version control system %q", match["vcs"]) - } - if srv.ping { - if scheme != "" { - match["repo"] = scheme + "://" + match["repo"] - } else { - for _, scheme := range vcs.Scheme { - if vcs.Ping(scheme, match["repo"]) == nil { - match["repo"] = scheme + "://" + match["repo"] - break - } - } - } - } - rr := &RepoRoot{ - VCS: vcs, - Repo: match["repo"], - Root: match["root"], - } - return rr, nil - } - return nil, errUnknownSite -} - -// RepoRootForImportDynamic finds a *RepoRoot for a custom domain that's not -// statically known by RepoRootForImportPathStatic. -// -// This handles custom import paths like "name.tld/pkg/foo" or just "name.tld". -func RepoRootForImportDynamic(importPath string, verbose bool) (*RepoRoot, error) { - slash := strings.Index(importPath, "/") - if slash < 0 { - slash = len(importPath) - } - host := importPath[:slash] - if !strings.Contains(host, ".") { - return nil, errors.New("import path doesn't contain a hostname") - } - urlStr, body, err := httpsOrHTTP(importPath) - if err != nil { - return nil, fmt.Errorf("http/https fetch: %v", err) - } - defer body.Close() - imports, err := parseMetaGoImports(body) - if err != nil { - return nil, fmt.Errorf("parsing %s: %v", importPath, err) - } - metaImport, err := matchGoImport(imports, importPath) - if err != nil { - if err != errNoMatch { - return nil, fmt.Errorf("parse %s: %v", urlStr, err) - } - return nil, fmt.Errorf("parse %s: no go-import meta tags", urlStr) - } - if verbose { - log.Printf("get %q: found meta tag %#v at %s", importPath, metaImport, urlStr) - } - // If the import was "uni.edu/bob/project", which said the - // prefix was "uni.edu" and the RepoRoot was "evilroot.com", - // make sure we don't trust Bob and check out evilroot.com to - // "uni.edu" yet (possibly overwriting/preempting another - // non-evil student). Instead, first verify the root and see - // if it matches Bob's claim. - if metaImport.Prefix != importPath { - if verbose { - log.Printf("get %q: verifying non-authoritative meta tag", importPath) - } - urlStr0 := urlStr - urlStr, body, err = httpsOrHTTP(metaImport.Prefix) - if err != nil { - return nil, fmt.Errorf("fetch %s: %v", urlStr, err) - } - imports, err := parseMetaGoImports(body) - if err != nil { - return nil, fmt.Errorf("parsing %s: %v", importPath, err) - } - if len(imports) == 0 { - return nil, fmt.Errorf("fetch %s: no go-import meta tag", urlStr) - } - metaImport2, err := matchGoImport(imports, importPath) - if err != nil || metaImport != metaImport2 { - return nil, fmt.Errorf("%s and %s disagree about go-import for %s", urlStr0, urlStr, metaImport.Prefix) - } - } - - if err := validateRepoRoot(metaImport.RepoRoot); err != nil { - return nil, fmt.Errorf("%s: invalid repo root %q: %v", urlStr, metaImport.RepoRoot, err) - } - rr := &RepoRoot{ - VCS: ByCmd(metaImport.VCS), - Repo: metaImport.RepoRoot, - Root: metaImport.Prefix, - } - if rr.VCS == nil { - return nil, fmt.Errorf("%s: unknown vcs %q", urlStr, metaImport.VCS) - } - return rr, nil -} - -// validateRepoRoot returns an error if repoRoot does not seem to be -// a valid URL with scheme. -func validateRepoRoot(repoRoot string) error { - url, err := url.Parse(repoRoot) - if err != nil { - return err - } - if url.Scheme == "" { - return errors.New("no scheme") - } - return nil -} - -// metaImport represents the parsed tags from HTML files. -type metaImport struct { - Prefix, VCS, RepoRoot string -} - -// errNoMatch is returned from matchGoImport when there's no applicable match. -var errNoMatch = errors.New("no import match") - -// pathPrefix reports whether sub is a prefix of s, -// only considering entire path components. -func pathPrefix(s, sub string) bool { - // strings.HasPrefix is necessary but not sufficient. - if !strings.HasPrefix(s, sub) { - return false - } - // The remainder after the prefix must either be empty or start with a slash. - rem := s[len(sub):] - return rem == "" || rem[0] == '/' -} - -// matchGoImport returns the metaImport from imports matching importPath. -// An error is returned if there are multiple matches. -// errNoMatch is returned if none match. -func matchGoImport(imports []metaImport, importPath string) (_ metaImport, err error) { - match := -1 - for i, im := range imports { - if !pathPrefix(importPath, im.Prefix) { - continue - } - - if match != -1 { - err = fmt.Errorf("multiple meta tags match import path %q", importPath) - return - } - match = i - } - if match == -1 { - err = errNoMatch - return - } - return imports[match], nil -} - -// expand rewrites s to replace {k} with match[k] for each key k in match. -func expand(match map[string]string, s string) string { - for k, v := range match { - s = strings.Replace(s, "{"+k+"}", v, -1) - } - return s -} - -// vcsPaths lists the known vcs paths. -var vcsPaths = []*vcsPath{ - // Github - { - prefix: "github.com/", - re: `^(?Pgithub\.com/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)(/[\p{L}0-9_.\-]+)*$`, - vcs: "git", - repo: "https://{root}", - check: noVCSSuffix, - }, - - // Bitbucket - { - prefix: "bitbucket.org/", - re: `^(?Pbitbucket\.org/(?P[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+))(/[A-Za-z0-9_.\-]+)*$`, - repo: "https://{root}", - check: bitbucketVCS, - }, - - // Launchpad - { - prefix: "launchpad.net/", - re: `^(?Plaunchpad\.net/((?P[A-Za-z0-9_.\-]+)(?P/[A-Za-z0-9_.\-]+)?|~[A-Za-z0-9_.\-]+/(\+junk|[A-Za-z0-9_.\-]+)/[A-Za-z0-9_.\-]+))(/[A-Za-z0-9_.\-]+)*$`, - vcs: "bzr", - repo: "https://{root}", - check: launchpadVCS, - }, - - // Git at OpenStack - { - prefix: "git.openstack.org", - re: `^(?Pgit\.openstack\.org/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)(\.git)?(/[A-Za-z0-9_.\-]+)*$`, - vcs: "git", - repo: "https://{root}", - check: noVCSSuffix, - }, - - // General syntax for any server. - { - re: `^(?P(?P([a-z0-9.\-]+\.)+[a-z0-9.\-]+(:[0-9]+)?/[A-Za-z0-9_.\-/]*?)\.(?Pbzr|git|hg|svn))(/[A-Za-z0-9_.\-]+)*$`, - ping: true, - }, -} - -func init() { - // fill in cached regexps. - // Doing this eagerly discovers invalid regexp syntax - // without having to run a command that needs that regexp. - for _, srv := range vcsPaths { - srv.regexp = regexp.MustCompile(srv.re) - } -} - -// noVCSSuffix checks that the repository name does not -// end in .foo for any version control system foo. -// The usual culprit is ".git". -func noVCSSuffix(match map[string]string) error { - repo := match["repo"] - for _, vcs := range vcsList { - if strings.HasSuffix(repo, "."+vcs.Cmd) { - return fmt.Errorf("invalid version control suffix in %s path", match["prefix"]) - } - } - return nil -} - -// bitbucketVCS determines the version control system for a -// Bitbucket repository, by using the Bitbucket API. -func bitbucketVCS(match map[string]string) error { - if err := noVCSSuffix(match); err != nil { - return err - } - - var resp struct { - SCM string `json:"scm"` - } - url := expand(match, "https://api.bitbucket.org/2.0/repositories/{bitname}?fields=scm") - data, err := httpGET(url) - if err != nil { - return err - } - if err := json.Unmarshal(data, &resp); err != nil { - return fmt.Errorf("decoding %s: %v", url, err) - } - - if ByCmd(resp.SCM) != nil { - match["vcs"] = resp.SCM - if resp.SCM == "git" { - match["repo"] += ".git" - } - return nil - } - - return fmt.Errorf("unable to detect version control system for bitbucket.org/ path") -} - -// launchpadVCS solves the ambiguity for "lp.net/project/foo". In this case, -// "foo" could be a series name registered in Launchpad with its own branch, -// and it could also be the name of a directory within the main project -// branch one level up. -func launchpadVCS(match map[string]string) error { - if match["project"] == "" || match["series"] == "" { - return nil - } - _, err := httpGET(expand(match, "https://code.launchpad.net/{project}{series}/.bzr/branch-format")) - if err != nil { - match["root"] = expand(match, "launchpad.net/{project}") - match["repo"] = expand(match, "https://{root}") - } - return nil -} diff --git a/vendor/golang.org/x/tools/internal/analysisinternal/BUILD.bazel b/vendor/golang.org/x/tools/internal/analysisinternal/BUILD.bazel deleted file mode 100644 index c5b4a46859..0000000000 --- a/vendor/golang.org/x/tools/internal/analysisinternal/BUILD.bazel +++ /dev/null @@ -1,10 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["analysis.go"], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/internal/analysisinternal", - importpath = "golang.org/x/tools/internal/analysisinternal", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], - deps = ["//vendor/golang.org/x/tools/go/ast/astutil:go_default_library"], -) diff --git a/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go b/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go deleted file mode 100644 index 14b96a79fa..0000000000 --- a/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package analysisinternal exposes internal-only fields from go/analysis. -package analysisinternal - -import ( - "bytes" - "fmt" - "go/ast" - "go/token" - "go/types" - "strings" - - "golang.org/x/tools/go/ast/astutil" -) - -func TypeErrorEndPos(fset *token.FileSet, src []byte, start token.Pos) token.Pos { - // Get the end position for the type error. - offset, end := fset.PositionFor(start, false).Offset, start - if offset >= len(src) { - return end - } - if width := bytes.IndexAny(src[offset:], " \n,():;[]+-*"); width > 0 { - end = start + token.Pos(width) - } - return end -} - -func ZeroValue(fset *token.FileSet, f *ast.File, pkg *types.Package, typ types.Type) ast.Expr { - under := typ - if n, ok := typ.(*types.Named); ok { - under = n.Underlying() - } - switch u := under.(type) { - case *types.Basic: - switch { - case u.Info()&types.IsNumeric != 0: - return &ast.BasicLit{Kind: token.INT, Value: "0"} - case u.Info()&types.IsBoolean != 0: - return &ast.Ident{Name: "false"} - case u.Info()&types.IsString != 0: - return &ast.BasicLit{Kind: token.STRING, Value: `""`} - default: - panic("unknown basic type") - } - case *types.Chan, *types.Interface, *types.Map, *types.Pointer, *types.Signature, *types.Slice: - return ast.NewIdent("nil") - case *types.Struct: - texpr := TypeExpr(fset, f, pkg, typ) // typ because we want the name here. - if texpr == nil { - return nil - } - return &ast.CompositeLit{ - Type: texpr, - } - case *types.Array: - texpr := TypeExpr(fset, f, pkg, u.Elem()) - if texpr == nil { - return nil - } - return &ast.CompositeLit{ - Type: &ast.ArrayType{ - Elt: texpr, - Len: &ast.BasicLit{Kind: token.INT, Value: fmt.Sprintf("%v", u.Len())}, - }, - } - } - return nil -} - -func TypeExpr(fset *token.FileSet, f *ast.File, pkg *types.Package, typ types.Type) ast.Expr { - switch t := typ.(type) { - case *types.Basic: - switch t.Kind() { - case types.UnsafePointer: - return &ast.SelectorExpr{X: ast.NewIdent("unsafe"), Sel: ast.NewIdent("Pointer")} - default: - return ast.NewIdent(t.Name()) - } - case *types.Named: - if t.Obj().Pkg() == pkg { - return ast.NewIdent(t.Obj().Name()) - } - pkgName := t.Obj().Pkg().Name() - // If the file already imports the package under another name, use that. - for _, group := range astutil.Imports(fset, f) { - for _, cand := range group { - if strings.Trim(cand.Path.Value, `"`) == t.Obj().Pkg().Path() { - if cand.Name != nil && cand.Name.Name != "" { - pkgName = cand.Name.Name - } - } - } - } - if pkgName == "." { - return ast.NewIdent(t.Obj().Name()) - } - return &ast.SelectorExpr{ - X: ast.NewIdent(pkgName), - Sel: ast.NewIdent(t.Obj().Name()), - } - case *types.Pointer: - return &ast.UnaryExpr{ - Op: token.MUL, - X: TypeExpr(fset, f, pkg, t.Elem()), - } - default: - return nil // TODO: anonymous structs, but who does that - } -} - -var GetTypeErrors = func(p interface{}) []types.Error { return nil } -var SetTypeErrors = func(p interface{}, errors []types.Error) {} - -type TypeErrorPass string - -const ( - NoNewVars TypeErrorPass = "nonewvars" - NoResultValues TypeErrorPass = "noresultvalues" - UndeclaredName TypeErrorPass = "undeclaredname" -) diff --git a/vendor/golang.org/x/tools/internal/packagesinternal/BUILD.bazel b/vendor/golang.org/x/tools/internal/packagesinternal/BUILD.bazel deleted file mode 100644 index 682494c72e..0000000000 --- a/vendor/golang.org/x/tools/internal/packagesinternal/BUILD.bazel +++ /dev/null @@ -1,10 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["packages.go"], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/internal/packagesinternal", - importpath = "golang.org/x/tools/internal/packagesinternal", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], - deps = ["//vendor/golang.org/x/tools/internal/gocommand:go_default_library"], -) diff --git a/vendor/golang.org/x/tools/internal/packagesinternal/packages.go b/vendor/golang.org/x/tools/internal/packagesinternal/packages.go deleted file mode 100644 index 2c4527f243..0000000000 --- a/vendor/golang.org/x/tools/internal/packagesinternal/packages.go +++ /dev/null @@ -1,14 +0,0 @@ -// Package packagesinternal exposes internal-only fields from go/packages. -package packagesinternal - -import ( - "golang.org/x/tools/internal/gocommand" -) - -var GetForTest = func(p interface{}) string { return "" } - -var GetGoCmdRunner = func(config interface{}) *gocommand.Runner { return nil } - -var SetGoCmdRunner = func(config interface{}, runner *gocommand.Runner) {} - -var TypecheckCgo int diff --git a/vendor/golang.org/x/tools/internal/typesinternal/BUILD.bazel b/vendor/golang.org/x/tools/internal/typesinternal/BUILD.bazel deleted file mode 100644 index b5552578b8..0000000000 --- a/vendor/golang.org/x/tools/internal/typesinternal/BUILD.bazel +++ /dev/null @@ -1,9 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["types.go"], - importmap = "k8s.io/kops/vendor/golang.org/x/tools/internal/typesinternal", - importpath = "golang.org/x/tools/internal/typesinternal", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], -) diff --git a/vendor/golang.org/x/tools/internal/typesinternal/types.go b/vendor/golang.org/x/tools/internal/typesinternal/types.go deleted file mode 100644 index a5bb408e2f..0000000000 --- a/vendor/golang.org/x/tools/internal/typesinternal/types.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package typesinternal - -import ( - "go/types" - "reflect" - "unsafe" -) - -func SetUsesCgo(conf *types.Config) bool { - v := reflect.ValueOf(conf).Elem() - - f := v.FieldByName("go115UsesCgo") - if !f.IsValid() { - f = v.FieldByName("UsesCgo") - if !f.IsValid() { - return false - } - } - - addr := unsafe.Pointer(f.UnsafeAddr()) - *(*bool)(addr) = true - - return true -} diff --git a/vendor/honnef.co/go/tools/LICENSE b/vendor/honnef.co/go/tools/LICENSE deleted file mode 100644 index dfd0314546..0000000000 --- a/vendor/honnef.co/go/tools/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2016 Dominik Honnef - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/honnef.co/go/tools/LICENSE-THIRD-PARTY b/vendor/honnef.co/go/tools/LICENSE-THIRD-PARTY deleted file mode 100644 index 623d85e85b..0000000000 --- a/vendor/honnef.co/go/tools/LICENSE-THIRD-PARTY +++ /dev/null @@ -1,284 +0,0 @@ -Staticcheck and its related tools make use of third party projects, -either by reusing their code, or by statically linking them into -resulting binaries. These projects are: - -* The Go Programming Language - https://golang.org/ - - Copyright (c) 2009 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -* github.com/BurntSushi/toml - https://github.com/BurntSushi/toml - - The MIT License (MIT) - - Copyright (c) 2013 TOML authors - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - - -* github.com/google/renameio - https://github.com/google/renameio - - Copyright 2018 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -* github.com/kisielk/gotool - https://github.com/kisielk/gotool - - Copyright (c) 2013 Kamil Kisiel - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - All the files in this distribution are covered under either the MIT - license (see the file LICENSE) except some files mentioned below. - - match.go, match_test.go: - - Copyright (c) 2009 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -* github.com/rogpeppe/go-internal - https://github.com/rogpeppe/go-internal - - Copyright (c) 2018 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -* golang.org/x/mod/module - https://github.com/golang/mod - - Copyright (c) 2009 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -* golang.org/x/tools/go/analysis - https://github.com/golang/tools - - Copyright (c) 2009 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -* gogrep - https://github.com/mvdan/gogrep - - Copyright (c) 2017, Daniel Martí. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -* gosmith - https://github.com/dvyukov/gosmith - - Copyright (c) 2014 Dmitry Vyukov. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * The name of Dmitry Vyukov may be used to endorse or promote - products derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/honnef.co/go/tools/arg/BUILD.bazel b/vendor/honnef.co/go/tools/arg/BUILD.bazel deleted file mode 100644 index fbd90628bf..0000000000 --- a/vendor/honnef.co/go/tools/arg/BUILD.bazel +++ /dev/null @@ -1,9 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["arg.go"], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/arg", - importpath = "honnef.co/go/tools/arg", - visibility = ["//visibility:public"], -) diff --git a/vendor/honnef.co/go/tools/arg/arg.go b/vendor/honnef.co/go/tools/arg/arg.go deleted file mode 100644 index 1e7f30db42..0000000000 --- a/vendor/honnef.co/go/tools/arg/arg.go +++ /dev/null @@ -1,48 +0,0 @@ -package arg - -var args = map[string]int{ - "(*encoding/json.Decoder).Decode.v": 0, - "(*encoding/json.Encoder).Encode.v": 0, - "(*encoding/xml.Decoder).Decode.v": 0, - "(*encoding/xml.Encoder).Encode.v": 0, - "(*sync.Pool).Put.x": 0, - "(*text/template.Template).Parse.text": 0, - "(io.Seeker).Seek.offset": 0, - "(time.Time).Sub.u": 0, - "append.elems": 1, - "append.slice": 0, - "bytes.Equal.a": 0, - "bytes.Equal.b": 1, - "encoding/binary.Write.data": 2, - "errors.New.text": 0, - "fmt.Fprintf.format": 1, - "fmt.Printf.format": 0, - "fmt.Sprintf.a[0]": 1, - "fmt.Sprintf.format": 0, - "json.Marshal.v": 0, - "json.Unmarshal.v": 1, - "len.v": 0, - "make.size[0]": 1, - "make.size[1]": 2, - "make.t": 0, - "net/url.Parse.rawurl": 0, - "os.OpenFile.flag": 1, - "os/exec.Command.name": 0, - "os/signal.Notify.c": 0, - "regexp.Compile.expr": 0, - "runtime.SetFinalizer.finalizer": 1, - "runtime.SetFinalizer.obj": 0, - "sort.Sort.data": 0, - "time.Parse.layout": 0, - "time.Sleep.d": 0, - "xml.Marshal.v": 0, - "xml.Unmarshal.v": 1, -} - -func Arg(name string) int { - n, ok := args[name] - if !ok { - panic("unknown argument " + name) - } - return n -} diff --git a/vendor/honnef.co/go/tools/cmd/staticcheck/BUILD.bazel b/vendor/honnef.co/go/tools/cmd/staticcheck/BUILD.bazel deleted file mode 100644 index 3272d88de8..0000000000 --- a/vendor/honnef.co/go/tools/cmd/staticcheck/BUILD.bazel +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") - -go_library( - name = "go_default_library", - srcs = ["staticcheck.go"], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/cmd/staticcheck", - importpath = "honnef.co/go/tools/cmd/staticcheck", - visibility = ["//visibility:private"], - deps = [ - "//vendor/golang.org/x/tools/go/analysis:go_default_library", - "//vendor/honnef.co/go/tools/lint:go_default_library", - "//vendor/honnef.co/go/tools/lint/lintutil:go_default_library", - "//vendor/honnef.co/go/tools/simple:go_default_library", - "//vendor/honnef.co/go/tools/staticcheck:go_default_library", - "//vendor/honnef.co/go/tools/stylecheck:go_default_library", - "//vendor/honnef.co/go/tools/unused:go_default_library", - ], -) - -go_binary( - name = "staticcheck", - embed = [":go_default_library"], - visibility = ["//visibility:public"], -) diff --git a/vendor/honnef.co/go/tools/cmd/staticcheck/README.md b/vendor/honnef.co/go/tools/cmd/staticcheck/README.md deleted file mode 100644 index 4d14577fdf..0000000000 --- a/vendor/honnef.co/go/tools/cmd/staticcheck/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# staticcheck - -_staticcheck_ offers extensive analysis of Go code, covering a myriad -of categories. It will detect bugs, suggest code simplifications, -point out dead code, and more. - -## Installation - -See [the main README](https://github.com/dominikh/go-tools#installation) for installation instructions. - -## Documentation - -Detailed documentation can be found on -[staticcheck.io](https://staticcheck.io/docs/). - diff --git a/vendor/honnef.co/go/tools/cmd/staticcheck/staticcheck.go b/vendor/honnef.co/go/tools/cmd/staticcheck/staticcheck.go deleted file mode 100644 index 4f504dc39d..0000000000 --- a/vendor/honnef.co/go/tools/cmd/staticcheck/staticcheck.go +++ /dev/null @@ -1,44 +0,0 @@ -// staticcheck analyses Go code and makes it better. -package main // import "honnef.co/go/tools/cmd/staticcheck" - -import ( - "log" - "os" - - "golang.org/x/tools/go/analysis" - "honnef.co/go/tools/lint" - "honnef.co/go/tools/lint/lintutil" - "honnef.co/go/tools/simple" - "honnef.co/go/tools/staticcheck" - "honnef.co/go/tools/stylecheck" - "honnef.co/go/tools/unused" -) - -func main() { - fs := lintutil.FlagSet("staticcheck") - wholeProgram := fs.Bool("unused.whole-program", false, "Run unused in whole program mode") - debug := fs.String("debug.unused-graph", "", "Write unused's object graph to `file`") - fs.Parse(os.Args[1:]) - - var cs []*analysis.Analyzer - for _, v := range simple.Analyzers { - cs = append(cs, v) - } - for _, v := range staticcheck.Analyzers { - cs = append(cs, v) - } - for _, v := range stylecheck.Analyzers { - cs = append(cs, v) - } - - u := unused.NewChecker(*wholeProgram) - if *debug != "" { - f, err := os.OpenFile(*debug, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) - if err != nil { - log.Fatal(err) - } - u.Debug = f - } - cums := []lint.CumulativeChecker{u} - lintutil.ProcessFlagSet(cs, cums, fs) -} diff --git a/vendor/honnef.co/go/tools/code/BUILD.bazel b/vendor/honnef.co/go/tools/code/BUILD.bazel deleted file mode 100644 index 335bebc99f..0000000000 --- a/vendor/honnef.co/go/tools/code/BUILD.bazel +++ /dev/null @@ -1,19 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["code.go"], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/code", - importpath = "honnef.co/go/tools/code", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/go/analysis:go_default_library", - "//vendor/golang.org/x/tools/go/analysis/passes/inspect:go_default_library", - "//vendor/golang.org/x/tools/go/ast/astutil:go_default_library", - "//vendor/golang.org/x/tools/go/ast/inspector:go_default_library", - "//vendor/honnef.co/go/tools/facts:go_default_library", - "//vendor/honnef.co/go/tools/go/types/typeutil:go_default_library", - "//vendor/honnef.co/go/tools/ir:go_default_library", - "//vendor/honnef.co/go/tools/lint:go_default_library", - ], -) diff --git a/vendor/honnef.co/go/tools/code/code.go b/vendor/honnef.co/go/tools/code/code.go deleted file mode 100644 index 6f4df8b9aa..0000000000 --- a/vendor/honnef.co/go/tools/code/code.go +++ /dev/null @@ -1,481 +0,0 @@ -// Package code answers structural and type questions about Go code. -package code - -import ( - "flag" - "fmt" - "go/ast" - "go/constant" - "go/token" - "go/types" - "strings" - - "golang.org/x/tools/go/analysis" - "golang.org/x/tools/go/analysis/passes/inspect" - "golang.org/x/tools/go/ast/astutil" - "golang.org/x/tools/go/ast/inspector" - "honnef.co/go/tools/facts" - "honnef.co/go/tools/go/types/typeutil" - "honnef.co/go/tools/ir" - "honnef.co/go/tools/lint" -) - -type Positioner interface { - Pos() token.Pos -} - -func CallName(call *ir.CallCommon) string { - if call.IsInvoke() { - return "" - } - switch v := call.Value.(type) { - case *ir.Function: - fn, ok := v.Object().(*types.Func) - if !ok { - return "" - } - return lint.FuncName(fn) - case *ir.Builtin: - return v.Name() - } - return "" -} - -func IsCallTo(call *ir.CallCommon, name string) bool { return CallName(call) == name } - -func IsCallToAny(call *ir.CallCommon, names ...string) bool { - q := CallName(call) - for _, name := range names { - if q == name { - return true - } - } - return false -} - -func IsType(T types.Type, name string) bool { return types.TypeString(T, nil) == name } - -func FilterDebug(instr []ir.Instruction) []ir.Instruction { - var out []ir.Instruction - for _, ins := range instr { - if _, ok := ins.(*ir.DebugRef); !ok { - out = append(out, ins) - } - } - return out -} - -func IsExample(fn *ir.Function) bool { - if !strings.HasPrefix(fn.Name(), "Example") { - return false - } - f := fn.Prog.Fset.File(fn.Pos()) - if f == nil { - return false - } - return strings.HasSuffix(f.Name(), "_test.go") -} - -func IsPointerLike(T types.Type) bool { - switch T := T.Underlying().(type) { - case *types.Interface, *types.Chan, *types.Map, *types.Signature, *types.Pointer: - return true - case *types.Basic: - return T.Kind() == types.UnsafePointer - } - return false -} - -func IsIdent(expr ast.Expr, ident string) bool { - id, ok := expr.(*ast.Ident) - return ok && id.Name == ident -} - -// isBlank returns whether id is the blank identifier "_". -// If id == nil, the answer is false. -func IsBlank(id ast.Expr) bool { - ident, _ := id.(*ast.Ident) - return ident != nil && ident.Name == "_" -} - -func IsIntLiteral(expr ast.Expr, literal string) bool { - lit, ok := expr.(*ast.BasicLit) - return ok && lit.Kind == token.INT && lit.Value == literal -} - -// Deprecated: use IsIntLiteral instead -func IsZero(expr ast.Expr) bool { - return IsIntLiteral(expr, "0") -} - -func IsOfType(pass *analysis.Pass, expr ast.Expr, name string) bool { - return IsType(pass.TypesInfo.TypeOf(expr), name) -} - -func IsInTest(pass *analysis.Pass, node Positioner) bool { - // FIXME(dh): this doesn't work for global variables with - // initializers - f := pass.Fset.File(node.Pos()) - return f != nil && strings.HasSuffix(f.Name(), "_test.go") -} - -// IsMain reports whether the package being processed is a package -// main. -func IsMain(pass *analysis.Pass) bool { - return pass.Pkg.Name() == "main" -} - -// IsMainLike reports whether the package being processed is a -// main-like package. A main-like package is a package that is -// package main, or that is intended to be used by a tool framework -// such as cobra to implement a command. -// -// Note that this function errs on the side of false positives; it may -// return true for packages that aren't main-like. IsMainLike is -// intended for analyses that wish to suppress diagnostics for -// main-like packages to avoid false positives. -func IsMainLike(pass *analysis.Pass) bool { - if pass.Pkg.Name() == "main" { - return true - } - for _, imp := range pass.Pkg.Imports() { - if imp.Path() == "github.com/spf13/cobra" { - return true - } - } - return false -} - -func SelectorName(pass *analysis.Pass, expr *ast.SelectorExpr) string { - info := pass.TypesInfo - sel := info.Selections[expr] - if sel == nil { - if x, ok := expr.X.(*ast.Ident); ok { - pkg, ok := info.ObjectOf(x).(*types.PkgName) - if !ok { - // This shouldn't happen - return fmt.Sprintf("%s.%s", x.Name, expr.Sel.Name) - } - return fmt.Sprintf("%s.%s", pkg.Imported().Path(), expr.Sel.Name) - } - panic(fmt.Sprintf("unsupported selector: %v", expr)) - } - return fmt.Sprintf("(%s).%s", sel.Recv(), sel.Obj().Name()) -} - -func IsNil(pass *analysis.Pass, expr ast.Expr) bool { - return pass.TypesInfo.Types[expr].IsNil() -} - -func BoolConst(pass *analysis.Pass, expr ast.Expr) bool { - val := pass.TypesInfo.ObjectOf(expr.(*ast.Ident)).(*types.Const).Val() - return constant.BoolVal(val) -} - -func IsBoolConst(pass *analysis.Pass, expr ast.Expr) bool { - // We explicitly don't support typed bools because more often than - // not, custom bool types are used as binary enums and the - // explicit comparison is desired. - - ident, ok := expr.(*ast.Ident) - if !ok { - return false - } - obj := pass.TypesInfo.ObjectOf(ident) - c, ok := obj.(*types.Const) - if !ok { - return false - } - basic, ok := c.Type().(*types.Basic) - if !ok { - return false - } - if basic.Kind() != types.UntypedBool && basic.Kind() != types.Bool { - return false - } - return true -} - -func ExprToInt(pass *analysis.Pass, expr ast.Expr) (int64, bool) { - tv := pass.TypesInfo.Types[expr] - if tv.Value == nil { - return 0, false - } - if tv.Value.Kind() != constant.Int { - return 0, false - } - return constant.Int64Val(tv.Value) -} - -func ExprToString(pass *analysis.Pass, expr ast.Expr) (string, bool) { - val := pass.TypesInfo.Types[expr].Value - if val == nil { - return "", false - } - if val.Kind() != constant.String { - return "", false - } - return constant.StringVal(val), true -} - -// Dereference returns a pointer's element type; otherwise it returns -// T. -func Dereference(T types.Type) types.Type { - if p, ok := T.Underlying().(*types.Pointer); ok { - return p.Elem() - } - return T -} - -// DereferenceR returns a pointer's element type; otherwise it returns -// T. If the element type is itself a pointer, DereferenceR will be -// applied recursively. -func DereferenceR(T types.Type) types.Type { - if p, ok := T.Underlying().(*types.Pointer); ok { - return DereferenceR(p.Elem()) - } - return T -} - -func CallNameAST(pass *analysis.Pass, call *ast.CallExpr) string { - switch fun := astutil.Unparen(call.Fun).(type) { - case *ast.SelectorExpr: - fn, ok := pass.TypesInfo.ObjectOf(fun.Sel).(*types.Func) - if !ok { - return "" - } - return lint.FuncName(fn) - case *ast.Ident: - obj := pass.TypesInfo.ObjectOf(fun) - switch obj := obj.(type) { - case *types.Func: - return lint.FuncName(obj) - case *types.Builtin: - return obj.Name() - default: - return "" - } - default: - return "" - } -} - -func IsCallToAST(pass *analysis.Pass, node ast.Node, name string) bool { - call, ok := node.(*ast.CallExpr) - if !ok { - return false - } - return CallNameAST(pass, call) == name -} - -func IsCallToAnyAST(pass *analysis.Pass, node ast.Node, names ...string) bool { - call, ok := node.(*ast.CallExpr) - if !ok { - return false - } - q := CallNameAST(pass, call) - for _, name := range names { - if q == name { - return true - } - } - return false -} - -func Preamble(f *ast.File) string { - cutoff := f.Package - if f.Doc != nil { - cutoff = f.Doc.Pos() - } - var out []string - for _, cmt := range f.Comments { - if cmt.Pos() >= cutoff { - break - } - out = append(out, cmt.Text()) - } - return strings.Join(out, "\n") -} - -func GroupSpecs(fset *token.FileSet, specs []ast.Spec) [][]ast.Spec { - if len(specs) == 0 { - return nil - } - groups := make([][]ast.Spec, 1) - groups[0] = append(groups[0], specs[0]) - - for _, spec := range specs[1:] { - g := groups[len(groups)-1] - if fset.PositionFor(spec.Pos(), false).Line-1 != - fset.PositionFor(g[len(g)-1].End(), false).Line { - - groups = append(groups, nil) - } - - groups[len(groups)-1] = append(groups[len(groups)-1], spec) - } - - return groups -} - -func IsObject(obj types.Object, name string) bool { - var path string - if pkg := obj.Pkg(); pkg != nil { - path = pkg.Path() + "." - } - return path+obj.Name() == name -} - -type Field struct { - Var *types.Var - Tag string - Path []int -} - -// FlattenFields recursively flattens T and embedded structs, -// returning a list of fields. If multiple fields with the same name -// exist, all will be returned. -func FlattenFields(T *types.Struct) []Field { - return flattenFields(T, nil, nil) -} - -func flattenFields(T *types.Struct, path []int, seen map[types.Type]bool) []Field { - if seen == nil { - seen = map[types.Type]bool{} - } - if seen[T] { - return nil - } - seen[T] = true - var out []Field - for i := 0; i < T.NumFields(); i++ { - field := T.Field(i) - tag := T.Tag(i) - np := append(path[:len(path):len(path)], i) - if field.Anonymous() { - if s, ok := Dereference(field.Type()).Underlying().(*types.Struct); ok { - out = append(out, flattenFields(s, np, seen)...) - } - } else { - out = append(out, Field{field, tag, np}) - } - } - return out -} - -func File(pass *analysis.Pass, node Positioner) *ast.File { - m := pass.ResultOf[facts.TokenFile].(map[*token.File]*ast.File) - return m[pass.Fset.File(node.Pos())] -} - -// IsGenerated reports whether pos is in a generated file, It ignores -// //line directives. -func IsGenerated(pass *analysis.Pass, pos token.Pos) bool { - _, ok := Generator(pass, pos) - return ok -} - -// Generator returns the generator that generated the file containing -// pos. It ignores //line directives. -func Generator(pass *analysis.Pass, pos token.Pos) (facts.Generator, bool) { - file := pass.Fset.PositionFor(pos, false).Filename - m := pass.ResultOf[facts.Generated].(map[string]facts.Generator) - g, ok := m[file] - return g, ok -} - -// MayHaveSideEffects reports whether expr may have side effects. If -// the purity argument is nil, this function implements a purely -// syntactic check, meaning that any function call may have side -// effects, regardless of the called function's body. Otherwise, -// purity will be consulted to determine the purity of function calls. -func MayHaveSideEffects(pass *analysis.Pass, expr ast.Expr, purity facts.PurityResult) bool { - switch expr := expr.(type) { - case *ast.BadExpr: - return true - case *ast.Ellipsis: - return MayHaveSideEffects(pass, expr.Elt, purity) - case *ast.FuncLit: - // the literal itself cannot have side ffects, only calling it - // might, which is handled by CallExpr. - return false - case *ast.ArrayType, *ast.StructType, *ast.FuncType, *ast.InterfaceType, *ast.MapType, *ast.ChanType: - // types cannot have side effects - return false - case *ast.BasicLit: - return false - case *ast.BinaryExpr: - return MayHaveSideEffects(pass, expr.X, purity) || MayHaveSideEffects(pass, expr.Y, purity) - case *ast.CallExpr: - if purity == nil { - return true - } - switch obj := typeutil.Callee(pass.TypesInfo, expr).(type) { - case *types.Func: - if _, ok := purity[obj]; !ok { - return true - } - case *types.Builtin: - switch obj.Name() { - case "len", "cap": - default: - return true - } - default: - return true - } - for _, arg := range expr.Args { - if MayHaveSideEffects(pass, arg, purity) { - return true - } - } - return false - case *ast.CompositeLit: - if MayHaveSideEffects(pass, expr.Type, purity) { - return true - } - for _, elt := range expr.Elts { - if MayHaveSideEffects(pass, elt, purity) { - return true - } - } - return false - case *ast.Ident: - return false - case *ast.IndexExpr: - return MayHaveSideEffects(pass, expr.X, purity) || MayHaveSideEffects(pass, expr.Index, purity) - case *ast.KeyValueExpr: - return MayHaveSideEffects(pass, expr.Key, purity) || MayHaveSideEffects(pass, expr.Value, purity) - case *ast.SelectorExpr: - return MayHaveSideEffects(pass, expr.X, purity) - case *ast.SliceExpr: - return MayHaveSideEffects(pass, expr.X, purity) || - MayHaveSideEffects(pass, expr.Low, purity) || - MayHaveSideEffects(pass, expr.High, purity) || - MayHaveSideEffects(pass, expr.Max, purity) - case *ast.StarExpr: - return MayHaveSideEffects(pass, expr.X, purity) - case *ast.TypeAssertExpr: - return MayHaveSideEffects(pass, expr.X, purity) - case *ast.UnaryExpr: - if MayHaveSideEffects(pass, expr.X, purity) { - return true - } - return expr.Op == token.ARROW - case *ast.ParenExpr: - return MayHaveSideEffects(pass, expr.X, purity) - case nil: - return false - default: - panic(fmt.Sprintf("internal error: unhandled type %T", expr)) - } -} - -func IsGoVersion(pass *analysis.Pass, minor int) bool { - version := pass.Analyzer.Flags.Lookup("go").Value.(flag.Getter).Get().(int) - return version >= minor -} - -func Preorder(pass *analysis.Pass, fn func(ast.Node), types ...ast.Node) { - pass.ResultOf[inspect.Analyzer].(*inspector.Inspector).Preorder(types, fn) -} diff --git a/vendor/honnef.co/go/tools/config/BUILD.bazel b/vendor/honnef.co/go/tools/config/BUILD.bazel deleted file mode 100644 index f7e550064a..0000000000 --- a/vendor/honnef.co/go/tools/config/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["config.go"], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/config", - importpath = "honnef.co/go/tools/config", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/BurntSushi/toml:go_default_library", - "//vendor/golang.org/x/tools/go/analysis:go_default_library", - ], -) diff --git a/vendor/honnef.co/go/tools/config/config.go b/vendor/honnef.co/go/tools/config/config.go deleted file mode 100644 index 55115371b9..0000000000 --- a/vendor/honnef.co/go/tools/config/config.go +++ /dev/null @@ -1,245 +0,0 @@ -package config - -import ( - "bytes" - "fmt" - "go/ast" - "go/token" - "os" - "path/filepath" - "reflect" - "strings" - - "github.com/BurntSushi/toml" - "golang.org/x/tools/go/analysis" -) - -// Dir looks at a list of absolute file names, which should make up a -// single package, and returns the path of the directory that may -// contain a staticcheck.conf file. It returns the empty string if no -// such directory could be determined, for example because all files -// were located in Go's build cache. -func Dir(files []string) string { - if len(files) == 0 { - return "" - } - cache, err := os.UserCacheDir() - if err != nil { - cache = "" - } - var path string - for _, p := range files { - // FIXME(dh): using strings.HasPrefix isn't technically - // correct, but it should be good enough for now. - if cache != "" && strings.HasPrefix(p, cache) { - // File in the build cache of the standard Go build system - continue - } - path = p - break - } - - if path == "" { - // The package only consists of generated files. - return "" - } - - dir := filepath.Dir(path) - return dir -} - -func dirAST(files []*ast.File, fset *token.FileSet) string { - names := make([]string, len(files)) - for i, f := range files { - names[i] = fset.PositionFor(f.Pos(), true).Filename - } - return Dir(names) -} - -var Analyzer = &analysis.Analyzer{ - Name: "config", - Doc: "loads configuration for the current package tree", - Run: func(pass *analysis.Pass) (interface{}, error) { - dir := dirAST(pass.Files, pass.Fset) - if dir == "" { - cfg := DefaultConfig - return &cfg, nil - } - cfg, err := Load(dir) - if err != nil { - return nil, fmt.Errorf("error loading staticcheck.conf: %s", err) - } - return &cfg, nil - }, - RunDespiteErrors: true, - ResultType: reflect.TypeOf((*Config)(nil)), -} - -func For(pass *analysis.Pass) *Config { - return pass.ResultOf[Analyzer].(*Config) -} - -func mergeLists(a, b []string) []string { - out := make([]string, 0, len(a)+len(b)) - for _, el := range b { - if el == "inherit" { - out = append(out, a...) - } else { - out = append(out, el) - } - } - - return out -} - -func normalizeList(list []string) []string { - if len(list) > 1 { - nlist := make([]string, 0, len(list)) - nlist = append(nlist, list[0]) - for i, el := range list[1:] { - if el != list[i] { - nlist = append(nlist, el) - } - } - list = nlist - } - - for _, el := range list { - if el == "inherit" { - // This should never happen, because the default config - // should not use "inherit" - panic(`unresolved "inherit"`) - } - } - - return list -} - -func (cfg Config) Merge(ocfg Config) Config { - if ocfg.Checks != nil { - cfg.Checks = mergeLists(cfg.Checks, ocfg.Checks) - } - if ocfg.Initialisms != nil { - cfg.Initialisms = mergeLists(cfg.Initialisms, ocfg.Initialisms) - } - if ocfg.DotImportWhitelist != nil { - cfg.DotImportWhitelist = mergeLists(cfg.DotImportWhitelist, ocfg.DotImportWhitelist) - } - if ocfg.HTTPStatusCodeWhitelist != nil { - cfg.HTTPStatusCodeWhitelist = mergeLists(cfg.HTTPStatusCodeWhitelist, ocfg.HTTPStatusCodeWhitelist) - } - return cfg -} - -type Config struct { - // TODO(dh): this implementation makes it impossible for external - // clients to add their own checkers with configuration. At the - // moment, we don't really care about that; we don't encourage - // that people use this package. In the future, we may. The - // obvious solution would be using map[string]interface{}, but - // that's obviously subpar. - - Checks []string `toml:"checks"` - Initialisms []string `toml:"initialisms"` - DotImportWhitelist []string `toml:"dot_import_whitelist"` - HTTPStatusCodeWhitelist []string `toml:"http_status_code_whitelist"` -} - -func (c Config) String() string { - buf := &bytes.Buffer{} - - fmt.Fprintf(buf, "Checks: %#v\n", c.Checks) - fmt.Fprintf(buf, "Initialisms: %#v\n", c.Initialisms) - fmt.Fprintf(buf, "DotImportWhitelist: %#v\n", c.DotImportWhitelist) - fmt.Fprintf(buf, "HTTPStatusCodeWhitelist: %#v", c.HTTPStatusCodeWhitelist) - - return buf.String() -} - -var DefaultConfig = Config{ - Checks: []string{"all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022"}, - Initialisms: []string{ - "ACL", "API", "ASCII", "CPU", "CSS", "DNS", - "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", - "IP", "JSON", "QPS", "RAM", "RPC", "SLA", - "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", - "UDP", "UI", "GID", "UID", "UUID", "URI", - "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", - "XSS", "SIP", "RTP", "AMQP", "DB", "TS", - }, - DotImportWhitelist: []string{}, - HTTPStatusCodeWhitelist: []string{"200", "400", "404", "500"}, -} - -const ConfigName = "staticcheck.conf" - -func parseConfigs(dir string) ([]Config, error) { - var out []Config - - // TODO(dh): consider stopping at the GOPATH/module boundary - for dir != "" { - f, err := os.Open(filepath.Join(dir, ConfigName)) - if os.IsNotExist(err) { - ndir := filepath.Dir(dir) - if ndir == dir { - break - } - dir = ndir - continue - } - if err != nil { - return nil, err - } - var cfg Config - _, err = toml.DecodeReader(f, &cfg) - f.Close() - if err != nil { - return nil, err - } - out = append(out, cfg) - ndir := filepath.Dir(dir) - if ndir == dir { - break - } - dir = ndir - } - out = append(out, DefaultConfig) - if len(out) < 2 { - return out, nil - } - for i := 0; i < len(out)/2; i++ { - out[i], out[len(out)-1-i] = out[len(out)-1-i], out[i] - } - return out, nil -} - -func mergeConfigs(confs []Config) Config { - if len(confs) == 0 { - // This shouldn't happen because we always have at least a - // default config. - panic("trying to merge zero configs") - } - if len(confs) == 1 { - return confs[0] - } - conf := confs[0] - for _, oconf := range confs[1:] { - conf = conf.Merge(oconf) - } - return conf -} - -func Load(dir string) (Config, error) { - confs, err := parseConfigs(dir) - if err != nil { - return Config{}, err - } - conf := mergeConfigs(confs) - - conf.Checks = normalizeList(conf.Checks) - conf.Initialisms = normalizeList(conf.Initialisms) - conf.DotImportWhitelist = normalizeList(conf.DotImportWhitelist) - conf.HTTPStatusCodeWhitelist = normalizeList(conf.HTTPStatusCodeWhitelist) - - return conf, nil -} diff --git a/vendor/honnef.co/go/tools/config/example.conf b/vendor/honnef.co/go/tools/config/example.conf deleted file mode 100644 index a715a24d4f..0000000000 --- a/vendor/honnef.co/go/tools/config/example.conf +++ /dev/null @@ -1,10 +0,0 @@ -checks = ["all", "-ST1003", "-ST1014"] -initialisms = ["ACL", "API", "ASCII", "CPU", "CSS", "DNS", - "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", - "IP", "JSON", "QPS", "RAM", "RPC", "SLA", - "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", - "UDP", "UI", "GID", "UID", "UUID", "URI", - "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", - "XSS", "SIP", "RTP"] -dot_import_whitelist = [] -http_status_code_whitelist = ["200", "400", "404", "500"] diff --git a/vendor/honnef.co/go/tools/deprecated/BUILD.bazel b/vendor/honnef.co/go/tools/deprecated/BUILD.bazel deleted file mode 100644 index 18d8505969..0000000000 --- a/vendor/honnef.co/go/tools/deprecated/BUILD.bazel +++ /dev/null @@ -1,9 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["stdlib.go"], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/deprecated", - importpath = "honnef.co/go/tools/deprecated", - visibility = ["//visibility:public"], -) diff --git a/vendor/honnef.co/go/tools/deprecated/stdlib.go b/vendor/honnef.co/go/tools/deprecated/stdlib.go deleted file mode 100644 index cabb8500a2..0000000000 --- a/vendor/honnef.co/go/tools/deprecated/stdlib.go +++ /dev/null @@ -1,119 +0,0 @@ -package deprecated - -type Deprecation struct { - DeprecatedSince int - AlternativeAvailableSince int -} - -var Stdlib = map[string]Deprecation{ - // FIXME(dh): AllowBinary isn't being detected as deprecated - // because the comment has a newline right after "Deprecated:" - "go/build.AllowBinary": {7, 7}, - "(archive/zip.FileHeader).CompressedSize": {1, 1}, - "(archive/zip.FileHeader).UncompressedSize": {1, 1}, - "(archive/zip.FileHeader).ModifiedTime": {10, 10}, - "(archive/zip.FileHeader).ModifiedDate": {10, 10}, - "(*archive/zip.FileHeader).ModTime": {10, 10}, - "(*archive/zip.FileHeader).SetModTime": {10, 10}, - "(go/doc.Package).Bugs": {1, 1}, - "os.SEEK_SET": {7, 7}, - "os.SEEK_CUR": {7, 7}, - "os.SEEK_END": {7, 7}, - "(net.Dialer).Cancel": {7, 7}, - "runtime.CPUProfile": {9, 0}, - "compress/flate.ReadError": {6, 6}, - "compress/flate.WriteError": {6, 6}, - "path/filepath.HasPrefix": {0, 0}, - "(net/http.Transport).Dial": {7, 7}, - "(*net/http.Transport).CancelRequest": {6, 5}, - "net/http.ErrWriteAfterFlush": {7, 0}, - "net/http.ErrHeaderTooLong": {8, 0}, - "net/http.ErrShortBody": {8, 0}, - "net/http.ErrMissingContentLength": {8, 0}, - "net/http/httputil.ErrPersistEOF": {0, 0}, - "net/http/httputil.ErrClosed": {0, 0}, - "net/http/httputil.ErrPipeline": {0, 0}, - "net/http/httputil.ServerConn": {0, 0}, - "net/http/httputil.NewServerConn": {0, 0}, - "net/http/httputil.ClientConn": {0, 0}, - "net/http/httputil.NewClientConn": {0, 0}, - "net/http/httputil.NewProxyClientConn": {0, 0}, - "(net/http.Request).Cancel": {7, 7}, - "(text/template/parse.PipeNode).Line": {1, 1}, - "(text/template/parse.ActionNode).Line": {1, 1}, - "(text/template/parse.BranchNode).Line": {1, 1}, - "(text/template/parse.TemplateNode).Line": {1, 1}, - "database/sql/driver.ColumnConverter": {9, 9}, - "database/sql/driver.Execer": {8, 8}, - "database/sql/driver.Queryer": {8, 8}, - "(database/sql/driver.Conn).Begin": {8, 8}, - "(database/sql/driver.Stmt).Exec": {8, 8}, - "(database/sql/driver.Stmt).Query": {8, 8}, - "syscall.StringByteSlice": {1, 1}, - "syscall.StringBytePtr": {1, 1}, - "syscall.StringSlicePtr": {1, 1}, - "syscall.StringToUTF16": {1, 1}, - "syscall.StringToUTF16Ptr": {1, 1}, - "(*regexp.Regexp).Copy": {12, 12}, - "(archive/tar.Header).Xattrs": {10, 10}, - "archive/tar.TypeRegA": {11, 1}, - "go/types.NewInterface": {11, 11}, - "(*go/types.Interface).Embedded": {11, 11}, - "go/importer.For": {12, 12}, - "encoding/json.InvalidUTF8Error": {2, 2}, - "encoding/json.UnmarshalFieldError": {2, 2}, - "encoding/csv.ErrTrailingComma": {2, 2}, - "(encoding/csv.Reader).TrailingComma": {2, 2}, - "(net.Dialer).DualStack": {12, 12}, - "net/http.ErrUnexpectedTrailer": {12, 12}, - "net/http.CloseNotifier": {11, 7}, - "net/http.ProtocolError": {8, 8}, - "(crypto/x509.CertificateRequest).Attributes": {5, 3}, - // This function has no alternative, but also no purpose. - "(*crypto/rc4.Cipher).Reset": {12, 0}, - "(net/http/httptest.ResponseRecorder).HeaderMap": {11, 7}, - "image.ZP": {13, 0}, - "image.ZR": {13, 0}, - "(*debug/gosym.LineTable).LineToPC": {2, 2}, - "(*debug/gosym.LineTable).PCToLine": {2, 2}, - "crypto/tls.VersionSSL30": {13, 0}, - "(crypto/tls.Config).NameToCertificate": {14, 14}, - "(*crypto/tls.Config).BuildNameToCertificate": {14, 14}, - "image/jpeg.Reader": {4, 0}, - - // All of these have been deprecated in favour of external libraries - "syscall.AttachLsf": {7, 0}, - "syscall.DetachLsf": {7, 0}, - "syscall.LsfSocket": {7, 0}, - "syscall.SetLsfPromisc": {7, 0}, - "syscall.LsfJump": {7, 0}, - "syscall.LsfStmt": {7, 0}, - "syscall.BpfStmt": {7, 0}, - "syscall.BpfJump": {7, 0}, - "syscall.BpfBuflen": {7, 0}, - "syscall.SetBpfBuflen": {7, 0}, - "syscall.BpfDatalink": {7, 0}, - "syscall.SetBpfDatalink": {7, 0}, - "syscall.SetBpfPromisc": {7, 0}, - "syscall.FlushBpf": {7, 0}, - "syscall.BpfInterface": {7, 0}, - "syscall.SetBpfInterface": {7, 0}, - "syscall.BpfTimeout": {7, 0}, - "syscall.SetBpfTimeout": {7, 0}, - "syscall.BpfStats": {7, 0}, - "syscall.SetBpfImmediate": {7, 0}, - "syscall.SetBpf": {7, 0}, - "syscall.CheckBpfVersion": {7, 0}, - "syscall.BpfHeadercmpl": {7, 0}, - "syscall.SetBpfHeadercmpl": {7, 0}, - "syscall.RouteRIB": {8, 0}, - "syscall.RoutingMessage": {8, 0}, - "syscall.RouteMessage": {8, 0}, - "syscall.InterfaceMessage": {8, 0}, - "syscall.InterfaceAddrMessage": {8, 0}, - "syscall.ParseRoutingMessage": {8, 0}, - "syscall.ParseRoutingSockaddr": {8, 0}, - "syscall.InterfaceAnnounceMessage": {7, 0}, - "syscall.InterfaceMulticastAddrMessage": {7, 0}, - "syscall.FormatMessage": {5, 0}, -} diff --git a/vendor/honnef.co/go/tools/edit/BUILD.bazel b/vendor/honnef.co/go/tools/edit/BUILD.bazel deleted file mode 100644 index 9058bc57c8..0000000000 --- a/vendor/honnef.co/go/tools/edit/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["edit.go"], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/edit", - importpath = "honnef.co/go/tools/edit", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/go/analysis:go_default_library", - "//vendor/honnef.co/go/tools/pattern:go_default_library", - ], -) diff --git a/vendor/honnef.co/go/tools/edit/edit.go b/vendor/honnef.co/go/tools/edit/edit.go deleted file mode 100644 index f4cfba2347..0000000000 --- a/vendor/honnef.co/go/tools/edit/edit.go +++ /dev/null @@ -1,67 +0,0 @@ -package edit - -import ( - "bytes" - "go/ast" - "go/format" - "go/token" - - "golang.org/x/tools/go/analysis" - "honnef.co/go/tools/pattern" -) - -type Ranger interface { - Pos() token.Pos - End() token.Pos -} - -type Range [2]token.Pos - -func (r Range) Pos() token.Pos { return r[0] } -func (r Range) End() token.Pos { return r[1] } - -func ReplaceWithString(fset *token.FileSet, old Ranger, new string) analysis.TextEdit { - return analysis.TextEdit{ - Pos: old.Pos(), - End: old.End(), - NewText: []byte(new), - } -} - -func ReplaceWithNode(fset *token.FileSet, old Ranger, new ast.Node) analysis.TextEdit { - buf := &bytes.Buffer{} - if err := format.Node(buf, fset, new); err != nil { - panic("internal error: " + err.Error()) - } - return analysis.TextEdit{ - Pos: old.Pos(), - End: old.End(), - NewText: buf.Bytes(), - } -} - -func ReplaceWithPattern(pass *analysis.Pass, after pattern.Pattern, state pattern.State, node Ranger) analysis.TextEdit { - r := pattern.NodeToAST(after.Root, state) - buf := &bytes.Buffer{} - format.Node(buf, pass.Fset, r) - return analysis.TextEdit{ - Pos: node.Pos(), - End: node.End(), - NewText: buf.Bytes(), - } -} - -func Delete(old Ranger) analysis.TextEdit { - return analysis.TextEdit{ - Pos: old.Pos(), - End: old.End(), - NewText: nil, - } -} - -func Fix(msg string, edits ...analysis.TextEdit) analysis.SuggestedFix { - return analysis.SuggestedFix{ - Message: msg, - TextEdits: edits, - } -} diff --git a/vendor/honnef.co/go/tools/facts/BUILD.bazel b/vendor/honnef.co/go/tools/facts/BUILD.bazel deleted file mode 100644 index c9c43a3d81..0000000000 --- a/vendor/honnef.co/go/tools/facts/BUILD.bazel +++ /dev/null @@ -1,20 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "deprecated.go", - "generated.go", - "purity.go", - "token.go", - ], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/facts", - importpath = "honnef.co/go/tools/facts", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/go/analysis:go_default_library", - "//vendor/honnef.co/go/tools/functions:go_default_library", - "//vendor/honnef.co/go/tools/internal/passes/buildir:go_default_library", - "//vendor/honnef.co/go/tools/ir:go_default_library", - ], -) diff --git a/vendor/honnef.co/go/tools/facts/deprecated.go b/vendor/honnef.co/go/tools/facts/deprecated.go deleted file mode 100644 index 8587b0e0ea..0000000000 --- a/vendor/honnef.co/go/tools/facts/deprecated.go +++ /dev/null @@ -1,144 +0,0 @@ -package facts - -import ( - "go/ast" - "go/token" - "go/types" - "reflect" - "strings" - - "golang.org/x/tools/go/analysis" -) - -type IsDeprecated struct{ Msg string } - -func (*IsDeprecated) AFact() {} -func (d *IsDeprecated) String() string { return "Deprecated: " + d.Msg } - -type DeprecatedResult struct { - Objects map[types.Object]*IsDeprecated - Packages map[*types.Package]*IsDeprecated -} - -var Deprecated = &analysis.Analyzer{ - Name: "fact_deprecated", - Doc: "Mark deprecated objects", - Run: deprecated, - FactTypes: []analysis.Fact{(*IsDeprecated)(nil)}, - ResultType: reflect.TypeOf(DeprecatedResult{}), -} - -func deprecated(pass *analysis.Pass) (interface{}, error) { - var names []*ast.Ident - - extractDeprecatedMessage := func(docs []*ast.CommentGroup) string { - for _, doc := range docs { - if doc == nil { - continue - } - parts := strings.Split(doc.Text(), "\n\n") - last := parts[len(parts)-1] - if !strings.HasPrefix(last, "Deprecated: ") { - continue - } - alt := last[len("Deprecated: "):] - alt = strings.Replace(alt, "\n", " ", -1) - return alt - } - return "" - } - doDocs := func(names []*ast.Ident, docs []*ast.CommentGroup) { - alt := extractDeprecatedMessage(docs) - if alt == "" { - return - } - - for _, name := range names { - obj := pass.TypesInfo.ObjectOf(name) - pass.ExportObjectFact(obj, &IsDeprecated{alt}) - } - } - - var docs []*ast.CommentGroup - for _, f := range pass.Files { - docs = append(docs, f.Doc) - } - if alt := extractDeprecatedMessage(docs); alt != "" { - // Don't mark package syscall as deprecated, even though - // it is. A lot of people still use it for simple - // constants like SIGKILL, and I am not comfortable - // telling them to use x/sys for that. - if pass.Pkg.Path() != "syscall" { - pass.ExportPackageFact(&IsDeprecated{alt}) - } - } - - docs = docs[:0] - for _, f := range pass.Files { - fn := func(node ast.Node) bool { - if node == nil { - return true - } - var ret bool - switch node := node.(type) { - case *ast.GenDecl: - switch node.Tok { - case token.TYPE, token.CONST, token.VAR: - docs = append(docs, node.Doc) - return true - default: - return false - } - case *ast.FuncDecl: - docs = append(docs, node.Doc) - names = []*ast.Ident{node.Name} - ret = false - case *ast.TypeSpec: - docs = append(docs, node.Doc) - names = []*ast.Ident{node.Name} - ret = true - case *ast.ValueSpec: - docs = append(docs, node.Doc) - names = node.Names - ret = false - case *ast.File: - return true - case *ast.StructType: - for _, field := range node.Fields.List { - doDocs(field.Names, []*ast.CommentGroup{field.Doc}) - } - return false - case *ast.InterfaceType: - for _, field := range node.Methods.List { - doDocs(field.Names, []*ast.CommentGroup{field.Doc}) - } - return false - default: - return false - } - if len(names) == 0 || len(docs) == 0 { - return ret - } - doDocs(names, docs) - - docs = docs[:0] - names = nil - return ret - } - ast.Inspect(f, fn) - } - - out := DeprecatedResult{ - Objects: map[types.Object]*IsDeprecated{}, - Packages: map[*types.Package]*IsDeprecated{}, - } - - for _, fact := range pass.AllObjectFacts() { - out.Objects[fact.Object] = fact.Fact.(*IsDeprecated) - } - for _, fact := range pass.AllPackageFacts() { - out.Packages[fact.Package] = fact.Fact.(*IsDeprecated) - } - - return out, nil -} diff --git a/vendor/honnef.co/go/tools/facts/generated.go b/vendor/honnef.co/go/tools/facts/generated.go deleted file mode 100644 index 18cbb49bd9..0000000000 --- a/vendor/honnef.co/go/tools/facts/generated.go +++ /dev/null @@ -1,93 +0,0 @@ -package facts - -import ( - "bufio" - "bytes" - "io" - "os" - "reflect" - "strings" - - "golang.org/x/tools/go/analysis" -) - -type Generator int - -// A list of known generators we can detect -const ( - Unknown Generator = iota - Goyacc - Cgo - Stringer - ProtocGenGo -) - -var ( - // used by cgo before Go 1.11 - oldCgo = []byte("// Created by cgo - DO NOT EDIT") - prefix = []byte("// Code generated ") - suffix = []byte(" DO NOT EDIT.") - nl = []byte("\n") - crnl = []byte("\r\n") -) - -func isGenerated(path string) (Generator, bool) { - f, err := os.Open(path) - if err != nil { - return 0, false - } - defer f.Close() - br := bufio.NewReader(f) - for { - s, err := br.ReadBytes('\n') - if err != nil && err != io.EOF { - return 0, false - } - s = bytes.TrimSuffix(s, crnl) - s = bytes.TrimSuffix(s, nl) - if bytes.HasPrefix(s, prefix) && bytes.HasSuffix(s, suffix) { - text := string(s[len(prefix) : len(s)-len(suffix)]) - switch text { - case "by goyacc.": - return Goyacc, true - case "by cmd/cgo;": - return Cgo, true - case "by protoc-gen-go.": - return ProtocGenGo, true - } - if strings.HasPrefix(text, `by "stringer `) { - return Stringer, true - } - if strings.HasPrefix(text, `by goyacc `) { - return Goyacc, true - } - - return Unknown, true - } - if bytes.Equal(s, oldCgo) { - return Cgo, true - } - if err == io.EOF { - break - } - } - return 0, false -} - -var Generated = &analysis.Analyzer{ - Name: "isgenerated", - Doc: "annotate file names that have been code generated", - Run: func(pass *analysis.Pass) (interface{}, error) { - m := map[string]Generator{} - for _, f := range pass.Files { - path := pass.Fset.PositionFor(f.Pos(), false).Filename - g, ok := isGenerated(path) - if ok { - m[path] = g - } - } - return m, nil - }, - RunDespiteErrors: true, - ResultType: reflect.TypeOf(map[string]Generator{}), -} diff --git a/vendor/honnef.co/go/tools/facts/purity.go b/vendor/honnef.co/go/tools/facts/purity.go deleted file mode 100644 index 099ee23e3b..0000000000 --- a/vendor/honnef.co/go/tools/facts/purity.go +++ /dev/null @@ -1,177 +0,0 @@ -package facts - -import ( - "go/types" - "reflect" - - "golang.org/x/tools/go/analysis" - "honnef.co/go/tools/functions" - "honnef.co/go/tools/internal/passes/buildir" - "honnef.co/go/tools/ir" -) - -type IsPure struct{} - -func (*IsPure) AFact() {} -func (d *IsPure) String() string { return "is pure" } - -type PurityResult map[*types.Func]*IsPure - -var Purity = &analysis.Analyzer{ - Name: "fact_purity", - Doc: "Mark pure functions", - Run: purity, - Requires: []*analysis.Analyzer{buildir.Analyzer}, - FactTypes: []analysis.Fact{(*IsPure)(nil)}, - ResultType: reflect.TypeOf(PurityResult{}), -} - -var pureStdlib = map[string]struct{}{ - "errors.New": {}, - "fmt.Errorf": {}, - "fmt.Sprintf": {}, - "fmt.Sprint": {}, - "sort.Reverse": {}, - "strings.Map": {}, - "strings.Repeat": {}, - "strings.Replace": {}, - "strings.Title": {}, - "strings.ToLower": {}, - "strings.ToLowerSpecial": {}, - "strings.ToTitle": {}, - "strings.ToTitleSpecial": {}, - "strings.ToUpper": {}, - "strings.ToUpperSpecial": {}, - "strings.Trim": {}, - "strings.TrimFunc": {}, - "strings.TrimLeft": {}, - "strings.TrimLeftFunc": {}, - "strings.TrimPrefix": {}, - "strings.TrimRight": {}, - "strings.TrimRightFunc": {}, - "strings.TrimSpace": {}, - "strings.TrimSuffix": {}, - "(*net/http.Request).WithContext": {}, -} - -func purity(pass *analysis.Pass) (interface{}, error) { - seen := map[*ir.Function]struct{}{} - irpkg := pass.ResultOf[buildir.Analyzer].(*buildir.IR).Pkg - var check func(fn *ir.Function) (ret bool) - check = func(fn *ir.Function) (ret bool) { - if fn.Object() == nil { - // TODO(dh): support closures - return false - } - if pass.ImportObjectFact(fn.Object(), new(IsPure)) { - return true - } - if fn.Pkg != irpkg { - // Function is in another package but wasn't marked as - // pure, ergo it isn't pure - return false - } - // Break recursion - if _, ok := seen[fn]; ok { - return false - } - - seen[fn] = struct{}{} - defer func() { - if ret { - pass.ExportObjectFact(fn.Object(), &IsPure{}) - } - }() - - if functions.IsStub(fn) { - return false - } - - if _, ok := pureStdlib[fn.Object().(*types.Func).FullName()]; ok { - return true - } - - if fn.Signature.Results().Len() == 0 { - // A function with no return values is empty or is doing some - // work we cannot see (for example because of build tags); - // don't consider it pure. - return false - } - - for _, param := range fn.Params { - // TODO(dh): this may not be strictly correct. pure code - // can, to an extent, operate on non-basic types. - if _, ok := param.Type().Underlying().(*types.Basic); !ok { - return false - } - } - - // Don't consider external functions pure. - if fn.Blocks == nil { - return false - } - checkCall := func(common *ir.CallCommon) bool { - if common.IsInvoke() { - return false - } - builtin, ok := common.Value.(*ir.Builtin) - if !ok { - if common.StaticCallee() != fn { - if common.StaticCallee() == nil { - return false - } - if !check(common.StaticCallee()) { - return false - } - } - } else { - switch builtin.Name() { - case "len", "cap": - default: - return false - } - } - return true - } - for _, b := range fn.Blocks { - for _, ins := range b.Instrs { - switch ins := ins.(type) { - case *ir.Call: - if !checkCall(ins.Common()) { - return false - } - case *ir.Defer: - if !checkCall(&ins.Call) { - return false - } - case *ir.Select: - return false - case *ir.Send: - return false - case *ir.Go: - return false - case *ir.Panic: - return false - case *ir.Store: - return false - case *ir.FieldAddr: - return false - case *ir.Alloc: - return false - case *ir.Load: - return false - } - } - } - return true - } - for _, fn := range pass.ResultOf[buildir.Analyzer].(*buildir.IR).SrcFuncs { - check(fn) - } - - out := PurityResult{} - for _, fact := range pass.AllObjectFacts() { - out[fact.Object.(*types.Func)] = fact.Fact.(*IsPure) - } - return out, nil -} diff --git a/vendor/honnef.co/go/tools/facts/token.go b/vendor/honnef.co/go/tools/facts/token.go deleted file mode 100644 index 26e76ff73d..0000000000 --- a/vendor/honnef.co/go/tools/facts/token.go +++ /dev/null @@ -1,24 +0,0 @@ -package facts - -import ( - "go/ast" - "go/token" - "reflect" - - "golang.org/x/tools/go/analysis" -) - -var TokenFile = &analysis.Analyzer{ - Name: "tokenfileanalyzer", - Doc: "creates a mapping of *token.File to *ast.File", - Run: func(pass *analysis.Pass) (interface{}, error) { - m := map[*token.File]*ast.File{} - for _, af := range pass.Files { - tf := pass.Fset.File(af.Pos()) - m[tf] = af - } - return m, nil - }, - RunDespiteErrors: true, - ResultType: reflect.TypeOf(map[*token.File]*ast.File{}), -} diff --git a/vendor/honnef.co/go/tools/functions/BUILD.bazel b/vendor/honnef.co/go/tools/functions/BUILD.bazel deleted file mode 100644 index 6171f6b576..0000000000 --- a/vendor/honnef.co/go/tools/functions/BUILD.bazel +++ /dev/null @@ -1,14 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "loops.go", - "stub.go", - "terminates.go", - ], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/functions", - importpath = "honnef.co/go/tools/functions", - visibility = ["//visibility:public"], - deps = ["//vendor/honnef.co/go/tools/ir:go_default_library"], -) diff --git a/vendor/honnef.co/go/tools/functions/loops.go b/vendor/honnef.co/go/tools/functions/loops.go deleted file mode 100644 index a8af701008..0000000000 --- a/vendor/honnef.co/go/tools/functions/loops.go +++ /dev/null @@ -1,54 +0,0 @@ -package functions - -import "honnef.co/go/tools/ir" - -type Loop struct{ *ir.BlockSet } - -func FindLoops(fn *ir.Function) []Loop { - if fn.Blocks == nil { - return nil - } - tree := fn.DomPreorder() - var sets []Loop - for _, h := range tree { - for _, n := range h.Preds { - if !h.Dominates(n) { - continue - } - // n is a back-edge to h - // h is the loop header - if n == h { - set := Loop{ir.NewBlockSet(len(fn.Blocks))} - set.Add(n) - sets = append(sets, set) - continue - } - set := Loop{ir.NewBlockSet(len(fn.Blocks))} - set.Add(h) - set.Add(n) - for _, b := range allPredsBut(n, h, nil) { - set.Add(b) - } - sets = append(sets, set) - } - } - return sets -} - -func allPredsBut(b, but *ir.BasicBlock, list []*ir.BasicBlock) []*ir.BasicBlock { -outer: - for _, pred := range b.Preds { - if pred == but { - continue - } - for _, p := range list { - // TODO improve big-o complexity of this function - if pred == p { - continue outer - } - } - list = append(list, pred) - list = allPredsBut(pred, but, list) - } - return list -} diff --git a/vendor/honnef.co/go/tools/functions/stub.go b/vendor/honnef.co/go/tools/functions/stub.go deleted file mode 100644 index 4d5de10b85..0000000000 --- a/vendor/honnef.co/go/tools/functions/stub.go +++ /dev/null @@ -1,32 +0,0 @@ -package functions - -import ( - "honnef.co/go/tools/ir" -) - -// IsStub reports whether a function is a stub. A function is -// considered a stub if it has no instructions or if all it does is -// return a constant value. -func IsStub(fn *ir.Function) bool { - for _, b := range fn.Blocks { - for _, instr := range b.Instrs { - switch instr.(type) { - case *ir.Const: - // const naturally has no side-effects - case *ir.Panic: - // panic is a stub if it only uses constants - case *ir.Return: - // return is a stub if it only uses constants - case *ir.DebugRef: - case *ir.Jump: - // if there are no disallowed instructions, then we're - // only jumping to the exit block (or possibly - // somewhere else that's stubby?) - default: - // all other instructions are assumed to do actual work - return false - } - } - } - return true -} diff --git a/vendor/honnef.co/go/tools/functions/terminates.go b/vendor/honnef.co/go/tools/functions/terminates.go deleted file mode 100644 index c4984673f6..0000000000 --- a/vendor/honnef.co/go/tools/functions/terminates.go +++ /dev/null @@ -1,70 +0,0 @@ -package functions - -import ( - "go/types" - - "honnef.co/go/tools/ir" -) - -// Terminates reports whether fn is supposed to return, that is if it -// has at least one theoretic path that returns from the function. -// Explicit panics do not count as terminating. -func Terminates(fn *ir.Function) bool { - if fn.Blocks == nil { - // assuming that a function terminates is the conservative - // choice - return true - } - - for _, block := range fn.Blocks { - if _, ok := block.Control().(*ir.Return); ok { - if len(block.Preds) == 0 { - return true - } - for _, pred := range block.Preds { - switch ctrl := pred.Control().(type) { - case *ir.Panic: - // explicit panics do not count as terminating - case *ir.If: - // Check if we got here by receiving from a closed - // time.Tick channel – this cannot happen at - // runtime and thus doesn't constitute termination - iff := ctrl - if !ok { - return true - } - ex, ok := iff.Cond.(*ir.Extract) - if !ok { - return true - } - if ex.Index != 1 { - return true - } - recv, ok := ex.Tuple.(*ir.Recv) - if !ok { - return true - } - call, ok := recv.Chan.(*ir.Call) - if !ok { - return true - } - fn, ok := call.Common().Value.(*ir.Function) - if !ok { - return true - } - fn2, ok := fn.Object().(*types.Func) - if !ok { - return true - } - if fn2.FullName() != "time.Tick" { - return true - } - default: - // we've reached the exit block - return true - } - } - } - } - return false -} diff --git a/vendor/honnef.co/go/tools/go/types/typeutil/BUILD.bazel b/vendor/honnef.co/go/tools/go/types/typeutil/BUILD.bazel deleted file mode 100644 index 4e5f89037f..0000000000 --- a/vendor/honnef.co/go/tools/go/types/typeutil/BUILD.bazel +++ /dev/null @@ -1,17 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "callee.go", - "identical.go", - "imports.go", - "map.go", - "methodsetcache.go", - "ui.go", - ], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/go/types/typeutil", - importpath = "honnef.co/go/tools/go/types/typeutil", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/tools/go/ast/astutil:go_default_library"], -) diff --git a/vendor/honnef.co/go/tools/go/types/typeutil/callee.go b/vendor/honnef.co/go/tools/go/types/typeutil/callee.go deleted file mode 100644 index 38f596daf9..0000000000 --- a/vendor/honnef.co/go/tools/go/types/typeutil/callee.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package typeutil - -import ( - "go/ast" - "go/types" - - "golang.org/x/tools/go/ast/astutil" -) - -// Callee returns the named target of a function call, if any: -// a function, method, builtin, or variable. -func Callee(info *types.Info, call *ast.CallExpr) types.Object { - var obj types.Object - switch fun := astutil.Unparen(call.Fun).(type) { - case *ast.Ident: - obj = info.Uses[fun] // type, var, builtin, or declared func - case *ast.SelectorExpr: - if sel, ok := info.Selections[fun]; ok { - obj = sel.Obj() // method or field - } else { - obj = info.Uses[fun.Sel] // qualified identifier? - } - } - if _, ok := obj.(*types.TypeName); ok { - return nil // T(x) is a conversion, not a call - } - return obj -} - -// StaticCallee returns the target (function or method) of a static -// function call, if any. It returns nil for calls to builtins. -func StaticCallee(info *types.Info, call *ast.CallExpr) *types.Func { - if f, ok := Callee(info, call).(*types.Func); ok && !interfaceMethod(f) { - return f - } - return nil -} - -func interfaceMethod(f *types.Func) bool { - recv := f.Type().(*types.Signature).Recv() - return recv != nil && types.IsInterface(recv.Type()) -} diff --git a/vendor/honnef.co/go/tools/go/types/typeutil/identical.go b/vendor/honnef.co/go/tools/go/types/typeutil/identical.go deleted file mode 100644 index c0ca441c32..0000000000 --- a/vendor/honnef.co/go/tools/go/types/typeutil/identical.go +++ /dev/null @@ -1,75 +0,0 @@ -package typeutil - -import ( - "go/types" -) - -// Identical reports whether x and y are identical types. -// Unlike types.Identical, receivers of Signature types are not ignored. -// Unlike types.Identical, interfaces are compared via pointer equality (except for the empty interface, which gets deduplicated). -// Unlike types.Identical, structs are compared via pointer equality. -func Identical(x, y types.Type) (ret bool) { - if !types.Identical(x, y) { - return false - } - - switch x := x.(type) { - case *types.Struct: - y, ok := y.(*types.Struct) - if !ok { - // should be impossible - return true - } - return x == y - case *types.Interface: - // The issue with interfaces, typeutil.Map and types.Identical - // - // types.Identical, when comparing two interfaces, only looks at the set - // of all methods, not differentiating between implicit (embedded) and - // explicit methods. - // - // When we see the following two types, in source order - // - // type I1 interface { foo() } - // type I2 interface { I1 } - // - // then we will first correctly process I1 and its underlying type. When - // we get to I2, we will see that its underlying type is identical to - // that of I1 and not process it again. This, however, means that we will - // not record the fact that I2 embeds I1. If only I2 is reachable via the - // graph root, then I1 will not be considered used. - // - // We choose to be lazy and compare interfaces by their - // pointers. This will obviously miss identical interfaces, - // but this only has a runtime cost, it doesn't affect - // correctness. - y, ok := y.(*types.Interface) - if !ok { - // should be impossible - return true - } - if x.NumEmbeddeds() == 0 && - y.NumEmbeddeds() == 0 && - x.NumMethods() == 0 && - y.NumMethods() == 0 { - // all truly empty interfaces are the same - return true - } - return x == y - case *types.Signature: - y, ok := y.(*types.Signature) - if !ok { - // should be impossible - return true - } - if x.Recv() == y.Recv() { - return true - } - if x.Recv() == nil || y.Recv() == nil { - return false - } - return Identical(x.Recv().Type(), y.Recv().Type()) - default: - return true - } -} diff --git a/vendor/honnef.co/go/tools/go/types/typeutil/imports.go b/vendor/honnef.co/go/tools/go/types/typeutil/imports.go deleted file mode 100644 index 9c441dba9c..0000000000 --- a/vendor/honnef.co/go/tools/go/types/typeutil/imports.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package typeutil - -import "go/types" - -// Dependencies returns all dependencies of the specified packages. -// -// Dependent packages appear in topological order: if package P imports -// package Q, Q appears earlier than P in the result. -// The algorithm follows import statements in the order they -// appear in the source code, so the result is a total order. -// -func Dependencies(pkgs ...*types.Package) []*types.Package { - var result []*types.Package - seen := make(map[*types.Package]bool) - var visit func(pkgs []*types.Package) - visit = func(pkgs []*types.Package) { - for _, p := range pkgs { - if !seen[p] { - seen[p] = true - visit(p.Imports()) - result = append(result, p) - } - } - } - visit(pkgs) - return result -} diff --git a/vendor/honnef.co/go/tools/go/types/typeutil/map.go b/vendor/honnef.co/go/tools/go/types/typeutil/map.go deleted file mode 100644 index f929353ccb..0000000000 --- a/vendor/honnef.co/go/tools/go/types/typeutil/map.go +++ /dev/null @@ -1,319 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package typeutil defines various utilities for types, such as Map, -// a mapping from types.Type to interface{} values. -package typeutil - -import ( - "bytes" - "fmt" - "go/types" - "reflect" -) - -// Map is a hash-table-based mapping from types (types.Type) to -// arbitrary interface{} values. The concrete types that implement -// the Type interface are pointers. Since they are not canonicalized, -// == cannot be used to check for equivalence, and thus we cannot -// simply use a Go map. -// -// Just as with map[K]V, a nil *Map is a valid empty map. -// -// Not thread-safe. -// -// This fork handles Signatures correctly, respecting method -// receivers. Furthermore, it doesn't deduplicate interfaces or -// structs. Interfaces aren't deduplicated as not to conflate implicit -// and explicit methods. Structs aren't deduplicated because we track -// fields of each type separately. -// -type Map struct { - hasher Hasher // shared by many Maps - table map[uint32][]entry // maps hash to bucket; entry.key==nil means unused - length int // number of map entries -} - -// entry is an entry (key/value association) in a hash bucket. -type entry struct { - key types.Type - value interface{} -} - -// SetHasher sets the hasher used by Map. -// -// All Hashers are functionally equivalent but contain internal state -// used to cache the results of hashing previously seen types. -// -// A single Hasher created by MakeHasher() may be shared among many -// Maps. This is recommended if the instances have many keys in -// common, as it will amortize the cost of hash computation. -// -// A Hasher may grow without bound as new types are seen. Even when a -// type is deleted from the map, the Hasher never shrinks, since other -// types in the map may reference the deleted type indirectly. -// -// Hashers are not thread-safe, and read-only operations such as -// Map.Lookup require updates to the hasher, so a full Mutex lock (not a -// read-lock) is require around all Map operations if a shared -// hasher is accessed from multiple threads. -// -// If SetHasher is not called, the Map will create a private hasher at -// the first call to Insert. -// -func (m *Map) SetHasher(hasher Hasher) { - m.hasher = hasher -} - -// Delete removes the entry with the given key, if any. -// It returns true if the entry was found. -// -func (m *Map) Delete(key types.Type) bool { - if m != nil && m.table != nil { - hash := m.hasher.Hash(key) - bucket := m.table[hash] - for i, e := range bucket { - if e.key != nil && Identical(key, e.key) { - // We can't compact the bucket as it - // would disturb iterators. - bucket[i] = entry{} - m.length-- - return true - } - } - } - return false -} - -// At returns the map entry for the given key. -// The result is nil if the entry is not present. -// -func (m *Map) At(key types.Type) interface{} { - if m != nil && m.table != nil { - for _, e := range m.table[m.hasher.Hash(key)] { - if e.key != nil && Identical(key, e.key) { - return e.value - } - } - } - return nil -} - -// Set sets the map entry for key to val, -// and returns the previous entry, if any. -func (m *Map) Set(key types.Type, value interface{}) (prev interface{}) { - if m.table != nil { - hash := m.hasher.Hash(key) - bucket := m.table[hash] - var hole *entry - for i, e := range bucket { - if e.key == nil { - hole = &bucket[i] - } else if Identical(key, e.key) { - prev = e.value - bucket[i].value = value - return - } - } - - if hole != nil { - *hole = entry{key, value} // overwrite deleted entry - } else { - m.table[hash] = append(bucket, entry{key, value}) - } - } else { - if m.hasher.memo == nil { - m.hasher = MakeHasher() - } - hash := m.hasher.Hash(key) - m.table = map[uint32][]entry{hash: {entry{key, value}}} - } - - m.length++ - return -} - -// Len returns the number of map entries. -func (m *Map) Len() int { - if m != nil { - return m.length - } - return 0 -} - -// Iterate calls function f on each entry in the map in unspecified order. -// -// If f should mutate the map, Iterate provides the same guarantees as -// Go maps: if f deletes a map entry that Iterate has not yet reached, -// f will not be invoked for it, but if f inserts a map entry that -// Iterate has not yet reached, whether or not f will be invoked for -// it is unspecified. -// -func (m *Map) Iterate(f func(key types.Type, value interface{})) { - if m != nil { - for _, bucket := range m.table { - for _, e := range bucket { - if e.key != nil { - f(e.key, e.value) - } - } - } - } -} - -// Keys returns a new slice containing the set of map keys. -// The order is unspecified. -func (m *Map) Keys() []types.Type { - keys := make([]types.Type, 0, m.Len()) - m.Iterate(func(key types.Type, _ interface{}) { - keys = append(keys, key) - }) - return keys -} - -func (m *Map) toString(values bool) string { - if m == nil { - return "{}" - } - var buf bytes.Buffer - fmt.Fprint(&buf, "{") - sep := "" - m.Iterate(func(key types.Type, value interface{}) { - fmt.Fprint(&buf, sep) - sep = ", " - fmt.Fprint(&buf, key) - if values { - fmt.Fprintf(&buf, ": %q", value) - } - }) - fmt.Fprint(&buf, "}") - return buf.String() -} - -// String returns a string representation of the map's entries. -// Values are printed using fmt.Sprintf("%v", v). -// Order is unspecified. -// -func (m *Map) String() string { - return m.toString(true) -} - -// KeysString returns a string representation of the map's key set. -// Order is unspecified. -// -func (m *Map) KeysString() string { - return m.toString(false) -} - -//////////////////////////////////////////////////////////////////////// -// Hasher - -// A Hasher maps each type to its hash value. -// For efficiency, a hasher uses memoization; thus its memory -// footprint grows monotonically over time. -// Hashers are not thread-safe. -// Hashers have reference semantics. -// Call MakeHasher to create a Hasher. -type Hasher struct { - memo map[types.Type]uint32 -} - -// MakeHasher returns a new Hasher instance. -func MakeHasher() Hasher { - return Hasher{make(map[types.Type]uint32)} -} - -// Hash computes a hash value for the given type t such that -// Identical(t, t') => Hash(t) == Hash(t'). -func (h Hasher) Hash(t types.Type) uint32 { - hash, ok := h.memo[t] - if !ok { - hash = h.hashFor(t) - h.memo[t] = hash - } - return hash -} - -// hashString computes the Fowler–Noll–Vo hash of s. -func hashString(s string) uint32 { - var h uint32 - for i := 0; i < len(s); i++ { - h ^= uint32(s[i]) - h *= 16777619 - } - return h -} - -// hashFor computes the hash of t. -func (h Hasher) hashFor(t types.Type) uint32 { - // See Identical for rationale. - switch t := t.(type) { - case *types.Basic: - return uint32(t.Kind()) - - case *types.Array: - return 9043 + 2*uint32(t.Len()) + 3*h.Hash(t.Elem()) - - case *types.Slice: - return 9049 + 2*h.Hash(t.Elem()) - - case *types.Struct: - var hash uint32 = 9059 - for i, n := 0, t.NumFields(); i < n; i++ { - f := t.Field(i) - if f.Anonymous() { - hash += 8861 - } - hash += hashString(t.Tag(i)) - hash += hashString(f.Name()) // (ignore f.Pkg) - hash += h.Hash(f.Type()) - } - return hash - - case *types.Pointer: - return 9067 + 2*h.Hash(t.Elem()) - - case *types.Signature: - var hash uint32 = 9091 - if t.Variadic() { - hash *= 8863 - } - return hash + 3*h.hashTuple(t.Params()) + 5*h.hashTuple(t.Results()) - - case *types.Interface: - var hash uint32 = 9103 - for i, n := 0, t.NumMethods(); i < n; i++ { - // See go/types.identicalMethods for rationale. - // Method order is not significant. - // Ignore m.Pkg(). - m := t.Method(i) - hash += 3*hashString(m.Name()) + 5*h.Hash(m.Type()) - } - return hash - - case *types.Map: - return 9109 + 2*h.Hash(t.Key()) + 3*h.Hash(t.Elem()) - - case *types.Chan: - return 9127 + 2*uint32(t.Dir()) + 3*h.Hash(t.Elem()) - - case *types.Named: - // Not safe with a copying GC; objects may move. - return uint32(reflect.ValueOf(t.Obj()).Pointer()) - - case *types.Tuple: - return h.hashTuple(t) - } - panic(t) -} - -func (h Hasher) hashTuple(tuple *types.Tuple) uint32 { - // See go/types.identicalTypes for rationale. - n := tuple.Len() - var hash uint32 = 9137 + 2*uint32(n) - for i := 0; i < n; i++ { - hash += 3 * h.Hash(tuple.At(i).Type()) - } - return hash -} diff --git a/vendor/honnef.co/go/tools/go/types/typeutil/methodsetcache.go b/vendor/honnef.co/go/tools/go/types/typeutil/methodsetcache.go deleted file mode 100644 index 32084610f4..0000000000 --- a/vendor/honnef.co/go/tools/go/types/typeutil/methodsetcache.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// This file implements a cache of method sets. - -package typeutil - -import ( - "go/types" - "sync" -) - -// A MethodSetCache records the method set of each type T for which -// MethodSet(T) is called so that repeat queries are fast. -// The zero value is a ready-to-use cache instance. -type MethodSetCache struct { - mu sync.Mutex - named map[*types.Named]struct{ value, pointer *types.MethodSet } // method sets for named N and *N - others map[types.Type]*types.MethodSet // all other types -} - -// MethodSet returns the method set of type T. It is thread-safe. -// -// If cache is nil, this function is equivalent to types.NewMethodSet(T). -// Utility functions can thus expose an optional *MethodSetCache -// parameter to clients that care about performance. -// -func (cache *MethodSetCache) MethodSet(T types.Type) *types.MethodSet { - if cache == nil { - return types.NewMethodSet(T) - } - cache.mu.Lock() - defer cache.mu.Unlock() - - switch T := T.(type) { - case *types.Named: - return cache.lookupNamed(T).value - - case *types.Pointer: - if N, ok := T.Elem().(*types.Named); ok { - return cache.lookupNamed(N).pointer - } - } - - // all other types - // (The map uses pointer equivalence, not type identity.) - mset := cache.others[T] - if mset == nil { - mset = types.NewMethodSet(T) - if cache.others == nil { - cache.others = make(map[types.Type]*types.MethodSet) - } - cache.others[T] = mset - } - return mset -} - -func (cache *MethodSetCache) lookupNamed(named *types.Named) struct{ value, pointer *types.MethodSet } { - if cache.named == nil { - cache.named = make(map[*types.Named]struct{ value, pointer *types.MethodSet }) - } - // Avoid recomputing mset(*T) for each distinct Pointer - // instance whose underlying type is a named type. - msets, ok := cache.named[named] - if !ok { - msets.value = types.NewMethodSet(named) - msets.pointer = types.NewMethodSet(types.NewPointer(named)) - cache.named[named] = msets - } - return msets -} diff --git a/vendor/honnef.co/go/tools/go/types/typeutil/ui.go b/vendor/honnef.co/go/tools/go/types/typeutil/ui.go deleted file mode 100644 index 9849c24cef..0000000000 --- a/vendor/honnef.co/go/tools/go/types/typeutil/ui.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package typeutil - -// This file defines utilities for user interfaces that display types. - -import "go/types" - -// IntuitiveMethodSet returns the intuitive method set of a type T, -// which is the set of methods you can call on an addressable value of -// that type. -// -// The result always contains MethodSet(T), and is exactly MethodSet(T) -// for interface types and for pointer-to-concrete types. -// For all other concrete types T, the result additionally -// contains each method belonging to *T if there is no identically -// named method on T itself. -// -// This corresponds to user intuition about method sets; -// this function is intended only for user interfaces. -// -// The order of the result is as for types.MethodSet(T). -// -func IntuitiveMethodSet(T types.Type, msets *MethodSetCache) []*types.Selection { - isPointerToConcrete := func(T types.Type) bool { - ptr, ok := T.(*types.Pointer) - return ok && !types.IsInterface(ptr.Elem()) - } - - var result []*types.Selection - mset := msets.MethodSet(T) - if types.IsInterface(T) || isPointerToConcrete(T) { - for i, n := 0, mset.Len(); i < n; i++ { - result = append(result, mset.At(i)) - } - } else { - // T is some other concrete type. - // Report methods of T and *T, preferring those of T. - pmset := msets.MethodSet(types.NewPointer(T)) - for i, n := 0, pmset.Len(); i < n; i++ { - meth := pmset.At(i) - if m := mset.Lookup(meth.Obj().Pkg(), meth.Obj().Name()); m != nil { - meth = m - } - result = append(result, meth) - } - - } - return result -} diff --git a/vendor/honnef.co/go/tools/internal/cache/BUILD.bazel b/vendor/honnef.co/go/tools/internal/cache/BUILD.bazel deleted file mode 100644 index a83c983f50..0000000000 --- a/vendor/honnef.co/go/tools/internal/cache/BUILD.bazel +++ /dev/null @@ -1,14 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cache.go", - "default.go", - "hash.go", - ], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/internal/cache", - importpath = "honnef.co/go/tools/internal/cache", - visibility = ["//vendor/honnef.co/go/tools:__subpackages__"], - deps = ["//vendor/honnef.co/go/tools/internal/renameio:go_default_library"], -) diff --git a/vendor/honnef.co/go/tools/internal/cache/cache.go b/vendor/honnef.co/go/tools/internal/cache/cache.go deleted file mode 100644 index 6b41811cf2..0000000000 --- a/vendor/honnef.co/go/tools/internal/cache/cache.go +++ /dev/null @@ -1,496 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package cache implements a build artifact cache. -// -// This package is a slightly modified fork of Go's -// cmd/go/internal/cache package. -package cache - -import ( - "bytes" - "crypto/sha256" - "encoding/hex" - "errors" - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" - "strconv" - "strings" - "time" - - "honnef.co/go/tools/internal/renameio" -) - -// An ActionID is a cache action key, the hash of a complete description of a -// repeatable computation (command line, environment variables, -// input file contents, executable contents). -type ActionID [HashSize]byte - -// An OutputID is a cache output key, the hash of an output of a computation. -type OutputID [HashSize]byte - -// A Cache is a package cache, backed by a file system directory tree. -type Cache struct { - dir string - now func() time.Time -} - -// Open opens and returns the cache in the given directory. -// -// It is safe for multiple processes on a single machine to use the -// same cache directory in a local file system simultaneously. -// They will coordinate using operating system file locks and may -// duplicate effort but will not corrupt the cache. -// -// However, it is NOT safe for multiple processes on different machines -// to share a cache directory (for example, if the directory were stored -// in a network file system). File locking is notoriously unreliable in -// network file systems and may not suffice to protect the cache. -// -func Open(dir string) (*Cache, error) { - info, err := os.Stat(dir) - if err != nil { - return nil, err - } - if !info.IsDir() { - return nil, &os.PathError{Op: "open", Path: dir, Err: fmt.Errorf("not a directory")} - } - for i := 0; i < 256; i++ { - name := filepath.Join(dir, fmt.Sprintf("%02x", i)) - if err := os.MkdirAll(name, 0777); err != nil { - return nil, err - } - } - c := &Cache{ - dir: dir, - now: time.Now, - } - return c, nil -} - -// fileName returns the name of the file corresponding to the given id. -func (c *Cache) fileName(id [HashSize]byte, key string) string { - return filepath.Join(c.dir, fmt.Sprintf("%02x", id[0]), fmt.Sprintf("%x", id)+"-"+key) -} - -var errMissing = errors.New("cache entry not found") - -const ( - // action entry file is "v1 \n" - hexSize = HashSize * 2 - entrySize = 2 + 1 + hexSize + 1 + hexSize + 1 + 20 + 1 + 20 + 1 -) - -// verify controls whether to run the cache in verify mode. -// In verify mode, the cache always returns errMissing from Get -// but then double-checks in Put that the data being written -// exactly matches any existing entry. This provides an easy -// way to detect program behavior that would have been different -// had the cache entry been returned from Get. -// -// verify is enabled by setting the environment variable -// GODEBUG=gocacheverify=1. -var verify = false - -// DebugTest is set when GODEBUG=gocachetest=1 is in the environment. -var DebugTest = false - -func init() { initEnv() } - -func initEnv() { - verify = false - debugHash = false - debug := strings.Split(os.Getenv("GODEBUG"), ",") - for _, f := range debug { - if f == "gocacheverify=1" { - verify = true - } - if f == "gocachehash=1" { - debugHash = true - } - if f == "gocachetest=1" { - DebugTest = true - } - } -} - -// Get looks up the action ID in the cache, -// returning the corresponding output ID and file size, if any. -// Note that finding an output ID does not guarantee that the -// saved file for that output ID is still available. -func (c *Cache) Get(id ActionID) (Entry, error) { - if verify { - return Entry{}, errMissing - } - return c.get(id) -} - -type Entry struct { - OutputID OutputID - Size int64 - Time time.Time -} - -// get is Get but does not respect verify mode, so that Put can use it. -func (c *Cache) get(id ActionID) (Entry, error) { - missing := func() (Entry, error) { - return Entry{}, errMissing - } - f, err := os.Open(c.fileName(id, "a")) - if err != nil { - return missing() - } - defer f.Close() - entry := make([]byte, entrySize+1) // +1 to detect whether f is too long - if n, err := io.ReadFull(f, entry); n != entrySize || err != io.ErrUnexpectedEOF { - return missing() - } - if entry[0] != 'v' || entry[1] != '1' || entry[2] != ' ' || entry[3+hexSize] != ' ' || entry[3+hexSize+1+hexSize] != ' ' || entry[3+hexSize+1+hexSize+1+20] != ' ' || entry[entrySize-1] != '\n' { - return missing() - } - eid, entry := entry[3:3+hexSize], entry[3+hexSize:] - eout, entry := entry[1:1+hexSize], entry[1+hexSize:] - esize, entry := entry[1:1+20], entry[1+20:] - //lint:ignore SA4006 See https://github.com/dominikh/go-tools/issues/465 - etime, entry := entry[1:1+20], entry[1+20:] - var buf [HashSize]byte - if _, err := hex.Decode(buf[:], eid); err != nil || buf != id { - return missing() - } - if _, err := hex.Decode(buf[:], eout); err != nil { - return missing() - } - i := 0 - for i < len(esize) && esize[i] == ' ' { - i++ - } - size, err := strconv.ParseInt(string(esize[i:]), 10, 64) - if err != nil || size < 0 { - return missing() - } - i = 0 - for i < len(etime) && etime[i] == ' ' { - i++ - } - tm, err := strconv.ParseInt(string(etime[i:]), 10, 64) - if err != nil || tm < 0 { - return missing() - } - - c.used(c.fileName(id, "a")) - - return Entry{buf, size, time.Unix(0, tm)}, nil -} - -// GetFile looks up the action ID in the cache and returns -// the name of the corresponding data file. -func (c *Cache) GetFile(id ActionID) (file string, entry Entry, err error) { - entry, err = c.Get(id) - if err != nil { - return "", Entry{}, err - } - file = c.OutputFile(entry.OutputID) - info, err := os.Stat(file) - if err != nil || info.Size() != entry.Size { - return "", Entry{}, errMissing - } - return file, entry, nil -} - -// GetBytes looks up the action ID in the cache and returns -// the corresponding output bytes. -// GetBytes should only be used for data that can be expected to fit in memory. -func (c *Cache) GetBytes(id ActionID) ([]byte, Entry, error) { - entry, err := c.Get(id) - if err != nil { - return nil, entry, err - } - data, _ := ioutil.ReadFile(c.OutputFile(entry.OutputID)) - if sha256.Sum256(data) != entry.OutputID { - return nil, entry, errMissing - } - return data, entry, nil -} - -// OutputFile returns the name of the cache file storing output with the given OutputID. -func (c *Cache) OutputFile(out OutputID) string { - file := c.fileName(out, "d") - c.used(file) - return file -} - -// Time constants for cache expiration. -// -// We set the mtime on a cache file on each use, but at most one per mtimeInterval (1 hour), -// to avoid causing many unnecessary inode updates. The mtimes therefore -// roughly reflect "time of last use" but may in fact be older by at most an hour. -// -// We scan the cache for entries to delete at most once per trimInterval (1 day). -// -// When we do scan the cache, we delete entries that have not been used for -// at least trimLimit (5 days). Statistics gathered from a month of usage by -// Go developers found that essentially all reuse of cached entries happened -// within 5 days of the previous reuse. See golang.org/issue/22990. -const ( - mtimeInterval = 1 * time.Hour - trimInterval = 24 * time.Hour - trimLimit = 5 * 24 * time.Hour -) - -// used makes a best-effort attempt to update mtime on file, -// so that mtime reflects cache access time. -// -// Because the reflection only needs to be approximate, -// and to reduce the amount of disk activity caused by using -// cache entries, used only updates the mtime if the current -// mtime is more than an hour old. This heuristic eliminates -// nearly all of the mtime updates that would otherwise happen, -// while still keeping the mtimes useful for cache trimming. -func (c *Cache) used(file string) { - info, err := os.Stat(file) - if err == nil && c.now().Sub(info.ModTime()) < mtimeInterval { - return - } - os.Chtimes(file, c.now(), c.now()) -} - -// Trim removes old cache entries that are likely not to be reused. -func (c *Cache) Trim() { - now := c.now() - - // We maintain in dir/trim.txt the time of the last completed cache trim. - // If the cache has been trimmed recently enough, do nothing. - // This is the common case. - data, _ := renameio.ReadFile(filepath.Join(c.dir, "trim.txt")) - t, err := strconv.ParseInt(strings.TrimSpace(string(data)), 10, 64) - if err == nil && now.Sub(time.Unix(t, 0)) < trimInterval { - return - } - - // Trim each of the 256 subdirectories. - // We subtract an additional mtimeInterval - // to account for the imprecision of our "last used" mtimes. - cutoff := now.Add(-trimLimit - mtimeInterval) - for i := 0; i < 256; i++ { - subdir := filepath.Join(c.dir, fmt.Sprintf("%02x", i)) - c.trimSubdir(subdir, cutoff) - } - - // Ignore errors from here: if we don't write the complete timestamp, the - // cache will appear older than it is, and we'll trim it again next time. - renameio.WriteFile(filepath.Join(c.dir, "trim.txt"), []byte(fmt.Sprintf("%d", now.Unix())), 0666) -} - -// trimSubdir trims a single cache subdirectory. -func (c *Cache) trimSubdir(subdir string, cutoff time.Time) { - // Read all directory entries from subdir before removing - // any files, in case removing files invalidates the file offset - // in the directory scan. Also, ignore error from f.Readdirnames, - // because we don't care about reporting the error and we still - // want to process any entries found before the error. - f, err := os.Open(subdir) - if err != nil { - return - } - names, _ := f.Readdirnames(-1) - f.Close() - - for _, name := range names { - // Remove only cache entries (xxxx-a and xxxx-d). - if !strings.HasSuffix(name, "-a") && !strings.HasSuffix(name, "-d") { - continue - } - entry := filepath.Join(subdir, name) - info, err := os.Stat(entry) - if err == nil && info.ModTime().Before(cutoff) { - os.Remove(entry) - } - } -} - -// putIndexEntry adds an entry to the cache recording that executing the action -// with the given id produces an output with the given output id (hash) and size. -func (c *Cache) putIndexEntry(id ActionID, out OutputID, size int64, allowVerify bool) error { - // Note: We expect that for one reason or another it may happen - // that repeating an action produces a different output hash - // (for example, if the output contains a time stamp or temp dir name). - // While not ideal, this is also not a correctness problem, so we - // don't make a big deal about it. In particular, we leave the action - // cache entries writable specifically so that they can be overwritten. - // - // Setting GODEBUG=gocacheverify=1 does make a big deal: - // in verify mode we are double-checking that the cache entries - // are entirely reproducible. As just noted, this may be unrealistic - // in some cases but the check is also useful for shaking out real bugs. - entry := fmt.Sprintf("v1 %x %x %20d %20d\n", id, out, size, time.Now().UnixNano()) - - if verify && allowVerify { - old, err := c.get(id) - if err == nil && (old.OutputID != out || old.Size != size) { - // panic to show stack trace, so we can see what code is generating this cache entry. - msg := fmt.Sprintf("go: internal cache error: cache verify failed: id=%x changed:<<<\n%s\n>>>\nold: %x %d\nnew: %x %d", id, reverseHash(id), out, size, old.OutputID, old.Size) - panic(msg) - } - } - file := c.fileName(id, "a") - - // Copy file to cache directory. - mode := os.O_WRONLY | os.O_CREATE - f, err := os.OpenFile(file, mode, 0666) - if err != nil { - return err - } - _, err = f.WriteString(entry) - if err == nil { - // Truncate the file only *after* writing it. - // (This should be a no-op, but truncate just in case of previous corruption.) - // - // This differs from ioutil.WriteFile, which truncates to 0 *before* writing - // via os.O_TRUNC. Truncating only after writing ensures that a second write - // of the same content to the same file is idempotent, and does not — even - // temporarily! — undo the effect of the first write. - err = f.Truncate(int64(len(entry))) - } - if closeErr := f.Close(); err == nil { - err = closeErr - } - if err != nil { - // TODO(bcmills): This Remove potentially races with another go command writing to file. - // Can we eliminate it? - os.Remove(file) - return err - } - os.Chtimes(file, c.now(), c.now()) // mainly for tests - - return nil -} - -// Put stores the given output in the cache as the output for the action ID. -// It may read file twice. The content of file must not change between the two passes. -func (c *Cache) Put(id ActionID, file io.ReadSeeker) (OutputID, int64, error) { - return c.put(id, file, true) -} - -// PutNoVerify is like Put but disables the verify check -// when GODEBUG=goverifycache=1 is set. -// It is meant for data that is OK to cache but that we expect to vary slightly from run to run, -// like test output containing times and the like. -func (c *Cache) PutNoVerify(id ActionID, file io.ReadSeeker) (OutputID, int64, error) { - return c.put(id, file, false) -} - -func (c *Cache) put(id ActionID, file io.ReadSeeker, allowVerify bool) (OutputID, int64, error) { - // Compute output ID. - h := sha256.New() - if _, err := file.Seek(0, 0); err != nil { - return OutputID{}, 0, err - } - size, err := io.Copy(h, file) - if err != nil { - return OutputID{}, 0, err - } - var out OutputID - h.Sum(out[:0]) - - // Copy to cached output file (if not already present). - if err := c.copyFile(file, out, size); err != nil { - return out, size, err - } - - // Add to cache index. - return out, size, c.putIndexEntry(id, out, size, allowVerify) -} - -// PutBytes stores the given bytes in the cache as the output for the action ID. -func (c *Cache) PutBytes(id ActionID, data []byte) error { - _, _, err := c.Put(id, bytes.NewReader(data)) - return err -} - -// copyFile copies file into the cache, expecting it to have the given -// output ID and size, if that file is not present already. -func (c *Cache) copyFile(file io.ReadSeeker, out OutputID, size int64) error { - name := c.fileName(out, "d") - info, err := os.Stat(name) - if err == nil && info.Size() == size { - // Check hash. - if f, err := os.Open(name); err == nil { - h := sha256.New() - io.Copy(h, f) - f.Close() - var out2 OutputID - h.Sum(out2[:0]) - if out == out2 { - return nil - } - } - // Hash did not match. Fall through and rewrite file. - } - - // Copy file to cache directory. - mode := os.O_RDWR | os.O_CREATE - if err == nil && info.Size() > size { // shouldn't happen but fix in case - mode |= os.O_TRUNC - } - f, err := os.OpenFile(name, mode, 0666) - if err != nil { - return err - } - defer f.Close() - if size == 0 { - // File now exists with correct size. - // Only one possible zero-length file, so contents are OK too. - // Early return here makes sure there's a "last byte" for code below. - return nil - } - - // From here on, if any of the I/O writing the file fails, - // we make a best-effort attempt to truncate the file f - // before returning, to avoid leaving bad bytes in the file. - - // Copy file to f, but also into h to double-check hash. - if _, err := file.Seek(0, 0); err != nil { - f.Truncate(0) - return err - } - h := sha256.New() - w := io.MultiWriter(f, h) - if _, err := io.CopyN(w, file, size-1); err != nil { - f.Truncate(0) - return err - } - // Check last byte before writing it; writing it will make the size match - // what other processes expect to find and might cause them to start - // using the file. - buf := make([]byte, 1) - if _, err := file.Read(buf); err != nil { - f.Truncate(0) - return err - } - h.Write(buf) - sum := h.Sum(nil) - if !bytes.Equal(sum, out[:]) { - f.Truncate(0) - return fmt.Errorf("file content changed underfoot") - } - - // Commit cache file entry. - if _, err := f.Write(buf); err != nil { - f.Truncate(0) - return err - } - if err := f.Close(); err != nil { - // Data might not have been written, - // but file may look like it is the right size. - // To be extra careful, remove cached file. - os.Remove(name) - return err - } - os.Chtimes(name, c.now(), c.now()) // mainly for tests - - return nil -} diff --git a/vendor/honnef.co/go/tools/internal/cache/default.go b/vendor/honnef.co/go/tools/internal/cache/default.go deleted file mode 100644 index 3034f76a53..0000000000 --- a/vendor/honnef.co/go/tools/internal/cache/default.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cache - -import ( - "fmt" - "io/ioutil" - "log" - "os" - "path/filepath" - "sync" -) - -// Default returns the default cache to use. -func Default() (*Cache, error) { - defaultOnce.Do(initDefaultCache) - return defaultCache, defaultDirErr -} - -var ( - defaultOnce sync.Once - defaultCache *Cache -) - -// cacheREADME is a message stored in a README in the cache directory. -// Because the cache lives outside the normal Go trees, we leave the -// README as a courtesy to explain where it came from. -const cacheREADME = `This directory holds cached build artifacts from staticcheck. -` - -// initDefaultCache does the work of finding the default cache -// the first time Default is called. -func initDefaultCache() { - dir := DefaultDir() - if err := os.MkdirAll(dir, 0777); err != nil { - log.Fatalf("failed to initialize build cache at %s: %s\n", dir, err) - } - if _, err := os.Stat(filepath.Join(dir, "README")); err != nil { - // Best effort. - ioutil.WriteFile(filepath.Join(dir, "README"), []byte(cacheREADME), 0666) - } - - c, err := Open(dir) - if err != nil { - log.Fatalf("failed to initialize build cache at %s: %s\n", dir, err) - } - defaultCache = c -} - -var ( - defaultDirOnce sync.Once - defaultDir string - defaultDirErr error -) - -// DefaultDir returns the effective STATICCHECK_CACHE setting. -func DefaultDir() string { - // Save the result of the first call to DefaultDir for later use in - // initDefaultCache. cmd/go/main.go explicitly sets GOCACHE so that - // subprocesses will inherit it, but that means initDefaultCache can't - // otherwise distinguish between an explicit "off" and a UserCacheDir error. - - defaultDirOnce.Do(func() { - defaultDir = os.Getenv("STATICCHECK_CACHE") - if filepath.IsAbs(defaultDir) { - return - } - if defaultDir != "" { - defaultDirErr = fmt.Errorf("STATICCHECK_CACHE is not an absolute path") - return - } - - // Compute default location. - dir, err := os.UserCacheDir() - if err != nil { - defaultDirErr = fmt.Errorf("STATICCHECK_CACHE is not defined and %v", err) - return - } - defaultDir = filepath.Join(dir, "staticcheck") - }) - - return defaultDir -} diff --git a/vendor/honnef.co/go/tools/internal/cache/hash.go b/vendor/honnef.co/go/tools/internal/cache/hash.go deleted file mode 100644 index a53543ec50..0000000000 --- a/vendor/honnef.co/go/tools/internal/cache/hash.go +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cache - -import ( - "bytes" - "crypto/sha256" - "fmt" - "hash" - "io" - "os" - "sync" -) - -var debugHash = false // set when GODEBUG=gocachehash=1 - -// HashSize is the number of bytes in a hash. -const HashSize = 32 - -// A Hash provides access to the canonical hash function used to index the cache. -// The current implementation uses salted SHA256, but clients must not assume this. -type Hash struct { - h hash.Hash - name string // for debugging - buf *bytes.Buffer // for verify -} - -// hashSalt is a salt string added to the beginning of every hash -// created by NewHash. Using the Staticcheck version makes sure that different -// versions of the command do not address the same cache -// entries, so that a bug in one version does not affect the execution -// of other versions. This salt will result in additional ActionID files -// in the cache, but not additional copies of the large output files, -// which are still addressed by unsalted SHA256. -var hashSalt []byte - -func SetSalt(b []byte) { - hashSalt = b -} - -// Subkey returns an action ID corresponding to mixing a parent -// action ID with a string description of the subkey. -func Subkey(parent ActionID, desc string) ActionID { - h := sha256.New() - h.Write([]byte("subkey:")) - h.Write(parent[:]) - h.Write([]byte(desc)) - var out ActionID - h.Sum(out[:0]) - if debugHash { - fmt.Fprintf(os.Stderr, "HASH subkey %x %q = %x\n", parent, desc, out) - } - if verify { - hashDebug.Lock() - hashDebug.m[out] = fmt.Sprintf("subkey %x %q", parent, desc) - hashDebug.Unlock() - } - return out -} - -// NewHash returns a new Hash. -// The caller is expected to Write data to it and then call Sum. -func NewHash(name string) *Hash { - h := &Hash{h: sha256.New(), name: name} - if debugHash { - fmt.Fprintf(os.Stderr, "HASH[%s]\n", h.name) - } - h.Write(hashSalt) - if verify { - h.buf = new(bytes.Buffer) - } - return h -} - -// Write writes data to the running hash. -func (h *Hash) Write(b []byte) (int, error) { - if debugHash { - fmt.Fprintf(os.Stderr, "HASH[%s]: %q\n", h.name, b) - } - if h.buf != nil { - h.buf.Write(b) - } - return h.h.Write(b) -} - -// Sum returns the hash of the data written previously. -func (h *Hash) Sum() [HashSize]byte { - var out [HashSize]byte - h.h.Sum(out[:0]) - if debugHash { - fmt.Fprintf(os.Stderr, "HASH[%s]: %x\n", h.name, out) - } - if h.buf != nil { - hashDebug.Lock() - if hashDebug.m == nil { - hashDebug.m = make(map[[HashSize]byte]string) - } - hashDebug.m[out] = h.buf.String() - hashDebug.Unlock() - } - return out -} - -// In GODEBUG=gocacheverify=1 mode, -// hashDebug holds the input to every computed hash ID, -// so that we can work backward from the ID involved in a -// cache entry mismatch to a description of what should be there. -var hashDebug struct { - sync.Mutex - m map[[HashSize]byte]string -} - -// reverseHash returns the input used to compute the hash id. -func reverseHash(id [HashSize]byte) string { - hashDebug.Lock() - s := hashDebug.m[id] - hashDebug.Unlock() - return s -} - -var hashFileCache struct { - sync.Mutex - m map[string][HashSize]byte -} - -// FileHash returns the hash of the named file. -// It caches repeated lookups for a given file, -// and the cache entry for a file can be initialized -// using SetFileHash. -// The hash used by FileHash is not the same as -// the hash used by NewHash. -func FileHash(file string) ([HashSize]byte, error) { - hashFileCache.Lock() - out, ok := hashFileCache.m[file] - hashFileCache.Unlock() - - if ok { - return out, nil - } - - h := sha256.New() - f, err := os.Open(file) - if err != nil { - if debugHash { - fmt.Fprintf(os.Stderr, "HASH %s: %v\n", file, err) - } - return [HashSize]byte{}, err - } - _, err = io.Copy(h, f) - f.Close() - if err != nil { - if debugHash { - fmt.Fprintf(os.Stderr, "HASH %s: %v\n", file, err) - } - return [HashSize]byte{}, err - } - h.Sum(out[:0]) - if debugHash { - fmt.Fprintf(os.Stderr, "HASH %s: %x\n", file, out) - } - - SetFileHash(file, out) - return out, nil -} - -// SetFileHash sets the hash returned by FileHash for file. -func SetFileHash(file string, sum [HashSize]byte) { - hashFileCache.Lock() - if hashFileCache.m == nil { - hashFileCache.m = make(map[string][HashSize]byte) - } - hashFileCache.m[file] = sum - hashFileCache.Unlock() -} diff --git a/vendor/honnef.co/go/tools/internal/passes/buildir/BUILD.bazel b/vendor/honnef.co/go/tools/internal/passes/buildir/BUILD.bazel deleted file mode 100644 index 9426d93af0..0000000000 --- a/vendor/honnef.co/go/tools/internal/passes/buildir/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["buildir.go"], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/internal/passes/buildir", - importpath = "honnef.co/go/tools/internal/passes/buildir", - visibility = ["//vendor/honnef.co/go/tools:__subpackages__"], - deps = [ - "//vendor/golang.org/x/tools/go/analysis:go_default_library", - "//vendor/honnef.co/go/tools/ir:go_default_library", - ], -) diff --git a/vendor/honnef.co/go/tools/internal/passes/buildir/buildir.go b/vendor/honnef.co/go/tools/internal/passes/buildir/buildir.go deleted file mode 100644 index 3946977024..0000000000 --- a/vendor/honnef.co/go/tools/internal/passes/buildir/buildir.go +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package buildir defines an Analyzer that constructs the IR -// of an error-free package and returns the set of all -// functions within it. It does not report any diagnostics itself but -// may be used as an input to other analyzers. -// -// THIS INTERFACE IS EXPERIMENTAL AND MAY BE SUBJECT TO INCOMPATIBLE CHANGE. -package buildir - -import ( - "go/ast" - "go/types" - "reflect" - - "golang.org/x/tools/go/analysis" - "honnef.co/go/tools/ir" -) - -type willExit struct{} -type willUnwind struct{} - -func (*willExit) AFact() {} -func (*willUnwind) AFact() {} - -var Analyzer = &analysis.Analyzer{ - Name: "buildir", - Doc: "build IR for later passes", - Run: run, - ResultType: reflect.TypeOf(new(IR)), - FactTypes: []analysis.Fact{new(willExit), new(willUnwind)}, -} - -// IR provides intermediate representation for all the -// non-blank source functions in the current package. -type IR struct { - Pkg *ir.Package - SrcFuncs []*ir.Function -} - -func run(pass *analysis.Pass) (interface{}, error) { - // Plundered from ssautil.BuildPackage. - - // We must create a new Program for each Package because the - // analysis API provides no place to hang a Program shared by - // all Packages. Consequently, IR Packages and Functions do not - // have a canonical representation across an analysis session of - // multiple packages. This is unlikely to be a problem in - // practice because the analysis API essentially forces all - // packages to be analysed independently, so any given call to - // Analysis.Run on a package will see only IR objects belonging - // to a single Program. - - mode := ir.GlobalDebug - - prog := ir.NewProgram(pass.Fset, mode) - - // Create IR packages for all imports. - // Order is not significant. - created := make(map[*types.Package]bool) - var createAll func(pkgs []*types.Package) - createAll = func(pkgs []*types.Package) { - for _, p := range pkgs { - if !created[p] { - created[p] = true - irpkg := prog.CreatePackage(p, nil, nil, true) - for _, fn := range irpkg.Functions { - if ast.IsExported(fn.Name()) { - var exit willExit - var unwind willUnwind - if pass.ImportObjectFact(fn.Object(), &exit) { - fn.WillExit = true - } - if pass.ImportObjectFact(fn.Object(), &unwind) { - fn.WillUnwind = true - } - } - } - createAll(p.Imports()) - } - } - } - createAll(pass.Pkg.Imports()) - - // Create and build the primary package. - irpkg := prog.CreatePackage(pass.Pkg, pass.Files, pass.TypesInfo, false) - irpkg.Build() - - // Compute list of source functions, including literals, - // in source order. - var addAnons func(f *ir.Function) - funcs := make([]*ir.Function, len(irpkg.Functions)) - copy(funcs, irpkg.Functions) - addAnons = func(f *ir.Function) { - for _, anon := range f.AnonFuncs { - funcs = append(funcs, anon) - addAnons(anon) - } - } - for _, fn := range irpkg.Functions { - addAnons(fn) - if fn.WillExit { - pass.ExportObjectFact(fn.Object(), new(willExit)) - } - if fn.WillUnwind { - pass.ExportObjectFact(fn.Object(), new(willUnwind)) - } - } - - return &IR{Pkg: irpkg, SrcFuncs: funcs}, nil -} diff --git a/vendor/honnef.co/go/tools/internal/renameio/BUILD.bazel b/vendor/honnef.co/go/tools/internal/renameio/BUILD.bazel deleted file mode 100644 index 9f65e6d768..0000000000 --- a/vendor/honnef.co/go/tools/internal/renameio/BUILD.bazel +++ /dev/null @@ -1,10 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["renameio.go"], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/internal/renameio", - importpath = "honnef.co/go/tools/internal/renameio", - visibility = ["//vendor/honnef.co/go/tools:__subpackages__"], - deps = ["//vendor/honnef.co/go/tools/internal/robustio:go_default_library"], -) diff --git a/vendor/honnef.co/go/tools/internal/renameio/renameio.go b/vendor/honnef.co/go/tools/internal/renameio/renameio.go deleted file mode 100644 index a279d1a1eb..0000000000 --- a/vendor/honnef.co/go/tools/internal/renameio/renameio.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package renameio writes files atomically by renaming temporary files. -package renameio - -import ( - "bytes" - "io" - "math/rand" - "os" - "path/filepath" - "strconv" - - "honnef.co/go/tools/internal/robustio" -) - -const patternSuffix = ".tmp" - -// Pattern returns a glob pattern that matches the unrenamed temporary files -// created when writing to filename. -func Pattern(filename string) string { - return filepath.Join(filepath.Dir(filename), filepath.Base(filename)+patternSuffix) -} - -// WriteFile is like ioutil.WriteFile, but first writes data to an arbitrary -// file in the same directory as filename, then renames it atomically to the -// final name. -// -// That ensures that the final location, if it exists, is always a complete file. -func WriteFile(filename string, data []byte, perm os.FileMode) (err error) { - return WriteToFile(filename, bytes.NewReader(data), perm) -} - -// WriteToFile is a variant of WriteFile that accepts the data as an io.Reader -// instead of a slice. -func WriteToFile(filename string, data io.Reader, perm os.FileMode) (err error) { - f, err := tempFile(filepath.Dir(filename), filepath.Base(filename), perm) - if err != nil { - return err - } - defer func() { - // Only call os.Remove on f.Name() if we failed to rename it: otherwise, - // some other process may have created a new file with the same name after - // that. - if err != nil { - f.Close() - os.Remove(f.Name()) - } - }() - - if _, err := io.Copy(f, data); err != nil { - return err - } - // Sync the file before renaming it: otherwise, after a crash the reader may - // observe a 0-length file instead of the actual contents. - // See https://golang.org/issue/22397#issuecomment-380831736. - if err := f.Sync(); err != nil { - return err - } - if err := f.Close(); err != nil { - return err - } - - return robustio.Rename(f.Name(), filename) -} - -// tempFile creates a new temporary file with given permission bits. -func tempFile(dir, prefix string, perm os.FileMode) (f *os.File, err error) { - for i := 0; i < 10000; i++ { - name := filepath.Join(dir, prefix+strconv.Itoa(rand.Intn(1000000000))+patternSuffix) - f, err = os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, perm) - if os.IsExist(err) { - continue - } - break - } - return -} - -// ReadFile is like ioutil.ReadFile, but on Windows retries spurious errors that -// may occur if the file is concurrently replaced. -// -// Errors are classified heuristically and retries are bounded, so even this -// function may occasionally return a spurious error on Windows. -// If so, the error will likely wrap one of: -// - syscall.ERROR_ACCESS_DENIED -// - syscall.ERROR_FILE_NOT_FOUND -// - internal/syscall/windows.ERROR_SHARING_VIOLATION -func ReadFile(filename string) ([]byte, error) { - return robustio.ReadFile(filename) -} diff --git a/vendor/honnef.co/go/tools/internal/robustio/BUILD.bazel b/vendor/honnef.co/go/tools/internal/robustio/BUILD.bazel deleted file mode 100644 index 91280d7697..0000000000 --- a/vendor/honnef.co/go/tools/internal/robustio/BUILD.bazel +++ /dev/null @@ -1,15 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "robustio.go", - "robustio_darwin.go", - "robustio_flaky.go", - "robustio_other.go", - "robustio_windows.go", - ], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/internal/robustio", - importpath = "honnef.co/go/tools/internal/robustio", - visibility = ["//vendor/honnef.co/go/tools:__subpackages__"], -) diff --git a/vendor/honnef.co/go/tools/internal/robustio/robustio.go b/vendor/honnef.co/go/tools/internal/robustio/robustio.go deleted file mode 100644 index 76e47ad1ff..0000000000 --- a/vendor/honnef.co/go/tools/internal/robustio/robustio.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package robustio wraps I/O functions that are prone to failure on Windows, -// transparently retrying errors up to an arbitrary timeout. -// -// Errors are classified heuristically and retries are bounded, so the functions -// in this package do not completely eliminate spurious errors. However, they do -// significantly reduce the rate of failure in practice. -// -// If so, the error will likely wrap one of: -// The functions in this package do not completely eliminate spurious errors, -// but substantially reduce their rate of occurrence in practice. -package robustio - -// Rename is like os.Rename, but on Windows retries errors that may occur if the -// file is concurrently read or overwritten. -// -// (See golang.org/issue/31247 and golang.org/issue/32188.) -func Rename(oldpath, newpath string) error { - return rename(oldpath, newpath) -} - -// ReadFile is like ioutil.ReadFile, but on Windows retries errors that may -// occur if the file is concurrently replaced. -// -// (See golang.org/issue/31247 and golang.org/issue/32188.) -func ReadFile(filename string) ([]byte, error) { - return readFile(filename) -} - -// RemoveAll is like os.RemoveAll, but on Windows retries errors that may occur -// if an executable file in the directory has recently been executed. -// -// (See golang.org/issue/19491.) -func RemoveAll(path string) error { - return removeAll(path) -} - -// IsEphemeralError reports whether err is one of the errors that the functions -// in this package attempt to mitigate. -// -// Errors considered ephemeral include: -// - syscall.ERROR_ACCESS_DENIED -// - syscall.ERROR_FILE_NOT_FOUND -// - internal/syscall/windows.ERROR_SHARING_VIOLATION -// -// This set may be expanded in the future; programs must not rely on the -// non-ephemerality of any given error. -func IsEphemeralError(err error) bool { - return isEphemeralError(err) -} diff --git a/vendor/honnef.co/go/tools/internal/robustio/robustio_darwin.go b/vendor/honnef.co/go/tools/internal/robustio/robustio_darwin.go deleted file mode 100644 index 1ac0d10d7f..0000000000 --- a/vendor/honnef.co/go/tools/internal/robustio/robustio_darwin.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package robustio - -import ( - "os" - "syscall" -) - -const errFileNotFound = syscall.ENOENT - -// isEphemeralError returns true if err may be resolved by waiting. -func isEphemeralError(err error) bool { - switch werr := err.(type) { - case *os.PathError: - err = werr.Err - case *os.LinkError: - err = werr.Err - case *os.SyscallError: - err = werr.Err - - } - if errno, ok := err.(syscall.Errno); ok { - return errno == errFileNotFound - } - return false -} diff --git a/vendor/honnef.co/go/tools/internal/robustio/robustio_flaky.go b/vendor/honnef.co/go/tools/internal/robustio/robustio_flaky.go deleted file mode 100644 index e0bf5b9b3b..0000000000 --- a/vendor/honnef.co/go/tools/internal/robustio/robustio_flaky.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows darwin - -package robustio - -import ( - "io/ioutil" - "math/rand" - "os" - "syscall" - "time" -) - -const arbitraryTimeout = 500 * time.Millisecond - -const ERROR_SHARING_VIOLATION = 32 - -// retry retries ephemeral errors from f up to an arbitrary timeout -// to work around filesystem flakiness on Windows and Darwin. -func retry(f func() (err error, mayRetry bool)) error { - var ( - bestErr error - lowestErrno syscall.Errno - start time.Time - nextSleep time.Duration = 1 * time.Millisecond - ) - for { - err, mayRetry := f() - if err == nil || !mayRetry { - return err - } - - if errno, ok := err.(syscall.Errno); ok && (lowestErrno == 0 || errno < lowestErrno) { - bestErr = err - lowestErrno = errno - } else if bestErr == nil { - bestErr = err - } - - if start.IsZero() { - start = time.Now() - } else if d := time.Since(start) + nextSleep; d >= arbitraryTimeout { - break - } - time.Sleep(nextSleep) - nextSleep += time.Duration(rand.Int63n(int64(nextSleep))) - } - - return bestErr -} - -// rename is like os.Rename, but retries ephemeral errors. -// -// On windows it wraps os.Rename, which (as of 2019-06-04) uses MoveFileEx with -// MOVEFILE_REPLACE_EXISTING. -// -// Windows also provides a different system call, ReplaceFile, -// that provides similar semantics, but perhaps preserves more metadata. (The -// documentation on the differences between the two is very sparse.) -// -// Empirical error rates with MoveFileEx are lower under modest concurrency, so -// for now we're sticking with what the os package already provides. -func rename(oldpath, newpath string) (err error) { - return retry(func() (err error, mayRetry bool) { - err = os.Rename(oldpath, newpath) - return err, isEphemeralError(err) - }) -} - -// readFile is like ioutil.ReadFile, but retries ephemeral errors. -func readFile(filename string) ([]byte, error) { - var b []byte - err := retry(func() (err error, mayRetry bool) { - b, err = ioutil.ReadFile(filename) - - // Unlike in rename, we do not retry errFileNotFound here: it can occur - // as a spurious error, but the file may also genuinely not exist, so the - // increase in robustness is probably not worth the extra latency. - - return err, isEphemeralError(err) && err != errFileNotFound - }) - return b, err -} - -func removeAll(path string) error { - return retry(func() (err error, mayRetry bool) { - err = os.RemoveAll(path) - return err, isEphemeralError(err) - }) -} diff --git a/vendor/honnef.co/go/tools/internal/robustio/robustio_other.go b/vendor/honnef.co/go/tools/internal/robustio/robustio_other.go deleted file mode 100644 index a2428856f2..0000000000 --- a/vendor/honnef.co/go/tools/internal/robustio/robustio_other.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//+build !windows,!darwin - -package robustio - -import ( - "io/ioutil" - "os" -) - -func rename(oldpath, newpath string) error { - return os.Rename(oldpath, newpath) -} - -func readFile(filename string) ([]byte, error) { - return ioutil.ReadFile(filename) -} - -func removeAll(path string) error { - return os.RemoveAll(path) -} - -func isEphemeralError(err error) bool { - return false -} diff --git a/vendor/honnef.co/go/tools/internal/robustio/robustio_windows.go b/vendor/honnef.co/go/tools/internal/robustio/robustio_windows.go deleted file mode 100644 index a35237d44a..0000000000 --- a/vendor/honnef.co/go/tools/internal/robustio/robustio_windows.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package robustio - -import ( - "os" - "syscall" -) - -const errFileNotFound = syscall.ERROR_FILE_NOT_FOUND - -// isEphemeralError returns true if err may be resolved by waiting. -func isEphemeralError(err error) bool { - switch werr := err.(type) { - case *os.PathError: - err = werr.Err - case *os.LinkError: - err = werr.Err - case *os.SyscallError: - err = werr.Err - } - if errno, ok := err.(syscall.Errno); ok { - switch errno { - case syscall.ERROR_ACCESS_DENIED, - syscall.ERROR_FILE_NOT_FOUND, - ERROR_SHARING_VIOLATION: - return true - } - } - return false -} diff --git a/vendor/honnef.co/go/tools/internal/sharedcheck/BUILD.bazel b/vendor/honnef.co/go/tools/internal/sharedcheck/BUILD.bazel deleted file mode 100644 index 56e7c72e64..0000000000 --- a/vendor/honnef.co/go/tools/internal/sharedcheck/BUILD.bazel +++ /dev/null @@ -1,16 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["lint.go"], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/internal/sharedcheck", - importpath = "honnef.co/go/tools/internal/sharedcheck", - visibility = ["//vendor/honnef.co/go/tools:__subpackages__"], - deps = [ - "//vendor/golang.org/x/tools/go/analysis:go_default_library", - "//vendor/honnef.co/go/tools/code:go_default_library", - "//vendor/honnef.co/go/tools/internal/passes/buildir:go_default_library", - "//vendor/honnef.co/go/tools/ir:go_default_library", - "//vendor/honnef.co/go/tools/lint/lintdsl:go_default_library", - ], -) diff --git a/vendor/honnef.co/go/tools/internal/sharedcheck/lint.go b/vendor/honnef.co/go/tools/internal/sharedcheck/lint.go deleted file mode 100644 index e9abf0d893..0000000000 --- a/vendor/honnef.co/go/tools/internal/sharedcheck/lint.go +++ /dev/null @@ -1,71 +0,0 @@ -package sharedcheck - -import ( - "go/ast" - "go/types" - - "golang.org/x/tools/go/analysis" - "honnef.co/go/tools/code" - "honnef.co/go/tools/internal/passes/buildir" - "honnef.co/go/tools/ir" - . "honnef.co/go/tools/lint/lintdsl" -) - -func CheckRangeStringRunes(pass *analysis.Pass) (interface{}, error) { - for _, fn := range pass.ResultOf[buildir.Analyzer].(*buildir.IR).SrcFuncs { - cb := func(node ast.Node) bool { - rng, ok := node.(*ast.RangeStmt) - if !ok || !code.IsBlank(rng.Key) { - return true - } - - v, _ := fn.ValueForExpr(rng.X) - - // Check that we're converting from string to []rune - val, _ := v.(*ir.Convert) - if val == nil { - return true - } - Tsrc, ok := val.X.Type().(*types.Basic) - if !ok || Tsrc.Kind() != types.String { - return true - } - Tdst, ok := val.Type().(*types.Slice) - if !ok { - return true - } - TdstElem, ok := Tdst.Elem().(*types.Basic) - if !ok || TdstElem.Kind() != types.Int32 { - return true - } - - // Check that the result of the conversion is only used to - // range over - refs := val.Referrers() - if refs == nil { - return true - } - - // Expect two refs: one for obtaining the length of the slice, - // one for accessing the elements - if len(code.FilterDebug(*refs)) != 2 { - // TODO(dh): right now, we check that only one place - // refers to our slice. This will miss cases such as - // ranging over the slice twice. Ideally, we'd ensure that - // the slice is only used for ranging over (without - // accessing the key), but that is harder to do because in - // IR form, ranging over a slice looks like an ordinary - // loop with index increments and slice accesses. We'd - // have to look at the associated AST node to check that - // it's a range statement. - return true - } - - pass.Reportf(rng.Pos(), "should range over string, not []rune(string)") - - return true - } - Inspect(fn.Source(), cb) - } - return nil, nil -} diff --git a/vendor/honnef.co/go/tools/ir/BUILD.bazel b/vendor/honnef.co/go/tools/ir/BUILD.bazel deleted file mode 100644 index a64a3c30f8..0000000000 --- a/vendor/honnef.co/go/tools/ir/BUILD.bazel +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "blockopt.go", - "builder.go", - "const.go", - "create.go", - "doc.go", - "dom.go", - "emit.go", - "exits.go", - "func.go", - "html.go", - "identical.go", - "identical_17.go", - "lift.go", - "lvalue.go", - "methods.go", - "mode.go", - "print.go", - "sanity.go", - "source.go", - "ssa.go", - "util.go", - "wrappers.go", - "write.go", - ], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/ir", - importpath = "honnef.co/go/tools/ir", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/go/ast/astutil:go_default_library", - "//vendor/golang.org/x/tools/go/types/typeutil:go_default_library", - ], -) diff --git a/vendor/honnef.co/go/tools/ir/LICENSE b/vendor/honnef.co/go/tools/ir/LICENSE deleted file mode 100644 index aee48041e1..0000000000 --- a/vendor/honnef.co/go/tools/ir/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. -Copyright (c) 2016 Dominik Honnef. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/honnef.co/go/tools/ir/blockopt.go b/vendor/honnef.co/go/tools/ir/blockopt.go deleted file mode 100644 index d7a0e35676..0000000000 --- a/vendor/honnef.co/go/tools/ir/blockopt.go +++ /dev/null @@ -1,209 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// Simple block optimizations to simplify the control flow graph. - -// TODO(adonovan): opt: instead of creating several "unreachable" blocks -// per function in the Builder, reuse a single one (e.g. at Blocks[1]) -// to reduce garbage. - -import ( - "fmt" - "os" -) - -// If true, perform sanity checking and show progress at each -// successive iteration of optimizeBlocks. Very verbose. -const debugBlockOpt = false - -// markReachable sets Index=-1 for all blocks reachable from b. -func markReachable(b *BasicBlock) { - b.gaps = -1 - for _, succ := range b.Succs { - if succ.gaps == 0 { - markReachable(succ) - } - } -} - -// deleteUnreachableBlocks marks all reachable blocks of f and -// eliminates (nils) all others, including possibly cyclic subgraphs. -// -func deleteUnreachableBlocks(f *Function) { - const white, black = 0, -1 - // We borrow b.gaps temporarily as the mark bit. - for _, b := range f.Blocks { - b.gaps = white - } - markReachable(f.Blocks[0]) - // In SSI form, we need the exit to be reachable for correct - // post-dominance information. In original form, however, we - // cannot unconditionally mark it reachable because we won't - // be adding fake edges, and this breaks the calculation of - // dominance information. - markReachable(f.Exit) - for i, b := range f.Blocks { - if b.gaps == white { - for _, c := range b.Succs { - if c.gaps == black { - c.removePred(b) // delete white->black edge - } - } - if debugBlockOpt { - fmt.Fprintln(os.Stderr, "unreachable", b) - } - f.Blocks[i] = nil // delete b - } - } - f.removeNilBlocks() -} - -// jumpThreading attempts to apply simple jump-threading to block b, -// in which a->b->c become a->c if b is just a Jump. -// The result is true if the optimization was applied. -// -func jumpThreading(f *Function, b *BasicBlock) bool { - if b.Index == 0 { - return false // don't apply to entry block - } - if b.Instrs == nil { - return false - } - for _, pred := range b.Preds { - switch pred.Control().(type) { - case *ConstantSwitch: - // don't optimize away the head blocks of switch statements - return false - } - } - if _, ok := b.Instrs[0].(*Jump); !ok { - return false // not just a jump - } - c := b.Succs[0] - if c == b { - return false // don't apply to degenerate jump-to-self. - } - if c.hasPhi() { - return false // not sound without more effort - } - for j, a := range b.Preds { - a.replaceSucc(b, c) - - // If a now has two edges to c, replace its degenerate If by Jump. - if len(a.Succs) == 2 && a.Succs[0] == c && a.Succs[1] == c { - jump := new(Jump) - jump.setBlock(a) - a.Instrs[len(a.Instrs)-1] = jump - a.Succs = a.Succs[:1] - c.removePred(b) - } else { - if j == 0 { - c.replacePred(b, a) - } else { - c.Preds = append(c.Preds, a) - } - } - - if debugBlockOpt { - fmt.Fprintln(os.Stderr, "jumpThreading", a, b, c) - } - } - f.Blocks[b.Index] = nil // delete b - return true -} - -// fuseBlocks attempts to apply the block fusion optimization to block -// a, in which a->b becomes ab if len(a.Succs)==len(b.Preds)==1. -// The result is true if the optimization was applied. -// -func fuseBlocks(f *Function, a *BasicBlock) bool { - if len(a.Succs) != 1 { - return false - } - if a.Succs[0] == f.Exit { - return false - } - b := a.Succs[0] - if len(b.Preds) != 1 { - return false - } - if _, ok := a.Instrs[len(a.Instrs)-1].(*Panic); ok { - // panics aren't simple jumps, they have side effects. - return false - } - - // Degenerate &&/|| ops may result in a straight-line CFG - // containing φ-nodes. (Ideally we'd replace such them with - // their sole operand but that requires Referrers, built later.) - if b.hasPhi() { - return false // not sound without further effort - } - - // Eliminate jump at end of A, then copy all of B across. - a.Instrs = append(a.Instrs[:len(a.Instrs)-1], b.Instrs...) - for _, instr := range b.Instrs { - instr.setBlock(a) - } - - // A inherits B's successors - a.Succs = append(a.succs2[:0], b.Succs...) - - // Fix up Preds links of all successors of B. - for _, c := range b.Succs { - c.replacePred(b, a) - } - - if debugBlockOpt { - fmt.Fprintln(os.Stderr, "fuseBlocks", a, b) - } - - f.Blocks[b.Index] = nil // delete b - return true -} - -// optimizeBlocks() performs some simple block optimizations on a -// completed function: dead block elimination, block fusion, jump -// threading. -// -func optimizeBlocks(f *Function) { - if debugBlockOpt { - f.WriteTo(os.Stderr) - mustSanityCheck(f, nil) - } - - deleteUnreachableBlocks(f) - - // Loop until no further progress. - changed := true - for changed { - changed = false - - if debugBlockOpt { - f.WriteTo(os.Stderr) - mustSanityCheck(f, nil) - } - - for _, b := range f.Blocks { - // f.Blocks will temporarily contain nils to indicate - // deleted blocks; we remove them at the end. - if b == nil { - continue - } - - // Fuse blocks. b->c becomes bc. - if fuseBlocks(f, b) { - changed = true - } - - // a->b->c becomes a->c if b contains only a Jump. - if jumpThreading(f, b) { - changed = true - continue // (b was disconnected) - } - } - } - f.removeNilBlocks() -} diff --git a/vendor/honnef.co/go/tools/ir/builder.go b/vendor/honnef.co/go/tools/ir/builder.go deleted file mode 100644 index fdf4cb1a91..0000000000 --- a/vendor/honnef.co/go/tools/ir/builder.go +++ /dev/null @@ -1,2474 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file implements the BUILD phase of IR construction. -// -// IR construction has two phases, CREATE and BUILD. In the CREATE phase -// (create.go), all packages are constructed and type-checked and -// definitions of all package members are created, method-sets are -// computed, and wrapper methods are synthesized. -// ir.Packages are created in arbitrary order. -// -// In the BUILD phase (builder.go), the builder traverses the AST of -// each Go source function and generates IR instructions for the -// function body. Initializer expressions for package-level variables -// are emitted to the package's init() function in the order specified -// by go/types.Info.InitOrder, then code for each function in the -// package is generated in lexical order. -// -// The builder's and Program's indices (maps) are populated and -// mutated during the CREATE phase, but during the BUILD phase they -// remain constant. The sole exception is Prog.methodSets and its -// related maps, which are protected by a dedicated mutex. - -import ( - "fmt" - "go/ast" - "go/constant" - "go/token" - "go/types" - "os" -) - -type opaqueType struct { - types.Type - name string -} - -func (t *opaqueType) String() string { return t.name } - -var ( - varOk = newVar("ok", tBool) - varIndex = newVar("index", tInt) - - // Type constants. - tBool = types.Typ[types.Bool] - tByte = types.Typ[types.Byte] - tInt = types.Typ[types.Int] - tInvalid = types.Typ[types.Invalid] - tString = types.Typ[types.String] - tUntypedNil = types.Typ[types.UntypedNil] - tRangeIter = &opaqueType{nil, "iter"} // the type of all "range" iterators - tEface = types.NewInterfaceType(nil, nil).Complete() -) - -// builder holds state associated with the package currently being built. -// Its methods contain all the logic for AST-to-IR conversion. -type builder struct { - printFunc string - - blocksets [5]BlockSet -} - -// cond emits to fn code to evaluate boolean condition e and jump -// to t or f depending on its value, performing various simplifications. -// -// Postcondition: fn.currentBlock is nil. -// -func (b *builder) cond(fn *Function, e ast.Expr, t, f *BasicBlock) *If { - switch e := e.(type) { - case *ast.ParenExpr: - return b.cond(fn, e.X, t, f) - - case *ast.BinaryExpr: - switch e.Op { - case token.LAND: - ltrue := fn.newBasicBlock("cond.true") - b.cond(fn, e.X, ltrue, f) - fn.currentBlock = ltrue - return b.cond(fn, e.Y, t, f) - - case token.LOR: - lfalse := fn.newBasicBlock("cond.false") - b.cond(fn, e.X, t, lfalse) - fn.currentBlock = lfalse - return b.cond(fn, e.Y, t, f) - } - - case *ast.UnaryExpr: - if e.Op == token.NOT { - return b.cond(fn, e.X, f, t) - } - } - - // A traditional compiler would simplify "if false" (etc) here - // but we do not, for better fidelity to the source code. - // - // The value of a constant condition may be platform-specific, - // and may cause blocks that are reachable in some configuration - // to be hidden from subsequent analyses such as bug-finding tools. - return emitIf(fn, b.expr(fn, e), t, f, e) -} - -// logicalBinop emits code to fn to evaluate e, a &&- or -// ||-expression whose reified boolean value is wanted. -// The value is returned. -// -func (b *builder) logicalBinop(fn *Function, e *ast.BinaryExpr) Value { - rhs := fn.newBasicBlock("binop.rhs") - done := fn.newBasicBlock("binop.done") - - // T(e) = T(e.X) = T(e.Y) after untyped constants have been - // eliminated. - // TODO(adonovan): not true; MyBool==MyBool yields UntypedBool. - t := fn.Pkg.typeOf(e) - - var short Value // value of the short-circuit path - switch e.Op { - case token.LAND: - b.cond(fn, e.X, rhs, done) - short = emitConst(fn, NewConst(constant.MakeBool(false), t)) - - case token.LOR: - b.cond(fn, e.X, done, rhs) - short = emitConst(fn, NewConst(constant.MakeBool(true), t)) - } - - // Is rhs unreachable? - if rhs.Preds == nil { - // Simplify false&&y to false, true||y to true. - fn.currentBlock = done - return short - } - - // Is done unreachable? - if done.Preds == nil { - // Simplify true&&y (or false||y) to y. - fn.currentBlock = rhs - return b.expr(fn, e.Y) - } - - // All edges from e.X to done carry the short-circuit value. - var edges []Value - for range done.Preds { - edges = append(edges, short) - } - - // The edge from e.Y to done carries the value of e.Y. - fn.currentBlock = rhs - edges = append(edges, b.expr(fn, e.Y)) - emitJump(fn, done, e) - fn.currentBlock = done - - phi := &Phi{Edges: edges} - phi.typ = t - return done.emit(phi, e) -} - -// exprN lowers a multi-result expression e to IR form, emitting code -// to fn and returning a single Value whose type is a *types.Tuple. -// The caller must access the components via Extract. -// -// Multi-result expressions include CallExprs in a multi-value -// assignment or return statement, and "value,ok" uses of -// TypeAssertExpr, IndexExpr (when X is a map), and Recv. -// -func (b *builder) exprN(fn *Function, e ast.Expr) Value { - typ := fn.Pkg.typeOf(e).(*types.Tuple) - switch e := e.(type) { - case *ast.ParenExpr: - return b.exprN(fn, e.X) - - case *ast.CallExpr: - // Currently, no built-in function nor type conversion - // has multiple results, so we can avoid some of the - // cases for single-valued CallExpr. - var c Call - b.setCall(fn, e, &c.Call) - c.typ = typ - return fn.emit(&c, e) - - case *ast.IndexExpr: - mapt := fn.Pkg.typeOf(e.X).Underlying().(*types.Map) - lookup := &MapLookup{ - X: b.expr(fn, e.X), - Index: emitConv(fn, b.expr(fn, e.Index), mapt.Key(), e), - CommaOk: true, - } - lookup.setType(typ) - return fn.emit(lookup, e) - - case *ast.TypeAssertExpr: - return emitTypeTest(fn, b.expr(fn, e.X), typ.At(0).Type(), e) - - case *ast.UnaryExpr: // must be receive <- - return emitRecv(fn, b.expr(fn, e.X), true, typ, e) - } - panic(fmt.Sprintf("exprN(%T) in %s", e, fn)) -} - -// builtin emits to fn IR instructions to implement a call to the -// built-in function obj with the specified arguments -// and return type. It returns the value defined by the result. -// -// The result is nil if no special handling was required; in this case -// the caller should treat this like an ordinary library function -// call. -// -func (b *builder) builtin(fn *Function, obj *types.Builtin, args []ast.Expr, typ types.Type, source ast.Node) Value { - switch obj.Name() { - case "make": - switch typ.Underlying().(type) { - case *types.Slice: - n := b.expr(fn, args[1]) - m := n - if len(args) == 3 { - m = b.expr(fn, args[2]) - } - if m, ok := m.(*Const); ok { - // treat make([]T, n, m) as new([m]T)[:n] - cap := m.Int64() - at := types.NewArray(typ.Underlying().(*types.Slice).Elem(), cap) - alloc := emitNew(fn, at, source) - v := &Slice{ - X: alloc, - High: n, - } - v.setType(typ) - return fn.emit(v, source) - } - v := &MakeSlice{ - Len: n, - Cap: m, - } - v.setType(typ) - return fn.emit(v, source) - - case *types.Map: - var res Value - if len(args) == 2 { - res = b.expr(fn, args[1]) - } - v := &MakeMap{Reserve: res} - v.setType(typ) - return fn.emit(v, source) - - case *types.Chan: - var sz Value = emitConst(fn, intConst(0)) - if len(args) == 2 { - sz = b.expr(fn, args[1]) - } - v := &MakeChan{Size: sz} - v.setType(typ) - return fn.emit(v, source) - } - - case "new": - alloc := emitNew(fn, deref(typ), source) - return alloc - - case "len", "cap": - // Special case: len or cap of an array or *array is - // based on the type, not the value which may be nil. - // We must still evaluate the value, though. (If it - // was side-effect free, the whole call would have - // been constant-folded.) - t := deref(fn.Pkg.typeOf(args[0])).Underlying() - if at, ok := t.(*types.Array); ok { - b.expr(fn, args[0]) // for effects only - return emitConst(fn, intConst(at.Len())) - } - // Otherwise treat as normal. - - case "panic": - fn.emit(&Panic{ - X: emitConv(fn, b.expr(fn, args[0]), tEface, source), - }, source) - addEdge(fn.currentBlock, fn.Exit) - fn.currentBlock = fn.newBasicBlock("unreachable") - return emitConst(fn, NewConst(constant.MakeBool(true), tBool)) // any non-nil Value will do - } - return nil // treat all others as a regular function call -} - -// addr lowers a single-result addressable expression e to IR form, -// emitting code to fn and returning the location (an lvalue) defined -// by the expression. -// -// If escaping is true, addr marks the base variable of the -// addressable expression e as being a potentially escaping pointer -// value. For example, in this code: -// -// a := A{ -// b: [1]B{B{c: 1}} -// } -// return &a.b[0].c -// -// the application of & causes a.b[0].c to have its address taken, -// which means that ultimately the local variable a must be -// heap-allocated. This is a simple but very conservative escape -// analysis. -// -// Operations forming potentially escaping pointers include: -// - &x, including when implicit in method call or composite literals. -// - a[:] iff a is an array (not *array) -// - references to variables in lexically enclosing functions. -// -func (b *builder) addr(fn *Function, e ast.Expr, escaping bool) lvalue { - switch e := e.(type) { - case *ast.Ident: - if isBlankIdent(e) { - return blank{} - } - obj := fn.Pkg.objectOf(e) - v := fn.Prog.packageLevelValue(obj) // var (address) - if v == nil { - v = fn.lookup(obj, escaping) - } - return &address{addr: v, expr: e} - - case *ast.CompositeLit: - t := deref(fn.Pkg.typeOf(e)) - var v *Alloc - if escaping { - v = emitNew(fn, t, e) - } else { - v = fn.addLocal(t, e) - } - var sb storebuf - b.compLit(fn, v, e, true, &sb) - sb.emit(fn) - return &address{addr: v, expr: e} - - case *ast.ParenExpr: - return b.addr(fn, e.X, escaping) - - case *ast.SelectorExpr: - sel, ok := fn.Pkg.info.Selections[e] - if !ok { - // qualified identifier - return b.addr(fn, e.Sel, escaping) - } - if sel.Kind() != types.FieldVal { - panic(sel) - } - wantAddr := true - v := b.receiver(fn, e.X, wantAddr, escaping, sel, e) - last := len(sel.Index()) - 1 - return &address{ - addr: emitFieldSelection(fn, v, sel.Index()[last], true, e.Sel), - expr: e.Sel, - } - - case *ast.IndexExpr: - var x Value - var et types.Type - switch t := fn.Pkg.typeOf(e.X).Underlying().(type) { - case *types.Array: - x = b.addr(fn, e.X, escaping).address(fn) - et = types.NewPointer(t.Elem()) - case *types.Pointer: // *array - x = b.expr(fn, e.X) - et = types.NewPointer(t.Elem().Underlying().(*types.Array).Elem()) - case *types.Slice: - x = b.expr(fn, e.X) - et = types.NewPointer(t.Elem()) - case *types.Map: - return &element{ - m: b.expr(fn, e.X), - k: emitConv(fn, b.expr(fn, e.Index), t.Key(), e.Index), - t: t.Elem(), - } - default: - panic("unexpected container type in IndexExpr: " + t.String()) - } - v := &IndexAddr{ - X: x, - Index: emitConv(fn, b.expr(fn, e.Index), tInt, e.Index), - } - v.setType(et) - return &address{addr: fn.emit(v, e), expr: e} - - case *ast.StarExpr: - return &address{addr: b.expr(fn, e.X), expr: e} - } - - panic(fmt.Sprintf("unexpected address expression: %T", e)) -} - -type store struct { - lhs lvalue - rhs Value - source ast.Node -} - -type storebuf struct{ stores []store } - -func (sb *storebuf) store(lhs lvalue, rhs Value, source ast.Node) { - sb.stores = append(sb.stores, store{lhs, rhs, source}) -} - -func (sb *storebuf) emit(fn *Function) { - for _, s := range sb.stores { - s.lhs.store(fn, s.rhs, s.source) - } -} - -// assign emits to fn code to initialize the lvalue loc with the value -// of expression e. If isZero is true, assign assumes that loc holds -// the zero value for its type. -// -// This is equivalent to loc.store(fn, b.expr(fn, e)), but may generate -// better code in some cases, e.g., for composite literals in an -// addressable location. -// -// If sb is not nil, assign generates code to evaluate expression e, but -// not to update loc. Instead, the necessary stores are appended to the -// storebuf sb so that they can be executed later. This allows correct -// in-place update of existing variables when the RHS is a composite -// literal that may reference parts of the LHS. -// -func (b *builder) assign(fn *Function, loc lvalue, e ast.Expr, isZero bool, sb *storebuf, source ast.Node) { - // Can we initialize it in place? - if e, ok := unparen(e).(*ast.CompositeLit); ok { - // A CompositeLit never evaluates to a pointer, - // so if the type of the location is a pointer, - // an &-operation is implied. - if _, ok := loc.(blank); !ok { // avoid calling blank.typ() - if isPointer(loc.typ()) { - ptr := b.addr(fn, e, true).address(fn) - // copy address - if sb != nil { - sb.store(loc, ptr, source) - } else { - loc.store(fn, ptr, source) - } - return - } - } - - if _, ok := loc.(*address); ok { - if isInterface(loc.typ()) { - // e.g. var x interface{} = T{...} - // Can't in-place initialize an interface value. - // Fall back to copying. - } else { - // x = T{...} or x := T{...} - addr := loc.address(fn) - if sb != nil { - b.compLit(fn, addr, e, isZero, sb) - } else { - var sb storebuf - b.compLit(fn, addr, e, isZero, &sb) - sb.emit(fn) - } - - // Subtle: emit debug ref for aggregate types only; - // slice and map are handled by store ops in compLit. - switch loc.typ().Underlying().(type) { - case *types.Struct, *types.Array: - emitDebugRef(fn, e, addr, true) - } - - return - } - } - } - - // simple case: just copy - rhs := b.expr(fn, e) - if sb != nil { - sb.store(loc, rhs, source) - } else { - loc.store(fn, rhs, source) - } -} - -// expr lowers a single-result expression e to IR form, emitting code -// to fn and returning the Value defined by the expression. -// -func (b *builder) expr(fn *Function, e ast.Expr) Value { - e = unparen(e) - - tv := fn.Pkg.info.Types[e] - - // Is expression a constant? - if tv.Value != nil { - return emitConst(fn, NewConst(tv.Value, tv.Type)) - } - - var v Value - if tv.Addressable() { - // Prefer pointer arithmetic ({Index,Field}Addr) followed - // by Load over subelement extraction (e.g. Index, Field), - // to avoid large copies. - v = b.addr(fn, e, false).load(fn, e) - } else { - v = b.expr0(fn, e, tv) - } - if fn.debugInfo() { - emitDebugRef(fn, e, v, false) - } - return v -} - -func (b *builder) expr0(fn *Function, e ast.Expr, tv types.TypeAndValue) Value { - switch e := e.(type) { - case *ast.BasicLit: - panic("non-constant BasicLit") // unreachable - - case *ast.FuncLit: - fn2 := &Function{ - name: fmt.Sprintf("%s$%d", fn.Name(), 1+len(fn.AnonFuncs)), - Signature: fn.Pkg.typeOf(e.Type).Underlying().(*types.Signature), - parent: fn, - Pkg: fn.Pkg, - Prog: fn.Prog, - functionBody: new(functionBody), - } - fn2.source = e - fn.AnonFuncs = append(fn.AnonFuncs, fn2) - fn2.initHTML(b.printFunc) - b.buildFunction(fn2) - if fn2.FreeVars == nil { - return fn2 - } - v := &MakeClosure{Fn: fn2} - v.setType(tv.Type) - for _, fv := range fn2.FreeVars { - v.Bindings = append(v.Bindings, fv.outer) - fv.outer = nil - } - return fn.emit(v, e) - - case *ast.TypeAssertExpr: // single-result form only - return emitTypeAssert(fn, b.expr(fn, e.X), tv.Type, e) - - case *ast.CallExpr: - if fn.Pkg.info.Types[e.Fun].IsType() { - // Explicit type conversion, e.g. string(x) or big.Int(x) - x := b.expr(fn, e.Args[0]) - y := emitConv(fn, x, tv.Type, e) - return y - } - // Call to "intrinsic" built-ins, e.g. new, make, panic. - if id, ok := unparen(e.Fun).(*ast.Ident); ok { - if obj, ok := fn.Pkg.info.Uses[id].(*types.Builtin); ok { - if v := b.builtin(fn, obj, e.Args, tv.Type, e); v != nil { - return v - } - } - } - // Regular function call. - var v Call - b.setCall(fn, e, &v.Call) - v.setType(tv.Type) - return fn.emit(&v, e) - - case *ast.UnaryExpr: - switch e.Op { - case token.AND: // &X --- potentially escaping. - addr := b.addr(fn, e.X, true) - if _, ok := unparen(e.X).(*ast.StarExpr); ok { - // &*p must panic if p is nil (http://golang.org/s/go12nil). - // For simplicity, we'll just (suboptimally) rely - // on the side effects of a load. - // TODO(adonovan): emit dedicated nilcheck. - addr.load(fn, e) - } - return addr.address(fn) - case token.ADD: - return b.expr(fn, e.X) - case token.NOT, token.SUB, token.XOR: // ! <- - ^ - v := &UnOp{ - Op: e.Op, - X: b.expr(fn, e.X), - } - v.setType(tv.Type) - return fn.emit(v, e) - case token.ARROW: - return emitRecv(fn, b.expr(fn, e.X), false, tv.Type, e) - default: - panic(e.Op) - } - - case *ast.BinaryExpr: - switch e.Op { - case token.LAND, token.LOR: - return b.logicalBinop(fn, e) - case token.SHL, token.SHR: - fallthrough - case token.ADD, token.SUB, token.MUL, token.QUO, token.REM, token.AND, token.OR, token.XOR, token.AND_NOT: - return emitArith(fn, e.Op, b.expr(fn, e.X), b.expr(fn, e.Y), tv.Type, e) - - case token.EQL, token.NEQ, token.GTR, token.LSS, token.LEQ, token.GEQ: - cmp := emitCompare(fn, e.Op, b.expr(fn, e.X), b.expr(fn, e.Y), e) - // The type of x==y may be UntypedBool. - return emitConv(fn, cmp, types.Default(tv.Type), e) - default: - panic("illegal op in BinaryExpr: " + e.Op.String()) - } - - case *ast.SliceExpr: - var low, high, max Value - var x Value - switch fn.Pkg.typeOf(e.X).Underlying().(type) { - case *types.Array: - // Potentially escaping. - x = b.addr(fn, e.X, true).address(fn) - case *types.Basic, *types.Slice, *types.Pointer: // *array - x = b.expr(fn, e.X) - default: - panic("unreachable") - } - if e.High != nil { - high = b.expr(fn, e.High) - } - if e.Low != nil { - low = b.expr(fn, e.Low) - } - if e.Slice3 { - max = b.expr(fn, e.Max) - } - v := &Slice{ - X: x, - Low: low, - High: high, - Max: max, - } - v.setType(tv.Type) - return fn.emit(v, e) - - case *ast.Ident: - obj := fn.Pkg.info.Uses[e] - // Universal built-in or nil? - switch obj := obj.(type) { - case *types.Builtin: - return &Builtin{name: obj.Name(), sig: tv.Type.(*types.Signature)} - case *types.Nil: - return emitConst(fn, nilConst(tv.Type)) - } - // Package-level func or var? - if v := fn.Prog.packageLevelValue(obj); v != nil { - if _, ok := obj.(*types.Var); ok { - return emitLoad(fn, v, e) // var (address) - } - return v // (func) - } - // Local var. - return emitLoad(fn, fn.lookup(obj, false), e) // var (address) - - case *ast.SelectorExpr: - sel, ok := fn.Pkg.info.Selections[e] - if !ok { - // qualified identifier - return b.expr(fn, e.Sel) - } - switch sel.Kind() { - case types.MethodExpr: - // (*T).f or T.f, the method f from the method-set of type T. - // The result is a "thunk". - return emitConv(fn, makeThunk(fn.Prog, sel), tv.Type, e) - - case types.MethodVal: - // e.f where e is an expression and f is a method. - // The result is a "bound". - obj := sel.Obj().(*types.Func) - rt := recvType(obj) - wantAddr := isPointer(rt) - escaping := true - v := b.receiver(fn, e.X, wantAddr, escaping, sel, e) - if isInterface(rt) { - // If v has interface type I, - // we must emit a check that v is non-nil. - // We use: typeassert v.(I). - emitTypeAssert(fn, v, rt, e) - } - c := &MakeClosure{ - Fn: makeBound(fn.Prog, obj), - Bindings: []Value{v}, - } - c.source = e.Sel - c.setType(tv.Type) - return fn.emit(c, e) - - case types.FieldVal: - indices := sel.Index() - last := len(indices) - 1 - v := b.expr(fn, e.X) - v = emitImplicitSelections(fn, v, indices[:last], e) - v = emitFieldSelection(fn, v, indices[last], false, e.Sel) - return v - } - - panic("unexpected expression-relative selector") - - case *ast.IndexExpr: - switch t := fn.Pkg.typeOf(e.X).Underlying().(type) { - case *types.Array: - // Non-addressable array (in a register). - v := &Index{ - X: b.expr(fn, e.X), - Index: emitConv(fn, b.expr(fn, e.Index), tInt, e.Index), - } - v.setType(t.Elem()) - return fn.emit(v, e) - - case *types.Map: - // Maps are not addressable. - mapt := fn.Pkg.typeOf(e.X).Underlying().(*types.Map) - v := &MapLookup{ - X: b.expr(fn, e.X), - Index: emitConv(fn, b.expr(fn, e.Index), mapt.Key(), e.Index), - } - v.setType(mapt.Elem()) - return fn.emit(v, e) - - case *types.Basic: // => string - // Strings are not addressable. - v := &StringLookup{ - X: b.expr(fn, e.X), - Index: b.expr(fn, e.Index), - } - v.setType(tByte) - return fn.emit(v, e) - - case *types.Slice, *types.Pointer: // *array - // Addressable slice/array; use IndexAddr and Load. - return b.addr(fn, e, false).load(fn, e) - - default: - panic("unexpected container type in IndexExpr: " + t.String()) - } - - case *ast.CompositeLit, *ast.StarExpr: - // Addressable types (lvalues) - return b.addr(fn, e, false).load(fn, e) - } - - panic(fmt.Sprintf("unexpected expr: %T", e)) -} - -// stmtList emits to fn code for all statements in list. -func (b *builder) stmtList(fn *Function, list []ast.Stmt) { - for _, s := range list { - b.stmt(fn, s) - } -} - -// receiver emits to fn code for expression e in the "receiver" -// position of selection e.f (where f may be a field or a method) and -// returns the effective receiver after applying the implicit field -// selections of sel. -// -// wantAddr requests that the result is an an address. If -// !sel.Indirect(), this may require that e be built in addr() mode; it -// must thus be addressable. -// -// escaping is defined as per builder.addr(). -// -func (b *builder) receiver(fn *Function, e ast.Expr, wantAddr, escaping bool, sel *types.Selection, source ast.Node) Value { - var v Value - if wantAddr && !sel.Indirect() && !isPointer(fn.Pkg.typeOf(e)) { - v = b.addr(fn, e, escaping).address(fn) - } else { - v = b.expr(fn, e) - } - - last := len(sel.Index()) - 1 - v = emitImplicitSelections(fn, v, sel.Index()[:last], source) - if !wantAddr && isPointer(v.Type()) { - v = emitLoad(fn, v, e) - } - return v -} - -// setCallFunc populates the function parts of a CallCommon structure -// (Func, Method, Recv, Args[0]) based on the kind of invocation -// occurring in e. -// -func (b *builder) setCallFunc(fn *Function, e *ast.CallExpr, c *CallCommon) { - // Is this a method call? - if selector, ok := unparen(e.Fun).(*ast.SelectorExpr); ok { - sel, ok := fn.Pkg.info.Selections[selector] - if ok && sel.Kind() == types.MethodVal { - obj := sel.Obj().(*types.Func) - recv := recvType(obj) - wantAddr := isPointer(recv) - escaping := true - v := b.receiver(fn, selector.X, wantAddr, escaping, sel, selector) - if isInterface(recv) { - // Invoke-mode call. - c.Value = v - c.Method = obj - } else { - // "Call"-mode call. - c.Value = fn.Prog.declaredFunc(obj) - c.Args = append(c.Args, v) - } - return - } - - // sel.Kind()==MethodExpr indicates T.f() or (*T).f(): - // a statically dispatched call to the method f in the - // method-set of T or *T. T may be an interface. - // - // e.Fun would evaluate to a concrete method, interface - // wrapper function, or promotion wrapper. - // - // For now, we evaluate it in the usual way. - // - // TODO(adonovan): opt: inline expr() here, to make the - // call static and to avoid generation of wrappers. - // It's somewhat tricky as it may consume the first - // actual parameter if the call is "invoke" mode. - // - // Examples: - // type T struct{}; func (T) f() {} // "call" mode - // type T interface { f() } // "invoke" mode - // - // type S struct{ T } - // - // var s S - // S.f(s) - // (*S).f(&s) - // - // Suggested approach: - // - consume the first actual parameter expression - // and build it with b.expr(). - // - apply implicit field selections. - // - use MethodVal logic to populate fields of c. - } - - // Evaluate the function operand in the usual way. - c.Value = b.expr(fn, e.Fun) -} - -// emitCallArgs emits to f code for the actual parameters of call e to -// a (possibly built-in) function of effective type sig. -// The argument values are appended to args, which is then returned. -// -func (b *builder) emitCallArgs(fn *Function, sig *types.Signature, e *ast.CallExpr, args []Value) []Value { - // f(x, y, z...): pass slice z straight through. - if e.Ellipsis != 0 { - for i, arg := range e.Args { - v := emitConv(fn, b.expr(fn, arg), sig.Params().At(i).Type(), arg) - args = append(args, v) - } - return args - } - - offset := len(args) // 1 if call has receiver, 0 otherwise - - // Evaluate actual parameter expressions. - // - // If this is a chained call of the form f(g()) where g has - // multiple return values (MRV), they are flattened out into - // args; a suffix of them may end up in a varargs slice. - for _, arg := range e.Args { - v := b.expr(fn, arg) - if ttuple, ok := v.Type().(*types.Tuple); ok { // MRV chain - for i, n := 0, ttuple.Len(); i < n; i++ { - args = append(args, emitExtract(fn, v, i, arg)) - } - } else { - args = append(args, v) - } - } - - // Actual->formal assignability conversions for normal parameters. - np := sig.Params().Len() // number of normal parameters - if sig.Variadic() { - np-- - } - for i := 0; i < np; i++ { - args[offset+i] = emitConv(fn, args[offset+i], sig.Params().At(i).Type(), args[offset+i].Source()) - } - - // Actual->formal assignability conversions for variadic parameter, - // and construction of slice. - if sig.Variadic() { - varargs := args[offset+np:] - st := sig.Params().At(np).Type().(*types.Slice) - vt := st.Elem() - if len(varargs) == 0 { - args = append(args, emitConst(fn, nilConst(st))) - } else { - // Replace a suffix of args with a slice containing it. - at := types.NewArray(vt, int64(len(varargs))) - a := emitNew(fn, at, e) - a.source = e - for i, arg := range varargs { - iaddr := &IndexAddr{ - X: a, - Index: emitConst(fn, intConst(int64(i))), - } - iaddr.setType(types.NewPointer(vt)) - fn.emit(iaddr, e) - emitStore(fn, iaddr, arg, arg.Source()) - } - s := &Slice{X: a} - s.setType(st) - args[offset+np] = fn.emit(s, args[offset+np].Source()) - args = args[:offset+np+1] - } - } - return args -} - -// setCall emits to fn code to evaluate all the parameters of a function -// call e, and populates *c with those values. -// -func (b *builder) setCall(fn *Function, e *ast.CallExpr, c *CallCommon) { - // First deal with the f(...) part and optional receiver. - b.setCallFunc(fn, e, c) - - // Then append the other actual parameters. - sig, _ := fn.Pkg.typeOf(e.Fun).Underlying().(*types.Signature) - if sig == nil { - panic(fmt.Sprintf("no signature for call of %s", e.Fun)) - } - c.Args = b.emitCallArgs(fn, sig, e, c.Args) -} - -// assignOp emits to fn code to perform loc = val. -func (b *builder) assignOp(fn *Function, loc lvalue, val Value, op token.Token, source ast.Node) { - oldv := loc.load(fn, source) - loc.store(fn, emitArith(fn, op, oldv, emitConv(fn, val, oldv.Type(), source), loc.typ(), source), source) -} - -// localValueSpec emits to fn code to define all of the vars in the -// function-local ValueSpec, spec. -// -func (b *builder) localValueSpec(fn *Function, spec *ast.ValueSpec) { - switch { - case len(spec.Values) == len(spec.Names): - // e.g. var x, y = 0, 1 - // 1:1 assignment - for i, id := range spec.Names { - if !isBlankIdent(id) { - fn.addLocalForIdent(id) - } - lval := b.addr(fn, id, false) // non-escaping - b.assign(fn, lval, spec.Values[i], true, nil, spec) - } - - case len(spec.Values) == 0: - // e.g. var x, y int - // Locals are implicitly zero-initialized. - for _, id := range spec.Names { - if !isBlankIdent(id) { - lhs := fn.addLocalForIdent(id) - if fn.debugInfo() { - emitDebugRef(fn, id, lhs, true) - } - } - } - - default: - // e.g. var x, y = pos() - tuple := b.exprN(fn, spec.Values[0]) - for i, id := range spec.Names { - if !isBlankIdent(id) { - fn.addLocalForIdent(id) - lhs := b.addr(fn, id, false) // non-escaping - lhs.store(fn, emitExtract(fn, tuple, i, id), id) - } - } - } -} - -// assignStmt emits code to fn for a parallel assignment of rhss to lhss. -// isDef is true if this is a short variable declaration (:=). -// -// Note the similarity with localValueSpec. -// -func (b *builder) assignStmt(fn *Function, lhss, rhss []ast.Expr, isDef bool, source ast.Node) { - // Side effects of all LHSs and RHSs must occur in left-to-right order. - lvals := make([]lvalue, len(lhss)) - isZero := make([]bool, len(lhss)) - for i, lhs := range lhss { - var lval lvalue = blank{} - if !isBlankIdent(lhs) { - if isDef { - if obj := fn.Pkg.info.Defs[lhs.(*ast.Ident)]; obj != nil { - fn.addNamedLocal(obj, lhs) - isZero[i] = true - } - } - lval = b.addr(fn, lhs, false) // non-escaping - } - lvals[i] = lval - } - if len(lhss) == len(rhss) { - // Simple assignment: x = f() (!isDef) - // Parallel assignment: x, y = f(), g() (!isDef) - // or short var decl: x, y := f(), g() (isDef) - // - // In all cases, the RHSs may refer to the LHSs, - // so we need a storebuf. - var sb storebuf - for i := range rhss { - b.assign(fn, lvals[i], rhss[i], isZero[i], &sb, source) - } - sb.emit(fn) - } else { - // e.g. x, y = pos() - tuple := b.exprN(fn, rhss[0]) - emitDebugRef(fn, rhss[0], tuple, false) - for i, lval := range lvals { - lval.store(fn, emitExtract(fn, tuple, i, source), source) - } - } -} - -// arrayLen returns the length of the array whose composite literal elements are elts. -func (b *builder) arrayLen(fn *Function, elts []ast.Expr) int64 { - var max int64 = -1 - var i int64 = -1 - for _, e := range elts { - if kv, ok := e.(*ast.KeyValueExpr); ok { - i = b.expr(fn, kv.Key).(*Const).Int64() - } else { - i++ - } - if i > max { - max = i - } - } - return max + 1 -} - -// compLit emits to fn code to initialize a composite literal e at -// address addr with type typ. -// -// Nested composite literals are recursively initialized in place -// where possible. If isZero is true, compLit assumes that addr -// holds the zero value for typ. -// -// Because the elements of a composite literal may refer to the -// variables being updated, as in the second line below, -// x := T{a: 1} -// x = T{a: x.a} -// all the reads must occur before all the writes. Thus all stores to -// loc are emitted to the storebuf sb for later execution. -// -// A CompositeLit may have pointer type only in the recursive (nested) -// case when the type name is implicit. e.g. in []*T{{}}, the inner -// literal has type *T behaves like &T{}. -// In that case, addr must hold a T, not a *T. -// -func (b *builder) compLit(fn *Function, addr Value, e *ast.CompositeLit, isZero bool, sb *storebuf) { - typ := deref(fn.Pkg.typeOf(e)) - switch t := typ.Underlying().(type) { - case *types.Struct: - if !isZero && len(e.Elts) != t.NumFields() { - // memclear - sb.store(&address{addr, nil}, zeroValue(fn, deref(addr.Type()), e), e) - isZero = true - } - for i, e := range e.Elts { - fieldIndex := i - if kv, ok := e.(*ast.KeyValueExpr); ok { - fname := kv.Key.(*ast.Ident).Name - for i, n := 0, t.NumFields(); i < n; i++ { - sf := t.Field(i) - if sf.Name() == fname { - fieldIndex = i - e = kv.Value - break - } - } - } - sf := t.Field(fieldIndex) - faddr := &FieldAddr{ - X: addr, - Field: fieldIndex, - } - faddr.setType(types.NewPointer(sf.Type())) - fn.emit(faddr, e) - b.assign(fn, &address{addr: faddr, expr: e}, e, isZero, sb, e) - } - - case *types.Array, *types.Slice: - var at *types.Array - var array Value - switch t := t.(type) { - case *types.Slice: - at = types.NewArray(t.Elem(), b.arrayLen(fn, e.Elts)) - alloc := emitNew(fn, at, e) - array = alloc - case *types.Array: - at = t - array = addr - - if !isZero && int64(len(e.Elts)) != at.Len() { - // memclear - sb.store(&address{array, nil}, zeroValue(fn, deref(array.Type()), e), e) - } - } - - var idx *Const - for _, e := range e.Elts { - if kv, ok := e.(*ast.KeyValueExpr); ok { - idx = b.expr(fn, kv.Key).(*Const) - e = kv.Value - } else { - var idxval int64 - if idx != nil { - idxval = idx.Int64() + 1 - } - idx = emitConst(fn, intConst(idxval)) - } - iaddr := &IndexAddr{ - X: array, - Index: idx, - } - iaddr.setType(types.NewPointer(at.Elem())) - fn.emit(iaddr, e) - if t != at { // slice - // backing array is unaliased => storebuf not needed. - b.assign(fn, &address{addr: iaddr, expr: e}, e, true, nil, e) - } else { - b.assign(fn, &address{addr: iaddr, expr: e}, e, true, sb, e) - } - } - - if t != at { // slice - s := &Slice{X: array} - s.setType(typ) - sb.store(&address{addr: addr, expr: e}, fn.emit(s, e), e) - } - - case *types.Map: - m := &MakeMap{Reserve: emitConst(fn, intConst(int64(len(e.Elts))))} - m.setType(typ) - fn.emit(m, e) - for _, e := range e.Elts { - e := e.(*ast.KeyValueExpr) - - // If a key expression in a map literal is itself a - // composite literal, the type may be omitted. - // For example: - // map[*struct{}]bool{{}: true} - // An &-operation may be implied: - // map[*struct{}]bool{&struct{}{}: true} - var key Value - if _, ok := unparen(e.Key).(*ast.CompositeLit); ok && isPointer(t.Key()) { - // A CompositeLit never evaluates to a pointer, - // so if the type of the location is a pointer, - // an &-operation is implied. - key = b.addr(fn, e.Key, true).address(fn) - } else { - key = b.expr(fn, e.Key) - } - - loc := element{ - m: m, - k: emitConv(fn, key, t.Key(), e), - t: t.Elem(), - } - - // We call assign() only because it takes care - // of any &-operation required in the recursive - // case, e.g., - // map[int]*struct{}{0: {}} implies &struct{}{}. - // In-place update is of course impossible, - // and no storebuf is needed. - b.assign(fn, &loc, e.Value, true, nil, e) - } - sb.store(&address{addr: addr, expr: e}, m, e) - - default: - panic("unexpected CompositeLit type: " + t.String()) - } -} - -func (b *builder) switchStmt(fn *Function, s *ast.SwitchStmt, label *lblock) { - if s.Tag == nil { - b.switchStmtDynamic(fn, s, label) - return - } - dynamic := false - for _, iclause := range s.Body.List { - clause := iclause.(*ast.CaseClause) - for _, cond := range clause.List { - if fn.Pkg.info.Types[unparen(cond)].Value == nil { - dynamic = true - break - } - } - } - - if dynamic { - b.switchStmtDynamic(fn, s, label) - return - } - - if s.Init != nil { - b.stmt(fn, s.Init) - } - - entry := fn.currentBlock - tag := b.expr(fn, s.Tag) - - heads := make([]*BasicBlock, 0, len(s.Body.List)) - bodies := make([]*BasicBlock, len(s.Body.List)) - conds := make([]Value, 0, len(s.Body.List)) - - hasDefault := false - done := fn.newBasicBlock(fmt.Sprintf("switch.done")) - if label != nil { - label._break = done - } - for i, stmt := range s.Body.List { - body := fn.newBasicBlock(fmt.Sprintf("switch.body.%d", i)) - bodies[i] = body - cas := stmt.(*ast.CaseClause) - if cas.List == nil { - // default branch - hasDefault = true - head := fn.newBasicBlock(fmt.Sprintf("switch.head.%d", i)) - conds = append(conds, nil) - heads = append(heads, head) - fn.currentBlock = head - emitJump(fn, body, cas) - } - for j, cond := range stmt.(*ast.CaseClause).List { - fn.currentBlock = entry - head := fn.newBasicBlock(fmt.Sprintf("switch.head.%d.%d", i, j)) - conds = append(conds, b.expr(fn, cond)) - heads = append(heads, head) - fn.currentBlock = head - emitJump(fn, body, cond) - } - } - - for i, stmt := range s.Body.List { - clause := stmt.(*ast.CaseClause) - body := bodies[i] - fn.currentBlock = body - fallthru := done - if i+1 < len(bodies) { - fallthru = bodies[i+1] - } - fn.targets = &targets{ - tail: fn.targets, - _break: done, - _fallthrough: fallthru, - } - b.stmtList(fn, clause.Body) - fn.targets = fn.targets.tail - emitJump(fn, done, stmt) - } - - if !hasDefault { - head := fn.newBasicBlock(fmt.Sprintf("switch.head.implicit-default")) - body := fn.newBasicBlock("switch.body.implicit-default") - fn.currentBlock = head - emitJump(fn, body, s) - fn.currentBlock = body - emitJump(fn, done, s) - heads = append(heads, head) - conds = append(conds, nil) - } - - if len(heads) != len(conds) { - panic(fmt.Sprintf("internal error: %d heads for %d conds", len(heads), len(conds))) - } - for _, head := range heads { - addEdge(entry, head) - } - fn.currentBlock = entry - entry.emit(&ConstantSwitch{ - Tag: tag, - Conds: conds, - }, s) - fn.currentBlock = done -} - -// switchStmt emits to fn code for the switch statement s, optionally -// labelled by label. -// -func (b *builder) switchStmtDynamic(fn *Function, s *ast.SwitchStmt, label *lblock) { - // We treat SwitchStmt like a sequential if-else chain. - // Multiway dispatch can be recovered later by irutil.Switches() - // to those cases that are free of side effects. - if s.Init != nil { - b.stmt(fn, s.Init) - } - kTrue := emitConst(fn, NewConst(constant.MakeBool(true), tBool)) - - var tagv Value = kTrue - var tagSource ast.Node = s - if s.Tag != nil { - tagv = b.expr(fn, s.Tag) - tagSource = s.Tag - } - // lifting only considers loads and stores, but we want different - // sigma nodes for the different comparisons. use a temporary and - // load it in every branch. - tag := fn.addLocal(tagv.Type(), tagSource) - emitStore(fn, tag, tagv, tagSource) - - done := fn.newBasicBlock("switch.done") - if label != nil { - label._break = done - } - // We pull the default case (if present) down to the end. - // But each fallthrough label must point to the next - // body block in source order, so we preallocate a - // body block (fallthru) for the next case. - // Unfortunately this makes for a confusing block order. - var dfltBody *[]ast.Stmt - var dfltFallthrough *BasicBlock - var fallthru, dfltBlock *BasicBlock - ncases := len(s.Body.List) - for i, clause := range s.Body.List { - body := fallthru - if body == nil { - body = fn.newBasicBlock("switch.body") // first case only - } - - // Preallocate body block for the next case. - fallthru = done - if i+1 < ncases { - fallthru = fn.newBasicBlock("switch.body") - } - - cc := clause.(*ast.CaseClause) - if cc.List == nil { - // Default case. - dfltBody = &cc.Body - dfltFallthrough = fallthru - dfltBlock = body - continue - } - - var nextCond *BasicBlock - for _, cond := range cc.List { - nextCond = fn.newBasicBlock("switch.next") - if tagv == kTrue { - // emit a proper if/else chain instead of a comparison - // of a value against true. - // - // NOTE(dh): adonovan had a todo saying "don't forget - // conversions though". As far as I can tell, there - // aren't any conversions that we need to take care of - // here. `case bool(a) && bool(b)` as well as `case - // bool(a && b)` are being taken care of by b.cond, - // and `case a` where a is not of type bool is - // invalid. - b.cond(fn, cond, body, nextCond) - } else { - cond := emitCompare(fn, token.EQL, emitLoad(fn, tag, cond), b.expr(fn, cond), cond) - emitIf(fn, cond, body, nextCond, cond.Source()) - } - - fn.currentBlock = nextCond - } - fn.currentBlock = body - fn.targets = &targets{ - tail: fn.targets, - _break: done, - _fallthrough: fallthru, - } - b.stmtList(fn, cc.Body) - fn.targets = fn.targets.tail - emitJump(fn, done, s) - fn.currentBlock = nextCond - } - if dfltBlock != nil { - // The lack of a Source for the jump doesn't matter, block - // fusing will get rid of the jump later. - - emitJump(fn, dfltBlock, s) - fn.currentBlock = dfltBlock - fn.targets = &targets{ - tail: fn.targets, - _break: done, - _fallthrough: dfltFallthrough, - } - b.stmtList(fn, *dfltBody) - fn.targets = fn.targets.tail - } - emitJump(fn, done, s) - fn.currentBlock = done -} - -func (b *builder) typeSwitchStmt(fn *Function, s *ast.TypeSwitchStmt, label *lblock) { - if s.Init != nil { - b.stmt(fn, s.Init) - } - - var tag Value - switch e := s.Assign.(type) { - case *ast.ExprStmt: // x.(type) - tag = b.expr(fn, unparen(e.X).(*ast.TypeAssertExpr).X) - case *ast.AssignStmt: // y := x.(type) - tag = b.expr(fn, unparen(e.Rhs[0]).(*ast.TypeAssertExpr).X) - default: - panic("unreachable") - } - tagPtr := fn.addLocal(tag.Type(), tag.Source()) - emitStore(fn, tagPtr, tag, tag.Source()) - - // +1 in case there's no explicit default case - heads := make([]*BasicBlock, 0, len(s.Body.List)+1) - - entry := fn.currentBlock - done := fn.newBasicBlock("done") - if label != nil { - label._break = done - } - - // set up type switch and constant switch, populate their conditions - tswtch := &TypeSwitch{ - Tag: emitLoad(fn, tagPtr, tag.Source()), - Conds: make([]types.Type, 0, len(s.Body.List)+1), - } - cswtch := &ConstantSwitch{ - Conds: make([]Value, 0, len(s.Body.List)+1), - } - - rets := make([]types.Type, 0, len(s.Body.List)+1) - index := 0 - var default_ *ast.CaseClause - for _, clause := range s.Body.List { - cc := clause.(*ast.CaseClause) - if obj := fn.Pkg.info.Implicits[cc]; obj != nil { - fn.addNamedLocal(obj, cc) - } - if cc.List == nil { - // default case - default_ = cc - } else { - for _, expr := range cc.List { - tswtch.Conds = append(tswtch.Conds, fn.Pkg.typeOf(expr)) - cswtch.Conds = append(cswtch.Conds, emitConst(fn, intConst(int64(index)))) - index++ - } - if len(cc.List) == 1 { - rets = append(rets, fn.Pkg.typeOf(cc.List[0])) - } else { - for range cc.List { - rets = append(rets, tag.Type()) - } - } - } - } - - // default branch - rets = append(rets, tag.Type()) - - var vars []*types.Var - vars = append(vars, varIndex) - for _, typ := range rets { - vars = append(vars, anonVar(typ)) - } - tswtch.setType(types.NewTuple(vars...)) - // default branch - fn.currentBlock = entry - fn.emit(tswtch, s) - cswtch.Conds = append(cswtch.Conds, emitConst(fn, intConst(int64(-1)))) - // in theory we should add a local and stores/loads for tswtch, to - // generate sigma nodes in the branches. however, there isn't any - // useful information we could possibly attach to it. - cswtch.Tag = emitExtract(fn, tswtch, 0, s) - fn.emit(cswtch, s) - - // build heads and bodies - index = 0 - for _, clause := range s.Body.List { - cc := clause.(*ast.CaseClause) - if cc.List == nil { - continue - } - - body := fn.newBasicBlock("typeswitch.body") - for _, expr := range cc.List { - head := fn.newBasicBlock("typeswitch.head") - heads = append(heads, head) - fn.currentBlock = head - - if obj := fn.Pkg.info.Implicits[cc]; obj != nil { - // In a switch y := x.(type), each case clause - // implicitly declares a distinct object y. - // In a single-type case, y has that type. - // In multi-type cases, 'case nil' and default, - // y has the same type as the interface operand. - - l := fn.objects[obj] - if rets[index] == tUntypedNil { - emitStore(fn, l, emitConst(fn, nilConst(tswtch.Tag.Type())), s.Assign) - } else { - x := emitExtract(fn, tswtch, index+1, s.Assign) - emitStore(fn, l, x, nil) - } - } - - emitJump(fn, body, expr) - index++ - } - fn.currentBlock = body - fn.targets = &targets{ - tail: fn.targets, - _break: done, - } - b.stmtList(fn, cc.Body) - fn.targets = fn.targets.tail - emitJump(fn, done, clause) - } - - if default_ == nil { - // implicit default - heads = append(heads, done) - } else { - body := fn.newBasicBlock("typeswitch.default") - heads = append(heads, body) - fn.currentBlock = body - fn.targets = &targets{ - tail: fn.targets, - _break: done, - } - if obj := fn.Pkg.info.Implicits[default_]; obj != nil { - l := fn.objects[obj] - x := emitExtract(fn, tswtch, index+1, s.Assign) - emitStore(fn, l, x, s) - } - b.stmtList(fn, default_.Body) - fn.targets = fn.targets.tail - emitJump(fn, done, s) - } - - fn.currentBlock = entry - for _, head := range heads { - addEdge(entry, head) - } - fn.currentBlock = done -} - -// selectStmt emits to fn code for the select statement s, optionally -// labelled by label. -// -func (b *builder) selectStmt(fn *Function, s *ast.SelectStmt, label *lblock) (noreturn bool) { - if len(s.Body.List) == 0 { - instr := &Select{Blocking: true} - instr.setType(types.NewTuple(varIndex, varOk)) - fn.emit(instr, s) - fn.emit(new(Unreachable), s) - addEdge(fn.currentBlock, fn.Exit) - return true - } - - // A blocking select of a single case degenerates to a - // simple send or receive. - // TODO(adonovan): opt: is this optimization worth its weight? - if len(s.Body.List) == 1 { - clause := s.Body.List[0].(*ast.CommClause) - if clause.Comm != nil { - b.stmt(fn, clause.Comm) - done := fn.newBasicBlock("select.done") - if label != nil { - label._break = done - } - fn.targets = &targets{ - tail: fn.targets, - _break: done, - } - b.stmtList(fn, clause.Body) - fn.targets = fn.targets.tail - emitJump(fn, done, clause) - fn.currentBlock = done - return false - } - } - - // First evaluate all channels in all cases, and find - // the directions of each state. - var states []*SelectState - blocking := true - debugInfo := fn.debugInfo() - for _, clause := range s.Body.List { - var st *SelectState - switch comm := clause.(*ast.CommClause).Comm.(type) { - case nil: // default case - blocking = false - continue - - case *ast.SendStmt: // ch<- i - ch := b.expr(fn, comm.Chan) - st = &SelectState{ - Dir: types.SendOnly, - Chan: ch, - Send: emitConv(fn, b.expr(fn, comm.Value), - ch.Type().Underlying().(*types.Chan).Elem(), comm), - Pos: comm.Arrow, - } - if debugInfo { - st.DebugNode = comm - } - - case *ast.AssignStmt: // x := <-ch - recv := unparen(comm.Rhs[0]).(*ast.UnaryExpr) - st = &SelectState{ - Dir: types.RecvOnly, - Chan: b.expr(fn, recv.X), - Pos: recv.OpPos, - } - if debugInfo { - st.DebugNode = recv - } - - case *ast.ExprStmt: // <-ch - recv := unparen(comm.X).(*ast.UnaryExpr) - st = &SelectState{ - Dir: types.RecvOnly, - Chan: b.expr(fn, recv.X), - Pos: recv.OpPos, - } - if debugInfo { - st.DebugNode = recv - } - } - states = append(states, st) - } - - // We dispatch on the (fair) result of Select using a - // switch on the returned index. - sel := &Select{ - States: states, - Blocking: blocking, - } - sel.source = s - var vars []*types.Var - vars = append(vars, varIndex, varOk) - for _, st := range states { - if st.Dir == types.RecvOnly { - tElem := st.Chan.Type().Underlying().(*types.Chan).Elem() - vars = append(vars, anonVar(tElem)) - } - } - sel.setType(types.NewTuple(vars...)) - fn.emit(sel, s) - idx := emitExtract(fn, sel, 0, s) - - done := fn.newBasicBlock("select.done") - if label != nil { - label._break = done - } - - entry := fn.currentBlock - swtch := &ConstantSwitch{ - Tag: idx, - // one condition per case - Conds: make([]Value, 0, len(s.Body.List)+1), - } - // note that we don't need heads; a select case can only have a single condition - var bodies []*BasicBlock - - state := 0 - r := 2 // index in 'sel' tuple of value; increments if st.Dir==RECV - for _, cc := range s.Body.List { - clause := cc.(*ast.CommClause) - if clause.Comm == nil { - body := fn.newBasicBlock("select.default") - fn.currentBlock = body - bodies = append(bodies, body) - fn.targets = &targets{ - tail: fn.targets, - _break: done, - } - b.stmtList(fn, clause.Body) - emitJump(fn, done, s) - fn.targets = fn.targets.tail - swtch.Conds = append(swtch.Conds, emitConst(fn, intConst(-1))) - continue - } - swtch.Conds = append(swtch.Conds, emitConst(fn, intConst(int64(state)))) - body := fn.newBasicBlock("select.body") - fn.currentBlock = body - bodies = append(bodies, body) - fn.targets = &targets{ - tail: fn.targets, - _break: done, - } - switch comm := clause.Comm.(type) { - case *ast.ExprStmt: // <-ch - if debugInfo { - v := emitExtract(fn, sel, r, comm) - emitDebugRef(fn, states[state].DebugNode.(ast.Expr), v, false) - } - r++ - - case *ast.AssignStmt: // x := <-states[state].Chan - if comm.Tok == token.DEFINE { - fn.addLocalForIdent(comm.Lhs[0].(*ast.Ident)) - } - x := b.addr(fn, comm.Lhs[0], false) // non-escaping - v := emitExtract(fn, sel, r, comm) - if debugInfo { - emitDebugRef(fn, states[state].DebugNode.(ast.Expr), v, false) - } - x.store(fn, v, comm) - - if len(comm.Lhs) == 2 { // x, ok := ... - if comm.Tok == token.DEFINE { - fn.addLocalForIdent(comm.Lhs[1].(*ast.Ident)) - } - ok := b.addr(fn, comm.Lhs[1], false) // non-escaping - ok.store(fn, emitExtract(fn, sel, 1, comm), comm) - } - r++ - } - b.stmtList(fn, clause.Body) - fn.targets = fn.targets.tail - emitJump(fn, done, s) - state++ - } - fn.currentBlock = entry - fn.emit(swtch, s) - for _, body := range bodies { - addEdge(entry, body) - } - fn.currentBlock = done - return false -} - -// forStmt emits to fn code for the for statement s, optionally -// labelled by label. -// -func (b *builder) forStmt(fn *Function, s *ast.ForStmt, label *lblock) { - // ...init... - // jump loop - // loop: - // if cond goto body else done - // body: - // ...body... - // jump post - // post: (target of continue) - // ...post... - // jump loop - // done: (target of break) - if s.Init != nil { - b.stmt(fn, s.Init) - } - body := fn.newBasicBlock("for.body") - done := fn.newBasicBlock("for.done") // target of 'break' - loop := body // target of back-edge - if s.Cond != nil { - loop = fn.newBasicBlock("for.loop") - } - cont := loop // target of 'continue' - if s.Post != nil { - cont = fn.newBasicBlock("for.post") - } - if label != nil { - label._break = done - label._continue = cont - } - emitJump(fn, loop, s) - fn.currentBlock = loop - if loop != body { - b.cond(fn, s.Cond, body, done) - fn.currentBlock = body - } - fn.targets = &targets{ - tail: fn.targets, - _break: done, - _continue: cont, - } - b.stmt(fn, s.Body) - fn.targets = fn.targets.tail - emitJump(fn, cont, s) - - if s.Post != nil { - fn.currentBlock = cont - b.stmt(fn, s.Post) - emitJump(fn, loop, s) // back-edge - } - fn.currentBlock = done -} - -// rangeIndexed emits to fn the header for an integer-indexed loop -// over array, *array or slice value x. -// The v result is defined only if tv is non-nil. -// forPos is the position of the "for" token. -// -func (b *builder) rangeIndexed(fn *Function, x Value, tv types.Type, source ast.Node) (k, v Value, loop, done *BasicBlock) { - // - // length = len(x) - // index = -1 - // loop: (target of continue) - // index++ - // if index < length goto body else done - // body: - // k = index - // v = x[index] - // ...body... - // jump loop - // done: (target of break) - - // Determine number of iterations. - var length Value - if arr, ok := deref(x.Type()).Underlying().(*types.Array); ok { - // For array or *array, the number of iterations is - // known statically thanks to the type. We avoid a - // data dependence upon x, permitting later dead-code - // elimination if x is pure, static unrolling, etc. - // Ranging over a nil *array may have >0 iterations. - // We still generate code for x, in case it has effects. - length = emitConst(fn, intConst(arr.Len())) - } else { - // length = len(x). - var c Call - c.Call.Value = makeLen(x.Type()) - c.Call.Args = []Value{x} - c.setType(tInt) - length = fn.emit(&c, source) - } - - index := fn.addLocal(tInt, source) - emitStore(fn, index, emitConst(fn, intConst(-1)), source) - - loop = fn.newBasicBlock("rangeindex.loop") - emitJump(fn, loop, source) - fn.currentBlock = loop - - incr := &BinOp{ - Op: token.ADD, - X: emitLoad(fn, index, source), - Y: emitConst(fn, intConst(1)), - } - incr.setType(tInt) - emitStore(fn, index, fn.emit(incr, source), source) - - body := fn.newBasicBlock("rangeindex.body") - done = fn.newBasicBlock("rangeindex.done") - emitIf(fn, emitCompare(fn, token.LSS, incr, length, source), body, done, source) - fn.currentBlock = body - - k = emitLoad(fn, index, source) - if tv != nil { - switch t := x.Type().Underlying().(type) { - case *types.Array: - instr := &Index{ - X: x, - Index: k, - } - instr.setType(t.Elem()) - v = fn.emit(instr, source) - - case *types.Pointer: // *array - instr := &IndexAddr{ - X: x, - Index: k, - } - instr.setType(types.NewPointer(t.Elem().Underlying().(*types.Array).Elem())) - v = emitLoad(fn, fn.emit(instr, source), source) - - case *types.Slice: - instr := &IndexAddr{ - X: x, - Index: k, - } - instr.setType(types.NewPointer(t.Elem())) - v = emitLoad(fn, fn.emit(instr, source), source) - - default: - panic("rangeIndexed x:" + t.String()) - } - } - return -} - -// rangeIter emits to fn the header for a loop using -// Range/Next/Extract to iterate over map or string value x. -// tk and tv are the types of the key/value results k and v, or nil -// if the respective component is not wanted. -// -func (b *builder) rangeIter(fn *Function, x Value, tk, tv types.Type, source ast.Node) (k, v Value, loop, done *BasicBlock) { - // - // it = range x - // loop: (target of continue) - // okv = next it (ok, key, value) - // ok = extract okv #0 - // if ok goto body else done - // body: - // k = extract okv #1 - // v = extract okv #2 - // ...body... - // jump loop - // done: (target of break) - // - - if tk == nil { - tk = tInvalid - } - if tv == nil { - tv = tInvalid - } - - rng := &Range{X: x} - rng.setType(tRangeIter) - it := fn.emit(rng, source) - - loop = fn.newBasicBlock("rangeiter.loop") - emitJump(fn, loop, source) - fn.currentBlock = loop - - _, isString := x.Type().Underlying().(*types.Basic) - - okv := &Next{ - Iter: it, - IsString: isString, - } - okv.setType(types.NewTuple( - varOk, - newVar("k", tk), - newVar("v", tv), - )) - fn.emit(okv, source) - - body := fn.newBasicBlock("rangeiter.body") - done = fn.newBasicBlock("rangeiter.done") - emitIf(fn, emitExtract(fn, okv, 0, source), body, done, source) - fn.currentBlock = body - - if tk != tInvalid { - k = emitExtract(fn, okv, 1, source) - } - if tv != tInvalid { - v = emitExtract(fn, okv, 2, source) - } - return -} - -// rangeChan emits to fn the header for a loop that receives from -// channel x until it fails. -// tk is the channel's element type, or nil if the k result is -// not wanted -// pos is the position of the '=' or ':=' token. -// -func (b *builder) rangeChan(fn *Function, x Value, tk types.Type, source ast.Node) (k Value, loop, done *BasicBlock) { - // - // loop: (target of continue) - // ko = <-x (key, ok) - // ok = extract ko #1 - // if ok goto body else done - // body: - // k = extract ko #0 - // ... - // goto loop - // done: (target of break) - - loop = fn.newBasicBlock("rangechan.loop") - emitJump(fn, loop, source) - fn.currentBlock = loop - retv := emitRecv(fn, x, true, types.NewTuple(newVar("k", x.Type().Underlying().(*types.Chan).Elem()), varOk), source) - body := fn.newBasicBlock("rangechan.body") - done = fn.newBasicBlock("rangechan.done") - emitIf(fn, emitExtract(fn, retv, 1, source), body, done, source) - fn.currentBlock = body - if tk != nil { - k = emitExtract(fn, retv, 0, source) - } - return -} - -// rangeStmt emits to fn code for the range statement s, optionally -// labelled by label. -// -func (b *builder) rangeStmt(fn *Function, s *ast.RangeStmt, label *lblock, source ast.Node) { - var tk, tv types.Type - if s.Key != nil && !isBlankIdent(s.Key) { - tk = fn.Pkg.typeOf(s.Key) - } - if s.Value != nil && !isBlankIdent(s.Value) { - tv = fn.Pkg.typeOf(s.Value) - } - - // If iteration variables are defined (:=), this - // occurs once outside the loop. - // - // Unlike a short variable declaration, a RangeStmt - // using := never redeclares an existing variable; it - // always creates a new one. - if s.Tok == token.DEFINE { - if tk != nil { - fn.addLocalForIdent(s.Key.(*ast.Ident)) - } - if tv != nil { - fn.addLocalForIdent(s.Value.(*ast.Ident)) - } - } - - x := b.expr(fn, s.X) - - var k, v Value - var loop, done *BasicBlock - switch rt := x.Type().Underlying().(type) { - case *types.Slice, *types.Array, *types.Pointer: // *array - k, v, loop, done = b.rangeIndexed(fn, x, tv, source) - - case *types.Chan: - k, loop, done = b.rangeChan(fn, x, tk, source) - - case *types.Map, *types.Basic: // string - k, v, loop, done = b.rangeIter(fn, x, tk, tv, source) - - default: - panic("Cannot range over: " + rt.String()) - } - - // Evaluate both LHS expressions before we update either. - var kl, vl lvalue - if tk != nil { - kl = b.addr(fn, s.Key, false) // non-escaping - } - if tv != nil { - vl = b.addr(fn, s.Value, false) // non-escaping - } - if tk != nil { - kl.store(fn, k, s) - } - if tv != nil { - vl.store(fn, v, s) - } - - if label != nil { - label._break = done - label._continue = loop - } - - fn.targets = &targets{ - tail: fn.targets, - _break: done, - _continue: loop, - } - b.stmt(fn, s.Body) - fn.targets = fn.targets.tail - emitJump(fn, loop, source) // back-edge - fn.currentBlock = done -} - -// stmt lowers statement s to IR form, emitting code to fn. -func (b *builder) stmt(fn *Function, _s ast.Stmt) { - // The label of the current statement. If non-nil, its _goto - // target is always set; its _break and _continue are set only - // within the body of switch/typeswitch/select/for/range. - // It is effectively an additional default-nil parameter of stmt(). - var label *lblock -start: - switch s := _s.(type) { - case *ast.EmptyStmt: - // ignore. (Usually removed by gofmt.) - - case *ast.DeclStmt: // Con, Var or Typ - d := s.Decl.(*ast.GenDecl) - if d.Tok == token.VAR { - for _, spec := range d.Specs { - if vs, ok := spec.(*ast.ValueSpec); ok { - b.localValueSpec(fn, vs) - } - } - } - - case *ast.LabeledStmt: - label = fn.labelledBlock(s.Label) - emitJump(fn, label._goto, s) - fn.currentBlock = label._goto - _s = s.Stmt - goto start // effectively: tailcall stmt(fn, s.Stmt, label) - - case *ast.ExprStmt: - b.expr(fn, s.X) - - case *ast.SendStmt: - instr := &Send{ - Chan: b.expr(fn, s.Chan), - X: emitConv(fn, b.expr(fn, s.Value), - fn.Pkg.typeOf(s.Chan).Underlying().(*types.Chan).Elem(), s), - } - fn.emit(instr, s) - - case *ast.IncDecStmt: - op := token.ADD - if s.Tok == token.DEC { - op = token.SUB - } - loc := b.addr(fn, s.X, false) - b.assignOp(fn, loc, emitConst(fn, NewConst(constant.MakeInt64(1), loc.typ())), op, s) - - case *ast.AssignStmt: - switch s.Tok { - case token.ASSIGN, token.DEFINE: - b.assignStmt(fn, s.Lhs, s.Rhs, s.Tok == token.DEFINE, _s) - - default: // +=, etc. - op := s.Tok + token.ADD - token.ADD_ASSIGN - b.assignOp(fn, b.addr(fn, s.Lhs[0], false), b.expr(fn, s.Rhs[0]), op, s) - } - - case *ast.GoStmt: - // The "intrinsics" new/make/len/cap are forbidden here. - // panic is treated like an ordinary function call. - v := Go{} - b.setCall(fn, s.Call, &v.Call) - fn.emit(&v, s) - - case *ast.DeferStmt: - // The "intrinsics" new/make/len/cap are forbidden here. - // panic is treated like an ordinary function call. - v := Defer{} - b.setCall(fn, s.Call, &v.Call) - fn.hasDefer = true - fn.emit(&v, s) - - case *ast.ReturnStmt: - // TODO(dh): we could emit tigher position information by - // using the ith returned expression - - var results []Value - if len(s.Results) == 1 && fn.Signature.Results().Len() > 1 { - // Return of one expression in a multi-valued function. - tuple := b.exprN(fn, s.Results[0]) - ttuple := tuple.Type().(*types.Tuple) - for i, n := 0, ttuple.Len(); i < n; i++ { - results = append(results, - emitConv(fn, emitExtract(fn, tuple, i, s), - fn.Signature.Results().At(i).Type(), s)) - } - } else { - // 1:1 return, or no-arg return in non-void function. - for i, r := range s.Results { - v := emitConv(fn, b.expr(fn, r), fn.Signature.Results().At(i).Type(), s) - results = append(results, v) - } - } - - ret := fn.results() - for i, r := range results { - emitStore(fn, ret[i], r, s) - } - - emitJump(fn, fn.Exit, s) - fn.currentBlock = fn.newBasicBlock("unreachable") - - case *ast.BranchStmt: - var block *BasicBlock - switch s.Tok { - case token.BREAK: - if s.Label != nil { - block = fn.labelledBlock(s.Label)._break - } else { - for t := fn.targets; t != nil && block == nil; t = t.tail { - block = t._break - } - } - - case token.CONTINUE: - if s.Label != nil { - block = fn.labelledBlock(s.Label)._continue - } else { - for t := fn.targets; t != nil && block == nil; t = t.tail { - block = t._continue - } - } - - case token.FALLTHROUGH: - for t := fn.targets; t != nil && block == nil; t = t.tail { - block = t._fallthrough - } - - case token.GOTO: - block = fn.labelledBlock(s.Label)._goto - } - j := emitJump(fn, block, s) - j.Comment = s.Tok.String() - fn.currentBlock = fn.newBasicBlock("unreachable") - - case *ast.BlockStmt: - b.stmtList(fn, s.List) - - case *ast.IfStmt: - if s.Init != nil { - b.stmt(fn, s.Init) - } - then := fn.newBasicBlock("if.then") - done := fn.newBasicBlock("if.done") - els := done - if s.Else != nil { - els = fn.newBasicBlock("if.else") - } - instr := b.cond(fn, s.Cond, then, els) - instr.source = s - fn.currentBlock = then - b.stmt(fn, s.Body) - emitJump(fn, done, s) - - if s.Else != nil { - fn.currentBlock = els - b.stmt(fn, s.Else) - emitJump(fn, done, s) - } - - fn.currentBlock = done - - case *ast.SwitchStmt: - b.switchStmt(fn, s, label) - - case *ast.TypeSwitchStmt: - b.typeSwitchStmt(fn, s, label) - - case *ast.SelectStmt: - if b.selectStmt(fn, s, label) { - // the select has no cases, it blocks forever - fn.currentBlock = fn.newBasicBlock("unreachable") - } - - case *ast.ForStmt: - b.forStmt(fn, s, label) - - case *ast.RangeStmt: - b.rangeStmt(fn, s, label, s) - - default: - panic(fmt.Sprintf("unexpected statement kind: %T", s)) - } -} - -// buildFunction builds IR code for the body of function fn. Idempotent. -func (b *builder) buildFunction(fn *Function) { - if fn.Blocks != nil { - return // building already started - } - - var recvField *ast.FieldList - var body *ast.BlockStmt - var functype *ast.FuncType - switch n := fn.source.(type) { - case nil: - return // not a Go source function. (Synthetic, or from object file.) - case *ast.FuncDecl: - functype = n.Type - recvField = n.Recv - body = n.Body - case *ast.FuncLit: - functype = n.Type - body = n.Body - default: - panic(n) - } - - if fn.Package().Pkg.Path() == "syscall" && fn.Name() == "Exit" { - // syscall.Exit is a stub and the way os.Exit terminates the - // process. Note that there are other functions in the runtime - // that also terminate or unwind that we cannot analyze. - // However, they aren't stubs, so buildExits ends up getting - // called on them, so that's where we handle those special - // cases. - fn.WillExit = true - } - - if body == nil { - // External function. - if fn.Params == nil { - // This condition ensures we add a non-empty - // params list once only, but we may attempt - // the degenerate empty case repeatedly. - // TODO(adonovan): opt: don't do that. - - // We set Function.Params even though there is no body - // code to reference them. This simplifies clients. - if recv := fn.Signature.Recv(); recv != nil { - // XXX synthesize an ast.Node - fn.addParamObj(recv, nil) - } - params := fn.Signature.Params() - for i, n := 0, params.Len(); i < n; i++ { - // XXX synthesize an ast.Node - fn.addParamObj(params.At(i), nil) - } - } - return - } - if fn.Prog.mode&LogSource != 0 { - defer logStack("build function %s @ %s", fn, fn.Prog.Fset.Position(fn.Pos()))() - } - fn.blocksets = b.blocksets - fn.startBody() - fn.createSyntacticParams(recvField, functype) - fn.exitBlock() - b.stmt(fn, body) - if cb := fn.currentBlock; cb != nil && (cb == fn.Blocks[0] || cb.Preds != nil) { - // Control fell off the end of the function's body block. - // - // Block optimizations eliminate the current block, if - // unreachable. It is a builder invariant that - // if this no-arg return is ill-typed for - // fn.Signature.Results, this block must be - // unreachable. The sanity checker checks this. - // fn.emit(new(RunDefers)) - // fn.emit(new(Return)) - emitJump(fn, fn.Exit, nil) - } - optimizeBlocks(fn) - buildFakeExits(fn) - b.buildExits(fn) - b.addUnreachables(fn) - fn.finishBody() - b.blocksets = fn.blocksets - fn.functionBody = nil -} - -// buildFuncDecl builds IR code for the function or method declared -// by decl in package pkg. -// -func (b *builder) buildFuncDecl(pkg *Package, decl *ast.FuncDecl) { - id := decl.Name - if isBlankIdent(id) { - return // discard - } - fn := pkg.values[pkg.info.Defs[id]].(*Function) - if decl.Recv == nil && id.Name == "init" { - var v Call - v.Call.Value = fn - v.setType(types.NewTuple()) - pkg.init.emit(&v, decl) - } - fn.source = decl - b.buildFunction(fn) -} - -// Build calls Package.Build for each package in prog. -// -// Build is intended for whole-program analysis; a typical compiler -// need only build a single package. -// -// Build is idempotent and thread-safe. -// -func (prog *Program) Build() { - for _, p := range prog.packages { - p.Build() - } -} - -// Build builds IR code for all functions and vars in package p. -// -// Precondition: CreatePackage must have been called for all of p's -// direct imports (and hence its direct imports must have been -// error-free). -// -// Build is idempotent and thread-safe. -// -func (p *Package) Build() { p.buildOnce.Do(p.build) } - -func (p *Package) build() { - if p.info == nil { - return // synthetic package, e.g. "testmain" - } - - // Ensure we have runtime type info for all exported members. - // TODO(adonovan): ideally belongs in memberFromObject, but - // that would require package creation in topological order. - for name, mem := range p.Members { - if ast.IsExported(name) { - p.Prog.needMethodsOf(mem.Type()) - } - } - if p.Prog.mode&LogSource != 0 { - defer logStack("build %s", p)() - } - init := p.init - init.startBody() - init.exitBlock() - - var done *BasicBlock - - // Make init() skip if package is already initialized. - initguard := p.Var("init$guard") - doinit := init.newBasicBlock("init.start") - done = init.Exit - emitIf(init, emitLoad(init, initguard, nil), done, doinit, nil) - init.currentBlock = doinit - emitStore(init, initguard, emitConst(init, NewConst(constant.MakeBool(true), tBool)), nil) - - // Call the init() function of each package we import. - for _, pkg := range p.Pkg.Imports() { - prereq := p.Prog.packages[pkg] - if prereq == nil { - panic(fmt.Sprintf("Package(%q).Build(): unsatisfied import: Program.CreatePackage(%q) was not called", p.Pkg.Path(), pkg.Path())) - } - var v Call - v.Call.Value = prereq.init - v.setType(types.NewTuple()) - init.emit(&v, nil) - } - - b := builder{ - printFunc: p.printFunc, - } - - // Initialize package-level vars in correct order. - for _, varinit := range p.info.InitOrder { - if init.Prog.mode&LogSource != 0 { - fmt.Fprintf(os.Stderr, "build global initializer %v @ %s\n", - varinit.Lhs, p.Prog.Fset.Position(varinit.Rhs.Pos())) - } - if len(varinit.Lhs) == 1 { - // 1:1 initialization: var x, y = a(), b() - var lval lvalue - if v := varinit.Lhs[0]; v.Name() != "_" { - lval = &address{addr: p.values[v].(*Global)} - } else { - lval = blank{} - } - // TODO(dh): do emit position information - b.assign(init, lval, varinit.Rhs, true, nil, nil) - } else { - // n:1 initialization: var x, y := f() - tuple := b.exprN(init, varinit.Rhs) - for i, v := range varinit.Lhs { - if v.Name() == "_" { - continue - } - emitStore(init, p.values[v].(*Global), emitExtract(init, tuple, i, nil), nil) - } - } - } - - // Build all package-level functions, init functions - // and methods, including unreachable/blank ones. - // We build them in source order, but it's not significant. - for _, file := range p.files { - for _, decl := range file.Decls { - if decl, ok := decl.(*ast.FuncDecl); ok { - b.buildFuncDecl(p, decl) - } - } - } - - // Finish up init(). - emitJump(init, done, nil) - init.finishBody() - - p.info = nil // We no longer need ASTs or go/types deductions. - - if p.Prog.mode&SanityCheckFunctions != 0 { - sanityCheckPackage(p) - } -} - -// Like ObjectOf, but panics instead of returning nil. -// Only valid during p's create and build phases. -func (p *Package) objectOf(id *ast.Ident) types.Object { - if o := p.info.ObjectOf(id); o != nil { - return o - } - panic(fmt.Sprintf("no types.Object for ast.Ident %s @ %s", - id.Name, p.Prog.Fset.Position(id.Pos()))) -} - -// Like TypeOf, but panics instead of returning nil. -// Only valid during p's create and build phases. -func (p *Package) typeOf(e ast.Expr) types.Type { - if T := p.info.TypeOf(e); T != nil { - return T - } - panic(fmt.Sprintf("no type for %T @ %s", - e, p.Prog.Fset.Position(e.Pos()))) -} diff --git a/vendor/honnef.co/go/tools/ir/const.go b/vendor/honnef.co/go/tools/ir/const.go deleted file mode 100644 index 7cdf006e83..0000000000 --- a/vendor/honnef.co/go/tools/ir/const.go +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines the Const SSA value type. - -import ( - "fmt" - "go/constant" - "go/types" - "strconv" -) - -// NewConst returns a new constant of the specified value and type. -// val must be valid according to the specification of Const.Value. -// -func NewConst(val constant.Value, typ types.Type) *Const { - return &Const{ - register: register{ - typ: typ, - }, - Value: val, - } -} - -// intConst returns an 'int' constant that evaluates to i. -// (i is an int64 in case the host is narrower than the target.) -func intConst(i int64) *Const { - return NewConst(constant.MakeInt64(i), tInt) -} - -// nilConst returns a nil constant of the specified type, which may -// be any reference type, including interfaces. -// -func nilConst(typ types.Type) *Const { - return NewConst(nil, typ) -} - -// stringConst returns a 'string' constant that evaluates to s. -func stringConst(s string) *Const { - return NewConst(constant.MakeString(s), tString) -} - -// zeroConst returns a new "zero" constant of the specified type, -// which must not be an array or struct type: the zero values of -// aggregates are well-defined but cannot be represented by Const. -// -func zeroConst(t types.Type) *Const { - switch t := t.(type) { - case *types.Basic: - switch { - case t.Info()&types.IsBoolean != 0: - return NewConst(constant.MakeBool(false), t) - case t.Info()&types.IsNumeric != 0: - return NewConst(constant.MakeInt64(0), t) - case t.Info()&types.IsString != 0: - return NewConst(constant.MakeString(""), t) - case t.Kind() == types.UnsafePointer: - fallthrough - case t.Kind() == types.UntypedNil: - return nilConst(t) - default: - panic(fmt.Sprint("zeroConst for unexpected type:", t)) - } - case *types.Pointer, *types.Slice, *types.Interface, *types.Chan, *types.Map, *types.Signature: - return nilConst(t) - case *types.Named: - return NewConst(zeroConst(t.Underlying()).Value, t) - case *types.Array, *types.Struct, *types.Tuple: - panic(fmt.Sprint("zeroConst applied to aggregate:", t)) - } - panic(fmt.Sprint("zeroConst: unexpected ", t)) -} - -func (c *Const) RelString(from *types.Package) string { - var p string - if c.Value == nil { - p = "nil" - } else if c.Value.Kind() == constant.String { - v := constant.StringVal(c.Value) - const max = 20 - // TODO(adonovan): don't cut a rune in half. - if len(v) > max { - v = v[:max-3] + "..." // abbreviate - } - p = strconv.Quote(v) - } else { - p = c.Value.String() - } - return fmt.Sprintf("Const <%s> {%s}", relType(c.Type(), from), p) -} - -func (c *Const) String() string { - return c.RelString(c.Parent().pkg()) -} - -// IsNil returns true if this constant represents a typed or untyped nil value. -func (c *Const) IsNil() bool { - return c.Value == nil -} - -// Int64 returns the numeric value of this constant truncated to fit -// a signed 64-bit integer. -// -func (c *Const) Int64() int64 { - switch x := constant.ToInt(c.Value); x.Kind() { - case constant.Int: - if i, ok := constant.Int64Val(x); ok { - return i - } - return 0 - case constant.Float: - f, _ := constant.Float64Val(x) - return int64(f) - } - panic(fmt.Sprintf("unexpected constant value: %T", c.Value)) -} - -// Uint64 returns the numeric value of this constant truncated to fit -// an unsigned 64-bit integer. -// -func (c *Const) Uint64() uint64 { - switch x := constant.ToInt(c.Value); x.Kind() { - case constant.Int: - if u, ok := constant.Uint64Val(x); ok { - return u - } - return 0 - case constant.Float: - f, _ := constant.Float64Val(x) - return uint64(f) - } - panic(fmt.Sprintf("unexpected constant value: %T", c.Value)) -} - -// Float64 returns the numeric value of this constant truncated to fit -// a float64. -// -func (c *Const) Float64() float64 { - f, _ := constant.Float64Val(c.Value) - return f -} - -// Complex128 returns the complex value of this constant truncated to -// fit a complex128. -// -func (c *Const) Complex128() complex128 { - re, _ := constant.Float64Val(constant.Real(c.Value)) - im, _ := constant.Float64Val(constant.Imag(c.Value)) - return complex(re, im) -} diff --git a/vendor/honnef.co/go/tools/ir/create.go b/vendor/honnef.co/go/tools/ir/create.go deleted file mode 100644 index ff81a244bd..0000000000 --- a/vendor/honnef.co/go/tools/ir/create.go +++ /dev/null @@ -1,275 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file implements the CREATE phase of IR construction. -// See builder.go for explanation. - -import ( - "fmt" - "go/ast" - "go/token" - "go/types" - "os" - "sync" - - "golang.org/x/tools/go/types/typeutil" -) - -// NewProgram returns a new IR Program. -// -// mode controls diagnostics and checking during IR construction. -// -func NewProgram(fset *token.FileSet, mode BuilderMode) *Program { - prog := &Program{ - Fset: fset, - imported: make(map[string]*Package), - packages: make(map[*types.Package]*Package), - thunks: make(map[selectionKey]*Function), - bounds: make(map[*types.Func]*Function), - mode: mode, - } - - h := typeutil.MakeHasher() // protected by methodsMu, in effect - prog.methodSets.SetHasher(h) - prog.canon.SetHasher(h) - - return prog -} - -// memberFromObject populates package pkg with a member for the -// typechecker object obj. -// -// For objects from Go source code, syntax is the associated syntax -// tree (for funcs and vars only); it will be used during the build -// phase. -// -func memberFromObject(pkg *Package, obj types.Object, syntax ast.Node) { - name := obj.Name() - switch obj := obj.(type) { - case *types.Builtin: - if pkg.Pkg != types.Unsafe { - panic("unexpected builtin object: " + obj.String()) - } - - case *types.TypeName: - pkg.Members[name] = &Type{ - object: obj, - pkg: pkg, - } - - case *types.Const: - c := &NamedConst{ - object: obj, - Value: NewConst(obj.Val(), obj.Type()), - pkg: pkg, - } - pkg.values[obj] = c.Value - pkg.Members[name] = c - - case *types.Var: - g := &Global{ - Pkg: pkg, - name: name, - object: obj, - typ: types.NewPointer(obj.Type()), // address - } - pkg.values[obj] = g - pkg.Members[name] = g - - case *types.Func: - sig := obj.Type().(*types.Signature) - if sig.Recv() == nil && name == "init" { - pkg.ninit++ - name = fmt.Sprintf("init#%d", pkg.ninit) - } - fn := &Function{ - name: name, - object: obj, - Signature: sig, - Pkg: pkg, - Prog: pkg.Prog, - } - - fn.source = syntax - fn.initHTML(pkg.printFunc) - if syntax == nil { - fn.Synthetic = "loaded from gc object file" - } else { - fn.functionBody = new(functionBody) - } - - pkg.values[obj] = fn - pkg.Functions = append(pkg.Functions, fn) - if sig.Recv() == nil { - pkg.Members[name] = fn // package-level function - } - - default: // (incl. *types.Package) - panic("unexpected Object type: " + obj.String()) - } -} - -// membersFromDecl populates package pkg with members for each -// typechecker object (var, func, const or type) associated with the -// specified decl. -// -func membersFromDecl(pkg *Package, decl ast.Decl) { - switch decl := decl.(type) { - case *ast.GenDecl: // import, const, type or var - switch decl.Tok { - case token.CONST: - for _, spec := range decl.Specs { - for _, id := range spec.(*ast.ValueSpec).Names { - if !isBlankIdent(id) { - memberFromObject(pkg, pkg.info.Defs[id], nil) - } - } - } - - case token.VAR: - for _, spec := range decl.Specs { - for _, id := range spec.(*ast.ValueSpec).Names { - if !isBlankIdent(id) { - memberFromObject(pkg, pkg.info.Defs[id], spec) - } - } - } - - case token.TYPE: - for _, spec := range decl.Specs { - id := spec.(*ast.TypeSpec).Name - if !isBlankIdent(id) { - memberFromObject(pkg, pkg.info.Defs[id], nil) - } - } - } - - case *ast.FuncDecl: - id := decl.Name - if !isBlankIdent(id) { - memberFromObject(pkg, pkg.info.Defs[id], decl) - } - } -} - -// CreatePackage constructs and returns an IR Package from the -// specified type-checked, error-free file ASTs, and populates its -// Members mapping. -// -// importable determines whether this package should be returned by a -// subsequent call to ImportedPackage(pkg.Path()). -// -// The real work of building IR form for each function is not done -// until a subsequent call to Package.Build(). -// -func (prog *Program) CreatePackage(pkg *types.Package, files []*ast.File, info *types.Info, importable bool) *Package { - p := &Package{ - Prog: prog, - Members: make(map[string]Member), - values: make(map[types.Object]Value), - Pkg: pkg, - info: info, // transient (CREATE and BUILD phases) - files: files, // transient (CREATE and BUILD phases) - printFunc: prog.PrintFunc, - } - - // Add init() function. - p.init = &Function{ - name: "init", - Signature: new(types.Signature), - Synthetic: "package initializer", - Pkg: p, - Prog: prog, - functionBody: new(functionBody), - } - p.init.initHTML(prog.PrintFunc) - p.Members[p.init.name] = p.init - p.Functions = append(p.Functions, p.init) - - // CREATE phase. - // Allocate all package members: vars, funcs, consts and types. - if len(files) > 0 { - // Go source package. - for _, file := range files { - for _, decl := range file.Decls { - membersFromDecl(p, decl) - } - } - } else { - // GC-compiled binary package (or "unsafe") - // No code. - // No position information. - scope := p.Pkg.Scope() - for _, name := range scope.Names() { - obj := scope.Lookup(name) - memberFromObject(p, obj, nil) - if obj, ok := obj.(*types.TypeName); ok { - if named, ok := obj.Type().(*types.Named); ok { - for i, n := 0, named.NumMethods(); i < n; i++ { - memberFromObject(p, named.Method(i), nil) - } - } - } - } - } - - // Add initializer guard variable. - initguard := &Global{ - Pkg: p, - name: "init$guard", - typ: types.NewPointer(tBool), - } - p.Members[initguard.Name()] = initguard - - if prog.mode&GlobalDebug != 0 { - p.SetDebugMode(true) - } - - if prog.mode&PrintPackages != 0 { - printMu.Lock() - p.WriteTo(os.Stdout) - printMu.Unlock() - } - - if importable { - prog.imported[p.Pkg.Path()] = p - } - prog.packages[p.Pkg] = p - - return p -} - -// printMu serializes printing of Packages/Functions to stdout. -var printMu sync.Mutex - -// AllPackages returns a new slice containing all packages in the -// program prog in unspecified order. -// -func (prog *Program) AllPackages() []*Package { - pkgs := make([]*Package, 0, len(prog.packages)) - for _, pkg := range prog.packages { - pkgs = append(pkgs, pkg) - } - return pkgs -} - -// ImportedPackage returns the importable Package whose PkgPath -// is path, or nil if no such Package has been created. -// -// A parameter to CreatePackage determines whether a package should be -// considered importable. For example, no import declaration can resolve -// to the ad-hoc main package created by 'go build foo.go'. -// -// TODO(adonovan): rethink this function and the "importable" concept; -// most packages are importable. This function assumes that all -// types.Package.Path values are unique within the ir.Program, which is -// false---yet this function remains very convenient. -// Clients should use (*Program).Package instead where possible. -// IR doesn't really need a string-keyed map of packages. -// -func (prog *Program) ImportedPackage(path string) *Package { - return prog.imported[path] -} diff --git a/vendor/honnef.co/go/tools/ir/doc.go b/vendor/honnef.co/go/tools/ir/doc.go deleted file mode 100644 index a5f42e4f47..0000000000 --- a/vendor/honnef.co/go/tools/ir/doc.go +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package ir defines a representation of the elements of Go programs -// (packages, types, functions, variables and constants) using a -// static single-information (SSI) form intermediate representation -// (IR) for the bodies of functions. -// -// THIS INTERFACE IS EXPERIMENTAL AND IS LIKELY TO CHANGE. -// -// For an introduction to SSA form, upon which SSI builds, see -// http://en.wikipedia.org/wiki/Static_single_assignment_form. -// This page provides a broader reading list: -// http://www.dcs.gla.ac.uk/~jsinger/ssa.html. -// -// For an introduction to SSI form, see The static single information -// form by C. Scott Ananian. -// -// The level of abstraction of the IR form is intentionally close to -// the source language to facilitate construction of source analysis -// tools. It is not intended for machine code generation. -// -// The simplest way to create the IR of a package is -// to load typed syntax trees using golang.org/x/tools/go/packages, then -// invoke the irutil.Packages helper function. See ExampleLoadPackages -// and ExampleWholeProgram for examples. -// The resulting ir.Program contains all the packages and their -// members, but IR code is not created for function bodies until a -// subsequent call to (*Package).Build or (*Program).Build. -// -// The builder initially builds a naive IR form in which all local -// variables are addresses of stack locations with explicit loads and -// stores. Registerisation of eligible locals and φ-node insertion -// using dominance and dataflow are then performed as a second pass -// called "lifting" to improve the accuracy and performance of -// subsequent analyses; this pass can be skipped by setting the -// NaiveForm builder flag. -// -// The primary interfaces of this package are: -// -// - Member: a named member of a Go package. -// - Value: an expression that yields a value. -// - Instruction: a statement that consumes values and performs computation. -// - Node: a Value or Instruction (emphasizing its membership in the IR value graph) -// -// A computation that yields a result implements both the Value and -// Instruction interfaces. The following table shows for each -// concrete type which of these interfaces it implements. -// -// Value? Instruction? Member? -// *Alloc ✔ ✔ -// *BinOp ✔ ✔ -// *BlankStore ✔ -// *Builtin ✔ -// *Call ✔ ✔ -// *ChangeInterface ✔ ✔ -// *ChangeType ✔ ✔ -// *Const ✔ ✔ -// *Convert ✔ ✔ -// *DebugRef ✔ -// *Defer ✔ ✔ -// *Extract ✔ ✔ -// *Field ✔ ✔ -// *FieldAddr ✔ ✔ -// *FreeVar ✔ -// *Function ✔ ✔ (func) -// *Global ✔ ✔ (var) -// *Go ✔ ✔ -// *If ✔ -// *Index ✔ ✔ -// *IndexAddr ✔ ✔ -// *Jump ✔ -// *Load ✔ ✔ -// *MakeChan ✔ ✔ -// *MakeClosure ✔ ✔ -// *MakeInterface ✔ ✔ -// *MakeMap ✔ ✔ -// *MakeSlice ✔ ✔ -// *MapLookup ✔ ✔ -// *MapUpdate ✔ ✔ -// *NamedConst ✔ (const) -// *Next ✔ ✔ -// *Panic ✔ -// *Parameter ✔ ✔ -// *Phi ✔ ✔ -// *Range ✔ ✔ -// *Recv ✔ ✔ -// *Return ✔ -// *RunDefers ✔ -// *Select ✔ ✔ -// *Send ✔ ✔ -// *Sigma ✔ ✔ -// *Slice ✔ ✔ -// *Store ✔ ✔ -// *StringLookup ✔ ✔ -// *Type ✔ (type) -// *TypeAssert ✔ ✔ -// *UnOp ✔ ✔ -// *Unreachable ✔ -// -// Other key types in this package include: Program, Package, Function -// and BasicBlock. -// -// The program representation constructed by this package is fully -// resolved internally, i.e. it does not rely on the names of Values, -// Packages, Functions, Types or BasicBlocks for the correct -// interpretation of the program. Only the identities of objects and -// the topology of the IR and type graphs are semantically -// significant. (There is one exception: Ids, used to identify field -// and method names, contain strings.) Avoidance of name-based -// operations simplifies the implementation of subsequent passes and -// can make them very efficient. Many objects are nonetheless named -// to aid in debugging, but it is not essential that the names be -// either accurate or unambiguous. The public API exposes a number of -// name-based maps for client convenience. -// -// The ir/irutil package provides various utilities that depend only -// on the public API of this package. -// -// TODO(adonovan): Consider the exceptional control-flow implications -// of defer and recover(). -// -// TODO(adonovan): write a how-to document for all the various cases -// of trying to determine corresponding elements across the four -// domains of source locations, ast.Nodes, types.Objects, -// ir.Values/Instructions. -// -package ir // import "honnef.co/go/tools/ir" diff --git a/vendor/honnef.co/go/tools/ir/dom.go b/vendor/honnef.co/go/tools/ir/dom.go deleted file mode 100644 index 08c147df9b..0000000000 --- a/vendor/honnef.co/go/tools/ir/dom.go +++ /dev/null @@ -1,461 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines algorithms related to dominance. - -// Dominator tree construction ---------------------------------------- -// -// We use the algorithm described in Lengauer & Tarjan. 1979. A fast -// algorithm for finding dominators in a flowgraph. -// http://doi.acm.org/10.1145/357062.357071 -// -// We also apply the optimizations to SLT described in Georgiadis et -// al, Finding Dominators in Practice, JGAA 2006, -// http://jgaa.info/accepted/2006/GeorgiadisTarjanWerneck2006.10.1.pdf -// to avoid the need for buckets of size > 1. - -import ( - "bytes" - "fmt" - "io" - "math/big" - "os" - "sort" -) - -// Idom returns the block that immediately dominates b: -// its parent in the dominator tree, if any. -// The entry node (b.Index==0) does not have a parent. -// -func (b *BasicBlock) Idom() *BasicBlock { return b.dom.idom } - -// Dominees returns the list of blocks that b immediately dominates: -// its children in the dominator tree. -// -func (b *BasicBlock) Dominees() []*BasicBlock { return b.dom.children } - -// Dominates reports whether b dominates c. -func (b *BasicBlock) Dominates(c *BasicBlock) bool { - return b.dom.pre <= c.dom.pre && c.dom.post <= b.dom.post -} - -type byDomPreorder []*BasicBlock - -func (a byDomPreorder) Len() int { return len(a) } -func (a byDomPreorder) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a byDomPreorder) Less(i, j int) bool { return a[i].dom.pre < a[j].dom.pre } - -// DomPreorder returns a new slice containing the blocks of f in -// dominator tree preorder. -// -func (f *Function) DomPreorder() []*BasicBlock { - n := len(f.Blocks) - order := make(byDomPreorder, n) - copy(order, f.Blocks) - sort.Sort(order) - return order -} - -// domInfo contains a BasicBlock's dominance information. -type domInfo struct { - idom *BasicBlock // immediate dominator (parent in domtree) - children []*BasicBlock // nodes immediately dominated by this one - pre, post int32 // pre- and post-order numbering within domtree -} - -// buildDomTree computes the dominator tree of f using the LT algorithm. -// Precondition: all blocks are reachable (e.g. optimizeBlocks has been run). -// -func buildDomTree(fn *Function) { - // The step numbers refer to the original LT paper; the - // reordering is due to Georgiadis. - - // Clear any previous domInfo. - for _, b := range fn.Blocks { - b.dom = domInfo{} - } - - idoms := make([]*BasicBlock, len(fn.Blocks)) - - order := make([]*BasicBlock, 0, len(fn.Blocks)) - seen := fn.blockset(0) - var dfs func(b *BasicBlock) - dfs = func(b *BasicBlock) { - if !seen.Add(b) { - return - } - for _, succ := range b.Succs { - dfs(succ) - } - if fn.fakeExits.Has(b) { - dfs(fn.Exit) - } - order = append(order, b) - b.post = len(order) - 1 - } - dfs(fn.Blocks[0]) - - for i := 0; i < len(order)/2; i++ { - o := len(order) - i - 1 - order[i], order[o] = order[o], order[i] - } - - idoms[fn.Blocks[0].Index] = fn.Blocks[0] - changed := true - for changed { - changed = false - // iterate over all nodes in reverse postorder, except for the - // entry node - for _, b := range order[1:] { - var newIdom *BasicBlock - do := func(p *BasicBlock) { - if idoms[p.Index] == nil { - return - } - if newIdom == nil { - newIdom = p - } else { - finger1 := p - finger2 := newIdom - for finger1 != finger2 { - for finger1.post < finger2.post { - finger1 = idoms[finger1.Index] - } - for finger2.post < finger1.post { - finger2 = idoms[finger2.Index] - } - } - newIdom = finger1 - } - } - for _, p := range b.Preds { - do(p) - } - if b == fn.Exit { - for _, p := range fn.Blocks { - if fn.fakeExits.Has(p) { - do(p) - } - } - } - - if idoms[b.Index] != newIdom { - idoms[b.Index] = newIdom - changed = true - } - } - } - - for i, b := range idoms { - fn.Blocks[i].dom.idom = b - if b == nil { - // malformed CFG - continue - } - if i == b.Index { - continue - } - b.dom.children = append(b.dom.children, fn.Blocks[i]) - } - - numberDomTree(fn.Blocks[0], 0, 0) - - // printDomTreeDot(os.Stderr, fn) // debugging - // printDomTreeText(os.Stderr, root, 0) // debugging - - if fn.Prog.mode&SanityCheckFunctions != 0 { - sanityCheckDomTree(fn) - } -} - -// buildPostDomTree is like buildDomTree, but builds the post-dominator tree instead. -func buildPostDomTree(fn *Function) { - // The step numbers refer to the original LT paper; the - // reordering is due to Georgiadis. - - // Clear any previous domInfo. - for _, b := range fn.Blocks { - b.pdom = domInfo{} - } - - idoms := make([]*BasicBlock, len(fn.Blocks)) - - order := make([]*BasicBlock, 0, len(fn.Blocks)) - seen := fn.blockset(0) - var dfs func(b *BasicBlock) - dfs = func(b *BasicBlock) { - if !seen.Add(b) { - return - } - for _, pred := range b.Preds { - dfs(pred) - } - if b == fn.Exit { - for _, p := range fn.Blocks { - if fn.fakeExits.Has(p) { - dfs(p) - } - } - } - order = append(order, b) - b.post = len(order) - 1 - } - dfs(fn.Exit) - - for i := 0; i < len(order)/2; i++ { - o := len(order) - i - 1 - order[i], order[o] = order[o], order[i] - } - - idoms[fn.Exit.Index] = fn.Exit - changed := true - for changed { - changed = false - // iterate over all nodes in reverse postorder, except for the - // exit node - for _, b := range order[1:] { - var newIdom *BasicBlock - do := func(p *BasicBlock) { - if idoms[p.Index] == nil { - return - } - if newIdom == nil { - newIdom = p - } else { - finger1 := p - finger2 := newIdom - for finger1 != finger2 { - for finger1.post < finger2.post { - finger1 = idoms[finger1.Index] - } - for finger2.post < finger1.post { - finger2 = idoms[finger2.Index] - } - } - newIdom = finger1 - } - } - for _, p := range b.Succs { - do(p) - } - if fn.fakeExits.Has(b) { - do(fn.Exit) - } - - if idoms[b.Index] != newIdom { - idoms[b.Index] = newIdom - changed = true - } - } - } - - for i, b := range idoms { - fn.Blocks[i].pdom.idom = b - if b == nil { - // malformed CFG - continue - } - if i == b.Index { - continue - } - b.pdom.children = append(b.pdom.children, fn.Blocks[i]) - } - - numberPostDomTree(fn.Exit, 0, 0) - - // printPostDomTreeDot(os.Stderr, fn) // debugging - // printPostDomTreeText(os.Stderr, fn.Exit, 0) // debugging - - if fn.Prog.mode&SanityCheckFunctions != 0 { // XXX - sanityCheckDomTree(fn) // XXX - } -} - -// numberDomTree sets the pre- and post-order numbers of a depth-first -// traversal of the dominator tree rooted at v. These are used to -// answer dominance queries in constant time. -// -func numberDomTree(v *BasicBlock, pre, post int32) (int32, int32) { - v.dom.pre = pre - pre++ - for _, child := range v.dom.children { - pre, post = numberDomTree(child, pre, post) - } - v.dom.post = post - post++ - return pre, post -} - -// numberPostDomTree sets the pre- and post-order numbers of a depth-first -// traversal of the post-dominator tree rooted at v. These are used to -// answer post-dominance queries in constant time. -// -func numberPostDomTree(v *BasicBlock, pre, post int32) (int32, int32) { - v.pdom.pre = pre - pre++ - for _, child := range v.pdom.children { - pre, post = numberPostDomTree(child, pre, post) - } - v.pdom.post = post - post++ - return pre, post -} - -// Testing utilities ---------------------------------------- - -// sanityCheckDomTree checks the correctness of the dominator tree -// computed by the LT algorithm by comparing against the dominance -// relation computed by a naive Kildall-style forward dataflow -// analysis (Algorithm 10.16 from the "Dragon" book). -// -func sanityCheckDomTree(f *Function) { - n := len(f.Blocks) - - // D[i] is the set of blocks that dominate f.Blocks[i], - // represented as a bit-set of block indices. - D := make([]big.Int, n) - - one := big.NewInt(1) - - // all is the set of all blocks; constant. - var all big.Int - all.Set(one).Lsh(&all, uint(n)).Sub(&all, one) - - // Initialization. - for i := range f.Blocks { - if i == 0 { - // A root is dominated only by itself. - D[i].SetBit(&D[0], 0, 1) - } else { - // All other blocks are (initially) dominated - // by every block. - D[i].Set(&all) - } - } - - // Iteration until fixed point. - for changed := true; changed; { - changed = false - for i, b := range f.Blocks { - if i == 0 { - continue - } - // Compute intersection across predecessors. - var x big.Int - x.Set(&all) - for _, pred := range b.Preds { - x.And(&x, &D[pred.Index]) - } - if b == f.Exit { - for _, p := range f.Blocks { - if f.fakeExits.Has(p) { - x.And(&x, &D[p.Index]) - } - } - } - x.SetBit(&x, i, 1) // a block always dominates itself. - if D[i].Cmp(&x) != 0 { - D[i].Set(&x) - changed = true - } - } - } - - // Check the entire relation. O(n^2). - ok := true - for i := 0; i < n; i++ { - for j := 0; j < n; j++ { - b, c := f.Blocks[i], f.Blocks[j] - actual := b.Dominates(c) - expected := D[j].Bit(i) == 1 - if actual != expected { - fmt.Fprintf(os.Stderr, "dominates(%s, %s)==%t, want %t\n", b, c, actual, expected) - ok = false - } - } - } - - preorder := f.DomPreorder() - for _, b := range f.Blocks { - if got := preorder[b.dom.pre]; got != b { - fmt.Fprintf(os.Stderr, "preorder[%d]==%s, want %s\n", b.dom.pre, got, b) - ok = false - } - } - - if !ok { - panic("sanityCheckDomTree failed for " + f.String()) - } - -} - -// Printing functions ---------------------------------------- - -// printDomTree prints the dominator tree as text, using indentation. -//lint:ignore U1000 used during debugging -func printDomTreeText(buf *bytes.Buffer, v *BasicBlock, indent int) { - fmt.Fprintf(buf, "%*s%s\n", 4*indent, "", v) - for _, child := range v.dom.children { - printDomTreeText(buf, child, indent+1) - } -} - -// printDomTreeDot prints the dominator tree of f in AT&T GraphViz -// (.dot) format. -//lint:ignore U1000 used during debugging -func printDomTreeDot(buf io.Writer, f *Function) { - fmt.Fprintln(buf, "//", f) - fmt.Fprintln(buf, "digraph domtree {") - for i, b := range f.Blocks { - v := b.dom - fmt.Fprintf(buf, "\tn%d [label=\"%s (%d, %d)\",shape=\"rectangle\"];\n", v.pre, b, v.pre, v.post) - // TODO(adonovan): improve appearance of edges - // belonging to both dominator tree and CFG. - - // Dominator tree edge. - if i != 0 { - fmt.Fprintf(buf, "\tn%d -> n%d [style=\"solid\",weight=100];\n", v.idom.dom.pre, v.pre) - } - // CFG edges. - for _, pred := range b.Preds { - fmt.Fprintf(buf, "\tn%d -> n%d [style=\"dotted\",weight=0];\n", pred.dom.pre, v.pre) - } - } - fmt.Fprintln(buf, "}") -} - -// printDomTree prints the dominator tree as text, using indentation. -//lint:ignore U1000 used during debugging -func printPostDomTreeText(buf io.Writer, v *BasicBlock, indent int) { - fmt.Fprintf(buf, "%*s%s\n", 4*indent, "", v) - for _, child := range v.pdom.children { - printPostDomTreeText(buf, child, indent+1) - } -} - -// printDomTreeDot prints the dominator tree of f in AT&T GraphViz -// (.dot) format. -//lint:ignore U1000 used during debugging -func printPostDomTreeDot(buf io.Writer, f *Function) { - fmt.Fprintln(buf, "//", f) - fmt.Fprintln(buf, "digraph pdomtree {") - for _, b := range f.Blocks { - v := b.pdom - fmt.Fprintf(buf, "\tn%d [label=\"%s (%d, %d)\",shape=\"rectangle\"];\n", v.pre, b, v.pre, v.post) - // TODO(adonovan): improve appearance of edges - // belonging to both dominator tree and CFG. - - // Dominator tree edge. - if b != f.Exit { - fmt.Fprintf(buf, "\tn%d -> n%d [style=\"solid\",weight=100];\n", v.idom.pdom.pre, v.pre) - } - // CFG edges. - for _, pred := range b.Preds { - fmt.Fprintf(buf, "\tn%d -> n%d [style=\"dotted\",weight=0];\n", pred.pdom.pre, v.pre) - } - } - fmt.Fprintln(buf, "}") -} diff --git a/vendor/honnef.co/go/tools/ir/emit.go b/vendor/honnef.co/go/tools/ir/emit.go deleted file mode 100644 index 5fa137af9e..0000000000 --- a/vendor/honnef.co/go/tools/ir/emit.go +++ /dev/null @@ -1,450 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// Helpers for emitting IR instructions. - -import ( - "fmt" - "go/ast" - "go/constant" - "go/token" - "go/types" -) - -// emitNew emits to f a new (heap Alloc) instruction allocating an -// object of type typ. pos is the optional source location. -// -func emitNew(f *Function, typ types.Type, source ast.Node) *Alloc { - v := &Alloc{Heap: true} - v.setType(types.NewPointer(typ)) - f.emit(v, source) - return v -} - -// emitLoad emits to f an instruction to load the address addr into a -// new temporary, and returns the value so defined. -// -func emitLoad(f *Function, addr Value, source ast.Node) *Load { - v := &Load{X: addr} - v.setType(deref(addr.Type())) - f.emit(v, source) - return v -} - -func emitRecv(f *Function, ch Value, commaOk bool, typ types.Type, source ast.Node) Value { - recv := &Recv{ - Chan: ch, - CommaOk: commaOk, - } - recv.setType(typ) - return f.emit(recv, source) -} - -// emitDebugRef emits to f a DebugRef pseudo-instruction associating -// expression e with value v. -// -func emitDebugRef(f *Function, e ast.Expr, v Value, isAddr bool) { - if !f.debugInfo() { - return // debugging not enabled - } - if v == nil || e == nil { - panic("nil") - } - var obj types.Object - e = unparen(e) - if id, ok := e.(*ast.Ident); ok { - if isBlankIdent(id) { - return - } - obj = f.Pkg.objectOf(id) - switch obj.(type) { - case *types.Nil, *types.Const, *types.Builtin: - return - } - } - f.emit(&DebugRef{ - X: v, - Expr: e, - IsAddr: isAddr, - object: obj, - }, nil) -} - -// emitArith emits to f code to compute the binary operation op(x, y) -// where op is an eager shift, logical or arithmetic operation. -// (Use emitCompare() for comparisons and Builder.logicalBinop() for -// non-eager operations.) -// -func emitArith(f *Function, op token.Token, x, y Value, t types.Type, source ast.Node) Value { - switch op { - case token.SHL, token.SHR: - x = emitConv(f, x, t, source) - // y may be signed or an 'untyped' constant. - // TODO(adonovan): whence signed values? - if b, ok := y.Type().Underlying().(*types.Basic); ok && b.Info()&types.IsUnsigned == 0 { - y = emitConv(f, y, types.Typ[types.Uint64], source) - } - - case token.ADD, token.SUB, token.MUL, token.QUO, token.REM, token.AND, token.OR, token.XOR, token.AND_NOT: - x = emitConv(f, x, t, source) - y = emitConv(f, y, t, source) - - default: - panic("illegal op in emitArith: " + op.String()) - - } - v := &BinOp{ - Op: op, - X: x, - Y: y, - } - v.setType(t) - return f.emit(v, source) -} - -// emitCompare emits to f code compute the boolean result of -// comparison comparison 'x op y'. -// -func emitCompare(f *Function, op token.Token, x, y Value, source ast.Node) Value { - xt := x.Type().Underlying() - yt := y.Type().Underlying() - - // Special case to optimise a tagless SwitchStmt so that - // these are equivalent - // switch { case e: ...} - // switch true { case e: ... } - // if e==true { ... } - // even in the case when e's type is an interface. - // TODO(adonovan): opt: generalise to x==true, false!=y, etc. - if x, ok := x.(*Const); ok && op == token.EQL && x.Value != nil && x.Value.Kind() == constant.Bool && constant.BoolVal(x.Value) { - if yt, ok := yt.(*types.Basic); ok && yt.Info()&types.IsBoolean != 0 { - return y - } - } - - if types.Identical(xt, yt) { - // no conversion necessary - } else if _, ok := xt.(*types.Interface); ok { - y = emitConv(f, y, x.Type(), source) - } else if _, ok := yt.(*types.Interface); ok { - x = emitConv(f, x, y.Type(), source) - } else if _, ok := x.(*Const); ok { - x = emitConv(f, x, y.Type(), source) - } else if _, ok := y.(*Const); ok { - y = emitConv(f, y, x.Type(), source) - //lint:ignore SA9003 no-op - } else { - // other cases, e.g. channels. No-op. - } - - v := &BinOp{ - Op: op, - X: x, - Y: y, - } - v.setType(tBool) - return f.emit(v, source) -} - -// isValuePreserving returns true if a conversion from ut_src to -// ut_dst is value-preserving, i.e. just a change of type. -// Precondition: neither argument is a named type. -// -func isValuePreserving(ut_src, ut_dst types.Type) bool { - // Identical underlying types? - if structTypesIdentical(ut_dst, ut_src) { - return true - } - - switch ut_dst.(type) { - case *types.Chan: - // Conversion between channel types? - _, ok := ut_src.(*types.Chan) - return ok - - case *types.Pointer: - // Conversion between pointers with identical base types? - _, ok := ut_src.(*types.Pointer) - return ok - } - return false -} - -// emitConv emits to f code to convert Value val to exactly type typ, -// and returns the converted value. Implicit conversions are required -// by language assignability rules in assignments, parameter passing, -// etc. Conversions cannot fail dynamically. -// -func emitConv(f *Function, val Value, typ types.Type, source ast.Node) Value { - t_src := val.Type() - - // Identical types? Conversion is a no-op. - if types.Identical(t_src, typ) { - return val - } - - ut_dst := typ.Underlying() - ut_src := t_src.Underlying() - - // Just a change of type, but not value or representation? - if isValuePreserving(ut_src, ut_dst) { - c := &ChangeType{X: val} - c.setType(typ) - return f.emit(c, source) - } - - // Conversion to, or construction of a value of, an interface type? - if _, ok := ut_dst.(*types.Interface); ok { - // Assignment from one interface type to another? - if _, ok := ut_src.(*types.Interface); ok { - c := &ChangeInterface{X: val} - c.setType(typ) - return f.emit(c, source) - } - - // Untyped nil constant? Return interface-typed nil constant. - if ut_src == tUntypedNil { - return emitConst(f, nilConst(typ)) - } - - // Convert (non-nil) "untyped" literals to their default type. - if t, ok := ut_src.(*types.Basic); ok && t.Info()&types.IsUntyped != 0 { - val = emitConv(f, val, types.Default(ut_src), source) - } - - f.Pkg.Prog.needMethodsOf(val.Type()) - mi := &MakeInterface{X: val} - mi.setType(typ) - return f.emit(mi, source) - } - - // Conversion of a compile-time constant value? - if c, ok := val.(*Const); ok { - if _, ok := ut_dst.(*types.Basic); ok || c.IsNil() { - // Conversion of a compile-time constant to - // another constant type results in a new - // constant of the destination type and - // (initially) the same abstract value. - // We don't truncate the value yet. - return emitConst(f, NewConst(c.Value, typ)) - } - - // We're converting from constant to non-constant type, - // e.g. string -> []byte/[]rune. - } - - // A representation-changing conversion? - // At least one of {ut_src,ut_dst} must be *Basic. - // (The other may be []byte or []rune.) - _, ok1 := ut_src.(*types.Basic) - _, ok2 := ut_dst.(*types.Basic) - if ok1 || ok2 { - c := &Convert{X: val} - c.setType(typ) - return f.emit(c, source) - } - - panic(fmt.Sprintf("in %s: cannot convert %s (%s) to %s", f, val, val.Type(), typ)) -} - -// emitStore emits to f an instruction to store value val at location -// addr, applying implicit conversions as required by assignability rules. -// -func emitStore(f *Function, addr, val Value, source ast.Node) *Store { - s := &Store{ - Addr: addr, - Val: emitConv(f, val, deref(addr.Type()), source), - } - // make sure we call getMem after the call to emitConv, which may - // itself update the memory state - f.emit(s, source) - return s -} - -// emitJump emits to f a jump to target, and updates the control-flow graph. -// Postcondition: f.currentBlock is nil. -// -func emitJump(f *Function, target *BasicBlock, source ast.Node) *Jump { - b := f.currentBlock - j := new(Jump) - b.emit(j, source) - addEdge(b, target) - f.currentBlock = nil - return j -} - -// emitIf emits to f a conditional jump to tblock or fblock based on -// cond, and updates the control-flow graph. -// Postcondition: f.currentBlock is nil. -// -func emitIf(f *Function, cond Value, tblock, fblock *BasicBlock, source ast.Node) *If { - b := f.currentBlock - stmt := &If{Cond: cond} - b.emit(stmt, source) - addEdge(b, tblock) - addEdge(b, fblock) - f.currentBlock = nil - return stmt -} - -// emitExtract emits to f an instruction to extract the index'th -// component of tuple. It returns the extracted value. -// -func emitExtract(f *Function, tuple Value, index int, source ast.Node) Value { - e := &Extract{Tuple: tuple, Index: index} - e.setType(tuple.Type().(*types.Tuple).At(index).Type()) - return f.emit(e, source) -} - -// emitTypeAssert emits to f a type assertion value := x.(t) and -// returns the value. x.Type() must be an interface. -// -func emitTypeAssert(f *Function, x Value, t types.Type, source ast.Node) Value { - a := &TypeAssert{X: x, AssertedType: t} - a.setType(t) - return f.emit(a, source) -} - -// emitTypeTest emits to f a type test value,ok := x.(t) and returns -// a (value, ok) tuple. x.Type() must be an interface. -// -func emitTypeTest(f *Function, x Value, t types.Type, source ast.Node) Value { - a := &TypeAssert{ - X: x, - AssertedType: t, - CommaOk: true, - } - a.setType(types.NewTuple( - newVar("value", t), - varOk, - )) - return f.emit(a, source) -} - -// emitTailCall emits to f a function call in tail position. The -// caller is responsible for all fields of 'call' except its type. -// Intended for wrapper methods. -// Precondition: f does/will not use deferred procedure calls. -// Postcondition: f.currentBlock is nil. -// -func emitTailCall(f *Function, call *Call, source ast.Node) { - tresults := f.Signature.Results() - nr := tresults.Len() - if nr == 1 { - call.typ = tresults.At(0).Type() - } else { - call.typ = tresults - } - tuple := f.emit(call, source) - var ret Return - switch nr { - case 0: - // no-op - case 1: - ret.Results = []Value{tuple} - default: - for i := 0; i < nr; i++ { - v := emitExtract(f, tuple, i, source) - // TODO(adonovan): in principle, this is required: - // v = emitConv(f, o.Type, f.Signature.Results[i].Type) - // but in practice emitTailCall is only used when - // the types exactly match. - ret.Results = append(ret.Results, v) - } - } - - f.Exit = f.newBasicBlock("exit") - emitJump(f, f.Exit, source) - f.currentBlock = f.Exit - f.emit(&ret, source) - f.currentBlock = nil -} - -// emitImplicitSelections emits to f code to apply the sequence of -// implicit field selections specified by indices to base value v, and -// returns the selected value. -// -// If v is the address of a struct, the result will be the address of -// a field; if it is the value of a struct, the result will be the -// value of a field. -// -func emitImplicitSelections(f *Function, v Value, indices []int, source ast.Node) Value { - for _, index := range indices { - fld := deref(v.Type()).Underlying().(*types.Struct).Field(index) - - if isPointer(v.Type()) { - instr := &FieldAddr{ - X: v, - Field: index, - } - instr.setType(types.NewPointer(fld.Type())) - v = f.emit(instr, source) - // Load the field's value iff indirectly embedded. - if isPointer(fld.Type()) { - v = emitLoad(f, v, source) - } - } else { - instr := &Field{ - X: v, - Field: index, - } - instr.setType(fld.Type()) - v = f.emit(instr, source) - } - } - return v -} - -// emitFieldSelection emits to f code to select the index'th field of v. -// -// If wantAddr, the input must be a pointer-to-struct and the result -// will be the field's address; otherwise the result will be the -// field's value. -// Ident id is used for position and debug info. -// -func emitFieldSelection(f *Function, v Value, index int, wantAddr bool, id *ast.Ident) Value { - fld := deref(v.Type()).Underlying().(*types.Struct).Field(index) - if isPointer(v.Type()) { - instr := &FieldAddr{ - X: v, - Field: index, - } - instr.setSource(id) - instr.setType(types.NewPointer(fld.Type())) - v = f.emit(instr, id) - // Load the field's value iff we don't want its address. - if !wantAddr { - v = emitLoad(f, v, id) - } - } else { - instr := &Field{ - X: v, - Field: index, - } - instr.setSource(id) - instr.setType(fld.Type()) - v = f.emit(instr, id) - } - emitDebugRef(f, id, v, wantAddr) - return v -} - -// zeroValue emits to f code to produce a zero value of type t, -// and returns it. -// -func zeroValue(f *Function, t types.Type, source ast.Node) Value { - switch t.Underlying().(type) { - case *types.Struct, *types.Array: - return emitLoad(f, f.addLocal(t, source), source) - default: - return emitConst(f, zeroConst(t)) - } -} - -func emitConst(f *Function, c *Const) *Const { - f.consts = append(f.consts, c) - return c -} diff --git a/vendor/honnef.co/go/tools/ir/exits.go b/vendor/honnef.co/go/tools/ir/exits.go deleted file mode 100644 index 10cda7bb66..0000000000 --- a/vendor/honnef.co/go/tools/ir/exits.go +++ /dev/null @@ -1,271 +0,0 @@ -package ir - -import ( - "go/types" -) - -func (b *builder) buildExits(fn *Function) { - if obj := fn.Object(); obj != nil { - switch obj.Pkg().Path() { - case "runtime": - switch obj.Name() { - case "exit": - fn.WillExit = true - return - case "throw": - fn.WillExit = true - return - case "Goexit": - fn.WillUnwind = true - return - } - case "github.com/sirupsen/logrus": - switch obj.(*types.Func).FullName() { - case "(*github.com/sirupsen/logrus.Logger).Exit": - // Technically, this method does not unconditionally exit - // the process. It dynamically calls a function stored in - // the logger. If the function is nil, it defaults to - // os.Exit. - // - // The main intent of this method is to terminate the - // process, and that's what the vast majority of people - // will use it for. We'll happily accept some false - // negatives to avoid a lot of false positives. - fn.WillExit = true - return - case "(*github.com/sirupsen/logrus.Logger).Panic", - "(*github.com/sirupsen/logrus.Logger).Panicf", - "(*github.com/sirupsen/logrus.Logger).Panicln": - - // These methods will always panic, but that's not - // statically known from the code alone, because they - // take a detour through the generic Log methods. - fn.WillUnwind = true - return - case "(*github.com/sirupsen/logrus.Entry).Panicf", - "(*github.com/sirupsen/logrus.Entry).Panicln": - - // Entry.Panic has an explicit panic, but Panicf and - // Panicln do not, relying fully on the generic Log - // method. - fn.WillUnwind = true - return - case "(*github.com/sirupsen/logrus.Logger).Log", - "(*github.com/sirupsen/logrus.Logger).Logf", - "(*github.com/sirupsen/logrus.Logger).Logln": - // TODO(dh): we cannot handle these case. Whether they - // exit or unwind depends on the level, which is set - // via the first argument. We don't currently support - // call-site-specific exit information. - } - } - } - - buildDomTree(fn) - - isRecoverCall := func(instr Instruction) bool { - if instr, ok := instr.(*Call); ok { - if builtin, ok := instr.Call.Value.(*Builtin); ok { - if builtin.Name() == "recover" { - return true - } - } - } - return false - } - - // All panics branch to the exit block, which means that if every - // possible path through the function panics, then all - // predecessors of the exit block must panic. - willPanic := true - for _, pred := range fn.Exit.Preds { - if _, ok := pred.Control().(*Panic); !ok { - willPanic = false - } - } - if willPanic { - recovers := false - recoverLoop: - for _, u := range fn.Blocks { - for _, instr := range u.Instrs { - if instr, ok := instr.(*Defer); ok { - call := instr.Call.StaticCallee() - if call == nil { - // not a static call, so we can't be sure the - // deferred call isn't calling recover - recovers = true - break recoverLoop - } - if len(call.Blocks) == 0 { - // external function, we don't know what's - // happening inside it - // - // TODO(dh): this includes functions from - // imported packages, due to how go/analysis - // works. We could introduce another fact, - // like we've done for exiting and unwinding, - // but it doesn't seem worth it. Virtually all - // uses of recover will be in closures. - recovers = true - break recoverLoop - } - for _, y := range call.Blocks { - for _, instr2 := range y.Instrs { - if isRecoverCall(instr2) { - recovers = true - break recoverLoop - } - } - } - } - } - } - if !recovers { - fn.WillUnwind = true - return - } - } - - // TODO(dh): don't check that any specific call dominates the exit - // block. instead, check that all calls combined cover every - // possible path through the function. - exits := NewBlockSet(len(fn.Blocks)) - unwinds := NewBlockSet(len(fn.Blocks)) - for _, u := range fn.Blocks { - for _, instr := range u.Instrs { - if instr, ok := instr.(CallInstruction); ok { - switch instr.(type) { - case *Defer, *Call: - default: - continue - } - if instr.Common().IsInvoke() { - // give up - return - } - var call *Function - switch instr.Common().Value.(type) { - case *Function, *MakeClosure: - call = instr.Common().StaticCallee() - case *Builtin: - // the only builtins that affect control flow are - // panic and recover, and we've already handled - // those - continue - default: - // dynamic dispatch - return - } - // buildFunction is idempotent. if we're part of a - // (mutually) recursive call chain, then buildFunction - // will immediately return, and fn.WillExit will be false. - if call.Package() == fn.Package() { - b.buildFunction(call) - } - dom := u.Dominates(fn.Exit) - if call.WillExit { - if dom { - fn.WillExit = true - return - } - exits.Add(u) - } else if call.WillUnwind { - if dom { - fn.WillUnwind = true - return - } - unwinds.Add(u) - } - } - } - } - - // depth-first search trying to find a path to the exit block that - // doesn't cross any of the blacklisted blocks - seen := NewBlockSet(len(fn.Blocks)) - var findPath func(root *BasicBlock, bl *BlockSet) bool - findPath = func(root *BasicBlock, bl *BlockSet) bool { - if root == fn.Exit { - return true - } - if seen.Has(root) { - return false - } - if bl.Has(root) { - return false - } - seen.Add(root) - for _, succ := range root.Succs { - if findPath(succ, bl) { - return true - } - } - return false - } - - if exits.Num() > 0 { - if !findPath(fn.Blocks[0], exits) { - fn.WillExit = true - return - } - } - if unwinds.Num() > 0 { - seen.Clear() - if !findPath(fn.Blocks[0], unwinds) { - fn.WillUnwind = true - return - } - } -} - -func (b *builder) addUnreachables(fn *Function) { - for _, bb := range fn.Blocks { - for i, instr := range bb.Instrs { - if instr, ok := instr.(*Call); ok { - var call *Function - switch v := instr.Common().Value.(type) { - case *Function: - call = v - case *MakeClosure: - call = v.Fn.(*Function) - } - if call == nil { - continue - } - if call.Package() == fn.Package() { - // make sure we have information on all functions in this package - b.buildFunction(call) - } - if call.WillExit { - // This call will cause the process to terminate. - // Remove remaining instructions in the block and - // replace any control flow with Unreachable. - for _, succ := range bb.Succs { - succ.removePred(bb) - } - bb.Succs = bb.Succs[:0] - - bb.Instrs = bb.Instrs[:i+1] - bb.emit(new(Unreachable), instr.Source()) - addEdge(bb, fn.Exit) - break - } else if call.WillUnwind { - // This call will cause the goroutine to terminate - // and defers to run (i.e. a panic or - // runtime.Goexit). Remove remaining instructions - // in the block and replace any control flow with - // an unconditional jump to the exit block. - for _, succ := range bb.Succs { - succ.removePred(bb) - } - bb.Succs = bb.Succs[:0] - - bb.Instrs = bb.Instrs[:i+1] - bb.emit(new(Jump), instr.Source()) - addEdge(bb, fn.Exit) - break - } - } - } - } -} diff --git a/vendor/honnef.co/go/tools/ir/func.go b/vendor/honnef.co/go/tools/ir/func.go deleted file mode 100644 index 386d82b670..0000000000 --- a/vendor/honnef.co/go/tools/ir/func.go +++ /dev/null @@ -1,961 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file implements the Function and BasicBlock types. - -import ( - "bytes" - "fmt" - "go/ast" - "go/constant" - "go/format" - "go/token" - "go/types" - "io" - "os" - "strings" -) - -// addEdge adds a control-flow graph edge from from to to. -func addEdge(from, to *BasicBlock) { - from.Succs = append(from.Succs, to) - to.Preds = append(to.Preds, from) -} - -// Control returns the last instruction in the block. -func (b *BasicBlock) Control() Instruction { - if len(b.Instrs) == 0 { - return nil - } - return b.Instrs[len(b.Instrs)-1] -} - -// SIgmaFor returns the sigma node for v coming from pred. -func (b *BasicBlock) SigmaFor(v Value, pred *BasicBlock) *Sigma { - for _, instr := range b.Instrs { - sigma, ok := instr.(*Sigma) - if !ok { - // no more sigmas - return nil - } - if sigma.From == pred && sigma.X == v { - return sigma - } - } - return nil -} - -// Parent returns the function that contains block b. -func (b *BasicBlock) Parent() *Function { return b.parent } - -// String returns a human-readable label of this block. -// It is not guaranteed unique within the function. -// -func (b *BasicBlock) String() string { - return fmt.Sprintf("%d", b.Index) -} - -// emit appends an instruction to the current basic block. -// If the instruction defines a Value, it is returned. -// -func (b *BasicBlock) emit(i Instruction, source ast.Node) Value { - i.setSource(source) - i.setBlock(b) - b.Instrs = append(b.Instrs, i) - v, _ := i.(Value) - return v -} - -// predIndex returns the i such that b.Preds[i] == c or panics if -// there is none. -func (b *BasicBlock) predIndex(c *BasicBlock) int { - for i, pred := range b.Preds { - if pred == c { - return i - } - } - panic(fmt.Sprintf("no edge %s -> %s", c, b)) -} - -// succIndex returns the i such that b.Succs[i] == c or -1 if there is none. -func (b *BasicBlock) succIndex(c *BasicBlock) int { - for i, succ := range b.Succs { - if succ == c { - return i - } - } - return -1 -} - -// hasPhi returns true if b.Instrs contains φ-nodes. -func (b *BasicBlock) hasPhi() bool { - _, ok := b.Instrs[0].(*Phi) - return ok -} - -func (b *BasicBlock) Phis() []Instruction { - return b.phis() -} - -// phis returns the prefix of b.Instrs containing all the block's φ-nodes. -func (b *BasicBlock) phis() []Instruction { - for i, instr := range b.Instrs { - if _, ok := instr.(*Phi); !ok { - return b.Instrs[:i] - } - } - return nil // unreachable in well-formed blocks -} - -// replacePred replaces all occurrences of p in b's predecessor list with q. -// Ordinarily there should be at most one. -// -func (b *BasicBlock) replacePred(p, q *BasicBlock) { - for i, pred := range b.Preds { - if pred == p { - b.Preds[i] = q - } - } -} - -// replaceSucc replaces all occurrences of p in b's successor list with q. -// Ordinarily there should be at most one. -// -func (b *BasicBlock) replaceSucc(p, q *BasicBlock) { - for i, succ := range b.Succs { - if succ == p { - b.Succs[i] = q - } - } -} - -// removePred removes all occurrences of p in b's -// predecessor list and φ-nodes. -// Ordinarily there should be at most one. -// -func (b *BasicBlock) removePred(p *BasicBlock) { - phis := b.phis() - - // We must preserve edge order for φ-nodes. - j := 0 - for i, pred := range b.Preds { - if pred != p { - b.Preds[j] = b.Preds[i] - // Strike out φ-edge too. - for _, instr := range phis { - phi := instr.(*Phi) - phi.Edges[j] = phi.Edges[i] - } - j++ - } - } - // Nil out b.Preds[j:] and φ-edges[j:] to aid GC. - for i := j; i < len(b.Preds); i++ { - b.Preds[i] = nil - for _, instr := range phis { - instr.(*Phi).Edges[i] = nil - } - } - b.Preds = b.Preds[:j] - for _, instr := range phis { - phi := instr.(*Phi) - phi.Edges = phi.Edges[:j] - } -} - -// Destinations associated with unlabelled for/switch/select stmts. -// We push/pop one of these as we enter/leave each construct and for -// each BranchStmt we scan for the innermost target of the right type. -// -type targets struct { - tail *targets // rest of stack - _break *BasicBlock - _continue *BasicBlock - _fallthrough *BasicBlock -} - -// Destinations associated with a labelled block. -// We populate these as labels are encountered in forward gotos or -// labelled statements. -// -type lblock struct { - _goto *BasicBlock - _break *BasicBlock - _continue *BasicBlock -} - -// labelledBlock returns the branch target associated with the -// specified label, creating it if needed. -// -func (f *Function) labelledBlock(label *ast.Ident) *lblock { - lb := f.lblocks[label.Obj] - if lb == nil { - lb = &lblock{_goto: f.newBasicBlock(label.Name)} - if f.lblocks == nil { - f.lblocks = make(map[*ast.Object]*lblock) - } - f.lblocks[label.Obj] = lb - } - return lb -} - -// addParam adds a (non-escaping) parameter to f.Params of the -// specified name, type and source position. -// -func (f *Function) addParam(name string, typ types.Type, source ast.Node) *Parameter { - var b *BasicBlock - if len(f.Blocks) > 0 { - b = f.Blocks[0] - } - v := &Parameter{ - name: name, - } - v.setBlock(b) - v.setType(typ) - v.setSource(source) - f.Params = append(f.Params, v) - if b != nil { - // There may be no blocks if this function has no body. We - // still create params, but aren't interested in the - // instruction. - f.Blocks[0].Instrs = append(f.Blocks[0].Instrs, v) - } - return v -} - -func (f *Function) addParamObj(obj types.Object, source ast.Node) *Parameter { - name := obj.Name() - if name == "" { - name = fmt.Sprintf("arg%d", len(f.Params)) - } - param := f.addParam(name, obj.Type(), source) - param.object = obj - return param -} - -// addSpilledParam declares a parameter that is pre-spilled to the -// stack; the function body will load/store the spilled location. -// Subsequent lifting will eliminate spills where possible. -// -func (f *Function) addSpilledParam(obj types.Object, source ast.Node) { - param := f.addParamObj(obj, source) - spill := &Alloc{} - spill.setType(types.NewPointer(obj.Type())) - spill.source = source - f.objects[obj] = spill - f.Locals = append(f.Locals, spill) - f.emit(spill, source) - emitStore(f, spill, param, source) - // f.emit(&Store{Addr: spill, Val: param}) -} - -// startBody initializes the function prior to generating IR code for its body. -// Precondition: f.Type() already set. -// -func (f *Function) startBody() { - entry := f.newBasicBlock("entry") - f.currentBlock = entry - f.objects = make(map[types.Object]Value) // needed for some synthetics, e.g. init -} - -func (f *Function) blockset(i int) *BlockSet { - bs := &f.blocksets[i] - if len(bs.values) != len(f.Blocks) { - if cap(bs.values) >= len(f.Blocks) { - bs.values = bs.values[:len(f.Blocks)] - bs.Clear() - } else { - bs.values = make([]bool, len(f.Blocks)) - } - } else { - bs.Clear() - } - return bs -} - -func (f *Function) exitBlock() { - old := f.currentBlock - - f.Exit = f.newBasicBlock("exit") - f.currentBlock = f.Exit - - ret := f.results() - results := make([]Value, len(ret)) - // Run function calls deferred in this - // function when explicitly returning from it. - f.emit(new(RunDefers), nil) - for i, r := range ret { - results[i] = emitLoad(f, r, nil) - } - - f.emit(&Return{Results: results}, nil) - f.currentBlock = old -} - -// createSyntacticParams populates f.Params and generates code (spills -// and named result locals) for all the parameters declared in the -// syntax. In addition it populates the f.objects mapping. -// -// Preconditions: -// f.startBody() was called. -// Postcondition: -// len(f.Params) == len(f.Signature.Params) + (f.Signature.Recv() ? 1 : 0) -// -func (f *Function) createSyntacticParams(recv *ast.FieldList, functype *ast.FuncType) { - // Receiver (at most one inner iteration). - if recv != nil { - for _, field := range recv.List { - for _, n := range field.Names { - f.addSpilledParam(f.Pkg.info.Defs[n], n) - } - // Anonymous receiver? No need to spill. - if field.Names == nil { - f.addParamObj(f.Signature.Recv(), field) - } - } - } - - // Parameters. - if functype.Params != nil { - n := len(f.Params) // 1 if has recv, 0 otherwise - for _, field := range functype.Params.List { - for _, n := range field.Names { - f.addSpilledParam(f.Pkg.info.Defs[n], n) - } - // Anonymous parameter? No need to spill. - if field.Names == nil { - f.addParamObj(f.Signature.Params().At(len(f.Params)-n), field) - } - } - } - - // Named results. - if functype.Results != nil { - for _, field := range functype.Results.List { - // Implicit "var" decl of locals for named results. - for _, n := range field.Names { - f.namedResults = append(f.namedResults, f.addLocalForIdent(n)) - } - } - - if len(f.namedResults) == 0 { - sig := f.Signature.Results() - for i := 0; i < sig.Len(); i++ { - // XXX position information - v := f.addLocal(sig.At(i).Type(), nil) - f.implicitResults = append(f.implicitResults, v) - } - } - } -} - -func numberNodes(f *Function) { - var base ID - for _, b := range f.Blocks { - for _, instr := range b.Instrs { - if instr == nil { - continue - } - base++ - instr.setID(base) - } - } -} - -// buildReferrers populates the def/use information in all non-nil -// Value.Referrers slice. -// Precondition: all such slices are initially empty. -func buildReferrers(f *Function) { - var rands []*Value - for _, b := range f.Blocks { - for _, instr := range b.Instrs { - rands = instr.Operands(rands[:0]) // recycle storage - for _, rand := range rands { - if r := *rand; r != nil { - if ref := r.Referrers(); ref != nil { - *ref = append(*ref, instr) - } - } - } - } - } -} - -func (f *Function) emitConsts() { - if len(f.Blocks) == 0 { - f.consts = nil - return - } - - // TODO(dh): our deduplication only works on booleans and - // integers. other constants are represented as pointers to - // things. - if len(f.consts) == 0 { - return - } else if len(f.consts) <= 32 { - f.emitConstsFew() - } else { - f.emitConstsMany() - } -} - -func (f *Function) emitConstsFew() { - dedup := make([]*Const, 0, 32) - for _, c := range f.consts { - if len(*c.Referrers()) == 0 { - continue - } - found := false - for _, d := range dedup { - if c.typ == d.typ && c.Value == d.Value { - replaceAll(c, d) - found = true - break - } - } - if !found { - dedup = append(dedup, c) - } - } - - instrs := make([]Instruction, len(f.Blocks[0].Instrs)+len(dedup)) - for i, c := range dedup { - instrs[i] = c - c.setBlock(f.Blocks[0]) - } - copy(instrs[len(dedup):], f.Blocks[0].Instrs) - f.Blocks[0].Instrs = instrs - f.consts = nil -} - -func (f *Function) emitConstsMany() { - type constKey struct { - typ types.Type - value constant.Value - } - - m := make(map[constKey]Value, len(f.consts)) - areNil := 0 - for i, c := range f.consts { - if len(*c.Referrers()) == 0 { - f.consts[i] = nil - areNil++ - continue - } - - k := constKey{ - typ: c.typ, - value: c.Value, - } - if dup, ok := m[k]; !ok { - m[k] = c - } else { - f.consts[i] = nil - areNil++ - replaceAll(c, dup) - } - } - - instrs := make([]Instruction, len(f.Blocks[0].Instrs)+len(f.consts)-areNil) - i := 0 - for _, c := range f.consts { - if c != nil { - instrs[i] = c - c.setBlock(f.Blocks[0]) - i++ - } - } - copy(instrs[i:], f.Blocks[0].Instrs) - f.Blocks[0].Instrs = instrs - f.consts = nil -} - -// buildFakeExits ensures that every block in the function is -// reachable in reverse from the Exit block. This is required to build -// a full post-dominator tree, and to ensure the exit block's -// inclusion in the dominator tree. -func buildFakeExits(fn *Function) { - // Find back-edges via forward DFS - fn.fakeExits = BlockSet{values: make([]bool, len(fn.Blocks))} - seen := fn.blockset(0) - backEdges := fn.blockset(1) - - var dfs func(b *BasicBlock) - dfs = func(b *BasicBlock) { - if !seen.Add(b) { - backEdges.Add(b) - return - } - for _, pred := range b.Succs { - dfs(pred) - } - } - dfs(fn.Blocks[0]) -buildLoop: - for { - seen := fn.blockset(2) - var dfs func(b *BasicBlock) - dfs = func(b *BasicBlock) { - if !seen.Add(b) { - return - } - for _, pred := range b.Preds { - dfs(pred) - } - if b == fn.Exit { - for _, b := range fn.Blocks { - if fn.fakeExits.Has(b) { - dfs(b) - } - } - } - } - dfs(fn.Exit) - - for _, b := range fn.Blocks { - if !seen.Has(b) && backEdges.Has(b) { - // Block b is not reachable from the exit block. Add a - // fake jump from b to exit, then try again. Note that we - // only add one fake edge at a time, as it may make - // multiple blocks reachable. - // - // We only consider those blocks that have back edges. - // Any unreachable block that doesn't have a back edge - // must flow into a loop, which by definition has a - // back edge. Thus, by looking for loops, we should - // need fewer fake edges overall. - fn.fakeExits.Add(b) - continue buildLoop - } - } - - break - } -} - -// finishBody() finalizes the function after IR code generation of its body. -func (f *Function) finishBody() { - f.objects = nil - f.currentBlock = nil - f.lblocks = nil - - // Remove from f.Locals any Allocs that escape to the heap. - j := 0 - for _, l := range f.Locals { - if !l.Heap { - f.Locals[j] = l - j++ - } - } - // Nil out f.Locals[j:] to aid GC. - for i := j; i < len(f.Locals); i++ { - f.Locals[i] = nil - } - f.Locals = f.Locals[:j] - - optimizeBlocks(f) - buildReferrers(f) - buildDomTree(f) - buildPostDomTree(f) - - if f.Prog.mode&NaiveForm == 0 { - lift(f) - } - - // emit constants after lifting, because lifting may produce new constants. - f.emitConsts() - - f.namedResults = nil // (used by lifting) - f.implicitResults = nil - - numberNodes(f) - - defer f.wr.Close() - f.wr.WriteFunc("start", "start", f) - - if f.Prog.mode&PrintFunctions != 0 { - printMu.Lock() - f.WriteTo(os.Stdout) - printMu.Unlock() - } - - if f.Prog.mode&SanityCheckFunctions != 0 { - mustSanityCheck(f, nil) - } -} - -func isUselessPhi(phi *Phi) (Value, bool) { - var v0 Value - for _, e := range phi.Edges { - if e == phi { - continue - } - if v0 == nil { - v0 = e - } - if v0 != e { - if v0, ok := v0.(*Const); ok { - if e, ok := e.(*Const); ok { - if v0.typ == e.typ && v0.Value == e.Value { - continue - } - } - } - return nil, false - } - } - return v0, true -} - -func (f *Function) RemoveNilBlocks() { - f.removeNilBlocks() -} - -// removeNilBlocks eliminates nils from f.Blocks and updates each -// BasicBlock.Index. Use this after any pass that may delete blocks. -// -func (f *Function) removeNilBlocks() { - j := 0 - for _, b := range f.Blocks { - if b != nil { - b.Index = j - f.Blocks[j] = b - j++ - } - } - // Nil out f.Blocks[j:] to aid GC. - for i := j; i < len(f.Blocks); i++ { - f.Blocks[i] = nil - } - f.Blocks = f.Blocks[:j] -} - -// SetDebugMode sets the debug mode for package pkg. If true, all its -// functions will include full debug info. This greatly increases the -// size of the instruction stream, and causes Functions to depend upon -// the ASTs, potentially keeping them live in memory for longer. -// -func (pkg *Package) SetDebugMode(debug bool) { - // TODO(adonovan): do we want ast.File granularity? - pkg.debug = debug -} - -// debugInfo reports whether debug info is wanted for this function. -func (f *Function) debugInfo() bool { - return f.Pkg != nil && f.Pkg.debug -} - -// addNamedLocal creates a local variable, adds it to function f and -// returns it. Its name and type are taken from obj. Subsequent -// calls to f.lookup(obj) will return the same local. -// -func (f *Function) addNamedLocal(obj types.Object, source ast.Node) *Alloc { - l := f.addLocal(obj.Type(), source) - f.objects[obj] = l - return l -} - -func (f *Function) addLocalForIdent(id *ast.Ident) *Alloc { - return f.addNamedLocal(f.Pkg.info.Defs[id], id) -} - -// addLocal creates an anonymous local variable of type typ, adds it -// to function f and returns it. pos is the optional source location. -// -func (f *Function) addLocal(typ types.Type, source ast.Node) *Alloc { - v := &Alloc{} - v.setType(types.NewPointer(typ)) - f.Locals = append(f.Locals, v) - f.emit(v, source) - return v -} - -// lookup returns the address of the named variable identified by obj -// that is local to function f or one of its enclosing functions. -// If escaping, the reference comes from a potentially escaping pointer -// expression and the referent must be heap-allocated. -// -func (f *Function) lookup(obj types.Object, escaping bool) Value { - if v, ok := f.objects[obj]; ok { - if alloc, ok := v.(*Alloc); ok && escaping { - alloc.Heap = true - } - return v // function-local var (address) - } - - // Definition must be in an enclosing function; - // plumb it through intervening closures. - if f.parent == nil { - panic("no ir.Value for " + obj.String()) - } - outer := f.parent.lookup(obj, true) // escaping - v := &FreeVar{ - name: obj.Name(), - typ: outer.Type(), - outer: outer, - parent: f, - } - f.objects[obj] = v - f.FreeVars = append(f.FreeVars, v) - return v -} - -// emit emits the specified instruction to function f. -func (f *Function) emit(instr Instruction, source ast.Node) Value { - return f.currentBlock.emit(instr, source) -} - -// RelString returns the full name of this function, qualified by -// package name, receiver type, etc. -// -// The specific formatting rules are not guaranteed and may change. -// -// Examples: -// "math.IsNaN" // a package-level function -// "(*bytes.Buffer).Bytes" // a declared method or a wrapper -// "(*bytes.Buffer).Bytes$thunk" // thunk (func wrapping method; receiver is param 0) -// "(*bytes.Buffer).Bytes$bound" // bound (func wrapping method; receiver supplied by closure) -// "main.main$1" // an anonymous function in main -// "main.init#1" // a declared init function -// "main.init" // the synthesized package initializer -// -// When these functions are referred to from within the same package -// (i.e. from == f.Pkg.Object), they are rendered without the package path. -// For example: "IsNaN", "(*Buffer).Bytes", etc. -// -// All non-synthetic functions have distinct package-qualified names. -// (But two methods may have the same name "(T).f" if one is a synthetic -// wrapper promoting a non-exported method "f" from another package; in -// that case, the strings are equal but the identifiers "f" are distinct.) -// -func (f *Function) RelString(from *types.Package) string { - // Anonymous? - if f.parent != nil { - // An anonymous function's Name() looks like "parentName$1", - // but its String() should include the type/package/etc. - parent := f.parent.RelString(from) - for i, anon := range f.parent.AnonFuncs { - if anon == f { - return fmt.Sprintf("%s$%d", parent, 1+i) - } - } - - return f.name // should never happen - } - - // Method (declared or wrapper)? - if recv := f.Signature.Recv(); recv != nil { - return f.relMethod(from, recv.Type()) - } - - // Thunk? - if f.method != nil { - return f.relMethod(from, f.method.Recv()) - } - - // Bound? - if len(f.FreeVars) == 1 && strings.HasSuffix(f.name, "$bound") { - return f.relMethod(from, f.FreeVars[0].Type()) - } - - // Package-level function? - // Prefix with package name for cross-package references only. - if p := f.pkg(); p != nil && p != from { - return fmt.Sprintf("%s.%s", p.Path(), f.name) - } - - // Unknown. - return f.name -} - -func (f *Function) relMethod(from *types.Package, recv types.Type) string { - return fmt.Sprintf("(%s).%s", relType(recv, from), f.name) -} - -// writeSignature writes to buf the signature sig in declaration syntax. -func writeSignature(buf *bytes.Buffer, from *types.Package, name string, sig *types.Signature, params []*Parameter) { - buf.WriteString("func ") - if recv := sig.Recv(); recv != nil { - buf.WriteString("(") - if n := params[0].Name(); n != "" { - buf.WriteString(n) - buf.WriteString(" ") - } - types.WriteType(buf, params[0].Type(), types.RelativeTo(from)) - buf.WriteString(") ") - } - buf.WriteString(name) - types.WriteSignature(buf, sig, types.RelativeTo(from)) -} - -func (f *Function) pkg() *types.Package { - if f.Pkg != nil { - return f.Pkg.Pkg - } - return nil -} - -var _ io.WriterTo = (*Function)(nil) // *Function implements io.Writer - -func (f *Function) WriteTo(w io.Writer) (int64, error) { - var buf bytes.Buffer - WriteFunction(&buf, f) - n, err := w.Write(buf.Bytes()) - return int64(n), err -} - -// WriteFunction writes to buf a human-readable "disassembly" of f. -func WriteFunction(buf *bytes.Buffer, f *Function) { - fmt.Fprintf(buf, "# Name: %s\n", f.String()) - if f.Pkg != nil { - fmt.Fprintf(buf, "# Package: %s\n", f.Pkg.Pkg.Path()) - } - if syn := f.Synthetic; syn != "" { - fmt.Fprintln(buf, "# Synthetic:", syn) - } - if pos := f.Pos(); pos.IsValid() { - fmt.Fprintf(buf, "# Location: %s\n", f.Prog.Fset.Position(pos)) - } - - if f.parent != nil { - fmt.Fprintf(buf, "# Parent: %s\n", f.parent.Name()) - } - - from := f.pkg() - - if f.FreeVars != nil { - buf.WriteString("# Free variables:\n") - for i, fv := range f.FreeVars { - fmt.Fprintf(buf, "# % 3d:\t%s %s\n", i, fv.Name(), relType(fv.Type(), from)) - } - } - - if len(f.Locals) > 0 { - buf.WriteString("# Locals:\n") - for i, l := range f.Locals { - fmt.Fprintf(buf, "# % 3d:\t%s %s\n", i, l.Name(), relType(deref(l.Type()), from)) - } - } - writeSignature(buf, from, f.Name(), f.Signature, f.Params) - buf.WriteString(":\n") - - if f.Blocks == nil { - buf.WriteString("\t(external)\n") - } - - for _, b := range f.Blocks { - if b == nil { - // Corrupt CFG. - fmt.Fprintf(buf, ".nil:\n") - continue - } - fmt.Fprintf(buf, "b%d:", b.Index) - if len(b.Preds) > 0 { - fmt.Fprint(buf, " ←") - for _, pred := range b.Preds { - fmt.Fprintf(buf, " b%d", pred.Index) - } - } - if b.Comment != "" { - fmt.Fprintf(buf, " # %s", b.Comment) - } - buf.WriteByte('\n') - - if false { // CFG debugging - fmt.Fprintf(buf, "\t# CFG: %s --> %s --> %s\n", b.Preds, b, b.Succs) - } - - buf2 := &bytes.Buffer{} - for _, instr := range b.Instrs { - buf.WriteString("\t") - switch v := instr.(type) { - case Value: - // Left-align the instruction. - if name := v.Name(); name != "" { - fmt.Fprintf(buf, "%s = ", name) - } - buf.WriteString(instr.String()) - case nil: - // Be robust against bad transforms. - buf.WriteString("") - default: - buf.WriteString(instr.String()) - } - buf.WriteString("\n") - - if f.Prog.mode&PrintSource != 0 { - if s := instr.Source(); s != nil { - buf2.Reset() - format.Node(buf2, f.Prog.Fset, s) - for { - line, err := buf2.ReadString('\n') - if len(line) == 0 { - break - } - buf.WriteString("\t\t> ") - buf.WriteString(line) - if line[len(line)-1] != '\n' { - buf.WriteString("\n") - } - if err != nil { - break - } - } - } - } - } - buf.WriteString("\n") - } -} - -// newBasicBlock adds to f a new basic block and returns it. It does -// not automatically become the current block for subsequent calls to emit. -// comment is an optional string for more readable debugging output. -// -func (f *Function) newBasicBlock(comment string) *BasicBlock { - b := &BasicBlock{ - Index: len(f.Blocks), - Comment: comment, - parent: f, - } - b.Succs = b.succs2[:0] - f.Blocks = append(f.Blocks, b) - return b -} - -// NewFunction returns a new synthetic Function instance belonging to -// prog, with its name and signature fields set as specified. -// -// The caller is responsible for initializing the remaining fields of -// the function object, e.g. Pkg, Params, Blocks. -// -// It is practically impossible for clients to construct well-formed -// IR functions/packages/programs directly, so we assume this is the -// job of the Builder alone. NewFunction exists to provide clients a -// little flexibility. For example, analysis tools may wish to -// construct fake Functions for the root of the callgraph, a fake -// "reflect" package, etc. -// -// TODO(adonovan): think harder about the API here. -// -func (prog *Program) NewFunction(name string, sig *types.Signature, provenance string) *Function { - return &Function{Prog: prog, name: name, Signature: sig, Synthetic: provenance} -} - -//lint:ignore U1000 we may make use of this for functions loaded from export data -type extentNode [2]token.Pos - -func (n extentNode) Pos() token.Pos { return n[0] } -func (n extentNode) End() token.Pos { return n[1] } - -func (f *Function) initHTML(name string) { - if name == "" { - return - } - if rel := f.RelString(nil); rel == name { - f.wr = NewHTMLWriter("ir.html", rel, "") - } -} diff --git a/vendor/honnef.co/go/tools/ir/html.go b/vendor/honnef.co/go/tools/ir/html.go deleted file mode 100644 index c18375333a..0000000000 --- a/vendor/honnef.co/go/tools/ir/html.go +++ /dev/null @@ -1,1124 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Copyright 2019 Dominik Honnef. All rights reserved. - -package ir - -import ( - "bytes" - "fmt" - "go/types" - "html" - "io" - "log" - "os" - "os/exec" - "path/filepath" - "reflect" - "sort" - "strings" -) - -func live(f *Function) []bool { - max := 0 - var ops []*Value - - for _, b := range f.Blocks { - for _, instr := range b.Instrs { - if int(instr.ID()) > max { - max = int(instr.ID()) - } - } - } - - out := make([]bool, max+1) - var q []Node - for _, b := range f.Blocks { - for _, instr := range b.Instrs { - switch instr.(type) { - case *BlankStore, *Call, *ConstantSwitch, *Defer, *Go, *If, *Jump, *MapUpdate, *Next, *Panic, *Recv, *Return, *RunDefers, *Send, *Store, *Unreachable: - out[instr.ID()] = true - q = append(q, instr) - } - } - } - - for len(q) > 0 { - v := q[len(q)-1] - q = q[:len(q)-1] - for _, op := range v.Operands(ops) { - if *op == nil { - continue - } - if !out[(*op).ID()] { - out[(*op).ID()] = true - q = append(q, *op) - } - } - } - - return out -} - -type funcPrinter interface { - startBlock(b *BasicBlock, reachable bool) - endBlock(b *BasicBlock) - value(v Node, live bool) - startDepCycle() - endDepCycle() - named(n string, vals []Value) -} - -func namedValues(f *Function) map[types.Object][]Value { - names := map[types.Object][]Value{} - for _, b := range f.Blocks { - for _, instr := range b.Instrs { - if instr, ok := instr.(*DebugRef); ok { - if obj := instr.object; obj != nil { - names[obj] = append(names[obj], instr.X) - } - } - } - } - // XXX deduplicate values - return names -} - -func fprintFunc(p funcPrinter, f *Function) { - // XXX does our IR form preserve unreachable blocks? - // reachable, live := findlive(f) - - l := live(f) - for _, b := range f.Blocks { - // XXX - // p.startBlock(b, reachable[b.Index]) - p.startBlock(b, true) - - end := len(b.Instrs) - 1 - if end < 0 { - end = 0 - } - for _, v := range b.Instrs[:end] { - if _, ok := v.(*DebugRef); !ok { - p.value(v, l[v.ID()]) - } - } - p.endBlock(b) - } - - names := namedValues(f) - keys := make([]types.Object, 0, len(names)) - for key := range names { - keys = append(keys, key) - } - sort.Slice(keys, func(i, j int) bool { - return keys[i].Pos() < keys[j].Pos() - }) - for _, key := range keys { - p.named(key.Name(), names[key]) - } -} - -func opName(v Node) string { - switch v := v.(type) { - case *Call: - if v.Common().IsInvoke() { - return "Invoke" - } - return "Call" - case *Alloc: - if v.Heap { - return "HeapAlloc" - } - return "StackAlloc" - case *Select: - if v.Blocking { - return "SelectBlocking" - } - return "SelectNonBlocking" - default: - return reflect.ValueOf(v).Type().Elem().Name() - } -} - -type HTMLWriter struct { - w io.WriteCloser - path string - dot *dotWriter -} - -func NewHTMLWriter(path string, funcname, cfgMask string) *HTMLWriter { - out, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) - if err != nil { - log.Fatalf("%v", err) - } - pwd, err := os.Getwd() - if err != nil { - log.Fatalf("%v", err) - } - html := HTMLWriter{w: out, path: filepath.Join(pwd, path)} - html.dot = newDotWriter() - html.start(funcname) - return &html -} - -func (w *HTMLWriter) start(name string) { - if w == nil { - return - } - w.WriteString("") - w.WriteString(` - - - - - -`) - w.WriteString("") - w.WriteString("

") - w.WriteString(html.EscapeString(name)) - w.WriteString("

") - w.WriteString(` -help -
- -

-Click on a value or block to toggle highlighting of that value/block -and its uses. (Values and blocks are highlighted by ID, and IDs of -dead items may be reused, so not all highlights necessarily correspond -to the clicked item.) -

- -

-Faded out values and blocks are dead code that has not been eliminated. -

- -

-Values printed in italics have a dependency cycle. -

- -

-CFG: Dashed edge is for unlikely branches. Blue color is for backward edges. -Edge with a dot means that this edge follows the order in which blocks were laidout. -

- -
-`) - w.WriteString("") - w.WriteString("") -} - -func (w *HTMLWriter) Close() { - if w == nil { - return - } - io.WriteString(w.w, "") - io.WriteString(w.w, "
") - io.WriteString(w.w, "") - io.WriteString(w.w, "") - w.w.Close() - fmt.Printf("dumped IR to %v\n", w.path) -} - -// WriteFunc writes f in a column headed by title. -// phase is used for collapsing columns and should be unique across the table. -func (w *HTMLWriter) WriteFunc(phase, title string, f *Function) { - if w == nil { - return - } - w.WriteColumn(phase, title, "", funcHTML(f, phase, w.dot)) -} - -// WriteColumn writes raw HTML in a column headed by title. -// It is intended for pre- and post-compilation log output. -func (w *HTMLWriter) WriteColumn(phase, title, class, html string) { - if w == nil { - return - } - id := strings.Replace(phase, " ", "-", -1) - // collapsed column - w.Printf("
%v
", id, phase) - - if class == "" { - w.Printf("", id) - } else { - w.Printf("", id, class) - } - w.WriteString("

" + title + "

") - w.WriteString(html) - w.WriteString("") -} - -func (w *HTMLWriter) Printf(msg string, v ...interface{}) { - if _, err := fmt.Fprintf(w.w, msg, v...); err != nil { - log.Fatalf("%v", err) - } -} - -func (w *HTMLWriter) WriteString(s string) { - if _, err := io.WriteString(w.w, s); err != nil { - log.Fatalf("%v", err) - } -} - -func valueHTML(v Node) string { - if v == nil { - return "<nil>" - } - // TODO: Using the value ID as the class ignores the fact - // that value IDs get recycled and that some values - // are transmuted into other values. - class := fmt.Sprintf("t%d", v.ID()) - var label string - switch v := v.(type) { - case *Function: - label = v.RelString(nil) - case *Builtin: - label = v.Name() - default: - label = class - } - return fmt.Sprintf("%s", class, label) -} - -func valueLongHTML(v Node) string { - // TODO: Any intra-value formatting? - // I'm wary of adding too much visual noise, - // but a little bit might be valuable. - // We already have visual noise in the form of punctuation - // maybe we could replace some of that with formatting. - s := fmt.Sprintf("", v.ID()) - - linenumber := "(?)" - if v.Pos().IsValid() { - line := v.Parent().Prog.Fset.Position(v.Pos()).Line - linenumber = fmt.Sprintf("(%d)", line, line) - } - - s += fmt.Sprintf("%s %s = %s", valueHTML(v), linenumber, opName(v)) - - if v, ok := v.(Value); ok { - s += " <" + html.EscapeString(v.Type().String()) + ">" - } - - switch v := v.(type) { - case *Parameter: - s += fmt.Sprintf(" {%s}", html.EscapeString(v.name)) - case *BinOp: - s += fmt.Sprintf(" {%s}", html.EscapeString(v.Op.String())) - case *UnOp: - s += fmt.Sprintf(" {%s}", html.EscapeString(v.Op.String())) - case *Extract: - name := v.Tuple.Type().(*types.Tuple).At(v.Index).Name() - s += fmt.Sprintf(" [%d] (%s)", v.Index, name) - case *Field: - st := v.X.Type().Underlying().(*types.Struct) - // Be robust against a bad index. - name := "?" - if 0 <= v.Field && v.Field < st.NumFields() { - name = st.Field(v.Field).Name() - } - s += fmt.Sprintf(" [%d] (%s)", v.Field, name) - case *FieldAddr: - st := deref(v.X.Type()).Underlying().(*types.Struct) - // Be robust against a bad index. - name := "?" - if 0 <= v.Field && v.Field < st.NumFields() { - name = st.Field(v.Field).Name() - } - - s += fmt.Sprintf(" [%d] (%s)", v.Field, name) - case *Recv: - s += fmt.Sprintf(" {%t}", v.CommaOk) - case *Call: - if v.Common().IsInvoke() { - s += fmt.Sprintf(" {%s}", html.EscapeString(v.Common().Method.FullName())) - } - case *Const: - if v.Value == nil { - s += " {<nil>}" - } else { - s += fmt.Sprintf(" {%s}", html.EscapeString(v.Value.String())) - } - case *Sigma: - s += fmt.Sprintf(" [#%s]", v.From) - } - for _, a := range v.Operands(nil) { - s += fmt.Sprintf(" %s", valueHTML(*a)) - } - - // OPT(dh): we're calling namedValues many times on the same function. - allNames := namedValues(v.Parent()) - var names []string - for name, values := range allNames { - for _, value := range values { - if v == value { - names = append(names, name.Name()) - break - } - } - } - if len(names) != 0 { - s += " (" + strings.Join(names, ", ") + ")" - } - - s += "" - return s -} - -func blockHTML(b *BasicBlock) string { - // TODO: Using the value ID as the class ignores the fact - // that value IDs get recycled and that some values - // are transmuted into other values. - s := html.EscapeString(b.String()) - return fmt.Sprintf("%s", s, s) -} - -func blockLongHTML(b *BasicBlock) string { - var kind string - var term Instruction - if len(b.Instrs) > 0 { - term = b.Control() - kind = opName(term) - } - // TODO: improve this for HTML? - s := fmt.Sprintf("%s", b.Index, kind) - - if term != nil { - ops := term.Operands(nil) - if len(ops) > 0 { - var ss []string - for _, op := range ops { - ss = append(ss, valueHTML(*op)) - } - s += " " + strings.Join(ss, ", ") - } - } - if len(b.Succs) > 0 { - s += " →" // right arrow - for _, c := range b.Succs { - s += " " + blockHTML(c) - } - } - return s -} - -func funcHTML(f *Function, phase string, dot *dotWriter) string { - buf := new(bytes.Buffer) - if dot != nil { - dot.writeFuncSVG(buf, phase, f) - } - fmt.Fprint(buf, "") - p := htmlFuncPrinter{w: buf} - fprintFunc(p, f) - - // fprintFunc(&buf, f) // TODO: HTML, not text,
for line breaks, etc. - fmt.Fprint(buf, "
") - return buf.String() -} - -type htmlFuncPrinter struct { - w io.Writer -} - -func (p htmlFuncPrinter) startBlock(b *BasicBlock, reachable bool) { - var dead string - if !reachable { - dead = "dead-block" - } - fmt.Fprintf(p.w, "
    ", b, dead) - fmt.Fprintf(p.w, "
  • %s:", blockHTML(b)) - if len(b.Preds) > 0 { - io.WriteString(p.w, " ←") // left arrow - for _, pred := range b.Preds { - fmt.Fprintf(p.w, " %s", blockHTML(pred)) - } - } - if len(b.Instrs) > 0 { - io.WriteString(p.w, ``) - } - io.WriteString(p.w, "
  • ") - if len(b.Instrs) > 0 { // start list of values - io.WriteString(p.w, "
  • ") - io.WriteString(p.w, "
      ") - } -} - -func (p htmlFuncPrinter) endBlock(b *BasicBlock) { - if len(b.Instrs) > 0 { // end list of values - io.WriteString(p.w, "
    ") - io.WriteString(p.w, "
  • ") - } - io.WriteString(p.w, "
  • ") - fmt.Fprint(p.w, blockLongHTML(b)) - io.WriteString(p.w, "
  • ") - io.WriteString(p.w, "
") -} - -func (p htmlFuncPrinter) value(v Node, live bool) { - var dead string - if !live { - dead = "dead-value" - } - fmt.Fprintf(p.w, "
  • ", dead) - fmt.Fprint(p.w, valueLongHTML(v)) - io.WriteString(p.w, "
  • ") -} - -func (p htmlFuncPrinter) startDepCycle() { - fmt.Fprintln(p.w, "") -} - -func (p htmlFuncPrinter) endDepCycle() { - fmt.Fprintln(p.w, "") -} - -func (p htmlFuncPrinter) named(n string, vals []Value) { - fmt.Fprintf(p.w, "
  • name %s: ", n) - for _, val := range vals { - fmt.Fprintf(p.w, "%s ", valueHTML(val)) - } - fmt.Fprintf(p.w, "
  • ") -} - -type dotWriter struct { - path string - broken bool -} - -// newDotWriter returns non-nil value when mask is valid. -// dotWriter will generate SVGs only for the phases specified in the mask. -// mask can contain following patterns and combinations of them: -// * - all of them; -// x-y - x through y, inclusive; -// x,y - x and y, but not the passes between. -func newDotWriter() *dotWriter { - path, err := exec.LookPath("dot") - if err != nil { - fmt.Println(err) - return nil - } - return &dotWriter{path: path} -} - -func (d *dotWriter) writeFuncSVG(w io.Writer, phase string, f *Function) { - if d.broken { - return - } - cmd := exec.Command(d.path, "-Tsvg") - pipe, err := cmd.StdinPipe() - if err != nil { - d.broken = true - fmt.Println(err) - return - } - buf := new(bytes.Buffer) - cmd.Stdout = buf - bufErr := new(bytes.Buffer) - cmd.Stderr = bufErr - err = cmd.Start() - if err != nil { - d.broken = true - fmt.Println(err) - return - } - fmt.Fprint(pipe, `digraph "" { margin=0; size="4,40"; ranksep=.2; `) - id := strings.Replace(phase, " ", "-", -1) - fmt.Fprintf(pipe, `id="g_graph_%s";`, id) - fmt.Fprintf(pipe, `node [style=filled,fillcolor=white,fontsize=16,fontname="Menlo,Times,serif",margin="0.01,0.03"];`) - fmt.Fprintf(pipe, `edge [fontsize=16,fontname="Menlo,Times,serif"];`) - for _, b := range f.Blocks { - layout := "" - fmt.Fprintf(pipe, `%v [label="%v%s\n%v",id="graph_node_%v_%v"];`, b, b, layout, b.Control().String(), id, b) - } - indexOf := make([]int, len(f.Blocks)) - for i, b := range f.Blocks { - indexOf[b.Index] = i - } - - // XXX - /* - ponums := make([]int32, len(f.Blocks)) - _ = postorderWithNumbering(f, ponums) - isBackEdge := func(from, to int) bool { - return ponums[from] <= ponums[to] - } - */ - isBackEdge := func(from, to int) bool { return false } - - for _, b := range f.Blocks { - for i, s := range b.Succs { - style := "solid" - color := "black" - arrow := "vee" - if isBackEdge(b.Index, s.Index) { - color = "blue" - } - fmt.Fprintf(pipe, `%v -> %v [label=" %d ",style="%s",color="%s",arrowhead="%s"];`, b, s, i, style, color, arrow) - } - } - fmt.Fprint(pipe, "}") - pipe.Close() - err = cmd.Wait() - if err != nil { - d.broken = true - fmt.Printf("dot: %v\n%v\n", err, bufErr.String()) - return - } - - svgID := "svg_graph_" + id - fmt.Fprintf(w, `
    `, svgID, svgID) - // For now, an awful hack: edit the html as it passes through - // our fingers, finding ' 0 { - fset = initial[0].Fset - } - - prog := ir.NewProgram(fset, mode) - if opts != nil { - prog.PrintFunc = opts.PrintFunc - } - - isInitial := make(map[*packages.Package]bool, len(initial)) - for _, p := range initial { - isInitial[p] = true - } - - irmap := make(map[*packages.Package]*ir.Package) - packages.Visit(initial, nil, func(p *packages.Package) { - if p.Types != nil && !p.IllTyped { - var files []*ast.File - if deps || isInitial[p] { - files = p.Syntax - } - irmap[p] = prog.CreatePackage(p.Types, files, p.TypesInfo, true) - } - }) - - var irpkgs []*ir.Package - for _, p := range initial { - irpkgs = append(irpkgs, irmap[p]) // may be nil - } - return prog, irpkgs -} - -// CreateProgram returns a new program in IR form, given a program -// loaded from source. An IR package is created for each transitively -// error-free package of lprog. -// -// Code for bodies of functions is not built until Build is called -// on the result. -// -// The mode parameter controls diagnostics and checking during IR construction. -// -// Deprecated: use golang.org/x/tools/go/packages and the Packages -// function instead; see ir.ExampleLoadPackages. -// -func CreateProgram(lprog *loader.Program, mode ir.BuilderMode) *ir.Program { - prog := ir.NewProgram(lprog.Fset, mode) - - for _, info := range lprog.AllPackages { - if info.TransitivelyErrorFree { - prog.CreatePackage(info.Pkg, info.Files, &info.Info, info.Importable) - } - } - - return prog -} - -// BuildPackage builds an IR program with IR for a single package. -// -// It populates pkg by type-checking the specified file ASTs. All -// dependencies are loaded using the importer specified by tc, which -// typically loads compiler export data; IR code cannot be built for -// those packages. BuildPackage then constructs an ir.Program with all -// dependency packages created, and builds and returns the IR package -// corresponding to pkg. -// -// The caller must have set pkg.Path() to the import path. -// -// The operation fails if there were any type-checking or import errors. -// -// See ../ir/example_test.go for an example. -// -func BuildPackage(tc *types.Config, fset *token.FileSet, pkg *types.Package, files []*ast.File, mode ir.BuilderMode) (*ir.Package, *types.Info, error) { - if fset == nil { - panic("no token.FileSet") - } - if pkg.Path() == "" { - panic("package has no import path") - } - - info := &types.Info{ - Types: make(map[ast.Expr]types.TypeAndValue), - Defs: make(map[*ast.Ident]types.Object), - Uses: make(map[*ast.Ident]types.Object), - Implicits: make(map[ast.Node]types.Object), - Scopes: make(map[ast.Node]*types.Scope), - Selections: make(map[*ast.SelectorExpr]*types.Selection), - } - if err := types.NewChecker(tc, fset, pkg, info).Files(files); err != nil { - return nil, nil, err - } - - prog := ir.NewProgram(fset, mode) - - // Create IR packages for all imports. - // Order is not significant. - created := make(map[*types.Package]bool) - var createAll func(pkgs []*types.Package) - createAll = func(pkgs []*types.Package) { - for _, p := range pkgs { - if !created[p] { - created[p] = true - prog.CreatePackage(p, nil, nil, true) - createAll(p.Imports()) - } - } - } - createAll(pkg.Imports()) - - // Create and build the primary package. - irpkg := prog.CreatePackage(pkg, files, info, false) - irpkg.Build() - return irpkg, info, nil -} diff --git a/vendor/honnef.co/go/tools/ir/irutil/switch.go b/vendor/honnef.co/go/tools/ir/irutil/switch.go deleted file mode 100644 index f44cbca9e9..0000000000 --- a/vendor/honnef.co/go/tools/ir/irutil/switch.go +++ /dev/null @@ -1,264 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package irutil - -// This file implements discovery of switch and type-switch constructs -// from low-level control flow. -// -// Many techniques exist for compiling a high-level switch with -// constant cases to efficient machine code. The optimal choice will -// depend on the data type, the specific case values, the code in the -// body of each case, and the hardware. -// Some examples: -// - a lookup table (for a switch that maps constants to constants) -// - a computed goto -// - a binary tree -// - a perfect hash -// - a two-level switch (to partition constant strings by their first byte). - -import ( - "bytes" - "fmt" - "go/token" - "go/types" - - "honnef.co/go/tools/ir" -) - -// A ConstCase represents a single constant comparison. -// It is part of a Switch. -type ConstCase struct { - Block *ir.BasicBlock // block performing the comparison - Body *ir.BasicBlock // body of the case - Value *ir.Const // case comparand -} - -// A TypeCase represents a single type assertion. -// It is part of a Switch. -type TypeCase struct { - Block *ir.BasicBlock // block performing the type assert - Body *ir.BasicBlock // body of the case - Type types.Type // case type - Binding ir.Value // value bound by this case -} - -// A Switch is a logical high-level control flow operation -// (a multiway branch) discovered by analysis of a CFG containing -// only if/else chains. It is not part of the ir.Instruction set. -// -// One of ConstCases and TypeCases has length >= 2; -// the other is nil. -// -// In a value switch, the list of cases may contain duplicate constants. -// A type switch may contain duplicate types, or types assignable -// to an interface type also in the list. -// TODO(adonovan): eliminate such duplicates. -// -type Switch struct { - Start *ir.BasicBlock // block containing start of if/else chain - X ir.Value // the switch operand - ConstCases []ConstCase // ordered list of constant comparisons - TypeCases []TypeCase // ordered list of type assertions - Default *ir.BasicBlock // successor if all comparisons fail -} - -func (sw *Switch) String() string { - // We represent each block by the String() of its - // first Instruction, e.g. "print(42:int)". - var buf bytes.Buffer - if sw.ConstCases != nil { - fmt.Fprintf(&buf, "switch %s {\n", sw.X.Name()) - for _, c := range sw.ConstCases { - fmt.Fprintf(&buf, "case %s: %s\n", c.Value.Name(), c.Body.Instrs[0]) - } - } else { - fmt.Fprintf(&buf, "switch %s.(type) {\n", sw.X.Name()) - for _, c := range sw.TypeCases { - fmt.Fprintf(&buf, "case %s %s: %s\n", - c.Binding.Name(), c.Type, c.Body.Instrs[0]) - } - } - if sw.Default != nil { - fmt.Fprintf(&buf, "default: %s\n", sw.Default.Instrs[0]) - } - fmt.Fprintf(&buf, "}") - return buf.String() -} - -// Switches examines the control-flow graph of fn and returns the -// set of inferred value and type switches. A value switch tests an -// ir.Value for equality against two or more compile-time constant -// values. Switches involving link-time constants (addresses) are -// ignored. A type switch type-asserts an ir.Value against two or -// more types. -// -// The switches are returned in dominance order. -// -// The resulting switches do not necessarily correspond to uses of the -// 'switch' keyword in the source: for example, a single source-level -// switch statement with non-constant cases may result in zero, one or -// many Switches, one per plural sequence of constant cases. -// Switches may even be inferred from if/else- or goto-based control flow. -// (In general, the control flow constructs of the source program -// cannot be faithfully reproduced from the IR.) -// -func Switches(fn *ir.Function) []Switch { - // Traverse the CFG in dominance order, so we don't - // enter an if/else-chain in the middle. - var switches []Switch - seen := make(map[*ir.BasicBlock]bool) // TODO(adonovan): opt: use ir.blockSet - for _, b := range fn.DomPreorder() { - if x, k := isComparisonBlock(b); x != nil { - // Block b starts a switch. - sw := Switch{Start: b, X: x} - valueSwitch(&sw, k, seen) - if len(sw.ConstCases) > 1 { - switches = append(switches, sw) - } - } - - if y, x, T := isTypeAssertBlock(b); y != nil { - // Block b starts a type switch. - sw := Switch{Start: b, X: x} - typeSwitch(&sw, y, T, seen) - if len(sw.TypeCases) > 1 { - switches = append(switches, sw) - } - } - } - return switches -} - -func isSameX(x1 ir.Value, x2 ir.Value) bool { - if x1 == x2 { - return true - } - if x2, ok := x2.(*ir.Sigma); ok { - return isSameX(x1, x2.X) - } - return false -} - -func valueSwitch(sw *Switch, k *ir.Const, seen map[*ir.BasicBlock]bool) { - b := sw.Start - x := sw.X - for isSameX(sw.X, x) { - if seen[b] { - break - } - seen[b] = true - - sw.ConstCases = append(sw.ConstCases, ConstCase{ - Block: b, - Body: b.Succs[0], - Value: k, - }) - b = b.Succs[1] - n := 0 - for _, instr := range b.Instrs { - switch instr.(type) { - case *ir.If, *ir.BinOp: - n++ - case *ir.Sigma, *ir.Phi, *ir.DebugRef: - default: - n += 1000 - } - } - if n != 2 { - // Block b contains not just 'if x == k' and σ/ϕ nodes, - // so it may have side effects that - // make it unsafe to elide. - break - } - if len(b.Preds) != 1 { - // Block b has multiple predecessors, - // so it cannot be treated as a case. - break - } - x, k = isComparisonBlock(b) - } - sw.Default = b -} - -func typeSwitch(sw *Switch, y ir.Value, T types.Type, seen map[*ir.BasicBlock]bool) { - b := sw.Start - x := sw.X - for isSameX(sw.X, x) { - if seen[b] { - break - } - seen[b] = true - - sw.TypeCases = append(sw.TypeCases, TypeCase{ - Block: b, - Body: b.Succs[0], - Type: T, - Binding: y, - }) - b = b.Succs[1] - n := 0 - for _, instr := range b.Instrs { - switch instr.(type) { - case *ir.TypeAssert, *ir.Extract, *ir.If: - n++ - case *ir.Sigma, *ir.Phi: - default: - n += 1000 - } - } - if n != 4 { - // Block b contains not just - // {TypeAssert; Extract #0; Extract #1; If} - // so it may have side effects that - // make it unsafe to elide. - break - } - if len(b.Preds) != 1 { - // Block b has multiple predecessors, - // so it cannot be treated as a case. - break - } - y, x, T = isTypeAssertBlock(b) - } - sw.Default = b -} - -// isComparisonBlock returns the operands (v, k) if a block ends with -// a comparison v==k, where k is a compile-time constant. -// -func isComparisonBlock(b *ir.BasicBlock) (v ir.Value, k *ir.Const) { - if n := len(b.Instrs); n >= 2 { - if i, ok := b.Instrs[n-1].(*ir.If); ok { - if binop, ok := i.Cond.(*ir.BinOp); ok && binop.Block() == b && binop.Op == token.EQL { - if k, ok := binop.Y.(*ir.Const); ok { - return binop.X, k - } - if k, ok := binop.X.(*ir.Const); ok { - return binop.Y, k - } - } - } - } - return -} - -// isTypeAssertBlock returns the operands (y, x, T) if a block ends with -// a type assertion "if y, ok := x.(T); ok {". -// -func isTypeAssertBlock(b *ir.BasicBlock) (y, x ir.Value, T types.Type) { - if n := len(b.Instrs); n >= 4 { - if i, ok := b.Instrs[n-1].(*ir.If); ok { - if ext1, ok := i.Cond.(*ir.Extract); ok && ext1.Block() == b && ext1.Index == 1 { - if ta, ok := ext1.Tuple.(*ir.TypeAssert); ok && ta.Block() == b { - // hack: relies upon instruction ordering. - if ext0, ok := b.Instrs[n-3].(*ir.Extract); ok { - return ext0, ta.X, ta.AssertedType - } - } - } - } - } - return -} diff --git a/vendor/honnef.co/go/tools/ir/irutil/util.go b/vendor/honnef.co/go/tools/ir/irutil/util.go deleted file mode 100644 index 04b25f5f9b..0000000000 --- a/vendor/honnef.co/go/tools/ir/irutil/util.go +++ /dev/null @@ -1,70 +0,0 @@ -package irutil - -import ( - "honnef.co/go/tools/ir" -) - -func Reachable(from, to *ir.BasicBlock) bool { - if from == to { - return true - } - if from.Dominates(to) { - return true - } - - found := false - Walk(from, func(b *ir.BasicBlock) bool { - if b == to { - found = true - return false - } - return true - }) - return found -} - -func Walk(b *ir.BasicBlock, fn func(*ir.BasicBlock) bool) { - seen := map[*ir.BasicBlock]bool{} - wl := []*ir.BasicBlock{b} - for len(wl) > 0 { - b := wl[len(wl)-1] - wl = wl[:len(wl)-1] - if seen[b] { - continue - } - seen[b] = true - if !fn(b) { - continue - } - wl = append(wl, b.Succs...) - } -} - -func Vararg(x *ir.Slice) ([]ir.Value, bool) { - var out []ir.Value - slice, ok := x.X.(*ir.Alloc) - if !ok { - return nil, false - } - for _, ref := range *slice.Referrers() { - if ref == x { - continue - } - if ref.Block() != x.Block() { - return nil, false - } - idx, ok := ref.(*ir.IndexAddr) - if !ok { - return nil, false - } - if len(*idx.Referrers()) != 1 { - return nil, false - } - store, ok := (*idx.Referrers())[0].(*ir.Store) - if !ok { - return nil, false - } - out = append(out, store.Val) - } - return out, true -} diff --git a/vendor/honnef.co/go/tools/ir/irutil/visit.go b/vendor/honnef.co/go/tools/ir/irutil/visit.go deleted file mode 100644 index 657c9cde74..0000000000 --- a/vendor/honnef.co/go/tools/ir/irutil/visit.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package irutil // import "honnef.co/go/tools/ir/irutil" - -import "honnef.co/go/tools/ir" - -// This file defines utilities for visiting the IR of -// a Program. -// -// TODO(adonovan): test coverage. - -// AllFunctions finds and returns the set of functions potentially -// needed by program prog, as determined by a simple linker-style -// reachability algorithm starting from the members and method-sets of -// each package. The result may include anonymous functions and -// synthetic wrappers. -// -// Precondition: all packages are built. -// -func AllFunctions(prog *ir.Program) map[*ir.Function]bool { - visit := visitor{ - prog: prog, - seen: make(map[*ir.Function]bool), - } - visit.program() - return visit.seen -} - -type visitor struct { - prog *ir.Program - seen map[*ir.Function]bool -} - -func (visit *visitor) program() { - for _, pkg := range visit.prog.AllPackages() { - for _, mem := range pkg.Members { - if fn, ok := mem.(*ir.Function); ok { - visit.function(fn) - } - } - } - for _, T := range visit.prog.RuntimeTypes() { - mset := visit.prog.MethodSets.MethodSet(T) - for i, n := 0, mset.Len(); i < n; i++ { - visit.function(visit.prog.MethodValue(mset.At(i))) - } - } -} - -func (visit *visitor) function(fn *ir.Function) { - if !visit.seen[fn] { - visit.seen[fn] = true - var buf [10]*ir.Value // avoid alloc in common case - for _, b := range fn.Blocks { - for _, instr := range b.Instrs { - for _, op := range instr.Operands(buf[:0]) { - if fn, ok := (*op).(*ir.Function); ok { - visit.function(fn) - } - } - } - } - } -} - -// MainPackages returns the subset of the specified packages -// named "main" that define a main function. -// The result may include synthetic "testmain" packages. -func MainPackages(pkgs []*ir.Package) []*ir.Package { - var mains []*ir.Package - for _, pkg := range pkgs { - if pkg.Pkg.Name() == "main" && pkg.Func("main") != nil { - mains = append(mains, pkg) - } - } - return mains -} diff --git a/vendor/honnef.co/go/tools/ir/lift.go b/vendor/honnef.co/go/tools/ir/lift.go deleted file mode 100644 index 71d5c8cb06..0000000000 --- a/vendor/honnef.co/go/tools/ir/lift.go +++ /dev/null @@ -1,1063 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines the lifting pass which tries to "lift" Alloc -// cells (new/local variables) into SSA registers, replacing loads -// with the dominating stored value, eliminating loads and stores, and -// inserting φ- and σ-nodes as needed. - -// Cited papers and resources: -// -// Ron Cytron et al. 1991. Efficiently computing SSA form... -// http://doi.acm.org/10.1145/115372.115320 -// -// Cooper, Harvey, Kennedy. 2001. A Simple, Fast Dominance Algorithm. -// Software Practice and Experience 2001, 4:1-10. -// http://www.hipersoft.rice.edu/grads/publications/dom14.pdf -// -// Daniel Berlin, llvmdev mailing list, 2012. -// http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-January/046638.html -// (Be sure to expand the whole thread.) -// -// C. Scott Ananian. 1997. The static single information form. -// -// Jeremy Singer. 2006. Static program analysis based on virtual register renaming. - -// TODO(adonovan): opt: there are many optimizations worth evaluating, and -// the conventional wisdom for SSA construction is that a simple -// algorithm well engineered often beats those of better asymptotic -// complexity on all but the most egregious inputs. -// -// Danny Berlin suggests that the Cooper et al. algorithm for -// computing the dominance frontier is superior to Cytron et al. -// Furthermore he recommends that rather than computing the DF for the -// whole function then renaming all alloc cells, it may be cheaper to -// compute the DF for each alloc cell separately and throw it away. -// -// Consider exploiting liveness information to avoid creating dead -// φ-nodes which we then immediately remove. -// -// Also see many other "TODO: opt" suggestions in the code. - -import ( - "fmt" - "go/types" - "os" -) - -// If true, show diagnostic information at each step of lifting. -// Very verbose. -const debugLifting = false - -// domFrontier maps each block to the set of blocks in its dominance -// frontier. The outer slice is conceptually a map keyed by -// Block.Index. The inner slice is conceptually a set, possibly -// containing duplicates. -// -// TODO(adonovan): opt: measure impact of dups; consider a packed bit -// representation, e.g. big.Int, and bitwise parallel operations for -// the union step in the Children loop. -// -// domFrontier's methods mutate the slice's elements but not its -// length, so their receivers needn't be pointers. -// -type domFrontier [][]*BasicBlock - -func (df domFrontier) add(u, v *BasicBlock) { - df[u.Index] = append(df[u.Index], v) -} - -// build builds the dominance frontier df for the dominator tree of -// fn, using the algorithm found in A Simple, Fast Dominance -// Algorithm, Figure 5. -// -// TODO(adonovan): opt: consider Berlin approach, computing pruned SSA -// by pruning the entire IDF computation, rather than merely pruning -// the DF -> IDF step. -func (df domFrontier) build(fn *Function) { - for _, b := range fn.Blocks { - if len(b.Preds) >= 2 { - for _, p := range b.Preds { - runner := p - for runner != b.dom.idom { - df.add(runner, b) - runner = runner.dom.idom - } - } - } - } -} - -func buildDomFrontier(fn *Function) domFrontier { - df := make(domFrontier, len(fn.Blocks)) - df.build(fn) - return df -} - -type postDomFrontier [][]*BasicBlock - -func (rdf postDomFrontier) add(u, v *BasicBlock) { - rdf[u.Index] = append(rdf[u.Index], v) -} - -func (rdf postDomFrontier) build(fn *Function) { - for _, b := range fn.Blocks { - if len(b.Succs) >= 2 { - for _, s := range b.Succs { - runner := s - for runner != b.pdom.idom { - rdf.add(runner, b) - runner = runner.pdom.idom - } - } - } - } -} - -func buildPostDomFrontier(fn *Function) postDomFrontier { - rdf := make(postDomFrontier, len(fn.Blocks)) - rdf.build(fn) - return rdf -} - -func removeInstr(refs []Instruction, instr Instruction) []Instruction { - i := 0 - for _, ref := range refs { - if ref == instr { - continue - } - refs[i] = ref - i++ - } - for j := i; j != len(refs); j++ { - refs[j] = nil // aid GC - } - return refs[:i] -} - -func clearInstrs(instrs []Instruction) { - for i := range instrs { - instrs[i] = nil - } -} - -// lift replaces local and new Allocs accessed only with -// load/store by IR registers, inserting φ- and σ-nodes where necessary. -// The result is a program in pruned SSI form. -// -// Preconditions: -// - fn has no dead blocks (blockopt has run). -// - Def/use info (Operands and Referrers) is up-to-date. -// - The dominator tree is up-to-date. -// -func lift(fn *Function) { - // TODO(adonovan): opt: lots of little optimizations may be - // worthwhile here, especially if they cause us to avoid - // buildDomFrontier. For example: - // - // - Alloc never loaded? Eliminate. - // - Alloc never stored? Replace all loads with a zero constant. - // - Alloc stored once? Replace loads with dominating store; - // don't forget that an Alloc is itself an effective store - // of zero. - // - Alloc used only within a single block? - // Use degenerate algorithm avoiding φ-nodes. - // - Consider synergy with scalar replacement of aggregates (SRA). - // e.g. *(&x.f) where x is an Alloc. - // Perhaps we'd get better results if we generated this as x.f - // i.e. Field(x, .f) instead of Load(FieldIndex(x, .f)). - // Unclear. - // - // But we will start with the simplest correct code. - var df domFrontier - var rdf postDomFrontier - var closure *closure - var newPhis newPhiMap - var newSigmas newSigmaMap - - // During this pass we will replace some BasicBlock.Instrs - // (allocs, loads and stores) with nil, keeping a count in - // BasicBlock.gaps. At the end we will reset Instrs to the - // concatenation of all non-dead newPhis and non-nil Instrs - // for the block, reusing the original array if space permits. - - // While we're here, we also eliminate 'rundefers' - // instructions in functions that contain no 'defer' - // instructions. - usesDefer := false - - // Determine which allocs we can lift and number them densely. - // The renaming phase uses this numbering for compact maps. - numAllocs := 0 - for _, b := range fn.Blocks { - b.gaps = 0 - b.rundefers = 0 - for _, instr := range b.Instrs { - switch instr := instr.(type) { - case *Alloc: - if !liftable(instr) { - instr.index = -1 - continue - } - index := -1 - if numAllocs == 0 { - df = buildDomFrontier(fn) - rdf = buildPostDomFrontier(fn) - if len(fn.Blocks) > 2 { - closure = transitiveClosure(fn) - } - newPhis = make(newPhiMap, len(fn.Blocks)) - newSigmas = make(newSigmaMap, len(fn.Blocks)) - - if debugLifting { - title := false - for i, blocks := range df { - if blocks != nil { - if !title { - fmt.Fprintf(os.Stderr, "Dominance frontier of %s:\n", fn) - title = true - } - fmt.Fprintf(os.Stderr, "\t%s: %s\n", fn.Blocks[i], blocks) - } - } - } - } - liftAlloc(closure, df, rdf, instr, newPhis, newSigmas) - index = numAllocs - numAllocs++ - instr.index = index - case *Defer: - usesDefer = true - case *RunDefers: - b.rundefers++ - } - } - } - - if numAllocs > 0 { - // renaming maps an alloc (keyed by index) to its replacement - // value. Initially the renaming contains nil, signifying the - // zero constant of the appropriate type; we construct the - // Const lazily at most once on each path through the domtree. - // TODO(adonovan): opt: cache per-function not per subtree. - renaming := make([]Value, numAllocs) - - // Renaming. - rename(fn.Blocks[0], renaming, newPhis, newSigmas) - - simplifyPhis(newPhis) - - // Eliminate dead φ- and σ-nodes. - markLiveNodes(fn.Blocks, newPhis, newSigmas) - } - - // Prepend remaining live φ-nodes to each block and possibly kill rundefers. - for _, b := range fn.Blocks { - var head []Instruction - if numAllocs > 0 { - nps := newPhis[b.Index] - head = make([]Instruction, 0, len(nps)) - for _, pred := range b.Preds { - nss := newSigmas[pred.Index] - idx := pred.succIndex(b) - for _, newSigma := range nss { - if sigma := newSigma.sigmas[idx]; sigma != nil && sigma.live { - head = append(head, sigma) - - // we didn't populate referrers before, as most - // sigma nodes will be killed - if refs := sigma.X.Referrers(); refs != nil { - *refs = append(*refs, sigma) - } - } else if sigma != nil { - sigma.block = nil - } - } - } - for _, np := range nps { - if np.phi.live { - head = append(head, np.phi) - } else { - for _, edge := range np.phi.Edges { - if refs := edge.Referrers(); refs != nil { - *refs = removeInstr(*refs, np.phi) - } - } - np.phi.block = nil - } - } - } - - rundefersToKill := b.rundefers - if usesDefer { - rundefersToKill = 0 - } - - j := len(head) - if j+b.gaps+rundefersToKill == 0 { - continue // fast path: no new phis or gaps - } - - // We could do straight copies instead of element-wise copies - // when both b.gaps and rundefersToKill are zero. However, - // that seems to only be the case ~1% of the time, which - // doesn't seem worth the extra branch. - - // Remove dead instructions, add phis and sigmas - ns := len(b.Instrs) + j - b.gaps - rundefersToKill - if ns <= cap(b.Instrs) { - // b.Instrs has enough capacity to store all instructions - - // OPT(dh): check cap vs the actually required space; if - // there is a big enough difference, it may be worth - // allocating a new slice, to avoid pinning memory. - dst := b.Instrs[:cap(b.Instrs)] - i := len(dst) - 1 - for n := len(b.Instrs) - 1; n >= 0; n-- { - instr := dst[n] - if instr == nil { - continue - } - if !usesDefer { - if _, ok := instr.(*RunDefers); ok { - continue - } - } - dst[i] = instr - i-- - } - off := i + 1 - len(head) - // aid GC - clearInstrs(dst[:off]) - dst = dst[off:] - copy(dst, head) - b.Instrs = dst - } else { - // not enough space, so allocate a new slice and copy - // over. - dst := make([]Instruction, ns) - copy(dst, head) - - for _, instr := range b.Instrs { - if instr == nil { - continue - } - if !usesDefer { - if _, ok := instr.(*RunDefers); ok { - continue - } - } - dst[j] = instr - j++ - } - b.Instrs = dst - } - } - - // Remove any fn.Locals that were lifted. - j := 0 - for _, l := range fn.Locals { - if l.index < 0 { - fn.Locals[j] = l - j++ - } - } - // Nil out fn.Locals[j:] to aid GC. - for i := j; i < len(fn.Locals); i++ { - fn.Locals[i] = nil - } - fn.Locals = fn.Locals[:j] -} - -func hasDirectReferrer(instr Instruction) bool { - for _, instr := range *instr.Referrers() { - switch instr.(type) { - case *Phi, *Sigma: - // ignore - default: - return true - } - } - return false -} - -func markLiveNodes(blocks []*BasicBlock, newPhis newPhiMap, newSigmas newSigmaMap) { - // Phi and sigma nodes are considered live if a non-phi, non-sigma - // node uses them. Once we find a node that is live, we mark all - // of its operands as used, too. - for _, npList := range newPhis { - for _, np := range npList { - phi := np.phi - if !phi.live && hasDirectReferrer(phi) { - markLivePhi(phi) - } - } - } - for _, npList := range newSigmas { - for _, np := range npList { - for _, sigma := range np.sigmas { - if sigma != nil && !sigma.live && hasDirectReferrer(sigma) { - markLiveSigma(sigma) - } - } - } - } - // Existing φ-nodes due to && and || operators - // are all considered live (see Go issue 19622). - for _, b := range blocks { - for _, phi := range b.phis() { - markLivePhi(phi.(*Phi)) - } - } -} - -func markLivePhi(phi *Phi) { - phi.live = true - for _, rand := range phi.Edges { - switch rand := rand.(type) { - case *Phi: - if !rand.live { - markLivePhi(rand) - } - case *Sigma: - if !rand.live { - markLiveSigma(rand) - } - } - } -} - -func markLiveSigma(sigma *Sigma) { - sigma.live = true - switch rand := sigma.X.(type) { - case *Phi: - if !rand.live { - markLivePhi(rand) - } - case *Sigma: - if !rand.live { - markLiveSigma(rand) - } - } -} - -// simplifyPhis replaces trivial phis with non-phi alternatives. Phi -// nodes where all edges are identical, or consist of only the phi -// itself and one other value, may be replaced with the value. -func simplifyPhis(newPhis newPhiMap) { - // find all phis that are trivial and can be replaced with a - // non-phi value. run until we reach a fixpoint, because replacing - // a phi may make other phis trivial. - for changed := true; changed; { - changed = false - for _, npList := range newPhis { - for _, np := range npList { - if np.phi.live { - // we're reusing 'live' to mean 'dead' in the context of simplifyPhis - continue - } - if r, ok := isUselessPhi(np.phi); ok { - // useless phi, replace its uses with the - // replacement value. the dead phi pass will clean - // up the phi afterwards. - replaceAll(np.phi, r) - np.phi.live = true - changed = true - } - } - } - } - - for _, npList := range newPhis { - for _, np := range npList { - np.phi.live = false - } - } -} - -type BlockSet struct { - idx int - values []bool - count int -} - -func NewBlockSet(size int) *BlockSet { - return &BlockSet{values: make([]bool, size)} -} - -func (s *BlockSet) Set(s2 *BlockSet) { - copy(s.values, s2.values) - s.count = 0 - for _, v := range s.values { - if v { - s.count++ - } - } -} - -func (s *BlockSet) Num() int { - return s.count -} - -func (s *BlockSet) Has(b *BasicBlock) bool { - if b.Index >= len(s.values) { - return false - } - return s.values[b.Index] -} - -// add adds b to the set and returns true if the set changed. -func (s *BlockSet) Add(b *BasicBlock) bool { - if s.values[b.Index] { - return false - } - s.count++ - s.values[b.Index] = true - s.idx = b.Index - - return true -} - -func (s *BlockSet) Clear() { - for j := range s.values { - s.values[j] = false - } - s.count = 0 -} - -// take removes an arbitrary element from a set s and -// returns its index, or returns -1 if empty. -func (s *BlockSet) Take() int { - // [i, end] - for i := s.idx; i < len(s.values); i++ { - if s.values[i] { - s.values[i] = false - s.idx = i - s.count-- - return i - } - } - - // [start, i) - for i := 0; i < s.idx; i++ { - if s.values[i] { - s.values[i] = false - s.idx = i - s.count-- - return i - } - } - - return -1 -} - -type closure struct { - span []uint32 - reachables []interval -} - -type interval uint32 - -const ( - flagMask = 1 << 31 - numBits = 20 - lengthBits = 32 - numBits - 1 - lengthMask = (1<>numBits - } else { - // large interval - i++ - start = uint32(inv & numMask) - end = uint32(r[i]) - } - if idx >= start && idx <= end { - return true - } - } - return false -} - -func (c closure) reachable(id int) []interval { - return c.reachables[c.span[id]:c.span[id+1]] -} - -func (c closure) walk(current *BasicBlock, b *BasicBlock, visited []bool) { - visited[b.Index] = true - for _, succ := range b.Succs { - if visited[succ.Index] { - continue - } - visited[succ.Index] = true - c.walk(current, succ, visited) - } -} - -func transitiveClosure(fn *Function) *closure { - reachable := make([]bool, len(fn.Blocks)) - c := &closure{} - c.span = make([]uint32, len(fn.Blocks)+1) - - addInterval := func(start, end uint32) { - if l := end - start; l <= 1<= 0 { // store of zero to Alloc cell - // Replace dominated loads by the zero value. - renaming[instr.index] = nil - if debugLifting { - fmt.Fprintf(os.Stderr, "\tkill alloc %s\n", instr) - } - // Delete the Alloc. - u.Instrs[i] = nil - u.gaps++ - } - - case *Store: - if alloc, ok := instr.Addr.(*Alloc); ok && alloc.index >= 0 { // store to Alloc cell - // Replace dominated loads by the stored value. - renaming[alloc.index] = instr.Val - if debugLifting { - fmt.Fprintf(os.Stderr, "\tkill store %s; new value: %s\n", - instr, instr.Val.Name()) - } - if refs := instr.Addr.Referrers(); refs != nil { - *refs = removeInstr(*refs, instr) - } - if refs := instr.Val.Referrers(); refs != nil { - *refs = removeInstr(*refs, instr) - } - // Delete the Store. - u.Instrs[i] = nil - u.gaps++ - } - - case *Load: - if alloc, ok := instr.X.(*Alloc); ok && alloc.index >= 0 { // load of Alloc cell - // In theory, we wouldn't be able to replace loads - // directly, because a loaded value could be used in - // different branches, in which case it should be - // replaced with different sigma nodes. But we can't - // simply defer replacement, either, because then - // later stores might incorrectly affect this load. - // - // To avoid doing renaming on _all_ values (instead of - // just loads and stores like we're doing), we make - // sure during code generation that each load is only - // used in one block. For example, in constant switch - // statements, where the tag is only evaluated once, - // we store it in a temporary and load it for each - // comparison, so that we have individual loads to - // replace. - newval := renamed(u.Parent(), renaming, alloc) - if debugLifting { - fmt.Fprintf(os.Stderr, "\tupdate load %s = %s with %s\n", - instr.Name(), instr, newval) - } - replaceAll(instr, newval) - u.Instrs[i] = nil - u.gaps++ - } - - case *DebugRef: - if x, ok := instr.X.(*Alloc); ok && x.index >= 0 { - if instr.IsAddr { - instr.X = renamed(u.Parent(), renaming, x) - instr.IsAddr = false - - // Add DebugRef to instr.X's referrers. - if refs := instr.X.Referrers(); refs != nil { - *refs = append(*refs, instr) - } - } else { - // A source expression denotes the address - // of an Alloc that was optimized away. - instr.X = nil - - // Delete the DebugRef. - u.Instrs[i] = nil - u.gaps++ - } - } - } - } - - // update all outgoing sigma nodes with the dominating store - for _, sigmas := range newSigmas[u.Index] { - for _, sigma := range sigmas.sigmas { - if sigma == nil { - continue - } - sigma.X = renamed(u.Parent(), renaming, sigmas.alloc) - } - } - - // For each φ-node in a CFG successor, rename the edge. - for succi, v := range u.Succs { - phis := newPhis[v.Index] - if len(phis) == 0 { - continue - } - i := v.predIndex(u) - for _, np := range phis { - phi := np.phi - alloc := np.alloc - // if there's a sigma node, use it, else use the dominating value - var newval Value - for _, sigmas := range newSigmas[u.Index] { - if sigmas.alloc == alloc && sigmas.sigmas[succi] != nil { - newval = sigmas.sigmas[succi] - break - } - } - if newval == nil { - newval = renamed(u.Parent(), renaming, alloc) - } - if debugLifting { - fmt.Fprintf(os.Stderr, "\tsetphi %s edge %s -> %s (#%d) (alloc=%s) := %s\n", - phi.Name(), u, v, i, alloc.Name(), newval.Name()) - } - phi.Edges[i] = newval - if prefs := newval.Referrers(); prefs != nil { - *prefs = append(*prefs, phi) - } - } - } - - // Continue depth-first recursion over domtree, pushing a - // fresh copy of the renaming map for each subtree. - r := make([]Value, len(renaming)) - for _, v := range u.dom.children { - // XXX add debugging - copy(r, renaming) - - // on entry to a block, the incoming sigma nodes become the new values for their alloc - if idx := u.succIndex(v); idx != -1 { - for _, sigma := range newSigmas[u.Index] { - if sigma.sigmas[idx] != nil { - r[sigma.alloc.index] = sigma.sigmas[idx] - } - } - } - rename(v, r, newPhis, newSigmas) - } - -} diff --git a/vendor/honnef.co/go/tools/ir/lvalue.go b/vendor/honnef.co/go/tools/ir/lvalue.go deleted file mode 100644 index f676a1f7ab..0000000000 --- a/vendor/honnef.co/go/tools/ir/lvalue.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// lvalues are the union of addressable expressions and map-index -// expressions. - -import ( - "go/ast" - "go/types" -) - -// An lvalue represents an assignable location that may appear on the -// left-hand side of an assignment. This is a generalization of a -// pointer to permit updates to elements of maps. -// -type lvalue interface { - store(fn *Function, v Value, source ast.Node) // stores v into the location - load(fn *Function, source ast.Node) Value // loads the contents of the location - address(fn *Function) Value // address of the location - typ() types.Type // returns the type of the location -} - -// An address is an lvalue represented by a true pointer. -type address struct { - addr Value - expr ast.Expr // source syntax of the value (not address) [debug mode] -} - -func (a *address) load(fn *Function, source ast.Node) Value { - return emitLoad(fn, a.addr, source) -} - -func (a *address) store(fn *Function, v Value, source ast.Node) { - store := emitStore(fn, a.addr, v, source) - if a.expr != nil { - // store.Val is v, converted for assignability. - emitDebugRef(fn, a.expr, store.Val, false) - } -} - -func (a *address) address(fn *Function) Value { - if a.expr != nil { - emitDebugRef(fn, a.expr, a.addr, true) - } - return a.addr -} - -func (a *address) typ() types.Type { - return deref(a.addr.Type()) -} - -// An element is an lvalue represented by m[k], the location of an -// element of a map. These locations are not addressable -// since pointers cannot be formed from them, but they do support -// load() and store(). -// -type element struct { - m, k Value // map - t types.Type // map element type -} - -func (e *element) load(fn *Function, source ast.Node) Value { - l := &MapLookup{ - X: e.m, - Index: e.k, - } - l.setType(e.t) - return fn.emit(l, source) -} - -func (e *element) store(fn *Function, v Value, source ast.Node) { - up := &MapUpdate{ - Map: e.m, - Key: e.k, - Value: emitConv(fn, v, e.t, source), - } - fn.emit(up, source) -} - -func (e *element) address(fn *Function) Value { - panic("map elements are not addressable") -} - -func (e *element) typ() types.Type { - return e.t -} - -// A blank is a dummy variable whose name is "_". -// It is not reified: loads are illegal and stores are ignored. -// -type blank struct{} - -func (bl blank) load(fn *Function, source ast.Node) Value { - panic("blank.load is illegal") -} - -func (bl blank) store(fn *Function, v Value, source ast.Node) { - s := &BlankStore{ - Val: v, - } - fn.emit(s, source) -} - -func (bl blank) address(fn *Function) Value { - panic("blank var is not addressable") -} - -func (bl blank) typ() types.Type { - // This should be the type of the blank Ident; the typechecker - // doesn't provide this yet, but fortunately, we don't need it - // yet either. - panic("blank.typ is unimplemented") -} diff --git a/vendor/honnef.co/go/tools/ir/methods.go b/vendor/honnef.co/go/tools/ir/methods.go deleted file mode 100644 index 517f448b8c..0000000000 --- a/vendor/honnef.co/go/tools/ir/methods.go +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines utilities for population of method sets. - -import ( - "fmt" - "go/types" -) - -// MethodValue returns the Function implementing method sel, building -// wrapper methods on demand. It returns nil if sel denotes an -// abstract (interface) method. -// -// Precondition: sel.Kind() == MethodVal. -// -// Thread-safe. -// -// EXCLUSIVE_LOCKS_ACQUIRED(prog.methodsMu) -// -func (prog *Program) MethodValue(sel *types.Selection) *Function { - if sel.Kind() != types.MethodVal { - panic(fmt.Sprintf("MethodValue(%s) kind != MethodVal", sel)) - } - T := sel.Recv() - if isInterface(T) { - return nil // abstract method - } - if prog.mode&LogSource != 0 { - defer logStack("MethodValue %s %v", T, sel)() - } - - prog.methodsMu.Lock() - defer prog.methodsMu.Unlock() - - return prog.addMethod(prog.createMethodSet(T), sel) -} - -// LookupMethod returns the implementation of the method of type T -// identified by (pkg, name). It returns nil if the method exists but -// is abstract, and panics if T has no such method. -// -func (prog *Program) LookupMethod(T types.Type, pkg *types.Package, name string) *Function { - sel := prog.MethodSets.MethodSet(T).Lookup(pkg, name) - if sel == nil { - panic(fmt.Sprintf("%s has no method %s", T, types.Id(pkg, name))) - } - return prog.MethodValue(sel) -} - -// methodSet contains the (concrete) methods of a non-interface type. -type methodSet struct { - mapping map[string]*Function // populated lazily - complete bool // mapping contains all methods -} - -// Precondition: !isInterface(T). -// EXCLUSIVE_LOCKS_REQUIRED(prog.methodsMu) -func (prog *Program) createMethodSet(T types.Type) *methodSet { - mset, ok := prog.methodSets.At(T).(*methodSet) - if !ok { - mset = &methodSet{mapping: make(map[string]*Function)} - prog.methodSets.Set(T, mset) - } - return mset -} - -// EXCLUSIVE_LOCKS_REQUIRED(prog.methodsMu) -func (prog *Program) addMethod(mset *methodSet, sel *types.Selection) *Function { - if sel.Kind() == types.MethodExpr { - panic(sel) - } - id := sel.Obj().Id() - fn := mset.mapping[id] - if fn == nil { - obj := sel.Obj().(*types.Func) - - needsPromotion := len(sel.Index()) > 1 - needsIndirection := !isPointer(recvType(obj)) && isPointer(sel.Recv()) - if needsPromotion || needsIndirection { - fn = makeWrapper(prog, sel) - } else { - fn = prog.declaredFunc(obj) - } - if fn.Signature.Recv() == nil { - panic(fn) // missing receiver - } - mset.mapping[id] = fn - } - return fn -} - -// RuntimeTypes returns a new unordered slice containing all -// concrete types in the program for which a complete (non-empty) -// method set is required at run-time. -// -// Thread-safe. -// -// EXCLUSIVE_LOCKS_ACQUIRED(prog.methodsMu) -// -func (prog *Program) RuntimeTypes() []types.Type { - prog.methodsMu.Lock() - defer prog.methodsMu.Unlock() - - var res []types.Type - prog.methodSets.Iterate(func(T types.Type, v interface{}) { - if v.(*methodSet).complete { - res = append(res, T) - } - }) - return res -} - -// declaredFunc returns the concrete function/method denoted by obj. -// Panic ensues if there is none. -// -func (prog *Program) declaredFunc(obj *types.Func) *Function { - if v := prog.packageLevelValue(obj); v != nil { - return v.(*Function) - } - panic("no concrete method: " + obj.String()) -} - -// needMethodsOf ensures that runtime type information (including the -// complete method set) is available for the specified type T and all -// its subcomponents. -// -// needMethodsOf must be called for at least every type that is an -// operand of some MakeInterface instruction, and for the type of -// every exported package member. -// -// Precondition: T is not a method signature (*Signature with Recv()!=nil). -// -// Thread-safe. (Called via emitConv from multiple builder goroutines.) -// -// TODO(adonovan): make this faster. It accounts for 20% of SSA build time. -// -// EXCLUSIVE_LOCKS_ACQUIRED(prog.methodsMu) -// -func (prog *Program) needMethodsOf(T types.Type) { - prog.methodsMu.Lock() - prog.needMethods(T, false) - prog.methodsMu.Unlock() -} - -// Precondition: T is not a method signature (*Signature with Recv()!=nil). -// Recursive case: skip => don't create methods for T. -// -// EXCLUSIVE_LOCKS_REQUIRED(prog.methodsMu) -// -func (prog *Program) needMethods(T types.Type, skip bool) { - // Each package maintains its own set of types it has visited. - if prevSkip, ok := prog.runtimeTypes.At(T).(bool); ok { - // needMethods(T) was previously called - if !prevSkip || skip { - return // already seen, with same or false 'skip' value - } - } - prog.runtimeTypes.Set(T, skip) - - tmset := prog.MethodSets.MethodSet(T) - - if !skip && !isInterface(T) && tmset.Len() > 0 { - // Create methods of T. - mset := prog.createMethodSet(T) - if !mset.complete { - mset.complete = true - n := tmset.Len() - for i := 0; i < n; i++ { - prog.addMethod(mset, tmset.At(i)) - } - } - } - - // Recursion over signatures of each method. - for i := 0; i < tmset.Len(); i++ { - sig := tmset.At(i).Type().(*types.Signature) - prog.needMethods(sig.Params(), false) - prog.needMethods(sig.Results(), false) - } - - switch t := T.(type) { - case *types.Basic: - // nop - - case *types.Interface: - // nop---handled by recursion over method set. - - case *types.Pointer: - prog.needMethods(t.Elem(), false) - - case *types.Slice: - prog.needMethods(t.Elem(), false) - - case *types.Chan: - prog.needMethods(t.Elem(), false) - - case *types.Map: - prog.needMethods(t.Key(), false) - prog.needMethods(t.Elem(), false) - - case *types.Signature: - if t.Recv() != nil { - panic(fmt.Sprintf("Signature %s has Recv %s", t, t.Recv())) - } - prog.needMethods(t.Params(), false) - prog.needMethods(t.Results(), false) - - case *types.Named: - // A pointer-to-named type can be derived from a named - // type via reflection. It may have methods too. - prog.needMethods(types.NewPointer(T), false) - - // Consider 'type T struct{S}' where S has methods. - // Reflection provides no way to get from T to struct{S}, - // only to S, so the method set of struct{S} is unwanted, - // so set 'skip' flag during recursion. - prog.needMethods(t.Underlying(), true) - - case *types.Array: - prog.needMethods(t.Elem(), false) - - case *types.Struct: - for i, n := 0, t.NumFields(); i < n; i++ { - prog.needMethods(t.Field(i).Type(), false) - } - - case *types.Tuple: - for i, n := 0, t.Len(); i < n; i++ { - prog.needMethods(t.At(i).Type(), false) - } - - default: - panic(T) - } -} diff --git a/vendor/honnef.co/go/tools/ir/mode.go b/vendor/honnef.co/go/tools/ir/mode.go deleted file mode 100644 index da548fdbb2..0000000000 --- a/vendor/honnef.co/go/tools/ir/mode.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines the BuilderMode type and its command-line flag. - -import ( - "bytes" - "fmt" -) - -// BuilderMode is a bitmask of options for diagnostics and checking. -// -// *BuilderMode satisfies the flag.Value interface. Example: -// -// var mode = ir.BuilderMode(0) -// func init() { flag.Var(&mode, "build", ir.BuilderModeDoc) } -// -type BuilderMode uint - -const ( - PrintPackages BuilderMode = 1 << iota // Print package inventory to stdout - PrintFunctions // Print function IR code to stdout - PrintSource // Print source code when printing function IR - LogSource // Log source locations as IR builder progresses - SanityCheckFunctions // Perform sanity checking of function bodies - NaiveForm // Build naïve IR form: don't replace local loads/stores with registers - GlobalDebug // Enable debug info for all packages -) - -const BuilderModeDoc = `Options controlling the IR builder. -The value is a sequence of zero or more of these letters: -C perform sanity [C]hecking of the IR form. -D include [D]ebug info for every function. -P print [P]ackage inventory. -F print [F]unction IR code. -A print [A]ST nodes responsible for IR instructions -S log [S]ource locations as IR builder progresses. -N build [N]aive IR form: don't replace local loads/stores with registers. -` - -func (m BuilderMode) String() string { - var buf bytes.Buffer - if m&GlobalDebug != 0 { - buf.WriteByte('D') - } - if m&PrintPackages != 0 { - buf.WriteByte('P') - } - if m&PrintFunctions != 0 { - buf.WriteByte('F') - } - if m&PrintSource != 0 { - buf.WriteByte('A') - } - if m&LogSource != 0 { - buf.WriteByte('S') - } - if m&SanityCheckFunctions != 0 { - buf.WriteByte('C') - } - if m&NaiveForm != 0 { - buf.WriteByte('N') - } - return buf.String() -} - -// Set parses the flag characters in s and updates *m. -func (m *BuilderMode) Set(s string) error { - var mode BuilderMode - for _, c := range s { - switch c { - case 'D': - mode |= GlobalDebug - case 'P': - mode |= PrintPackages - case 'F': - mode |= PrintFunctions - case 'A': - mode |= PrintSource - case 'S': - mode |= LogSource - case 'C': - mode |= SanityCheckFunctions - case 'N': - mode |= NaiveForm - default: - return fmt.Errorf("unknown BuilderMode option: %q", c) - } - } - *m = mode - return nil -} - -// Get returns m. -func (m BuilderMode) Get() interface{} { return m } diff --git a/vendor/honnef.co/go/tools/ir/print.go b/vendor/honnef.co/go/tools/ir/print.go deleted file mode 100644 index c16c08efa6..0000000000 --- a/vendor/honnef.co/go/tools/ir/print.go +++ /dev/null @@ -1,472 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file implements the String() methods for all Value and -// Instruction types. - -import ( - "bytes" - "fmt" - "go/types" - "io" - "reflect" - "sort" - - "golang.org/x/tools/go/types/typeutil" -) - -// relName returns the name of v relative to i. -// In most cases, this is identical to v.Name(), but references to -// Functions (including methods) and Globals use RelString and -// all types are displayed with relType, so that only cross-package -// references are package-qualified. -// -func relName(v Value, i Instruction) string { - if v == nil { - return "" - } - var from *types.Package - if i != nil { - from = i.Parent().pkg() - } - switch v := v.(type) { - case Member: // *Function or *Global - return v.RelString(from) - } - return v.Name() -} - -func relType(t types.Type, from *types.Package) string { - return types.TypeString(t, types.RelativeTo(from)) -} - -func relString(m Member, from *types.Package) string { - // NB: not all globals have an Object (e.g. init$guard), - // so use Package().Object not Object.Package(). - if pkg := m.Package().Pkg; pkg != nil && pkg != from { - return fmt.Sprintf("%s.%s", pkg.Path(), m.Name()) - } - return m.Name() -} - -// Value.String() -// -// This method is provided only for debugging. -// It never appears in disassembly, which uses Value.Name(). - -func (v *Parameter) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("Parameter <%s> {%s}", relType(v.Type(), from), v.name) -} - -func (v *FreeVar) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("FreeVar <%s> %s", relType(v.Type(), from), v.Name()) -} - -func (v *Builtin) String() string { - return fmt.Sprintf("Builtin %s", v.Name()) -} - -// Instruction.String() - -func (v *Alloc) String() string { - from := v.Parent().pkg() - storage := "Stack" - if v.Heap { - storage = "Heap" - } - return fmt.Sprintf("%sAlloc <%s>", storage, relType(v.Type(), from)) -} - -func (v *Sigma) String() string { - from := v.Parent().pkg() - s := fmt.Sprintf("Sigma <%s> [b%d] %s", relType(v.Type(), from), v.From.Index, v.X.Name()) - return s -} - -func (v *Phi) String() string { - var b bytes.Buffer - fmt.Fprintf(&b, "Phi <%s>", v.Type()) - for i, edge := range v.Edges { - b.WriteString(" ") - // Be robust against malformed CFG. - if v.block == nil { - b.WriteString("??") - continue - } - block := -1 - if i < len(v.block.Preds) { - block = v.block.Preds[i].Index - } - fmt.Fprintf(&b, "%d:", block) - edgeVal := "" // be robust - if edge != nil { - edgeVal = relName(edge, v) - } - b.WriteString(edgeVal) - } - return b.String() -} - -func printCall(v *CallCommon, prefix string, instr Instruction) string { - var b bytes.Buffer - if !v.IsInvoke() { - if value, ok := instr.(Value); ok { - fmt.Fprintf(&b, "%s <%s> %s", prefix, relType(value.Type(), instr.Parent().pkg()), relName(v.Value, instr)) - } else { - fmt.Fprintf(&b, "%s %s", prefix, relName(v.Value, instr)) - } - } else { - if value, ok := instr.(Value); ok { - fmt.Fprintf(&b, "%sInvoke <%s> %s.%s", prefix, relType(value.Type(), instr.Parent().pkg()), relName(v.Value, instr), v.Method.Name()) - } else { - fmt.Fprintf(&b, "%sInvoke %s.%s", prefix, relName(v.Value, instr), v.Method.Name()) - } - } - for _, arg := range v.Args { - b.WriteString(" ") - b.WriteString(relName(arg, instr)) - } - return b.String() -} - -func (c *CallCommon) String() string { - return printCall(c, "", nil) -} - -func (v *Call) String() string { - return printCall(&v.Call, "Call", v) -} - -func (v *BinOp) String() string { - return fmt.Sprintf("BinOp <%s> {%s} %s %s", relType(v.Type(), v.Parent().pkg()), v.Op.String(), relName(v.X, v), relName(v.Y, v)) -} - -func (v *UnOp) String() string { - return fmt.Sprintf("UnOp <%s> {%s} %s", relType(v.Type(), v.Parent().pkg()), v.Op.String(), relName(v.X, v)) -} - -func (v *Load) String() string { - return fmt.Sprintf("Load <%s> %s", relType(v.Type(), v.Parent().pkg()), relName(v.X, v)) -} - -func printConv(prefix string, v, x Value) string { - from := v.Parent().pkg() - return fmt.Sprintf("%s <%s> %s", - prefix, - relType(v.Type(), from), - relName(x, v.(Instruction))) -} - -func (v *ChangeType) String() string { return printConv("ChangeType", v, v.X) } -func (v *Convert) String() string { return printConv("Convert", v, v.X) } -func (v *ChangeInterface) String() string { return printConv("ChangeInterface", v, v.X) } -func (v *MakeInterface) String() string { return printConv("MakeInterface", v, v.X) } - -func (v *MakeClosure) String() string { - from := v.Parent().pkg() - var b bytes.Buffer - fmt.Fprintf(&b, "MakeClosure <%s> %s", relType(v.Type(), from), relName(v.Fn, v)) - if v.Bindings != nil { - for _, c := range v.Bindings { - b.WriteString(" ") - b.WriteString(relName(c, v)) - } - } - return b.String() -} - -func (v *MakeSlice) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("MakeSlice <%s> %s %s", - relType(v.Type(), from), - relName(v.Len, v), - relName(v.Cap, v)) -} - -func (v *Slice) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("Slice <%s> %s %s %s %s", - relType(v.Type(), from), relName(v.X, v), relName(v.Low, v), relName(v.High, v), relName(v.Max, v)) -} - -func (v *MakeMap) String() string { - res := "" - if v.Reserve != nil { - res = relName(v.Reserve, v) - } - from := v.Parent().pkg() - return fmt.Sprintf("MakeMap <%s> %s", relType(v.Type(), from), res) -} - -func (v *MakeChan) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("MakeChan <%s> %s", relType(v.Type(), from), relName(v.Size, v)) -} - -func (v *FieldAddr) String() string { - from := v.Parent().pkg() - st := deref(v.X.Type()).Underlying().(*types.Struct) - // Be robust against a bad index. - name := "?" - if 0 <= v.Field && v.Field < st.NumFields() { - name = st.Field(v.Field).Name() - } - return fmt.Sprintf("FieldAddr <%s> [%d] (%s) %s", relType(v.Type(), from), v.Field, name, relName(v.X, v)) -} - -func (v *Field) String() string { - st := v.X.Type().Underlying().(*types.Struct) - // Be robust against a bad index. - name := "?" - if 0 <= v.Field && v.Field < st.NumFields() { - name = st.Field(v.Field).Name() - } - from := v.Parent().pkg() - return fmt.Sprintf("Field <%s> [%d] (%s) %s", relType(v.Type(), from), v.Field, name, relName(v.X, v)) -} - -func (v *IndexAddr) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("IndexAddr <%s> %s %s", relType(v.Type(), from), relName(v.X, v), relName(v.Index, v)) -} - -func (v *Index) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("Index <%s> %s %s", relType(v.Type(), from), relName(v.X, v), relName(v.Index, v)) -} - -func (v *MapLookup) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("MapLookup <%s> %s %s", relType(v.Type(), from), relName(v.X, v), relName(v.Index, v)) -} - -func (v *StringLookup) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("StringLookup <%s> %s %s", relType(v.Type(), from), relName(v.X, v), relName(v.Index, v)) -} - -func (v *Range) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("Range <%s> %s", relType(v.Type(), from), relName(v.X, v)) -} - -func (v *Next) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("Next <%s> %s", relType(v.Type(), from), relName(v.Iter, v)) -} - -func (v *TypeAssert) String() string { - from := v.Parent().pkg() - return fmt.Sprintf("TypeAssert <%s> %s", relType(v.Type(), from), relName(v.X, v)) -} - -func (v *Extract) String() string { - from := v.Parent().pkg() - name := v.Tuple.Type().(*types.Tuple).At(v.Index).Name() - return fmt.Sprintf("Extract <%s> [%d] (%s) %s", relType(v.Type(), from), v.Index, name, relName(v.Tuple, v)) -} - -func (s *Jump) String() string { - // Be robust against malformed CFG. - block := -1 - if s.block != nil && len(s.block.Succs) == 1 { - block = s.block.Succs[0].Index - } - str := fmt.Sprintf("Jump → b%d", block) - if s.Comment != "" { - str = fmt.Sprintf("%s # %s", str, s.Comment) - } - return str -} - -func (s *Unreachable) String() string { - // Be robust against malformed CFG. - block := -1 - if s.block != nil && len(s.block.Succs) == 1 { - block = s.block.Succs[0].Index - } - return fmt.Sprintf("Unreachable → b%d", block) -} - -func (s *If) String() string { - // Be robust against malformed CFG. - tblock, fblock := -1, -1 - if s.block != nil && len(s.block.Succs) == 2 { - tblock = s.block.Succs[0].Index - fblock = s.block.Succs[1].Index - } - return fmt.Sprintf("If %s → b%d b%d", relName(s.Cond, s), tblock, fblock) -} - -func (s *ConstantSwitch) String() string { - var b bytes.Buffer - fmt.Fprintf(&b, "ConstantSwitch %s", relName(s.Tag, s)) - for _, cond := range s.Conds { - fmt.Fprintf(&b, " %s", relName(cond, s)) - } - fmt.Fprint(&b, " →") - for _, succ := range s.block.Succs { - fmt.Fprintf(&b, " b%d", succ.Index) - } - return b.String() -} - -func (s *TypeSwitch) String() string { - from := s.Parent().pkg() - var b bytes.Buffer - fmt.Fprintf(&b, "TypeSwitch <%s> %s", relType(s.typ, from), relName(s.Tag, s)) - for _, cond := range s.Conds { - fmt.Fprintf(&b, " %q", relType(cond, s.block.parent.pkg())) - } - return b.String() -} - -func (s *Go) String() string { - return printCall(&s.Call, "Go", s) -} - -func (s *Panic) String() string { - // Be robust against malformed CFG. - block := -1 - if s.block != nil && len(s.block.Succs) == 1 { - block = s.block.Succs[0].Index - } - return fmt.Sprintf("Panic %s → b%d", relName(s.X, s), block) -} - -func (s *Return) String() string { - var b bytes.Buffer - b.WriteString("Return") - for _, r := range s.Results { - b.WriteString(" ") - b.WriteString(relName(r, s)) - } - return b.String() -} - -func (*RunDefers) String() string { - return "RunDefers" -} - -func (s *Send) String() string { - return fmt.Sprintf("Send %s %s", relName(s.Chan, s), relName(s.X, s)) -} - -func (recv *Recv) String() string { - from := recv.Parent().pkg() - return fmt.Sprintf("Recv <%s> %s", relType(recv.Type(), from), relName(recv.Chan, recv)) -} - -func (s *Defer) String() string { - return printCall(&s.Call, "Defer", s) -} - -func (s *Select) String() string { - var b bytes.Buffer - for i, st := range s.States { - if i > 0 { - b.WriteString(", ") - } - if st.Dir == types.RecvOnly { - b.WriteString("<-") - b.WriteString(relName(st.Chan, s)) - } else { - b.WriteString(relName(st.Chan, s)) - b.WriteString("<-") - b.WriteString(relName(st.Send, s)) - } - } - non := "" - if !s.Blocking { - non = "Non" - } - from := s.Parent().pkg() - return fmt.Sprintf("Select%sBlocking <%s> [%s]", non, relType(s.Type(), from), b.String()) -} - -func (s *Store) String() string { - return fmt.Sprintf("Store {%s} %s %s", - s.Val.Type(), relName(s.Addr, s), relName(s.Val, s)) -} - -func (s *BlankStore) String() string { - return fmt.Sprintf("BlankStore %s", relName(s.Val, s)) -} - -func (s *MapUpdate) String() string { - return fmt.Sprintf("MapUpdate %s %s %s", relName(s.Map, s), relName(s.Key, s), relName(s.Value, s)) -} - -func (s *DebugRef) String() string { - p := s.Parent().Prog.Fset.Position(s.Pos()) - var descr interface{} - if s.object != nil { - descr = s.object // e.g. "var x int" - } else { - descr = reflect.TypeOf(s.Expr) // e.g. "*ast.CallExpr" - } - var addr string - if s.IsAddr { - addr = "address of " - } - return fmt.Sprintf("; %s%s @ %d:%d is %s", addr, descr, p.Line, p.Column, s.X.Name()) -} - -func (p *Package) String() string { - return "package " + p.Pkg.Path() -} - -var _ io.WriterTo = (*Package)(nil) // *Package implements io.Writer - -func (p *Package) WriteTo(w io.Writer) (int64, error) { - var buf bytes.Buffer - WritePackage(&buf, p) - n, err := w.Write(buf.Bytes()) - return int64(n), err -} - -// WritePackage writes to buf a human-readable summary of p. -func WritePackage(buf *bytes.Buffer, p *Package) { - fmt.Fprintf(buf, "%s:\n", p) - - var names []string - maxname := 0 - for name := range p.Members { - if l := len(name); l > maxname { - maxname = l - } - names = append(names, name) - } - - from := p.Pkg - sort.Strings(names) - for _, name := range names { - switch mem := p.Members[name].(type) { - case *NamedConst: - fmt.Fprintf(buf, " const %-*s %s = %s\n", - maxname, name, mem.Name(), mem.Value.RelString(from)) - - case *Function: - fmt.Fprintf(buf, " func %-*s %s\n", - maxname, name, relType(mem.Type(), from)) - - case *Type: - fmt.Fprintf(buf, " type %-*s %s\n", - maxname, name, relType(mem.Type().Underlying(), from)) - for _, meth := range typeutil.IntuitiveMethodSet(mem.Type(), &p.Prog.MethodSets) { - fmt.Fprintf(buf, " %s\n", types.SelectionString(meth, types.RelativeTo(from))) - } - - case *Global: - fmt.Fprintf(buf, " var %-*s %s\n", - maxname, name, relType(mem.Type().(*types.Pointer).Elem(), from)) - } - } - - fmt.Fprintf(buf, "\n") -} diff --git a/vendor/honnef.co/go/tools/ir/sanity.go b/vendor/honnef.co/go/tools/ir/sanity.go deleted file mode 100644 index ff9edbc646..0000000000 --- a/vendor/honnef.co/go/tools/ir/sanity.go +++ /dev/null @@ -1,555 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// An optional pass for sanity-checking invariants of the IR representation. -// Currently it checks CFG invariants but little at the instruction level. - -import ( - "fmt" - "go/types" - "io" - "os" - "strings" -) - -type sanity struct { - reporter io.Writer - fn *Function - block *BasicBlock - instrs map[Instruction]struct{} - insane bool -} - -// sanityCheck performs integrity checking of the IR representation -// of the function fn and returns true if it was valid. Diagnostics -// are written to reporter if non-nil, os.Stderr otherwise. Some -// diagnostics are only warnings and do not imply a negative result. -// -// Sanity-checking is intended to facilitate the debugging of code -// transformation passes. -// -func sanityCheck(fn *Function, reporter io.Writer) bool { - if reporter == nil { - reporter = os.Stderr - } - return (&sanity{reporter: reporter}).checkFunction(fn) -} - -// mustSanityCheck is like sanityCheck but panics instead of returning -// a negative result. -// -func mustSanityCheck(fn *Function, reporter io.Writer) { - if !sanityCheck(fn, reporter) { - fn.WriteTo(os.Stderr) - panic("SanityCheck failed") - } -} - -func (s *sanity) diagnostic(prefix, format string, args ...interface{}) { - fmt.Fprintf(s.reporter, "%s: function %s", prefix, s.fn) - if s.block != nil { - fmt.Fprintf(s.reporter, ", block %s", s.block) - } - io.WriteString(s.reporter, ": ") - fmt.Fprintf(s.reporter, format, args...) - io.WriteString(s.reporter, "\n") -} - -func (s *sanity) errorf(format string, args ...interface{}) { - s.insane = true - s.diagnostic("Error", format, args...) -} - -func (s *sanity) warnf(format string, args ...interface{}) { - s.diagnostic("Warning", format, args...) -} - -// findDuplicate returns an arbitrary basic block that appeared more -// than once in blocks, or nil if all were unique. -func findDuplicate(blocks []*BasicBlock) *BasicBlock { - if len(blocks) < 2 { - return nil - } - if blocks[0] == blocks[1] { - return blocks[0] - } - // Slow path: - m := make(map[*BasicBlock]bool) - for _, b := range blocks { - if m[b] { - return b - } - m[b] = true - } - return nil -} - -func (s *sanity) checkInstr(idx int, instr Instruction) { - switch instr := instr.(type) { - case *If, *Jump, *Return, *Panic, *Unreachable, *ConstantSwitch: - s.errorf("control flow instruction not at end of block") - case *Sigma: - if idx > 0 { - prev := s.block.Instrs[idx-1] - if _, ok := prev.(*Sigma); !ok { - s.errorf("Sigma instruction follows a non-Sigma: %T", prev) - } - } - case *Phi: - if idx == 0 { - // It suffices to apply this check to just the first phi node. - if dup := findDuplicate(s.block.Preds); dup != nil { - s.errorf("phi node in block with duplicate predecessor %s", dup) - } - } else { - prev := s.block.Instrs[idx-1] - switch prev.(type) { - case *Phi, *Sigma: - default: - s.errorf("Phi instruction follows a non-Phi, non-Sigma: %T", prev) - } - } - if ne, np := len(instr.Edges), len(s.block.Preds); ne != np { - s.errorf("phi node has %d edges but %d predecessors", ne, np) - - } else { - for i, e := range instr.Edges { - if e == nil { - s.errorf("phi node '%v' has no value for edge #%d from %s", instr, i, s.block.Preds[i]) - } - } - } - - case *Alloc: - if !instr.Heap { - found := false - for _, l := range s.fn.Locals { - if l == instr { - found = true - break - } - } - if !found { - s.errorf("local alloc %s = %s does not appear in Function.Locals", instr.Name(), instr) - } - } - - case *BinOp: - case *Call: - case *ChangeInterface: - case *ChangeType: - case *Convert: - if _, ok := instr.X.Type().Underlying().(*types.Basic); !ok { - if _, ok := instr.Type().Underlying().(*types.Basic); !ok { - s.errorf("convert %s -> %s: at least one type must be basic", instr.X.Type(), instr.Type()) - } - } - - case *Defer: - case *Extract: - case *Field: - case *FieldAddr: - case *Go: - case *Index: - case *IndexAddr: - case *MapLookup: - case *StringLookup: - case *MakeChan: - case *MakeClosure: - numFree := len(instr.Fn.(*Function).FreeVars) - numBind := len(instr.Bindings) - if numFree != numBind { - s.errorf("MakeClosure has %d Bindings for function %s with %d free vars", - numBind, instr.Fn, numFree) - - } - if recv := instr.Type().(*types.Signature).Recv(); recv != nil { - s.errorf("MakeClosure's type includes receiver %s", recv.Type()) - } - - case *MakeInterface: - case *MakeMap: - case *MakeSlice: - case *MapUpdate: - case *Next: - case *Range: - case *RunDefers: - case *Select: - case *Send: - case *Slice: - case *Store: - case *TypeAssert: - case *UnOp: - case *DebugRef: - case *BlankStore: - case *Load: - case *Parameter: - case *Const: - case *Recv: - case *TypeSwitch: - default: - panic(fmt.Sprintf("Unknown instruction type: %T", instr)) - } - - if call, ok := instr.(CallInstruction); ok { - if call.Common().Signature() == nil { - s.errorf("nil signature: %s", call) - } - } - - // Check that value-defining instructions have valid types - // and a valid referrer list. - if v, ok := instr.(Value); ok { - t := v.Type() - if t == nil { - s.errorf("no type: %s = %s", v.Name(), v) - } else if t == tRangeIter { - // not a proper type; ignore. - } else if b, ok := t.Underlying().(*types.Basic); ok && b.Info()&types.IsUntyped != 0 { - if _, ok := v.(*Const); !ok { - s.errorf("instruction has 'untyped' result: %s = %s : %s", v.Name(), v, t) - } - } - s.checkReferrerList(v) - } - - // Untyped constants are legal as instruction Operands(), - // for example: - // _ = "foo"[0] - // or: - // if wordsize==64 {...} - - // All other non-Instruction Values can be found via their - // enclosing Function or Package. -} - -func (s *sanity) checkFinalInstr(instr Instruction) { - switch instr := instr.(type) { - case *If: - if nsuccs := len(s.block.Succs); nsuccs != 2 { - s.errorf("If-terminated block has %d successors; expected 2", nsuccs) - return - } - if s.block.Succs[0] == s.block.Succs[1] { - s.errorf("If-instruction has same True, False target blocks: %s", s.block.Succs[0]) - return - } - - case *Jump: - if nsuccs := len(s.block.Succs); nsuccs != 1 { - s.errorf("Jump-terminated block has %d successors; expected 1", nsuccs) - return - } - - case *Return: - if nsuccs := len(s.block.Succs); nsuccs != 0 { - s.errorf("Return-terminated block has %d successors; expected none", nsuccs) - return - } - if na, nf := len(instr.Results), s.fn.Signature.Results().Len(); nf != na { - s.errorf("%d-ary return in %d-ary function", na, nf) - } - - case *Panic: - if nsuccs := len(s.block.Succs); nsuccs != 1 { - s.errorf("Panic-terminated block has %d successors; expected one", nsuccs) - return - } - - case *Unreachable: - if nsuccs := len(s.block.Succs); nsuccs != 1 { - s.errorf("Unreachable-terminated block has %d successors; expected one", nsuccs) - return - } - - case *ConstantSwitch: - - default: - s.errorf("non-control flow instruction at end of block") - } -} - -func (s *sanity) checkBlock(b *BasicBlock, index int) { - s.block = b - - if b.Index != index { - s.errorf("block has incorrect Index %d", b.Index) - } - if b.parent != s.fn { - s.errorf("block has incorrect parent %s", b.parent) - } - - // Check all blocks are reachable. - // (The entry block is always implicitly reachable, the exit block may be unreachable.) - if index > 1 && len(b.Preds) == 0 { - s.warnf("unreachable block") - if b.Instrs == nil { - // Since this block is about to be pruned, - // tolerating transient problems in it - // simplifies other optimizations. - return - } - } - - // Check predecessor and successor relations are dual, - // and that all blocks in CFG belong to same function. - for _, a := range b.Preds { - found := false - for _, bb := range a.Succs { - if bb == b { - found = true - break - } - } - if !found { - s.errorf("expected successor edge in predecessor %s; found only: %s", a, a.Succs) - } - if a.parent != s.fn { - s.errorf("predecessor %s belongs to different function %s", a, a.parent) - } - } - for _, c := range b.Succs { - found := false - for _, bb := range c.Preds { - if bb == b { - found = true - break - } - } - if !found { - s.errorf("expected predecessor edge in successor %s; found only: %s", c, c.Preds) - } - if c.parent != s.fn { - s.errorf("successor %s belongs to different function %s", c, c.parent) - } - } - - // Check each instruction is sane. - n := len(b.Instrs) - if n == 0 { - s.errorf("basic block contains no instructions") - } - var rands [10]*Value // reuse storage - for j, instr := range b.Instrs { - if instr == nil { - s.errorf("nil instruction at index %d", j) - continue - } - if b2 := instr.Block(); b2 == nil { - s.errorf("nil Block() for instruction at index %d", j) - continue - } else if b2 != b { - s.errorf("wrong Block() (%s) for instruction at index %d ", b2, j) - continue - } - if j < n-1 { - s.checkInstr(j, instr) - } else { - s.checkFinalInstr(instr) - } - - // Check Instruction.Operands. - operands: - for i, op := range instr.Operands(rands[:0]) { - if op == nil { - s.errorf("nil operand pointer %d of %s", i, instr) - continue - } - val := *op - if val == nil { - continue // a nil operand is ok - } - - // Check that "untyped" types only appear on constant operands. - if _, ok := (*op).(*Const); !ok { - if basic, ok := (*op).Type().(*types.Basic); ok { - if basic.Info()&types.IsUntyped != 0 { - s.errorf("operand #%d of %s is untyped: %s", i, instr, basic) - } - } - } - - // Check that Operands that are also Instructions belong to same function. - // TODO(adonovan): also check their block dominates block b. - if val, ok := val.(Instruction); ok { - if val.Block() == nil { - s.errorf("operand %d of %s is an instruction (%s) that belongs to no block", i, instr, val) - } else if val.Parent() != s.fn { - s.errorf("operand %d of %s is an instruction (%s) from function %s", i, instr, val, val.Parent()) - } - } - - // Check that each function-local operand of - // instr refers back to instr. (NB: quadratic) - switch val := val.(type) { - case *Const, *Global, *Builtin: - continue // not local - case *Function: - if val.parent == nil { - continue // only anon functions are local - } - } - - // TODO(adonovan): check val.Parent() != nil <=> val.Referrers() is defined. - - if refs := val.Referrers(); refs != nil { - for _, ref := range *refs { - if ref == instr { - continue operands - } - } - s.errorf("operand %d of %s (%s) does not refer to us", i, instr, val) - } else { - s.errorf("operand %d of %s (%s) has no referrers", i, instr, val) - } - } - } -} - -func (s *sanity) checkReferrerList(v Value) { - refs := v.Referrers() - if refs == nil { - s.errorf("%s has missing referrer list", v.Name()) - return - } - for i, ref := range *refs { - if _, ok := s.instrs[ref]; !ok { - if val, ok := ref.(Value); ok { - s.errorf("%s.Referrers()[%d] = %s = %s is not an instruction belonging to this function", v.Name(), i, val.Name(), val) - } else { - s.errorf("%s.Referrers()[%d] = %s is not an instruction belonging to this function", v.Name(), i, ref) - } - } - } -} - -func (s *sanity) checkFunction(fn *Function) bool { - // TODO(adonovan): check Function invariants: - // - check params match signature - // - check transient fields are nil - // - warn if any fn.Locals do not appear among block instructions. - s.fn = fn - if fn.Prog == nil { - s.errorf("nil Prog") - } - - _ = fn.String() // must not crash - _ = fn.RelString(fn.pkg()) // must not crash - - // All functions have a package, except delegates (which are - // shared across packages, or duplicated as weak symbols in a - // separate-compilation model), and error.Error. - if fn.Pkg == nil { - if strings.HasPrefix(fn.Synthetic, "wrapper ") || - strings.HasPrefix(fn.Synthetic, "bound ") || - strings.HasPrefix(fn.Synthetic, "thunk ") || - strings.HasSuffix(fn.name, "Error") { - // ok - } else { - s.errorf("nil Pkg") - } - } - if src, syn := fn.Synthetic == "", fn.source != nil; src != syn { - s.errorf("got fromSource=%t, hasSyntax=%t; want same values", src, syn) - } - for i, l := range fn.Locals { - if l.Parent() != fn { - s.errorf("Local %s at index %d has wrong parent", l.Name(), i) - } - if l.Heap { - s.errorf("Local %s at index %d has Heap flag set", l.Name(), i) - } - } - // Build the set of valid referrers. - s.instrs = make(map[Instruction]struct{}) - for _, b := range fn.Blocks { - for _, instr := range b.Instrs { - s.instrs[instr] = struct{}{} - } - } - for i, p := range fn.Params { - if p.Parent() != fn { - s.errorf("Param %s at index %d has wrong parent", p.Name(), i) - } - // Check common suffix of Signature and Params match type. - if sig := fn.Signature; sig != nil { - j := i - len(fn.Params) + sig.Params().Len() // index within sig.Params - if j < 0 { - continue - } - if !types.Identical(p.Type(), sig.Params().At(j).Type()) { - s.errorf("Param %s at index %d has wrong type (%s, versus %s in Signature)", p.Name(), i, p.Type(), sig.Params().At(j).Type()) - - } - } - - s.checkReferrerList(p) - } - for i, fv := range fn.FreeVars { - if fv.Parent() != fn { - s.errorf("FreeVar %s at index %d has wrong parent", fv.Name(), i) - } - s.checkReferrerList(fv) - } - - if fn.Blocks != nil && len(fn.Blocks) == 0 { - // Function _had_ blocks (so it's not external) but - // they were "optimized" away, even the entry block. - s.errorf("Blocks slice is non-nil but empty") - } - for i, b := range fn.Blocks { - if b == nil { - s.warnf("nil *BasicBlock at f.Blocks[%d]", i) - continue - } - s.checkBlock(b, i) - } - - s.block = nil - for i, anon := range fn.AnonFuncs { - if anon.Parent() != fn { - s.errorf("AnonFuncs[%d]=%s but %s.Parent()=%s", i, anon, anon, anon.Parent()) - } - } - s.fn = nil - return !s.insane -} - -// sanityCheckPackage checks invariants of packages upon creation. -// It does not require that the package is built. -// Unlike sanityCheck (for functions), it just panics at the first error. -func sanityCheckPackage(pkg *Package) { - if pkg.Pkg == nil { - panic(fmt.Sprintf("Package %s has no Object", pkg)) - } - _ = pkg.String() // must not crash - - for name, mem := range pkg.Members { - if name != mem.Name() { - panic(fmt.Sprintf("%s: %T.Name() = %s, want %s", - pkg.Pkg.Path(), mem, mem.Name(), name)) - } - obj := mem.Object() - if obj == nil { - // This check is sound because fields - // {Global,Function}.object have type - // types.Object. (If they were declared as - // *types.{Var,Func}, we'd have a non-empty - // interface containing a nil pointer.) - - continue // not all members have typechecker objects - } - if obj.Name() != name { - if obj.Name() == "init" && strings.HasPrefix(mem.Name(), "init#") { - // Ok. The name of a declared init function varies between - // its types.Func ("init") and its ir.Function ("init#%d"). - } else { - panic(fmt.Sprintf("%s: %T.Object().Name() = %s, want %s", - pkg.Pkg.Path(), mem, obj.Name(), name)) - } - } - } -} diff --git a/vendor/honnef.co/go/tools/ir/source.go b/vendor/honnef.co/go/tools/ir/source.go deleted file mode 100644 index 93d1ccbd29..0000000000 --- a/vendor/honnef.co/go/tools/ir/source.go +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines utilities for working with source positions -// or source-level named entities ("objects"). - -// TODO(adonovan): test that {Value,Instruction}.Pos() positions match -// the originating syntax, as specified. - -import ( - "go/ast" - "go/token" - "go/types" -) - -// EnclosingFunction returns the function that contains the syntax -// node denoted by path. -// -// Syntax associated with package-level variable specifications is -// enclosed by the package's init() function. -// -// Returns nil if not found; reasons might include: -// - the node is not enclosed by any function. -// - the node is within an anonymous function (FuncLit) and -// its IR function has not been created yet -// (pkg.Build() has not yet been called). -// -func EnclosingFunction(pkg *Package, path []ast.Node) *Function { - // Start with package-level function... - fn := findEnclosingPackageLevelFunction(pkg, path) - if fn == nil { - return nil // not in any function - } - - // ...then walk down the nested anonymous functions. - n := len(path) -outer: - for i := range path { - if lit, ok := path[n-1-i].(*ast.FuncLit); ok { - for _, anon := range fn.AnonFuncs { - if anon.Pos() == lit.Type.Func { - fn = anon - continue outer - } - } - // IR function not found: - // - package not yet built, or maybe - // - builder skipped FuncLit in dead block - // (in principle; but currently the Builder - // generates even dead FuncLits). - return nil - } - } - return fn -} - -// HasEnclosingFunction returns true if the AST node denoted by path -// is contained within the declaration of some function or -// package-level variable. -// -// Unlike EnclosingFunction, the behaviour of this function does not -// depend on whether IR code for pkg has been built, so it can be -// used to quickly reject check inputs that will cause -// EnclosingFunction to fail, prior to IR building. -// -func HasEnclosingFunction(pkg *Package, path []ast.Node) bool { - return findEnclosingPackageLevelFunction(pkg, path) != nil -} - -// findEnclosingPackageLevelFunction returns the Function -// corresponding to the package-level function enclosing path. -// -func findEnclosingPackageLevelFunction(pkg *Package, path []ast.Node) *Function { - if n := len(path); n >= 2 { // [... {Gen,Func}Decl File] - switch decl := path[n-2].(type) { - case *ast.GenDecl: - if decl.Tok == token.VAR && n >= 3 { - // Package-level 'var' initializer. - return pkg.init - } - - case *ast.FuncDecl: - // Declared function/method. - fn := findNamedFunc(pkg, decl.Pos()) - if fn == nil && decl.Recv == nil && decl.Name.Name == "init" { - // Hack: return non-nil when IR is not yet - // built so that HasEnclosingFunction works. - return pkg.init - } - return fn - } - } - return nil // not in any function -} - -// findNamedFunc returns the named function whose FuncDecl.Ident is at -// position pos. -// -func findNamedFunc(pkg *Package, pos token.Pos) *Function { - for _, fn := range pkg.Functions { - if fn.Pos() == pos { - return fn - } - } - return nil -} - -// ValueForExpr returns the IR Value that corresponds to non-constant -// expression e. -// -// It returns nil if no value was found, e.g. -// - the expression is not lexically contained within f; -// - f was not built with debug information; or -// - e is a constant expression. (For efficiency, no debug -// information is stored for constants. Use -// go/types.Info.Types[e].Value instead.) -// - e is a reference to nil or a built-in function. -// - the value was optimised away. -// -// If e is an addressable expression used in an lvalue context, -// value is the address denoted by e, and isAddr is true. -// -// The types of e (or &e, if isAddr) and the result are equal -// (modulo "untyped" bools resulting from comparisons). -// -// (Tip: to find the ir.Value given a source position, use -// astutil.PathEnclosingInterval to locate the ast.Node, then -// EnclosingFunction to locate the Function, then ValueForExpr to find -// the ir.Value.) -// -func (f *Function) ValueForExpr(e ast.Expr) (value Value, isAddr bool) { - if f.debugInfo() { // (opt) - e = unparen(e) - for _, b := range f.Blocks { - for _, instr := range b.Instrs { - if ref, ok := instr.(*DebugRef); ok { - if ref.Expr == e { - return ref.X, ref.IsAddr - } - } - } - } - } - return -} - -// --- Lookup functions for source-level named entities (types.Objects) --- - -// Package returns the IR Package corresponding to the specified -// type-checker package object. -// It returns nil if no such IR package has been created. -// -func (prog *Program) Package(obj *types.Package) *Package { - return prog.packages[obj] -} - -// packageLevelValue returns the package-level value corresponding to -// the specified named object, which may be a package-level const -// (*Const), var (*Global) or func (*Function) of some package in -// prog. It returns nil if the object is not found. -// -func (prog *Program) packageLevelValue(obj types.Object) Value { - if pkg, ok := prog.packages[obj.Pkg()]; ok { - return pkg.values[obj] - } - return nil -} - -// FuncValue returns the concrete Function denoted by the source-level -// named function obj, or nil if obj denotes an interface method. -// -// TODO(adonovan): check the invariant that obj.Type() matches the -// result's Signature, both in the params/results and in the receiver. -// -func (prog *Program) FuncValue(obj *types.Func) *Function { - fn, _ := prog.packageLevelValue(obj).(*Function) - return fn -} - -// ConstValue returns the IR Value denoted by the source-level named -// constant obj. -// -func (prog *Program) ConstValue(obj *types.Const) *Const { - // TODO(adonovan): opt: share (don't reallocate) - // Consts for const objects and constant ast.Exprs. - - // Universal constant? {true,false,nil} - if obj.Parent() == types.Universe { - return NewConst(obj.Val(), obj.Type()) - } - // Package-level named constant? - if v := prog.packageLevelValue(obj); v != nil { - return v.(*Const) - } - return NewConst(obj.Val(), obj.Type()) -} - -// VarValue returns the IR Value that corresponds to a specific -// identifier denoting the source-level named variable obj. -// -// VarValue returns nil if a local variable was not found, perhaps -// because its package was not built, the debug information was not -// requested during IR construction, or the value was optimized away. -// -// ref is the path to an ast.Ident (e.g. from PathEnclosingInterval), -// and that ident must resolve to obj. -// -// pkg is the package enclosing the reference. (A reference to a var -// always occurs within a function, so we need to know where to find it.) -// -// If the identifier is a field selector and its base expression is -// non-addressable, then VarValue returns the value of that field. -// For example: -// func f() struct {x int} -// f().x // VarValue(x) returns a *Field instruction of type int -// -// All other identifiers denote addressable locations (variables). -// For them, VarValue may return either the variable's address or its -// value, even when the expression is evaluated only for its value; the -// situation is reported by isAddr, the second component of the result. -// -// If !isAddr, the returned value is the one associated with the -// specific identifier. For example, -// var x int // VarValue(x) returns Const 0 here -// x = 1 // VarValue(x) returns Const 1 here -// -// It is not specified whether the value or the address is returned in -// any particular case, as it may depend upon optimizations performed -// during IR code generation, such as registerization, constant -// folding, avoidance of materialization of subexpressions, etc. -// -func (prog *Program) VarValue(obj *types.Var, pkg *Package, ref []ast.Node) (value Value, isAddr bool) { - // All references to a var are local to some function, possibly init. - fn := EnclosingFunction(pkg, ref) - if fn == nil { - return // e.g. def of struct field; IR not built? - } - - id := ref[0].(*ast.Ident) - - // Defining ident of a parameter? - if id.Pos() == obj.Pos() { - for _, param := range fn.Params { - if param.Object() == obj { - return param, false - } - } - } - - // Other ident? - for _, b := range fn.Blocks { - for _, instr := range b.Instrs { - if dr, ok := instr.(*DebugRef); ok { - if dr.Pos() == id.Pos() { - return dr.X, dr.IsAddr - } - } - } - } - - // Defining ident of package-level var? - if v := prog.packageLevelValue(obj); v != nil { - return v.(*Global), true - } - - return // e.g. debug info not requested, or var optimized away -} diff --git a/vendor/honnef.co/go/tools/ir/ssa.go b/vendor/honnef.co/go/tools/ir/ssa.go deleted file mode 100644 index 49693045f0..0000000000 --- a/vendor/honnef.co/go/tools/ir/ssa.go +++ /dev/null @@ -1,1856 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This package defines a high-level intermediate representation for -// Go programs using static single-information (SSI) form. - -import ( - "fmt" - "go/ast" - "go/constant" - "go/token" - "go/types" - "sync" - - "golang.org/x/tools/go/types/typeutil" -) - -type ID int - -// A Program is a partial or complete Go program converted to IR form. -type Program struct { - Fset *token.FileSet // position information for the files of this Program - PrintFunc string // create ir.html for function specified in PrintFunc - imported map[string]*Package // all importable Packages, keyed by import path - packages map[*types.Package]*Package // all loaded Packages, keyed by object - mode BuilderMode // set of mode bits for IR construction - MethodSets typeutil.MethodSetCache // cache of type-checker's method-sets - - methodsMu sync.Mutex // guards the following maps: - methodSets typeutil.Map // maps type to its concrete methodSet - runtimeTypes typeutil.Map // types for which rtypes are needed - canon typeutil.Map // type canonicalization map - bounds map[*types.Func]*Function // bounds for curried x.Method closures - thunks map[selectionKey]*Function // thunks for T.Method expressions -} - -// A Package is a single analyzed Go package containing Members for -// all package-level functions, variables, constants and types it -// declares. These may be accessed directly via Members, or via the -// type-specific accessor methods Func, Type, Var and Const. -// -// Members also contains entries for "init" (the synthetic package -// initializer) and "init#%d", the nth declared init function, -// and unspecified other things too. -// -type Package struct { - Prog *Program // the owning program - Pkg *types.Package // the corresponding go/types.Package - Members map[string]Member // all package members keyed by name (incl. init and init#%d) - Functions []*Function // all functions, excluding anonymous ones - values map[types.Object]Value // package members (incl. types and methods), keyed by object - init *Function // Func("init"); the package's init function - debug bool // include full debug info in this package - printFunc string // which function to print in HTML form - - // The following fields are set transiently, then cleared - // after building. - buildOnce sync.Once // ensures package building occurs once - ninit int32 // number of init functions - info *types.Info // package type information - files []*ast.File // package ASTs -} - -// A Member is a member of a Go package, implemented by *NamedConst, -// *Global, *Function, or *Type; they are created by package-level -// const, var, func and type declarations respectively. -// -type Member interface { - Name() string // declared name of the package member - String() string // package-qualified name of the package member - RelString(*types.Package) string // like String, but relative refs are unqualified - Object() types.Object // typechecker's object for this member, if any - Type() types.Type // type of the package member - Token() token.Token // token.{VAR,FUNC,CONST,TYPE} - Package() *Package // the containing package -} - -// A Type is a Member of a Package representing a package-level named type. -type Type struct { - object *types.TypeName - pkg *Package -} - -// A NamedConst is a Member of a Package representing a package-level -// named constant. -// -// Pos() returns the position of the declaring ast.ValueSpec.Names[*] -// identifier. -// -// NB: a NamedConst is not a Value; it contains a constant Value, which -// it augments with the name and position of its 'const' declaration. -// -type NamedConst struct { - object *types.Const - Value *Const - pkg *Package -} - -// A Value is an IR value that can be referenced by an instruction. -type Value interface { - setID(ID) - - // Name returns the name of this value, and determines how - // this Value appears when used as an operand of an - // Instruction. - // - // This is the same as the source name for Parameters, - // Builtins, Functions, FreeVars, Globals. - // For constants, it is a representation of the constant's value - // and type. For all other Values this is the name of the - // virtual register defined by the instruction. - // - // The name of an IR Value is not semantically significant, - // and may not even be unique within a function. - Name() string - - // ID returns the ID of this value. IDs are unique within a single - // function and are densely numbered, but may contain gaps. - // Values and other Instructions share the same ID space. - // Globally, values are identified by their addresses. However, - // IDs exist to facilitate efficient storage of mappings between - // values and data when analysing functions. - // - // NB: IDs are allocated late in the IR construction process and - // are not available to early stages of said process. - ID() ID - - // If this value is an Instruction, String returns its - // disassembled form; otherwise it returns unspecified - // human-readable information about the Value, such as its - // kind, name and type. - String() string - - // Type returns the type of this value. Many instructions - // (e.g. IndexAddr) change their behaviour depending on the - // types of their operands. - Type() types.Type - - // Parent returns the function to which this Value belongs. - // It returns nil for named Functions, Builtin and Global. - Parent() *Function - - // Referrers returns the list of instructions that have this - // value as one of their operands; it may contain duplicates - // if an instruction has a repeated operand. - // - // Referrers actually returns a pointer through which the - // caller may perform mutations to the object's state. - // - // Referrers is currently only defined if Parent()!=nil, - // i.e. for the function-local values FreeVar, Parameter, - // Functions (iff anonymous) and all value-defining instructions. - // It returns nil for named Functions, Builtin and Global. - // - // Instruction.Operands contains the inverse of this relation. - Referrers() *[]Instruction - - Operands(rands []*Value) []*Value // nil for non-Instructions - - // Source returns the AST node responsible for creating this - // value. A single AST node may be responsible for more than one - // value, and not all values have an associated AST node. - // - // Do not use this method to find a Value given an ast.Expr; use - // ValueForExpr instead. - Source() ast.Node - - // Pos returns Source().Pos() if Source is not nil, else it - // returns token.NoPos. - Pos() token.Pos -} - -// An Instruction is an IR instruction that computes a new Value or -// has some effect. -// -// An Instruction that defines a value (e.g. BinOp) also implements -// the Value interface; an Instruction that only has an effect (e.g. Store) -// does not. -// -type Instruction interface { - setSource(ast.Node) - setID(ID) - - // String returns the disassembled form of this value. - // - // Examples of Instructions that are Values: - // "BinOp {+} t1 t2" (BinOp) - // "Call len t1" (Call) - // Note that the name of the Value is not printed. - // - // Examples of Instructions that are not Values: - // "Return t1" (Return) - // "Store {int} t2 t1" (Store) - // - // (The separation of Value.Name() from Value.String() is useful - // for some analyses which distinguish the operation from the - // value it defines, e.g., 'y = local int' is both an allocation - // of memory 'local int' and a definition of a pointer y.) - String() string - - // ID returns the ID of this instruction. IDs are unique within a single - // function and are densely numbered, but may contain gaps. - // Globally, instructions are identified by their addresses. However, - // IDs exist to facilitate efficient storage of mappings between - // instructions and data when analysing functions. - // - // NB: IDs are allocated late in the IR construction process and - // are not available to early stages of said process. - ID() ID - - // Parent returns the function to which this instruction - // belongs. - Parent() *Function - - // Block returns the basic block to which this instruction - // belongs. - Block() *BasicBlock - - // setBlock sets the basic block to which this instruction belongs. - setBlock(*BasicBlock) - - // Operands returns the operands of this instruction: the - // set of Values it references. - // - // Specifically, it appends their addresses to rands, a - // user-provided slice, and returns the resulting slice, - // permitting avoidance of memory allocation. - // - // The operands are appended in undefined order, but the order - // is consistent for a given Instruction; the addresses are - // always non-nil but may point to a nil Value. Clients may - // store through the pointers, e.g. to effect a value - // renaming. - // - // Value.Referrers is a subset of the inverse of this - // relation. (Referrers are not tracked for all types of - // Values.) - Operands(rands []*Value) []*Value - - Referrers() *[]Instruction // nil for non-Values - - // Source returns the AST node responsible for creating this - // instruction. A single AST node may be responsible for more than - // one instruction, and not all instructions have an associated - // AST node. - Source() ast.Node - - // Pos returns Source().Pos() if Source is not nil, else it - // returns token.NoPos. - Pos() token.Pos -} - -// A Node is a node in the IR value graph. Every concrete type that -// implements Node is also either a Value, an Instruction, or both. -// -// Node contains the methods common to Value and Instruction, plus the -// Operands and Referrers methods generalized to return nil for -// non-Instructions and non-Values, respectively. -// -// Node is provided to simplify IR graph algorithms. Clients should -// use the more specific and informative Value or Instruction -// interfaces where appropriate. -// -type Node interface { - setID(ID) - - // Common methods: - ID() ID - String() string - Source() ast.Node - Pos() token.Pos - Parent() *Function - - // Partial methods: - Operands(rands []*Value) []*Value // nil for non-Instructions - Referrers() *[]Instruction // nil for non-Values -} - -// Function represents the parameters, results, and code of a function -// or method. -// -// If Blocks is nil, this indicates an external function for which no -// Go source code is available. In this case, FreeVars and Locals -// are nil too. Clients performing whole-program analysis must -// handle external functions specially. -// -// Blocks contains the function's control-flow graph (CFG). -// Blocks[0] is the function entry point; block order is not otherwise -// semantically significant, though it may affect the readability of -// the disassembly. -// To iterate over the blocks in dominance order, use DomPreorder(). -// -// A nested function (Parent()!=nil) that refers to one or more -// lexically enclosing local variables ("free variables") has FreeVars. -// Such functions cannot be called directly but require a -// value created by MakeClosure which, via its Bindings, supplies -// values for these parameters. -// -// If the function is a method (Signature.Recv() != nil) then the first -// element of Params is the receiver parameter. -// -// A Go package may declare many functions called "init". -// For each one, Object().Name() returns "init" but Name() returns -// "init#1", etc, in declaration order. -// -// Pos() returns the declaring ast.FuncLit.Type.Func or the position -// of the ast.FuncDecl.Name, if the function was explicit in the -// source. Synthetic wrappers, for which Synthetic != "", may share -// the same position as the function they wrap. -// Syntax.Pos() always returns the position of the declaring "func" token. -// -// Type() returns the function's Signature. -// -type Function struct { - node - - name string - object types.Object // a declared *types.Func or one of its wrappers - method *types.Selection // info about provenance of synthetic methods - Signature *types.Signature - - Synthetic string // provenance of synthetic function; "" for true source functions - parent *Function // enclosing function if anon; nil if global - Pkg *Package // enclosing package; nil for shared funcs (wrappers and error.Error) - Prog *Program // enclosing program - Params []*Parameter // function parameters; for methods, includes receiver - FreeVars []*FreeVar // free variables whose values must be supplied by closure - Locals []*Alloc // local variables of this function - Blocks []*BasicBlock // basic blocks of the function; nil => external - Exit *BasicBlock // The function's exit block - AnonFuncs []*Function // anonymous functions directly beneath this one - referrers []Instruction // referring instructions (iff Parent() != nil) - WillExit bool // Calling this function will always terminate the process - WillUnwind bool // Calling this function will always unwind (it will call runtime.Goexit or panic) - - *functionBody -} - -type functionBody struct { - // The following fields are set transiently during building, - // then cleared. - currentBlock *BasicBlock // where to emit code - objects map[types.Object]Value // addresses of local variables - namedResults []*Alloc // tuple of named results - implicitResults []*Alloc // tuple of results - targets *targets // linked stack of branch targets - lblocks map[*ast.Object]*lblock // labelled blocks - consts []*Const - wr *HTMLWriter - fakeExits BlockSet - blocksets [5]BlockSet - hasDefer bool -} - -func (fn *Function) results() []*Alloc { - if len(fn.namedResults) > 0 { - return fn.namedResults - } - return fn.implicitResults -} - -// BasicBlock represents an IR basic block. -// -// The final element of Instrs is always an explicit transfer of -// control (If, Jump, Return, Panic, or Unreachable). -// -// A block may contain no Instructions only if it is unreachable, -// i.e., Preds is nil. Empty blocks are typically pruned. -// -// BasicBlocks and their Preds/Succs relation form a (possibly cyclic) -// graph independent of the IR Value graph: the control-flow graph or -// CFG. It is illegal for multiple edges to exist between the same -// pair of blocks. -// -// Each BasicBlock is also a node in the dominator tree of the CFG. -// The tree may be navigated using Idom()/Dominees() and queried using -// Dominates(). -// -// The order of Preds and Succs is significant (to Phi and If -// instructions, respectively). -// -type BasicBlock struct { - Index int // index of this block within Parent().Blocks - Comment string // optional label; no semantic significance - parent *Function // parent function - Instrs []Instruction // instructions in order - Preds, Succs []*BasicBlock // predecessors and successors - succs2 [2]*BasicBlock // initial space for Succs - dom domInfo // dominator tree info - pdom domInfo // post-dominator tree info - post int - gaps int // number of nil Instrs (transient) - rundefers int // number of rundefers (transient) -} - -// Pure values ---------------------------------------- - -// A FreeVar represents a free variable of the function to which it -// belongs. -// -// FreeVars are used to implement anonymous functions, whose free -// variables are lexically captured in a closure formed by -// MakeClosure. The value of such a free var is an Alloc or another -// FreeVar and is considered a potentially escaping heap address, with -// pointer type. -// -// FreeVars are also used to implement bound method closures. Such a -// free var represents the receiver value and may be of any type that -// has concrete methods. -// -// Pos() returns the position of the value that was captured, which -// belongs to an enclosing function. -// -type FreeVar struct { - node - - name string - typ types.Type - parent *Function - referrers []Instruction - - // Transiently needed during building. - outer Value // the Value captured from the enclosing context. -} - -// A Parameter represents an input parameter of a function. -// -type Parameter struct { - register - - name string - object types.Object // a *types.Var; nil for non-source locals -} - -// A Const represents the value of a constant expression. -// -// The underlying type of a constant may be any boolean, numeric, or -// string type. In addition, a Const may represent the nil value of -// any reference type---interface, map, channel, pointer, slice, or -// function---but not "untyped nil". -// -// All source-level constant expressions are represented by a Const -// of the same type and value. -// -// Value holds the exact value of the constant, independent of its -// Type(), using the same representation as package go/constant uses for -// constants, or nil for a typed nil value. -// -// Pos() returns token.NoPos. -// -// Example printed form: -// Const {42} -// Const {"test"} -// Const {(3 + 4i)} -// -type Const struct { - register - - Value constant.Value -} - -// A Global is a named Value holding the address of a package-level -// variable. -// -// Pos() returns the position of the ast.ValueSpec.Names[*] -// identifier. -// -type Global struct { - node - - name string - object types.Object // a *types.Var; may be nil for synthetics e.g. init$guard - typ types.Type - - Pkg *Package -} - -// A Builtin represents a specific use of a built-in function, e.g. len. -// -// Builtins are immutable values. Builtins do not have addresses. -// Builtins can only appear in CallCommon.Func. -// -// Name() indicates the function: one of the built-in functions from the -// Go spec (excluding "make" and "new") or one of these ir-defined -// intrinsics: -// -// // wrapnilchk returns ptr if non-nil, panics otherwise. -// // (For use in indirection wrappers.) -// func ir:wrapnilchk(ptr *T, recvType, methodName string) *T -// -// Object() returns a *types.Builtin for built-ins defined by the spec, -// nil for others. -// -// Type() returns a *types.Signature representing the effective -// signature of the built-in for this call. -// -type Builtin struct { - node - - name string - sig *types.Signature -} - -// Value-defining instructions ---------------------------------------- - -// The Alloc instruction reserves space for a variable of the given type, -// zero-initializes it, and yields its address. -// -// Alloc values are always addresses, and have pointer types, so the -// type of the allocated variable is actually -// Type().Underlying().(*types.Pointer).Elem(). -// -// If Heap is false, Alloc allocates space in the function's -// activation record (frame); we refer to an Alloc(Heap=false) as a -// "stack" alloc. Each stack Alloc returns the same address each time -// it is executed within the same activation; the space is -// re-initialized to zero. -// -// If Heap is true, Alloc allocates space in the heap; we -// refer to an Alloc(Heap=true) as a "heap" alloc. Each heap Alloc -// returns a different address each time it is executed. -// -// When Alloc is applied to a channel, map or slice type, it returns -// the address of an uninitialized (nil) reference of that kind; store -// the result of MakeSlice, MakeMap or MakeChan in that location to -// instantiate these types. -// -// Pos() returns the ast.CompositeLit.Lbrace for a composite literal, -// or the ast.CallExpr.Rparen for a call to new() or for a call that -// allocates a varargs slice. -// -// Example printed form: -// t1 = StackAlloc <*int> -// t2 = HeapAlloc <*int> (new) -// -type Alloc struct { - register - Heap bool - index int // dense numbering; for lifting -} - -var _ Instruction = (*Sigma)(nil) -var _ Value = (*Sigma)(nil) - -// The Sigma instruction represents an SSI σ-node, which splits values -// at branches in the control flow. -// -// Conceptually, σ-nodes exist at the end of blocks that branch and -// constitute parallel assignments to one value per destination block. -// However, such a representation would be awkward to work with, so -// instead we place σ-nodes at the beginning of branch targets. The -// From field denotes to which incoming edge the node applies. -// -// Within a block, all σ-nodes must appear before all non-σ nodes. -// -// Example printed form: -// t2 = Sigma [#0] t1 (x) -// -type Sigma struct { - register - From *BasicBlock - X Value - - live bool // used during lifting -} - -// The Phi instruction represents an SSA φ-node, which combines values -// that differ across incoming control-flow edges and yields a new -// value. Within a block, all φ-nodes must appear before all non-φ, non-σ -// nodes. -// -// Pos() returns the position of the && or || for short-circuit -// control-flow joins, or that of the *Alloc for φ-nodes inserted -// during SSA renaming. -// -// Example printed form: -// t3 = Phi 2:t1 4:t2 (x) -// -type Phi struct { - register - Edges []Value // Edges[i] is value for Block().Preds[i] - - live bool // used during lifting -} - -// The Call instruction represents a function or method call. -// -// The Call instruction yields the function result if there is exactly -// one. Otherwise it returns a tuple, the components of which are -// accessed via Extract. -// -// See CallCommon for generic function call documentation. -// -// Pos() returns the ast.CallExpr.Lparen, if explicit in the source. -// -// Example printed form: -// t3 = Call <()> println t1 t2 -// t4 = Call <()> foo$1 -// t6 = Invoke t5.String -// -type Call struct { - register - Call CallCommon -} - -// The BinOp instruction yields the result of binary operation X Op Y. -// -// Pos() returns the ast.BinaryExpr.OpPos, if explicit in the source. -// -// Example printed form: -// t3 = BinOp {+} t2 t1 -// -type BinOp struct { - register - // One of: - // ADD SUB MUL QUO REM + - * / % - // AND OR XOR SHL SHR AND_NOT & | ^ << >> &^ - // EQL NEQ LSS LEQ GTR GEQ == != < <= < >= - Op token.Token - X, Y Value -} - -// The UnOp instruction yields the result of Op X. -// XOR is bitwise complement. -// SUB is negation. -// NOT is logical negation. -// -// -// Example printed form: -// t2 = UnOp {^} t1 -// -type UnOp struct { - register - Op token.Token // One of: NOT SUB XOR ! - ^ - X Value -} - -// The Load instruction loads a value from a memory address. -// -// For implicit memory loads, Pos() returns the position of the -// most closely associated source-level construct; the details are not -// specified. -// -// Example printed form: -// t2 = Load t1 -// -type Load struct { - register - X Value -} - -// The ChangeType instruction applies to X a value-preserving type -// change to Type(). -// -// Type changes are permitted: -// - between a named type and its underlying type. -// - between two named types of the same underlying type. -// - between (possibly named) pointers to identical base types. -// - from a bidirectional channel to a read- or write-channel, -// optionally adding/removing a name. -// -// This operation cannot fail dynamically. -// -// Pos() returns the ast.CallExpr.Lparen, if the instruction arose -// from an explicit conversion in the source. -// -// Example printed form: -// t2 = ChangeType <*T> t1 -// -type ChangeType struct { - register - X Value -} - -// The Convert instruction yields the conversion of value X to type -// Type(). One or both of those types is basic (but possibly named). -// -// A conversion may change the value and representation of its operand. -// Conversions are permitted: -// - between real numeric types. -// - between complex numeric types. -// - between string and []byte or []rune. -// - between pointers and unsafe.Pointer. -// - between unsafe.Pointer and uintptr. -// - from (Unicode) integer to (UTF-8) string. -// A conversion may imply a type name change also. -// -// This operation cannot fail dynamically. -// -// Conversions of untyped string/number/bool constants to a specific -// representation are eliminated during IR construction. -// -// Pos() returns the ast.CallExpr.Lparen, if the instruction arose -// from an explicit conversion in the source. -// -// Example printed form: -// t2 = Convert <[]byte> t1 -// -type Convert struct { - register - X Value -} - -// ChangeInterface constructs a value of one interface type from a -// value of another interface type known to be assignable to it. -// This operation cannot fail. -// -// Pos() returns the ast.CallExpr.Lparen if the instruction arose from -// an explicit T(e) conversion; the ast.TypeAssertExpr.Lparen if the -// instruction arose from an explicit e.(T) operation; or token.NoPos -// otherwise. -// -// Example printed form: -// t2 = ChangeInterface t1 -// -type ChangeInterface struct { - register - X Value -} - -// MakeInterface constructs an instance of an interface type from a -// value of a concrete type. -// -// Use Program.MethodSets.MethodSet(X.Type()) to find the method-set -// of X, and Program.MethodValue(m) to find the implementation of a method. -// -// To construct the zero value of an interface type T, use: -// NewConst(constant.MakeNil(), T, pos) -// -// Pos() returns the ast.CallExpr.Lparen, if the instruction arose -// from an explicit conversion in the source. -// -// Example printed form: -// t2 = MakeInterface t1 -// -type MakeInterface struct { - register - X Value -} - -// The MakeClosure instruction yields a closure value whose code is -// Fn and whose free variables' values are supplied by Bindings. -// -// Type() returns a (possibly named) *types.Signature. -// -// Pos() returns the ast.FuncLit.Type.Func for a function literal -// closure or the ast.SelectorExpr.Sel for a bound method closure. -// -// Example printed form: -// t1 = MakeClosure foo$1 t1 t2 -// t5 = MakeClosure (T).foo$bound t4 -// -type MakeClosure struct { - register - Fn Value // always a *Function - Bindings []Value // values for each free variable in Fn.FreeVars -} - -// The MakeMap instruction creates a new hash-table-based map object -// and yields a value of kind map. -// -// Type() returns a (possibly named) *types.Map. -// -// Pos() returns the ast.CallExpr.Lparen, if created by make(map), or -// the ast.CompositeLit.Lbrack if created by a literal. -// -// Example printed form: -// t1 = MakeMap -// t2 = MakeMap t1 -// -type MakeMap struct { - register - Reserve Value // initial space reservation; nil => default -} - -// The MakeChan instruction creates a new channel object and yields a -// value of kind chan. -// -// Type() returns a (possibly named) *types.Chan. -// -// Pos() returns the ast.CallExpr.Lparen for the make(chan) that -// created it. -// -// Example printed form: -// t3 = MakeChan t1 -// t4 = MakeChan t2 -// -type MakeChan struct { - register - Size Value // int; size of buffer; zero => synchronous. -} - -// The MakeSlice instruction yields a slice of length Len backed by a -// newly allocated array of length Cap. -// -// Both Len and Cap must be non-nil Values of integer type. -// -// (Alloc(types.Array) followed by Slice will not suffice because -// Alloc can only create arrays of constant length.) -// -// Type() returns a (possibly named) *types.Slice. -// -// Pos() returns the ast.CallExpr.Lparen for the make([]T) that -// created it. -// -// Example printed form: -// t3 = MakeSlice <[]string> t1 t2 -// t4 = MakeSlice t1 t2 -// -type MakeSlice struct { - register - Len Value - Cap Value -} - -// The Slice instruction yields a slice of an existing string, slice -// or *array X between optional integer bounds Low and High. -// -// Dynamically, this instruction panics if X evaluates to a nil *array -// pointer. -// -// Type() returns string if the type of X was string, otherwise a -// *types.Slice with the same element type as X. -// -// Pos() returns the ast.SliceExpr.Lbrack if created by a x[:] slice -// operation, the ast.CompositeLit.Lbrace if created by a literal, or -// NoPos if not explicit in the source (e.g. a variadic argument slice). -// -// Example printed form: -// t4 = Slice <[]int> t3 t2 t1 -// -type Slice struct { - register - X Value // slice, string, or *array - Low, High, Max Value // each may be nil -} - -// The FieldAddr instruction yields the address of Field of *struct X. -// -// The field is identified by its index within the field list of the -// struct type of X. -// -// Dynamically, this instruction panics if X evaluates to a nil -// pointer. -// -// Type() returns a (possibly named) *types.Pointer. -// -// Pos() returns the position of the ast.SelectorExpr.Sel for the -// field, if explicit in the source. -// -// Example printed form: -// t2 = FieldAddr <*int> [0] (X) t1 -// -type FieldAddr struct { - register - X Value // *struct - Field int // field is X.Type().Underlying().(*types.Pointer).Elem().Underlying().(*types.Struct).Field(Field) -} - -// The Field instruction yields the Field of struct X. -// -// The field is identified by its index within the field list of the -// struct type of X; by using numeric indices we avoid ambiguity of -// package-local identifiers and permit compact representations. -// -// Pos() returns the position of the ast.SelectorExpr.Sel for the -// field, if explicit in the source. -// -// Example printed form: -// t2 = FieldAddr [0] (X) t1 -// -type Field struct { - register - X Value // struct - Field int // index into X.Type().(*types.Struct).Fields -} - -// The IndexAddr instruction yields the address of the element at -// index Index of collection X. Index is an integer expression. -// -// The elements of maps and strings are not addressable; use StringLookup, MapLookup or -// MapUpdate instead. -// -// Dynamically, this instruction panics if X evaluates to a nil *array -// pointer. -// -// Type() returns a (possibly named) *types.Pointer. -// -// Pos() returns the ast.IndexExpr.Lbrack for the index operation, if -// explicit in the source. -// -// Example printed form: -// t3 = IndexAddr <*int> t2 t1 -// -type IndexAddr struct { - register - X Value // slice or *array, - Index Value // numeric index -} - -// The Index instruction yields element Index of array X. -// -// Pos() returns the ast.IndexExpr.Lbrack for the index operation, if -// explicit in the source. -// -// Example printed form: -// t3 = Index t2 t1 -// -type Index struct { - register - X Value // array - Index Value // integer index -} - -// The MapLookup instruction yields element Index of collection X, a map. -// -// If CommaOk, the result is a 2-tuple of the value above and a -// boolean indicating the result of a map membership test for the key. -// The components of the tuple are accessed using Extract. -// -// Pos() returns the ast.IndexExpr.Lbrack, if explicit in the source. -// -// Example printed form: -// t4 = MapLookup t3 t1 -// t6 = MapLookup <(string, bool)> t3 t2 -// -type MapLookup struct { - register - X Value // map - Index Value // key-typed index - CommaOk bool // return a value,ok pair -} - -// The StringLookup instruction yields element Index of collection X, a string. -// Index is an integer expression. -// -// Pos() returns the ast.IndexExpr.Lbrack, if explicit in the source. -// -// Example printed form: -// t3 = StringLookup t2 t1 -// -type StringLookup struct { - register - X Value // string - Index Value // numeric index -} - -// SelectState is a helper for Select. -// It represents one goal state and its corresponding communication. -// -type SelectState struct { - Dir types.ChanDir // direction of case (SendOnly or RecvOnly) - Chan Value // channel to use (for send or receive) - Send Value // value to send (for send) - Pos token.Pos // position of token.ARROW - DebugNode ast.Node // ast.SendStmt or ast.UnaryExpr(<-) [debug mode] -} - -// The Select instruction tests whether (or blocks until) one -// of the specified sent or received states is entered. -// -// Let n be the number of States for which Dir==RECV and Tᵢ (0 ≤ i < n) -// be the element type of each such state's Chan. -// Select returns an n+2-tuple -// (index int, recvOk bool, r₀ T₀, ... rₙ-1 Tₙ-1) -// The tuple's components, described below, must be accessed via the -// Extract instruction. -// -// If Blocking, select waits until exactly one state holds, i.e. a -// channel becomes ready for the designated operation of sending or -// receiving; select chooses one among the ready states -// pseudorandomly, performs the send or receive operation, and sets -// 'index' to the index of the chosen channel. -// -// If !Blocking, select doesn't block if no states hold; instead it -// returns immediately with index equal to -1. -// -// If the chosen channel was used for a receive, the rᵢ component is -// set to the received value, where i is the index of that state among -// all n receive states; otherwise rᵢ has the zero value of type Tᵢ. -// Note that the receive index i is not the same as the state -// index index. -// -// The second component of the triple, recvOk, is a boolean whose value -// is true iff the selected operation was a receive and the receive -// successfully yielded a value. -// -// Pos() returns the ast.SelectStmt.Select. -// -// Example printed form: -// t6 = SelectNonBlocking <(index int, ok bool, int)> [<-t4, t5<-t1] -// t11 = SelectBlocking <(index int, ok bool)> [] -// -type Select struct { - register - States []*SelectState - Blocking bool -} - -// The Range instruction yields an iterator over the domain and range -// of X, which must be a string or map. -// -// Elements are accessed via Next. -// -// Type() returns an opaque and degenerate "rangeIter" type. -// -// Pos() returns the ast.RangeStmt.For. -// -// Example printed form: -// t2 = Range t1 -// -type Range struct { - register - X Value // string or map -} - -// The Next instruction reads and advances the (map or string) -// iterator Iter and returns a 3-tuple value (ok, k, v). If the -// iterator is not exhausted, ok is true and k and v are the next -// elements of the domain and range, respectively. Otherwise ok is -// false and k and v are undefined. -// -// Components of the tuple are accessed using Extract. -// -// The IsString field distinguishes iterators over strings from those -// over maps, as the Type() alone is insufficient: consider -// map[int]rune. -// -// Type() returns a *types.Tuple for the triple (ok, k, v). -// The types of k and/or v may be types.Invalid. -// -// Example printed form: -// t5 = Next <(ok bool, k int, v rune)> t2 -// t5 = Next <(ok bool, k invalid type, v invalid type)> t2 -// -type Next struct { - register - Iter Value - IsString bool // true => string iterator; false => map iterator. -} - -// The TypeAssert instruction tests whether interface value X has type -// AssertedType. -// -// If !CommaOk, on success it returns v, the result of the conversion -// (defined below); on failure it panics. -// -// If CommaOk: on success it returns a pair (v, true) where v is the -// result of the conversion; on failure it returns (z, false) where z -// is AssertedType's zero value. The components of the pair must be -// accessed using the Extract instruction. -// -// If AssertedType is a concrete type, TypeAssert checks whether the -// dynamic type in interface X is equal to it, and if so, the result -// of the conversion is a copy of the value in the interface. -// -// If AssertedType is an interface, TypeAssert checks whether the -// dynamic type of the interface is assignable to it, and if so, the -// result of the conversion is a copy of the interface value X. -// If AssertedType is a superinterface of X.Type(), the operation will -// fail iff the operand is nil. (Contrast with ChangeInterface, which -// performs no nil-check.) -// -// Type() reflects the actual type of the result, possibly a -// 2-types.Tuple; AssertedType is the asserted type. -// -// Pos() returns the ast.CallExpr.Lparen if the instruction arose from -// an explicit T(e) conversion; the ast.TypeAssertExpr.Lparen if the -// instruction arose from an explicit e.(T) operation; or the -// ast.CaseClause.Case if the instruction arose from a case of a -// type-switch statement. -// -// Example printed form: -// t2 = TypeAssert t1 -// t4 = TypeAssert <(value fmt.Stringer, ok bool)> t1 -// -type TypeAssert struct { - register - X Value - AssertedType types.Type - CommaOk bool -} - -// The Extract instruction yields component Index of Tuple. -// -// This is used to access the results of instructions with multiple -// return values, such as Call, TypeAssert, Next, Recv, -// MapLookup and others. -// -// Example printed form: -// t7 = Extract [1] (ok) t4 -// -type Extract struct { - register - Tuple Value - Index int -} - -// Instructions executed for effect. They do not yield a value. -------------------- - -// The Jump instruction transfers control to the sole successor of its -// owning block. -// -// A Jump must be the last instruction of its containing BasicBlock. -// -// Pos() returns NoPos. -// -// Example printed form: -// Jump → b1 -// -type Jump struct { - anInstruction - Comment string -} - -// The Unreachable pseudo-instruction signals that execution cannot -// continue after the preceding function call because it terminates -// the process. -// -// The instruction acts as a control instruction, jumping to the exit -// block. However, this jump will never execute. -// -// An Unreachable instruction must be the last instruction of its -// containing BasicBlock. -// -// Example printed form: -// Unreachable → b1 -// -type Unreachable struct { - anInstruction -} - -// The If instruction transfers control to one of the two successors -// of its owning block, depending on the boolean Cond: the first if -// true, the second if false. -// -// An If instruction must be the last instruction of its containing -// BasicBlock. -// -// Pos() returns the *ast.IfStmt, if explicit in the source. -// -// Example printed form: -// If t2 → b1 b2 -// -type If struct { - anInstruction - Cond Value -} - -type ConstantSwitch struct { - anInstruction - Tag Value - // Constant branch conditions. A nil Value denotes the (implicit - // or explicit) default branch. - Conds []Value -} - -type TypeSwitch struct { - register - Tag Value - Conds []types.Type -} - -// The Return instruction returns values and control back to the calling -// function. -// -// len(Results) is always equal to the number of results in the -// function's signature. -// -// If len(Results) > 1, Return returns a tuple value with the specified -// components which the caller must access using Extract instructions. -// -// There is no instruction to return a ready-made tuple like those -// returned by a "value,ok"-mode TypeAssert, MapLookup or Recv or -// a tail-call to a function with multiple result parameters. -// -// Return must be the last instruction of its containing BasicBlock. -// Such a block has no successors. -// -// Pos() returns the ast.ReturnStmt.Return, if explicit in the source. -// -// Example printed form: -// Return -// Return t1 t2 -// -type Return struct { - anInstruction - Results []Value -} - -// The RunDefers instruction pops and invokes the entire stack of -// procedure calls pushed by Defer instructions in this function. -// -// It is legal to encounter multiple 'rundefers' instructions in a -// single control-flow path through a function; this is useful in -// the combined init() function, for example. -// -// Pos() returns NoPos. -// -// Example printed form: -// RunDefers -// -type RunDefers struct { - anInstruction -} - -// The Panic instruction initiates a panic with value X. -// -// A Panic instruction must be the last instruction of its containing -// BasicBlock, which must have one successor, the exit block. -// -// NB: 'go panic(x)' and 'defer panic(x)' do not use this instruction; -// they are treated as calls to a built-in function. -// -// Pos() returns the ast.CallExpr.Lparen if this panic was explicit -// in the source. -// -// Example printed form: -// Panic t1 -// -type Panic struct { - anInstruction - X Value // an interface{} -} - -// The Go instruction creates a new goroutine and calls the specified -// function within it. -// -// See CallCommon for generic function call documentation. -// -// Pos() returns the ast.GoStmt.Go. -// -// Example printed form: -// Go println t1 -// Go t3 -// GoInvoke t4.Bar t2 -// -type Go struct { - anInstruction - Call CallCommon -} - -// The Defer instruction pushes the specified call onto a stack of -// functions to be called by a RunDefers instruction or by a panic. -// -// See CallCommon for generic function call documentation. -// -// Pos() returns the ast.DeferStmt.Defer. -// -// Example printed form: -// Defer println t1 -// Defer t3 -// DeferInvoke t4.Bar t2 -// -type Defer struct { - anInstruction - Call CallCommon -} - -// The Send instruction sends X on channel Chan. -// -// Pos() returns the ast.SendStmt.Arrow, if explicit in the source. -// -// Example printed form: -// Send t2 t1 -// -type Send struct { - anInstruction - Chan, X Value -} - -// The Recv instruction receives from channel Chan. -// -// If CommaOk, the result is a 2-tuple of the value above -// and a boolean indicating the success of the receive. The -// components of the tuple are accessed using Extract. -// -// Pos() returns the ast.UnaryExpr.OpPos, if explicit in the source. -// For receive operations implicit in ranging over a channel, -// Pos() returns the ast.RangeStmt.For. -// -// Example printed form: -// t2 = Recv t1 -// t3 = Recv <(int, bool)> t1 -type Recv struct { - register - Chan Value - CommaOk bool -} - -// The Store instruction stores Val at address Addr. -// Stores can be of arbitrary types. -// -// Pos() returns the position of the source-level construct most closely -// associated with the memory store operation. -// Since implicit memory stores are numerous and varied and depend upon -// implementation choices, the details are not specified. -// -// Example printed form: -// Store {int} t2 t1 -// -type Store struct { - anInstruction - Addr Value - Val Value -} - -// The BlankStore instruction is emitted for assignments to the blank -// identifier. -// -// BlankStore is a pseudo-instruction: it has no dynamic effect. -// -// Pos() returns NoPos. -// -// Example printed form: -// BlankStore t1 -// -type BlankStore struct { - anInstruction - Val Value -} - -// The MapUpdate instruction updates the association of Map[Key] to -// Value. -// -// Pos() returns the ast.KeyValueExpr.Colon or ast.IndexExpr.Lbrack, -// if explicit in the source. -// -// Example printed form: -// MapUpdate t3 t1 t2 -// -type MapUpdate struct { - anInstruction - Map Value - Key Value - Value Value -} - -// A DebugRef instruction maps a source-level expression Expr to the -// IR value X that represents the value (!IsAddr) or address (IsAddr) -// of that expression. -// -// DebugRef is a pseudo-instruction: it has no dynamic effect. -// -// Pos() returns Expr.Pos(), the start position of the source-level -// expression. This is not the same as the "designated" token as -// documented at Value.Pos(). e.g. CallExpr.Pos() does not return the -// position of the ("designated") Lparen token. -// -// DebugRefs are generated only for functions built with debugging -// enabled; see Package.SetDebugMode() and the GlobalDebug builder -// mode flag. -// -// DebugRefs are not emitted for ast.Idents referring to constants or -// predeclared identifiers, since they are trivial and numerous. -// Nor are they emitted for ast.ParenExprs. -// -// (By representing these as instructions, rather than out-of-band, -// consistency is maintained during transformation passes by the -// ordinary SSA renaming machinery.) -// -// Example printed form: -// ; *ast.CallExpr @ 102:9 is t5 -// ; var x float64 @ 109:72 is x -// ; address of *ast.CompositeLit @ 216:10 is t0 -// -type DebugRef struct { - anInstruction - Expr ast.Expr // the referring expression (never *ast.ParenExpr) - object types.Object // the identity of the source var/func - IsAddr bool // Expr is addressable and X is the address it denotes - X Value // the value or address of Expr -} - -// Embeddable mix-ins and helpers for common parts of other structs. ----------- - -// register is a mix-in embedded by all IR values that are also -// instructions, i.e. virtual registers, and provides a uniform -// implementation of most of the Value interface: Value.Name() is a -// numbered register (e.g. "t0"); the other methods are field accessors. -// -// Temporary names are automatically assigned to each register on -// completion of building a function in IR form. -// -type register struct { - anInstruction - typ types.Type // type of virtual register - referrers []Instruction -} - -type node struct { - source ast.Node - id ID -} - -func (n *node) setID(id ID) { n.id = id } -func (n node) ID() ID { return n.id } - -func (n *node) setSource(source ast.Node) { n.source = source } -func (n *node) Source() ast.Node { return n.source } - -func (n *node) Pos() token.Pos { - if n.source != nil { - return n.source.Pos() - } - return token.NoPos -} - -// anInstruction is a mix-in embedded by all Instructions. -// It provides the implementations of the Block and setBlock methods. -type anInstruction struct { - node - block *BasicBlock // the basic block of this instruction -} - -// CallCommon is contained by Go, Defer and Call to hold the -// common parts of a function or method call. -// -// Each CallCommon exists in one of two modes, function call and -// interface method invocation, or "call" and "invoke" for short. -// -// 1. "call" mode: when Method is nil (!IsInvoke), a CallCommon -// represents an ordinary function call of the value in Value, -// which may be a *Builtin, a *Function or any other value of kind -// 'func'. -// -// Value may be one of: -// (a) a *Function, indicating a statically dispatched call -// to a package-level function, an anonymous function, or -// a method of a named type. -// (b) a *MakeClosure, indicating an immediately applied -// function literal with free variables. -// (c) a *Builtin, indicating a statically dispatched call -// to a built-in function. -// (d) any other value, indicating a dynamically dispatched -// function call. -// StaticCallee returns the identity of the callee in cases -// (a) and (b), nil otherwise. -// -// Args contains the arguments to the call. If Value is a method, -// Args[0] contains the receiver parameter. -// -// Example printed form: -// t3 = Call <()> println t1 t2 -// Go t3 -// Defer t3 -// -// 2. "invoke" mode: when Method is non-nil (IsInvoke), a CallCommon -// represents a dynamically dispatched call to an interface method. -// In this mode, Value is the interface value and Method is the -// interface's abstract method. Note: an abstract method may be -// shared by multiple interfaces due to embedding; Value.Type() -// provides the specific interface used for this call. -// -// Value is implicitly supplied to the concrete method implementation -// as the receiver parameter; in other words, Args[0] holds not the -// receiver but the first true argument. -// -// Example printed form: -// t6 = Invoke t5.String -// GoInvoke t4.Bar t2 -// DeferInvoke t4.Bar t2 -// -// For all calls to variadic functions (Signature().Variadic()), -// the last element of Args is a slice. -// -type CallCommon struct { - Value Value // receiver (invoke mode) or func value (call mode) - Method *types.Func // abstract method (invoke mode) - Args []Value // actual parameters (in static method call, includes receiver) - Results Value -} - -// IsInvoke returns true if this call has "invoke" (not "call") mode. -func (c *CallCommon) IsInvoke() bool { - return c.Method != nil -} - -// Signature returns the signature of the called function. -// -// For an "invoke"-mode call, the signature of the interface method is -// returned. -// -// In either "call" or "invoke" mode, if the callee is a method, its -// receiver is represented by sig.Recv, not sig.Params().At(0). -// -func (c *CallCommon) Signature() *types.Signature { - if c.Method != nil { - return c.Method.Type().(*types.Signature) - } - return c.Value.Type().Underlying().(*types.Signature) -} - -// StaticCallee returns the callee if this is a trivially static -// "call"-mode call to a function. -func (c *CallCommon) StaticCallee() *Function { - switch fn := c.Value.(type) { - case *Function: - return fn - case *MakeClosure: - return fn.Fn.(*Function) - } - return nil -} - -// Description returns a description of the mode of this call suitable -// for a user interface, e.g., "static method call". -func (c *CallCommon) Description() string { - switch fn := c.Value.(type) { - case *Builtin: - return "built-in function call" - case *MakeClosure: - return "static function closure call" - case *Function: - if fn.Signature.Recv() != nil { - return "static method call" - } - return "static function call" - } - if c.IsInvoke() { - return "dynamic method call" // ("invoke" mode) - } - return "dynamic function call" -} - -// The CallInstruction interface, implemented by *Go, *Defer and *Call, -// exposes the common parts of function-calling instructions, -// yet provides a way back to the Value defined by *Call alone. -// -type CallInstruction interface { - Instruction - Common() *CallCommon // returns the common parts of the call - Value() *Call -} - -func (s *Call) Common() *CallCommon { return &s.Call } -func (s *Defer) Common() *CallCommon { return &s.Call } -func (s *Go) Common() *CallCommon { return &s.Call } - -func (s *Call) Value() *Call { return s } -func (s *Defer) Value() *Call { return nil } -func (s *Go) Value() *Call { return nil } - -func (v *Builtin) Type() types.Type { return v.sig } -func (v *Builtin) Name() string { return v.name } -func (*Builtin) Referrers() *[]Instruction { return nil } -func (v *Builtin) Pos() token.Pos { return token.NoPos } -func (v *Builtin) Object() types.Object { return types.Universe.Lookup(v.name) } -func (v *Builtin) Parent() *Function { return nil } - -func (v *FreeVar) Type() types.Type { return v.typ } -func (v *FreeVar) Name() string { return v.name } -func (v *FreeVar) Referrers() *[]Instruction { return &v.referrers } -func (v *FreeVar) Parent() *Function { return v.parent } - -func (v *Global) Type() types.Type { return v.typ } -func (v *Global) Name() string { return v.name } -func (v *Global) Parent() *Function { return nil } -func (v *Global) Referrers() *[]Instruction { return nil } -func (v *Global) Token() token.Token { return token.VAR } -func (v *Global) Object() types.Object { return v.object } -func (v *Global) String() string { return v.RelString(nil) } -func (v *Global) Package() *Package { return v.Pkg } -func (v *Global) RelString(from *types.Package) string { return relString(v, from) } - -func (v *Function) Name() string { return v.name } -func (v *Function) Type() types.Type { return v.Signature } -func (v *Function) Token() token.Token { return token.FUNC } -func (v *Function) Object() types.Object { return v.object } -func (v *Function) String() string { return v.RelString(nil) } -func (v *Function) Package() *Package { return v.Pkg } -func (v *Function) Parent() *Function { return v.parent } -func (v *Function) Referrers() *[]Instruction { - if v.parent != nil { - return &v.referrers - } - return nil -} - -func (v *Parameter) Object() types.Object { return v.object } - -func (v *Alloc) Type() types.Type { return v.typ } -func (v *Alloc) Referrers() *[]Instruction { return &v.referrers } - -func (v *register) Type() types.Type { return v.typ } -func (v *register) setType(typ types.Type) { v.typ = typ } -func (v *register) Name() string { return fmt.Sprintf("t%d", v.id) } -func (v *register) Referrers() *[]Instruction { return &v.referrers } - -func (v *anInstruction) Parent() *Function { return v.block.parent } -func (v *anInstruction) Block() *BasicBlock { return v.block } -func (v *anInstruction) setBlock(block *BasicBlock) { v.block = block } -func (v *anInstruction) Referrers() *[]Instruction { return nil } - -func (t *Type) Name() string { return t.object.Name() } -func (t *Type) Pos() token.Pos { return t.object.Pos() } -func (t *Type) Type() types.Type { return t.object.Type() } -func (t *Type) Token() token.Token { return token.TYPE } -func (t *Type) Object() types.Object { return t.object } -func (t *Type) String() string { return t.RelString(nil) } -func (t *Type) Package() *Package { return t.pkg } -func (t *Type) RelString(from *types.Package) string { return relString(t, from) } - -func (c *NamedConst) Name() string { return c.object.Name() } -func (c *NamedConst) Pos() token.Pos { return c.object.Pos() } -func (c *NamedConst) String() string { return c.RelString(nil) } -func (c *NamedConst) Type() types.Type { return c.object.Type() } -func (c *NamedConst) Token() token.Token { return token.CONST } -func (c *NamedConst) Object() types.Object { return c.object } -func (c *NamedConst) Package() *Package { return c.pkg } -func (c *NamedConst) RelString(from *types.Package) string { return relString(c, from) } - -// Func returns the package-level function of the specified name, -// or nil if not found. -// -func (p *Package) Func(name string) (f *Function) { - f, _ = p.Members[name].(*Function) - return -} - -// Var returns the package-level variable of the specified name, -// or nil if not found. -// -func (p *Package) Var(name string) (g *Global) { - g, _ = p.Members[name].(*Global) - return -} - -// Const returns the package-level constant of the specified name, -// or nil if not found. -// -func (p *Package) Const(name string) (c *NamedConst) { - c, _ = p.Members[name].(*NamedConst) - return -} - -// Type returns the package-level type of the specified name, -// or nil if not found. -// -func (p *Package) Type(name string) (t *Type) { - t, _ = p.Members[name].(*Type) - return -} - -func (s *DebugRef) Pos() token.Pos { return s.Expr.Pos() } - -// Operands. - -func (v *Alloc) Operands(rands []*Value) []*Value { - return rands -} - -func (v *BinOp) Operands(rands []*Value) []*Value { - return append(rands, &v.X, &v.Y) -} - -func (c *CallCommon) Operands(rands []*Value) []*Value { - rands = append(rands, &c.Value) - for i := range c.Args { - rands = append(rands, &c.Args[i]) - } - return rands -} - -func (s *Go) Operands(rands []*Value) []*Value { - return s.Call.Operands(rands) -} - -func (s *Call) Operands(rands []*Value) []*Value { - return s.Call.Operands(rands) -} - -func (s *Defer) Operands(rands []*Value) []*Value { - return s.Call.Operands(rands) -} - -func (v *ChangeInterface) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *ChangeType) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *Convert) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (s *DebugRef) Operands(rands []*Value) []*Value { - return append(rands, &s.X) -} - -func (v *Extract) Operands(rands []*Value) []*Value { - return append(rands, &v.Tuple) -} - -func (v *Field) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *FieldAddr) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (s *If) Operands(rands []*Value) []*Value { - return append(rands, &s.Cond) -} - -func (s *ConstantSwitch) Operands(rands []*Value) []*Value { - rands = append(rands, &s.Tag) - for i := range s.Conds { - rands = append(rands, &s.Conds[i]) - } - return rands -} - -func (s *TypeSwitch) Operands(rands []*Value) []*Value { - rands = append(rands, &s.Tag) - return rands -} - -func (v *Index) Operands(rands []*Value) []*Value { - return append(rands, &v.X, &v.Index) -} - -func (v *IndexAddr) Operands(rands []*Value) []*Value { - return append(rands, &v.X, &v.Index) -} - -func (*Jump) Operands(rands []*Value) []*Value { - return rands -} - -func (*Unreachable) Operands(rands []*Value) []*Value { - return rands -} - -func (v *MapLookup) Operands(rands []*Value) []*Value { - return append(rands, &v.X, &v.Index) -} - -func (v *StringLookup) Operands(rands []*Value) []*Value { - return append(rands, &v.X, &v.Index) -} - -func (v *MakeChan) Operands(rands []*Value) []*Value { - return append(rands, &v.Size) -} - -func (v *MakeClosure) Operands(rands []*Value) []*Value { - rands = append(rands, &v.Fn) - for i := range v.Bindings { - rands = append(rands, &v.Bindings[i]) - } - return rands -} - -func (v *MakeInterface) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *MakeMap) Operands(rands []*Value) []*Value { - return append(rands, &v.Reserve) -} - -func (v *MakeSlice) Operands(rands []*Value) []*Value { - return append(rands, &v.Len, &v.Cap) -} - -func (v *MapUpdate) Operands(rands []*Value) []*Value { - return append(rands, &v.Map, &v.Key, &v.Value) -} - -func (v *Next) Operands(rands []*Value) []*Value { - return append(rands, &v.Iter) -} - -func (s *Panic) Operands(rands []*Value) []*Value { - return append(rands, &s.X) -} - -func (v *Sigma) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *Phi) Operands(rands []*Value) []*Value { - for i := range v.Edges { - rands = append(rands, &v.Edges[i]) - } - return rands -} - -func (v *Range) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (s *Return) Operands(rands []*Value) []*Value { - for i := range s.Results { - rands = append(rands, &s.Results[i]) - } - return rands -} - -func (*RunDefers) Operands(rands []*Value) []*Value { - return rands -} - -func (v *Select) Operands(rands []*Value) []*Value { - for i := range v.States { - rands = append(rands, &v.States[i].Chan, &v.States[i].Send) - } - return rands -} - -func (s *Send) Operands(rands []*Value) []*Value { - return append(rands, &s.Chan, &s.X) -} - -func (recv *Recv) Operands(rands []*Value) []*Value { - return append(rands, &recv.Chan) -} - -func (v *Slice) Operands(rands []*Value) []*Value { - return append(rands, &v.X, &v.Low, &v.High, &v.Max) -} - -func (s *Store) Operands(rands []*Value) []*Value { - return append(rands, &s.Addr, &s.Val) -} - -func (s *BlankStore) Operands(rands []*Value) []*Value { - return append(rands, &s.Val) -} - -func (v *TypeAssert) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *UnOp) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -func (v *Load) Operands(rands []*Value) []*Value { - return append(rands, &v.X) -} - -// Non-Instruction Values: -func (v *Builtin) Operands(rands []*Value) []*Value { return rands } -func (v *FreeVar) Operands(rands []*Value) []*Value { return rands } -func (v *Const) Operands(rands []*Value) []*Value { return rands } -func (v *Function) Operands(rands []*Value) []*Value { return rands } -func (v *Global) Operands(rands []*Value) []*Value { return rands } -func (v *Parameter) Operands(rands []*Value) []*Value { return rands } diff --git a/vendor/honnef.co/go/tools/ir/staticcheck.conf b/vendor/honnef.co/go/tools/ir/staticcheck.conf deleted file mode 100644 index d7b38bc356..0000000000 --- a/vendor/honnef.co/go/tools/ir/staticcheck.conf +++ /dev/null @@ -1,3 +0,0 @@ -# ssa/... is mostly imported from upstream and we don't want to -# deviate from it too much, hence disabling SA1019 -checks = ["inherit", "-SA1019"] diff --git a/vendor/honnef.co/go/tools/ir/util.go b/vendor/honnef.co/go/tools/ir/util.go deleted file mode 100644 index df0f8bf971..0000000000 --- a/vendor/honnef.co/go/tools/ir/util.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines a number of miscellaneous utility functions. - -import ( - "fmt" - "go/ast" - "go/token" - "go/types" - "io" - "os" - - "golang.org/x/tools/go/ast/astutil" -) - -//// AST utilities - -func unparen(e ast.Expr) ast.Expr { return astutil.Unparen(e) } - -// isBlankIdent returns true iff e is an Ident with name "_". -// They have no associated types.Object, and thus no type. -// -func isBlankIdent(e ast.Expr) bool { - id, ok := e.(*ast.Ident) - return ok && id.Name == "_" -} - -//// Type utilities. Some of these belong in go/types. - -// isPointer returns true for types whose underlying type is a pointer. -func isPointer(typ types.Type) bool { - _, ok := typ.Underlying().(*types.Pointer) - return ok -} - -func isInterface(T types.Type) bool { return types.IsInterface(T) } - -// deref returns a pointer's element type; otherwise it returns typ. -func deref(typ types.Type) types.Type { - if p, ok := typ.Underlying().(*types.Pointer); ok { - return p.Elem() - } - return typ -} - -// recvType returns the receiver type of method obj. -func recvType(obj *types.Func) types.Type { - return obj.Type().(*types.Signature).Recv().Type() -} - -// logStack prints the formatted "start" message to stderr and -// returns a closure that prints the corresponding "end" message. -// Call using 'defer logStack(...)()' to show builder stack on panic. -// Don't forget trailing parens! -// -func logStack(format string, args ...interface{}) func() { - msg := fmt.Sprintf(format, args...) - io.WriteString(os.Stderr, msg) - io.WriteString(os.Stderr, "\n") - return func() { - io.WriteString(os.Stderr, msg) - io.WriteString(os.Stderr, " end\n") - } -} - -// newVar creates a 'var' for use in a types.Tuple. -func newVar(name string, typ types.Type) *types.Var { - return types.NewParam(token.NoPos, nil, name, typ) -} - -// anonVar creates an anonymous 'var' for use in a types.Tuple. -func anonVar(typ types.Type) *types.Var { - return newVar("", typ) -} - -var lenResults = types.NewTuple(anonVar(tInt)) - -// makeLen returns the len builtin specialized to type func(T)int. -func makeLen(T types.Type) *Builtin { - lenParams := types.NewTuple(anonVar(T)) - return &Builtin{ - name: "len", - sig: types.NewSignature(nil, lenParams, lenResults, false), - } -} diff --git a/vendor/honnef.co/go/tools/ir/wrappers.go b/vendor/honnef.co/go/tools/ir/wrappers.go deleted file mode 100644 index 7dd3347480..0000000000 --- a/vendor/honnef.co/go/tools/ir/wrappers.go +++ /dev/null @@ -1,292 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ir - -// This file defines synthesis of Functions that delegate to declared -// methods; they come in three kinds: -// -// (1) wrappers: methods that wrap declared methods, performing -// implicit pointer indirections and embedded field selections. -// -// (2) thunks: funcs that wrap declared methods. Like wrappers, -// thunks perform indirections and field selections. The thunk's -// first parameter is used as the receiver for the method call. -// -// (3) bounds: funcs that wrap declared methods. The bound's sole -// free variable, supplied by a closure, is used as the receiver -// for the method call. No indirections or field selections are -// performed since they can be done before the call. - -import ( - "fmt" - - "go/types" -) - -// -- wrappers ----------------------------------------------------------- - -// makeWrapper returns a synthetic method that delegates to the -// declared method denoted by meth.Obj(), first performing any -// necessary pointer indirections or field selections implied by meth. -// -// The resulting method's receiver type is meth.Recv(). -// -// This function is versatile but quite subtle! Consider the -// following axes of variation when making changes: -// - optional receiver indirection -// - optional implicit field selections -// - meth.Obj() may denote a concrete or an interface method -// - the result may be a thunk or a wrapper. -// -// EXCLUSIVE_LOCKS_REQUIRED(prog.methodsMu) -// -func makeWrapper(prog *Program, sel *types.Selection) *Function { - obj := sel.Obj().(*types.Func) // the declared function - sig := sel.Type().(*types.Signature) // type of this wrapper - - var recv *types.Var // wrapper's receiver or thunk's params[0] - name := obj.Name() - var description string - var start int // first regular param - if sel.Kind() == types.MethodExpr { - name += "$thunk" - description = "thunk" - recv = sig.Params().At(0) - start = 1 - } else { - description = "wrapper" - recv = sig.Recv() - } - - description = fmt.Sprintf("%s for %s", description, sel.Obj()) - if prog.mode&LogSource != 0 { - defer logStack("make %s to (%s)", description, recv.Type())() - } - fn := &Function{ - name: name, - method: sel, - object: obj, - Signature: sig, - Synthetic: description, - Prog: prog, - functionBody: new(functionBody), - } - fn.initHTML(prog.PrintFunc) - fn.startBody() - fn.addSpilledParam(recv, nil) - createParams(fn, start) - - indices := sel.Index() - - var v Value = fn.Locals[0] // spilled receiver - if isPointer(sel.Recv()) { - v = emitLoad(fn, v, nil) - - // For simple indirection wrappers, perform an informative nil-check: - // "value method (T).f called using nil *T pointer" - if len(indices) == 1 && !isPointer(recvType(obj)) { - var c Call - c.Call.Value = &Builtin{ - name: "ir:wrapnilchk", - sig: types.NewSignature(nil, - types.NewTuple(anonVar(sel.Recv()), anonVar(tString), anonVar(tString)), - types.NewTuple(anonVar(sel.Recv())), false), - } - c.Call.Args = []Value{ - v, - emitConst(fn, stringConst(deref(sel.Recv()).String())), - emitConst(fn, stringConst(sel.Obj().Name())), - } - c.setType(v.Type()) - v = fn.emit(&c, nil) - } - } - - // Invariant: v is a pointer, either - // value of *A receiver param, or - // address of A spilled receiver. - - // We use pointer arithmetic (FieldAddr possibly followed by - // Load) in preference to value extraction (Field possibly - // preceded by Load). - - v = emitImplicitSelections(fn, v, indices[:len(indices)-1], nil) - - // Invariant: v is a pointer, either - // value of implicit *C field, or - // address of implicit C field. - - var c Call - if r := recvType(obj); !isInterface(r) { // concrete method - if !isPointer(r) { - v = emitLoad(fn, v, nil) - } - c.Call.Value = prog.declaredFunc(obj) - c.Call.Args = append(c.Call.Args, v) - } else { - c.Call.Method = obj - c.Call.Value = emitLoad(fn, v, nil) - } - for _, arg := range fn.Params[1:] { - c.Call.Args = append(c.Call.Args, arg) - } - emitTailCall(fn, &c, nil) - fn.finishBody() - return fn -} - -// createParams creates parameters for wrapper method fn based on its -// Signature.Params, which do not include the receiver. -// start is the index of the first regular parameter to use. -// -func createParams(fn *Function, start int) { - tparams := fn.Signature.Params() - for i, n := start, tparams.Len(); i < n; i++ { - fn.addParamObj(tparams.At(i), nil) - } -} - -// -- bounds ----------------------------------------------------------- - -// makeBound returns a bound method wrapper (or "bound"), a synthetic -// function that delegates to a concrete or interface method denoted -// by obj. The resulting function has no receiver, but has one free -// variable which will be used as the method's receiver in the -// tail-call. -// -// Use MakeClosure with such a wrapper to construct a bound method -// closure. e.g.: -// -// type T int or: type T interface { meth() } -// func (t T) meth() -// var t T -// f := t.meth -// f() // calls t.meth() -// -// f is a closure of a synthetic wrapper defined as if by: -// -// f := func() { return t.meth() } -// -// Unlike makeWrapper, makeBound need perform no indirection or field -// selections because that can be done before the closure is -// constructed. -// -// EXCLUSIVE_LOCKS_ACQUIRED(meth.Prog.methodsMu) -// -func makeBound(prog *Program, obj *types.Func) *Function { - prog.methodsMu.Lock() - defer prog.methodsMu.Unlock() - fn, ok := prog.bounds[obj] - if !ok { - description := fmt.Sprintf("bound method wrapper for %s", obj) - if prog.mode&LogSource != 0 { - defer logStack("%s", description)() - } - fn = &Function{ - name: obj.Name() + "$bound", - object: obj, - Signature: changeRecv(obj.Type().(*types.Signature), nil), // drop receiver - Synthetic: description, - Prog: prog, - functionBody: new(functionBody), - } - fn.initHTML(prog.PrintFunc) - - fv := &FreeVar{name: "recv", typ: recvType(obj), parent: fn} - fn.FreeVars = []*FreeVar{fv} - fn.startBody() - createParams(fn, 0) - var c Call - - if !isInterface(recvType(obj)) { // concrete - c.Call.Value = prog.declaredFunc(obj) - c.Call.Args = []Value{fv} - } else { - c.Call.Value = fv - c.Call.Method = obj - } - for _, arg := range fn.Params { - c.Call.Args = append(c.Call.Args, arg) - } - emitTailCall(fn, &c, nil) - fn.finishBody() - - prog.bounds[obj] = fn - } - return fn -} - -// -- thunks ----------------------------------------------------------- - -// makeThunk returns a thunk, a synthetic function that delegates to a -// concrete or interface method denoted by sel.Obj(). The resulting -// function has no receiver, but has an additional (first) regular -// parameter. -// -// Precondition: sel.Kind() == types.MethodExpr. -// -// type T int or: type T interface { meth() } -// func (t T) meth() -// f := T.meth -// var t T -// f(t) // calls t.meth() -// -// f is a synthetic wrapper defined as if by: -// -// f := func(t T) { return t.meth() } -// -// TODO(adonovan): opt: currently the stub is created even when used -// directly in a function call: C.f(i, 0). This is less efficient -// than inlining the stub. -// -// EXCLUSIVE_LOCKS_ACQUIRED(meth.Prog.methodsMu) -// -func makeThunk(prog *Program, sel *types.Selection) *Function { - if sel.Kind() != types.MethodExpr { - panic(sel) - } - - key := selectionKey{ - kind: sel.Kind(), - recv: sel.Recv(), - obj: sel.Obj(), - index: fmt.Sprint(sel.Index()), - indirect: sel.Indirect(), - } - - prog.methodsMu.Lock() - defer prog.methodsMu.Unlock() - - // Canonicalize key.recv to avoid constructing duplicate thunks. - canonRecv, ok := prog.canon.At(key.recv).(types.Type) - if !ok { - canonRecv = key.recv - prog.canon.Set(key.recv, canonRecv) - } - key.recv = canonRecv - - fn, ok := prog.thunks[key] - if !ok { - fn = makeWrapper(prog, sel) - if fn.Signature.Recv() != nil { - panic(fn) // unexpected receiver - } - prog.thunks[key] = fn - } - return fn -} - -func changeRecv(s *types.Signature, recv *types.Var) *types.Signature { - return types.NewSignature(recv, s.Params(), s.Results(), s.Variadic()) -} - -// selectionKey is like types.Selection but a usable map key. -type selectionKey struct { - kind types.SelectionKind - recv types.Type // canonicalized via Program.canon - obj types.Object - index string - indirect bool -} diff --git a/vendor/honnef.co/go/tools/ir/write.go b/vendor/honnef.co/go/tools/ir/write.go deleted file mode 100644 index b936bc9852..0000000000 --- a/vendor/honnef.co/go/tools/ir/write.go +++ /dev/null @@ -1,5 +0,0 @@ -package ir - -func NewJump(parent *BasicBlock) *Jump { - return &Jump{anInstruction{block: parent}, ""} -} diff --git a/vendor/honnef.co/go/tools/lint/BUILD.bazel b/vendor/honnef.co/go/tools/lint/BUILD.bazel deleted file mode 100644 index 3557696e2e..0000000000 --- a/vendor/honnef.co/go/tools/lint/BUILD.bazel +++ /dev/null @@ -1,22 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "lint.go", - "runner.go", - "stats.go", - ], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/lint", - importpath = "honnef.co/go/tools/lint", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/go/analysis:go_default_library", - "//vendor/golang.org/x/tools/go/packages:go_default_library", - "//vendor/golang.org/x/tools/go/types/objectpath:go_default_library", - "//vendor/honnef.co/go/tools/config:go_default_library", - "//vendor/honnef.co/go/tools/facts:go_default_library", - "//vendor/honnef.co/go/tools/internal/cache:go_default_library", - "//vendor/honnef.co/go/tools/loader:go_default_library", - ], -) diff --git a/vendor/honnef.co/go/tools/lint/LICENSE b/vendor/honnef.co/go/tools/lint/LICENSE deleted file mode 100644 index 796130a123..0000000000 --- a/vendor/honnef.co/go/tools/lint/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2013 The Go Authors. All rights reserved. -Copyright (c) 2016 Dominik Honnef. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/honnef.co/go/tools/lint/lint.go b/vendor/honnef.co/go/tools/lint/lint.go deleted file mode 100644 index 1a70e0c298..0000000000 --- a/vendor/honnef.co/go/tools/lint/lint.go +++ /dev/null @@ -1,539 +0,0 @@ -// Package lint provides the foundation for tools like staticcheck -package lint // import "honnef.co/go/tools/lint" - -import ( - "bytes" - "encoding/gob" - "fmt" - "go/scanner" - "go/token" - "go/types" - "path/filepath" - "sort" - "strings" - "sync" - "sync/atomic" - "unicode" - - "golang.org/x/tools/go/analysis" - "golang.org/x/tools/go/packages" - "honnef.co/go/tools/config" - "honnef.co/go/tools/internal/cache" -) - -type Documentation struct { - Title string - Text string - Since string - NonDefault bool - Options []string -} - -func (doc *Documentation) String() string { - b := &strings.Builder{} - fmt.Fprintf(b, "%s\n\n", doc.Title) - if doc.Text != "" { - fmt.Fprintf(b, "%s\n\n", doc.Text) - } - fmt.Fprint(b, "Available since\n ") - if doc.Since == "" { - fmt.Fprint(b, "unreleased") - } else { - fmt.Fprintf(b, "%s", doc.Since) - } - if doc.NonDefault { - fmt.Fprint(b, ", non-default") - } - fmt.Fprint(b, "\n") - if len(doc.Options) > 0 { - fmt.Fprintf(b, "\nOptions\n") - for _, opt := range doc.Options { - fmt.Fprintf(b, " %s", opt) - } - fmt.Fprint(b, "\n") - } - return b.String() -} - -type Ignore interface { - Match(p Problem) bool -} - -type LineIgnore struct { - File string - Line int - Checks []string - Matched bool - Pos token.Position -} - -func (li *LineIgnore) Match(p Problem) bool { - pos := p.Pos - if pos.Filename != li.File || pos.Line != li.Line { - return false - } - for _, c := range li.Checks { - if m, _ := filepath.Match(c, p.Check); m { - li.Matched = true - return true - } - } - return false -} - -func (li *LineIgnore) String() string { - matched := "not matched" - if li.Matched { - matched = "matched" - } - return fmt.Sprintf("%s:%d %s (%s)", li.File, li.Line, strings.Join(li.Checks, ", "), matched) -} - -type FileIgnore struct { - File string - Checks []string -} - -func (fi *FileIgnore) Match(p Problem) bool { - if p.Pos.Filename != fi.File { - return false - } - for _, c := range fi.Checks { - if m, _ := filepath.Match(c, p.Check); m { - return true - } - } - return false -} - -type Severity uint8 - -const ( - Error Severity = iota - Warning - Ignored -) - -// Problem represents a problem in some source code. -type Problem struct { - Pos token.Position - End token.Position - Message string - Check string - Severity Severity - Related []Related -} - -type Related struct { - Pos token.Position - End token.Position - Message string -} - -func (p Problem) Equal(o Problem) bool { - return p.Pos == o.Pos && - p.End == o.End && - p.Message == o.Message && - p.Check == o.Check && - p.Severity == o.Severity -} - -func (p *Problem) String() string { - return fmt.Sprintf("%s (%s)", p.Message, p.Check) -} - -// A Linter lints Go source code. -type Linter struct { - Checkers []*analysis.Analyzer - CumulativeCheckers []CumulativeChecker - GoVersion int - Config config.Config - Stats Stats - RepeatAnalyzers uint -} - -type CumulativeChecker interface { - Analyzer() *analysis.Analyzer - Result() []types.Object - ProblemObject(*token.FileSet, types.Object) Problem -} - -func (l *Linter) Lint(cfg *packages.Config, patterns []string) ([]Problem, error) { - var allAnalyzers []*analysis.Analyzer - allAnalyzers = append(allAnalyzers, l.Checkers...) - for _, cum := range l.CumulativeCheckers { - allAnalyzers = append(allAnalyzers, cum.Analyzer()) - } - - // The -checks command line flag overrules all configuration - // files, which means that for `-checks="foo"`, no check other - // than foo can ever be reported to the user. Make use of this - // fact to cull the list of analyses we need to run. - - // replace "inherit" with "all", as we don't want to base the - // list of all checks on the default configuration, which - // disables certain checks. - checks := make([]string, len(l.Config.Checks)) - copy(checks, l.Config.Checks) - for i, c := range checks { - if c == "inherit" { - checks[i] = "all" - } - } - - allowed := FilterChecks(allAnalyzers, checks) - var allowedAnalyzers []*analysis.Analyzer - for _, c := range l.Checkers { - if allowed[c.Name] { - allowedAnalyzers = append(allowedAnalyzers, c) - } - } - hasCumulative := false - for _, cum := range l.CumulativeCheckers { - a := cum.Analyzer() - if allowed[a.Name] { - hasCumulative = true - allowedAnalyzers = append(allowedAnalyzers, a) - } - } - - r, err := NewRunner(&l.Stats) - if err != nil { - return nil, err - } - r.goVersion = l.GoVersion - r.repeatAnalyzers = l.RepeatAnalyzers - - pkgs, err := r.Run(cfg, patterns, allowedAnalyzers, hasCumulative) - if err != nil { - return nil, err - } - - tpkgToPkg := map[*types.Package]*Package{} - for _, pkg := range pkgs { - tpkgToPkg[pkg.Types] = pkg - - for _, e := range pkg.errs { - switch e := e.(type) { - case types.Error: - p := Problem{ - Pos: e.Fset.PositionFor(e.Pos, false), - Message: e.Msg, - Severity: Error, - Check: "compile", - } - pkg.problems = append(pkg.problems, p) - case packages.Error: - msg := e.Msg - if len(msg) != 0 && msg[0] == '\n' { - // TODO(dh): See https://github.com/golang/go/issues/32363 - msg = msg[1:] - } - - var pos token.Position - if e.Pos == "" { - // Under certain conditions (malformed package - // declarations, multiple packages in the same - // directory), go list emits an error on stderr - // instead of JSON. Those errors do not have - // associated position information in - // go/packages.Error, even though the output on - // stderr may contain it. - if p, n, err := parsePos(msg); err == nil { - if abs, err := filepath.Abs(p.Filename); err == nil { - p.Filename = abs - } - pos = p - msg = msg[n+2:] - } - } else { - var err error - pos, _, err = parsePos(e.Pos) - if err != nil { - panic(fmt.Sprintf("internal error: %s", e)) - } - } - p := Problem{ - Pos: pos, - Message: msg, - Severity: Error, - Check: "compile", - } - pkg.problems = append(pkg.problems, p) - case scanner.ErrorList: - for _, e := range e { - p := Problem{ - Pos: e.Pos, - Message: e.Msg, - Severity: Error, - Check: "compile", - } - pkg.problems = append(pkg.problems, p) - } - case error: - p := Problem{ - Pos: token.Position{}, - Message: e.Error(), - Severity: Error, - Check: "compile", - } - pkg.problems = append(pkg.problems, p) - } - } - } - - atomic.StoreUint32(&r.stats.State, StateCumulative) - for _, cum := range l.CumulativeCheckers { - for _, res := range cum.Result() { - pkg := tpkgToPkg[res.Pkg()] - if pkg == nil { - panic(fmt.Sprintf("analyzer %s flagged object %s in package %s, a package that we aren't tracking", cum.Analyzer(), res, res.Pkg())) - } - allowedChecks := FilterChecks(allowedAnalyzers, pkg.cfg.Merge(l.Config).Checks) - if allowedChecks[cum.Analyzer().Name] { - pos := DisplayPosition(pkg.Fset, res.Pos()) - // FIXME(dh): why are we ignoring generated files - // here? Surely this is specific to 'unused', not all - // cumulative checkers - if _, ok := pkg.gen[pos.Filename]; ok { - continue - } - p := cum.ProblemObject(pkg.Fset, res) - pkg.problems = append(pkg.problems, p) - } - } - } - - for _, pkg := range pkgs { - if !pkg.fromSource { - // Don't cache packages that we loaded from the cache - continue - } - cpkg := cachedPackage{ - Problems: pkg.problems, - Ignores: pkg.ignores, - Config: pkg.cfg, - } - buf := &bytes.Buffer{} - if err := gob.NewEncoder(buf).Encode(cpkg); err != nil { - return nil, err - } - id := cache.Subkey(pkg.actionID, "data "+r.problemsCacheKey) - if err := r.cache.PutBytes(id, buf.Bytes()); err != nil { - return nil, err - } - } - - var problems []Problem - // Deduplicate line ignores. When U1000 processes a package and - // its test variant, it will only emit a single problem for an - // unused object, not two problems. We will, however, have two - // line ignores, one per package. Without deduplication, one line - // ignore will be marked as matched, while the other one won't, - // subsequently reporting a "this linter directive didn't match - // anything" error. - ignores := map[token.Position]Ignore{} - for _, pkg := range pkgs { - for _, ig := range pkg.ignores { - if lig, ok := ig.(*LineIgnore); ok { - ig = ignores[lig.Pos] - if ig == nil { - ignores[lig.Pos] = lig - ig = lig - } - } - for i := range pkg.problems { - p := &pkg.problems[i] - if ig.Match(*p) { - p.Severity = Ignored - } - } - } - - if pkg.cfg == nil { - // The package failed to load, otherwise we would have a - // valid config. Pass through all errors. - problems = append(problems, pkg.problems...) - } else { - for _, p := range pkg.problems { - allowedChecks := FilterChecks(allowedAnalyzers, pkg.cfg.Merge(l.Config).Checks) - allowedChecks["compile"] = true - if allowedChecks[p.Check] { - problems = append(problems, p) - } - } - } - - for _, ig := range pkg.ignores { - ig, ok := ig.(*LineIgnore) - if !ok { - continue - } - ig = ignores[ig.Pos].(*LineIgnore) - if ig.Matched { - continue - } - - couldveMatched := false - allowedChecks := FilterChecks(allowedAnalyzers, pkg.cfg.Merge(l.Config).Checks) - for _, c := range ig.Checks { - if !allowedChecks[c] { - continue - } - couldveMatched = true - break - } - - if !couldveMatched { - // The ignored checks were disabled for the containing package. - // Don't flag the ignore for not having matched. - continue - } - p := Problem{ - Pos: ig.Pos, - Message: "this linter directive didn't match anything; should it be removed?", - Check: "", - } - problems = append(problems, p) - } - } - - if len(problems) == 0 { - return nil, nil - } - - sort.Slice(problems, func(i, j int) bool { - pi := problems[i].Pos - pj := problems[j].Pos - - if pi.Filename != pj.Filename { - return pi.Filename < pj.Filename - } - if pi.Line != pj.Line { - return pi.Line < pj.Line - } - if pi.Column != pj.Column { - return pi.Column < pj.Column - } - - return problems[i].Message < problems[j].Message - }) - - var out []Problem - out = append(out, problems[0]) - for i, p := range problems[1:] { - // We may encounter duplicate problems because one file - // can be part of many packages. - if !problems[i].Equal(p) { - out = append(out, p) - } - } - return out, nil -} - -func FilterChecks(allChecks []*analysis.Analyzer, checks []string) map[string]bool { - // OPT(dh): this entire computation could be cached per package - allowedChecks := map[string]bool{} - - for _, check := range checks { - b := true - if len(check) > 1 && check[0] == '-' { - b = false - check = check[1:] - } - if check == "*" || check == "all" { - // Match all - for _, c := range allChecks { - allowedChecks[c.Name] = b - } - } else if strings.HasSuffix(check, "*") { - // Glob - prefix := check[:len(check)-1] - isCat := strings.IndexFunc(prefix, func(r rune) bool { return unicode.IsNumber(r) }) == -1 - - for _, c := range allChecks { - idx := strings.IndexFunc(c.Name, func(r rune) bool { return unicode.IsNumber(r) }) - if isCat { - // Glob is S*, which should match S1000 but not SA1000 - cat := c.Name[:idx] - if prefix == cat { - allowedChecks[c.Name] = b - } - } else { - // Glob is S1* - if strings.HasPrefix(c.Name, prefix) { - allowedChecks[c.Name] = b - } - } - } - } else { - // Literal check name - allowedChecks[check] = b - } - } - return allowedChecks -} - -func DisplayPosition(fset *token.FileSet, p token.Pos) token.Position { - if p == token.NoPos { - return token.Position{} - } - - // Only use the adjusted position if it points to another Go file. - // This means we'll point to the original file for cgo files, but - // we won't point to a YACC grammar file. - pos := fset.PositionFor(p, false) - adjPos := fset.PositionFor(p, true) - - if filepath.Ext(adjPos.Filename) == ".go" { - return adjPos - } - return pos -} - -var bufferPool = &sync.Pool{ - New: func() interface{} { - buf := bytes.NewBuffer(nil) - buf.Grow(64) - return buf - }, -} - -func FuncName(f *types.Func) string { - buf := bufferPool.Get().(*bytes.Buffer) - buf.Reset() - if f.Type() != nil { - sig := f.Type().(*types.Signature) - if recv := sig.Recv(); recv != nil { - buf.WriteByte('(') - if _, ok := recv.Type().(*types.Interface); ok { - // gcimporter creates abstract methods of - // named interfaces using the interface type - // (not the named type) as the receiver. - // Don't print it in full. - buf.WriteString("interface") - } else { - types.WriteType(buf, recv.Type(), nil) - } - buf.WriteByte(')') - buf.WriteByte('.') - } else if f.Pkg() != nil { - writePackage(buf, f.Pkg()) - } - } - buf.WriteString(f.Name()) - s := buf.String() - bufferPool.Put(buf) - return s -} - -func writePackage(buf *bytes.Buffer, pkg *types.Package) { - if pkg == nil { - return - } - s := pkg.Path() - if s != "" { - buf.WriteString(s) - buf.WriteByte('.') - } -} diff --git a/vendor/honnef.co/go/tools/lint/lintdsl/BUILD.bazel b/vendor/honnef.co/go/tools/lint/lintdsl/BUILD.bazel deleted file mode 100644 index dcc1e3ea96..0000000000 --- a/vendor/honnef.co/go/tools/lint/lintdsl/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["lintdsl.go"], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/lint/lintdsl", - importpath = "honnef.co/go/tools/lint/lintdsl", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/go/analysis:go_default_library", - "//vendor/honnef.co/go/tools/pattern:go_default_library", - ], -) diff --git a/vendor/honnef.co/go/tools/lint/lintdsl/lintdsl.go b/vendor/honnef.co/go/tools/lint/lintdsl/lintdsl.go deleted file mode 100644 index 4408aff25e..0000000000 --- a/vendor/honnef.co/go/tools/lint/lintdsl/lintdsl.go +++ /dev/null @@ -1,58 +0,0 @@ -// Package lintdsl provides helpers for implementing static analysis -// checks. Dot-importing this package is encouraged. -package lintdsl - -import ( - "bytes" - "fmt" - "go/ast" - "go/format" - - "golang.org/x/tools/go/analysis" - "honnef.co/go/tools/pattern" -) - -func Inspect(node ast.Node, fn func(node ast.Node) bool) { - if node == nil { - return - } - ast.Inspect(node, fn) -} - -func Match(pass *analysis.Pass, q pattern.Pattern, node ast.Node) (*pattern.Matcher, bool) { - // Note that we ignore q.Relevant – callers of Match usually use - // AST inspectors that already filter on nodes we're interested - // in. - m := &pattern.Matcher{TypesInfo: pass.TypesInfo} - ok := m.Match(q.Root, node) - return m, ok -} - -func MatchAndEdit(pass *analysis.Pass, before, after pattern.Pattern, node ast.Node) (*pattern.Matcher, []analysis.TextEdit, bool) { - m, ok := Match(pass, before, node) - if !ok { - return m, nil, false - } - r := pattern.NodeToAST(after.Root, m.State) - buf := &bytes.Buffer{} - format.Node(buf, pass.Fset, r) - edit := []analysis.TextEdit{{ - Pos: node.Pos(), - End: node.End(), - NewText: buf.Bytes(), - }} - return m, edit, true -} - -func Selector(x, sel string) *ast.SelectorExpr { - return &ast.SelectorExpr{ - X: &ast.Ident{Name: x}, - Sel: &ast.Ident{Name: sel}, - } -} - -// ExhaustiveTypeSwitch panics when called. It can be used to ensure -// that type switches are exhaustive. -func ExhaustiveTypeSwitch(v interface{}) { - panic(fmt.Sprintf("internal error: unhandled case %T", v)) -} diff --git a/vendor/honnef.co/go/tools/lint/lintutil/BUILD.bazel b/vendor/honnef.co/go/tools/lint/lintutil/BUILD.bazel deleted file mode 100644 index 2cc34a0d56..0000000000 --- a/vendor/honnef.co/go/tools/lint/lintutil/BUILD.bazel +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "stats.go", - "stats_bsd.go", - "stats_posix.go", - "util.go", - ], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/lint/lintutil", - importpath = "honnef.co/go/tools/lint/lintutil", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/go/analysis:go_default_library", - "//vendor/golang.org/x/tools/go/buildutil:go_default_library", - "//vendor/golang.org/x/tools/go/packages:go_default_library", - "//vendor/honnef.co/go/tools/config:go_default_library", - "//vendor/honnef.co/go/tools/internal/cache:go_default_library", - "//vendor/honnef.co/go/tools/lint:go_default_library", - "//vendor/honnef.co/go/tools/lint/lintutil/format:go_default_library", - "//vendor/honnef.co/go/tools/version:go_default_library", - ], -) diff --git a/vendor/honnef.co/go/tools/lint/lintutil/format/BUILD.bazel b/vendor/honnef.co/go/tools/lint/lintutil/format/BUILD.bazel deleted file mode 100644 index 82d46ae51d..0000000000 --- a/vendor/honnef.co/go/tools/lint/lintutil/format/BUILD.bazel +++ /dev/null @@ -1,10 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["format.go"], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/lint/lintutil/format", - importpath = "honnef.co/go/tools/lint/lintutil/format", - visibility = ["//visibility:public"], - deps = ["//vendor/honnef.co/go/tools/lint:go_default_library"], -) diff --git a/vendor/honnef.co/go/tools/lint/lintutil/format/format.go b/vendor/honnef.co/go/tools/lint/lintutil/format/format.go deleted file mode 100644 index b28f8885b8..0000000000 --- a/vendor/honnef.co/go/tools/lint/lintutil/format/format.go +++ /dev/null @@ -1,162 +0,0 @@ -// Package format provides formatters for linter problems. -package format - -import ( - "encoding/json" - "fmt" - "go/token" - "io" - "os" - "path/filepath" - "text/tabwriter" - - "honnef.co/go/tools/lint" -) - -func shortPath(path string) string { - cwd, err := os.Getwd() - if err != nil { - return path - } - if rel, err := filepath.Rel(cwd, path); err == nil && len(rel) < len(path) { - return rel - } - return path -} - -func relativePositionString(pos token.Position) string { - s := shortPath(pos.Filename) - if pos.IsValid() { - if s != "" { - s += ":" - } - s += fmt.Sprintf("%d:%d", pos.Line, pos.Column) - } - if s == "" { - s = "-" - } - return s -} - -type Statter interface { - Stats(total, errors, warnings, ignored int) -} - -type Formatter interface { - Format(p lint.Problem) -} - -type Text struct { - W io.Writer -} - -func (o Text) Format(p lint.Problem) { - fmt.Fprintf(o.W, "%s: %s\n", relativePositionString(p.Pos), p.String()) - for _, r := range p.Related { - fmt.Fprintf(o.W, "\t%s: %s\n", relativePositionString(r.Pos), r.Message) - } -} - -type JSON struct { - W io.Writer -} - -func severity(s lint.Severity) string { - switch s { - case lint.Error: - return "error" - case lint.Warning: - return "warning" - case lint.Ignored: - return "ignored" - } - return "" -} - -func (o JSON) Format(p lint.Problem) { - type location struct { - File string `json:"file"` - Line int `json:"line"` - Column int `json:"column"` - } - type related struct { - Location location `json:"location"` - End location `json:"end"` - Message string `json:"message"` - } - jp := struct { - Code string `json:"code"` - Severity string `json:"severity,omitempty"` - Location location `json:"location"` - End location `json:"end"` - Message string `json:"message"` - Related []related `json:"related,omitempty"` - }{ - Code: p.Check, - Severity: severity(p.Severity), - Location: location{ - File: p.Pos.Filename, - Line: p.Pos.Line, - Column: p.Pos.Column, - }, - End: location{ - File: p.End.Filename, - Line: p.End.Line, - Column: p.End.Column, - }, - Message: p.Message, - } - for _, r := range p.Related { - jp.Related = append(jp.Related, related{ - Location: location{ - File: r.Pos.Filename, - Line: r.Pos.Line, - Column: r.Pos.Column, - }, - End: location{ - File: r.End.Filename, - Line: r.End.Line, - Column: r.End.Column, - }, - Message: r.Message, - }) - } - _ = json.NewEncoder(o.W).Encode(jp) -} - -type Stylish struct { - W io.Writer - - prevFile string - tw *tabwriter.Writer -} - -func (o *Stylish) Format(p lint.Problem) { - pos := p.Pos - if pos.Filename == "" { - pos.Filename = "-" - } - - if pos.Filename != o.prevFile { - if o.prevFile != "" { - o.tw.Flush() - fmt.Fprintln(o.W) - } - fmt.Fprintln(o.W, pos.Filename) - o.prevFile = pos.Filename - o.tw = tabwriter.NewWriter(o.W, 0, 4, 2, ' ', 0) - } - fmt.Fprintf(o.tw, " (%d, %d)\t%s\t%s\n", pos.Line, pos.Column, p.Check, p.Message) - for _, r := range p.Related { - fmt.Fprintf(o.tw, " (%d, %d)\t\t %s\n", r.Pos.Line, r.Pos.Column, r.Message) - } -} - -func (o *Stylish) Stats(total, errors, warnings, ignored int) { - if o.tw != nil { - o.tw.Flush() - fmt.Fprintln(o.W) - } - fmt.Fprintf(o.W, " ✖ %d problems (%d errors, %d warnings, %d ignored)\n", - total, errors, warnings, ignored) -} diff --git a/vendor/honnef.co/go/tools/lint/lintutil/stats.go b/vendor/honnef.co/go/tools/lint/lintutil/stats.go deleted file mode 100644 index ba8caf0afd..0000000000 --- a/vendor/honnef.co/go/tools/lint/lintutil/stats.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build !aix,!android,!darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris - -package lintutil - -import "os" - -var infoSignals = []os.Signal{} diff --git a/vendor/honnef.co/go/tools/lint/lintutil/stats_bsd.go b/vendor/honnef.co/go/tools/lint/lintutil/stats_bsd.go deleted file mode 100644 index 3a62ede031..0000000000 --- a/vendor/honnef.co/go/tools/lint/lintutil/stats_bsd.go +++ /dev/null @@ -1,10 +0,0 @@ -// +build darwin dragonfly freebsd netbsd openbsd - -package lintutil - -import ( - "os" - "syscall" -) - -var infoSignals = []os.Signal{syscall.SIGINFO} diff --git a/vendor/honnef.co/go/tools/lint/lintutil/stats_posix.go b/vendor/honnef.co/go/tools/lint/lintutil/stats_posix.go deleted file mode 100644 index 53f21c666b..0000000000 --- a/vendor/honnef.co/go/tools/lint/lintutil/stats_posix.go +++ /dev/null @@ -1,10 +0,0 @@ -// +build aix android linux solaris - -package lintutil - -import ( - "os" - "syscall" -) - -var infoSignals = []os.Signal{syscall.SIGUSR1} diff --git a/vendor/honnef.co/go/tools/lint/lintutil/util.go b/vendor/honnef.co/go/tools/lint/lintutil/util.go deleted file mode 100644 index 7c3dbdec19..0000000000 --- a/vendor/honnef.co/go/tools/lint/lintutil/util.go +++ /dev/null @@ -1,444 +0,0 @@ -// Copyright (c) 2013 The Go Authors. All rights reserved. -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file or at -// https://developers.google.com/open-source/licenses/bsd. - -// Package lintutil provides helpers for writing linter command lines. -package lintutil // import "honnef.co/go/tools/lint/lintutil" - -import ( - "crypto/sha256" - "errors" - "flag" - "fmt" - "go/build" - "go/token" - "io" - "log" - "os" - "os/signal" - "regexp" - "runtime" - "runtime/pprof" - "strconv" - "strings" - "sync" - "sync/atomic" - "time" - - "honnef.co/go/tools/config" - "honnef.co/go/tools/internal/cache" - "honnef.co/go/tools/lint" - "honnef.co/go/tools/lint/lintutil/format" - "honnef.co/go/tools/version" - - "golang.org/x/tools/go/analysis" - "golang.org/x/tools/go/buildutil" - "golang.org/x/tools/go/packages" -) - -func NewVersionFlag() flag.Getter { - tags := build.Default.ReleaseTags - v := tags[len(tags)-1][2:] - version := new(VersionFlag) - if err := version.Set(v); err != nil { - panic(fmt.Sprintf("internal error: %s", err)) - } - return version -} - -type VersionFlag int - -func (v *VersionFlag) String() string { - return fmt.Sprintf("1.%d", *v) - -} - -func (v *VersionFlag) Set(s string) error { - if len(s) < 3 { - return errors.New("invalid Go version") - } - if s[0] != '1' { - return errors.New("invalid Go version") - } - if s[1] != '.' { - return errors.New("invalid Go version") - } - i, err := strconv.Atoi(s[2:]) - *v = VersionFlag(i) - return err -} - -func (v *VersionFlag) Get() interface{} { - return int(*v) -} - -func usage(name string, flags *flag.FlagSet) func() { - return func() { - fmt.Fprintf(os.Stderr, "Usage of %s:\n", name) - fmt.Fprintf(os.Stderr, "\t%s [flags] # runs on package in current directory\n", name) - fmt.Fprintf(os.Stderr, "\t%s [flags] packages\n", name) - fmt.Fprintf(os.Stderr, "\t%s [flags] directory\n", name) - fmt.Fprintf(os.Stderr, "\t%s [flags] files... # must be a single package\n", name) - fmt.Fprintf(os.Stderr, "Flags:\n") - flags.PrintDefaults() - } -} - -type list []string - -func (list *list) String() string { - return `"` + strings.Join(*list, ",") + `"` -} - -func (list *list) Set(s string) error { - if s == "" { - *list = nil - return nil - } - - *list = strings.Split(s, ",") - return nil -} - -func FlagSet(name string) *flag.FlagSet { - flags := flag.NewFlagSet("", flag.ExitOnError) - flags.Usage = usage(name, flags) - flags.String("tags", "", "List of `build tags`") - flags.Bool("tests", true, "Include tests") - flags.Bool("version", false, "Print version and exit") - flags.Bool("show-ignored", false, "Don't filter ignored problems") - flags.String("f", "text", "Output `format` (valid choices are 'stylish', 'text' and 'json')") - flags.String("explain", "", "Print description of `check`") - - flags.String("debug.cpuprofile", "", "Write CPU profile to `file`") - flags.String("debug.memprofile", "", "Write memory profile to `file`") - flags.Bool("debug.version", false, "Print detailed version information about this program") - flags.Bool("debug.no-compile-errors", false, "Don't print compile errors") - flags.String("debug.measure-analyzers", "", "Write analysis measurements to `file`. `file` will be opened for appending if it already exists.") - flags.Uint("debug.repeat-analyzers", 0, "Run analyzers `num` times") - - checks := list{"inherit"} - fail := list{"all"} - flags.Var(&checks, "checks", "Comma-separated list of `checks` to enable.") - flags.Var(&fail, "fail", "Comma-separated list of `checks` that can cause a non-zero exit status.") - - tags := build.Default.ReleaseTags - v := tags[len(tags)-1][2:] - version := new(VersionFlag) - if err := version.Set(v); err != nil { - panic(fmt.Sprintf("internal error: %s", err)) - } - - flags.Var(version, "go", "Target Go `version` in the format '1.x'") - return flags -} - -func findCheck(cs []*analysis.Analyzer, check string) (*analysis.Analyzer, bool) { - for _, c := range cs { - if c.Name == check { - return c, true - } - } - return nil, false -} - -func ProcessFlagSet(cs []*analysis.Analyzer, cums []lint.CumulativeChecker, fs *flag.FlagSet) { - tags := fs.Lookup("tags").Value.(flag.Getter).Get().(string) - tests := fs.Lookup("tests").Value.(flag.Getter).Get().(bool) - goVersion := fs.Lookup("go").Value.(flag.Getter).Get().(int) - formatter := fs.Lookup("f").Value.(flag.Getter).Get().(string) - printVersion := fs.Lookup("version").Value.(flag.Getter).Get().(bool) - showIgnored := fs.Lookup("show-ignored").Value.(flag.Getter).Get().(bool) - explain := fs.Lookup("explain").Value.(flag.Getter).Get().(string) - - cpuProfile := fs.Lookup("debug.cpuprofile").Value.(flag.Getter).Get().(string) - memProfile := fs.Lookup("debug.memprofile").Value.(flag.Getter).Get().(string) - debugVersion := fs.Lookup("debug.version").Value.(flag.Getter).Get().(bool) - debugNoCompile := fs.Lookup("debug.no-compile-errors").Value.(flag.Getter).Get().(bool) - debugRepeat := fs.Lookup("debug.repeat-analyzers").Value.(flag.Getter).Get().(uint) - - var measureAnalyzers func(analysis *analysis.Analyzer, pkg *lint.Package, d time.Duration) - if path := fs.Lookup("debug.measure-analyzers").Value.(flag.Getter).Get().(string); path != "" { - f, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) - if err != nil { - log.Fatal(err) - } - - mu := &sync.Mutex{} - measureAnalyzers = func(analysis *analysis.Analyzer, pkg *lint.Package, d time.Duration) { - mu.Lock() - defer mu.Unlock() - if _, err := fmt.Fprintf(f, "%s\t%s\t%d\n", analysis.Name, pkg.ID, d.Nanoseconds()); err != nil { - log.Println("error writing analysis measurements:", err) - } - } - } - - cfg := config.Config{} - cfg.Checks = *fs.Lookup("checks").Value.(*list) - - exit := func(code int) { - if cpuProfile != "" { - pprof.StopCPUProfile() - } - if memProfile != "" { - f, err := os.Create(memProfile) - if err != nil { - panic(err) - } - runtime.GC() - pprof.WriteHeapProfile(f) - } - os.Exit(code) - } - if cpuProfile != "" { - f, err := os.Create(cpuProfile) - if err != nil { - log.Fatal(err) - } - pprof.StartCPUProfile(f) - } - - if debugVersion { - version.Verbose() - exit(0) - } - - if printVersion { - version.Print() - exit(0) - } - - // Validate that the tags argument is well-formed. go/packages - // doesn't detect malformed build flags and returns unhelpful - // errors. - tf := buildutil.TagsFlag{} - if err := tf.Set(tags); err != nil { - fmt.Fprintln(os.Stderr, fmt.Errorf("invalid value %q for flag -tags: %s", tags, err)) - exit(1) - } - - if explain != "" { - var haystack []*analysis.Analyzer - haystack = append(haystack, cs...) - for _, cum := range cums { - haystack = append(haystack, cum.Analyzer()) - } - check, ok := findCheck(haystack, explain) - if !ok { - fmt.Fprintln(os.Stderr, "Couldn't find check", explain) - exit(1) - } - if check.Doc == "" { - fmt.Fprintln(os.Stderr, explain, "has no documentation") - exit(1) - } - fmt.Println(check.Doc) - exit(0) - } - - ps, err := Lint(cs, cums, fs.Args(), &Options{ - Tags: tags, - LintTests: tests, - GoVersion: goVersion, - Config: cfg, - PrintAnalyzerMeasurement: measureAnalyzers, - RepeatAnalyzers: debugRepeat, - }) - if err != nil { - fmt.Fprintln(os.Stderr, err) - exit(1) - } - - var f format.Formatter - switch formatter { - case "text": - f = format.Text{W: os.Stdout} - case "stylish": - f = &format.Stylish{W: os.Stdout} - case "json": - f = format.JSON{W: os.Stdout} - default: - fmt.Fprintf(os.Stderr, "unsupported output format %q\n", formatter) - exit(2) - } - - var ( - total int - errors int - warnings int - ignored int - ) - - fail := *fs.Lookup("fail").Value.(*list) - analyzers := make([]*analysis.Analyzer, len(cs), len(cs)+len(cums)) - copy(analyzers, cs) - for _, cum := range cums { - analyzers = append(analyzers, cum.Analyzer()) - } - shouldExit := lint.FilterChecks(analyzers, fail) - shouldExit["compile"] = true - - total = len(ps) - for _, p := range ps { - if p.Check == "compile" && debugNoCompile { - continue - } - if p.Severity == lint.Ignored && !showIgnored { - ignored++ - continue - } - if shouldExit[p.Check] { - errors++ - } else { - p.Severity = lint.Warning - warnings++ - } - f.Format(p) - } - if f, ok := f.(format.Statter); ok { - f.Stats(total, errors, warnings, ignored) - } - if errors > 0 { - exit(1) - } - exit(0) -} - -type Options struct { - Config config.Config - - Tags string - LintTests bool - GoVersion int - PrintAnalyzerMeasurement func(analysis *analysis.Analyzer, pkg *lint.Package, d time.Duration) - RepeatAnalyzers uint -} - -func computeSalt() ([]byte, error) { - if version.Version != "devel" { - return []byte(version.Version), nil - } - p, err := os.Executable() - if err != nil { - return nil, err - } - f, err := os.Open(p) - if err != nil { - return nil, err - } - defer f.Close() - h := sha256.New() - if _, err := io.Copy(h, f); err != nil { - return nil, err - } - return h.Sum(nil), nil -} - -func Lint(cs []*analysis.Analyzer, cums []lint.CumulativeChecker, paths []string, opt *Options) ([]lint.Problem, error) { - salt, err := computeSalt() - if err != nil { - return nil, fmt.Errorf("could not compute salt for cache: %s", err) - } - cache.SetSalt(salt) - - if opt == nil { - opt = &Options{} - } - - l := &lint.Linter{ - Checkers: cs, - CumulativeCheckers: cums, - GoVersion: opt.GoVersion, - Config: opt.Config, - RepeatAnalyzers: opt.RepeatAnalyzers, - } - l.Stats.PrintAnalyzerMeasurement = opt.PrintAnalyzerMeasurement - cfg := &packages.Config{} - if opt.LintTests { - cfg.Tests = true - } - if opt.Tags != "" { - cfg.BuildFlags = append(cfg.BuildFlags, "-tags", opt.Tags) - } - - printStats := func() { - // Individual stats are read atomically, but overall there - // is no synchronisation. For printing rough progress - // information, this doesn't matter. - switch atomic.LoadUint32(&l.Stats.State) { - case lint.StateInitializing: - fmt.Fprintln(os.Stderr, "Status: initializing") - case lint.StateGraph: - fmt.Fprintln(os.Stderr, "Status: loading package graph") - case lint.StateProcessing: - fmt.Fprintf(os.Stderr, "Packages: %d/%d initial, %d/%d total; Workers: %d/%d; Problems: %d\n", - atomic.LoadUint32(&l.Stats.ProcessedInitialPackages), - atomic.LoadUint32(&l.Stats.InitialPackages), - atomic.LoadUint32(&l.Stats.ProcessedPackages), - atomic.LoadUint32(&l.Stats.TotalPackages), - atomic.LoadUint32(&l.Stats.ActiveWorkers), - atomic.LoadUint32(&l.Stats.TotalWorkers), - atomic.LoadUint32(&l.Stats.Problems), - ) - case lint.StateCumulative: - fmt.Fprintln(os.Stderr, "Status: processing cumulative checkers") - } - } - if len(infoSignals) > 0 { - ch := make(chan os.Signal, 1) - signal.Notify(ch, infoSignals...) - defer signal.Stop(ch) - go func() { - for range ch { - printStats() - } - }() - } - - ps, err := l.Lint(cfg, paths) - return ps, err -} - -var posRe = regexp.MustCompile(`^(.+?):(\d+)(?::(\d+)?)?$`) - -func parsePos(pos string) token.Position { - if pos == "-" || pos == "" { - return token.Position{} - } - parts := posRe.FindStringSubmatch(pos) - if parts == nil { - panic(fmt.Sprintf("internal error: malformed position %q", pos)) - } - file := parts[1] - line, _ := strconv.Atoi(parts[2]) - col, _ := strconv.Atoi(parts[3]) - return token.Position{ - Filename: file, - Line: line, - Column: col, - } -} - -func InitializeAnalyzers(docs map[string]*lint.Documentation, analyzers map[string]*analysis.Analyzer) map[string]*analysis.Analyzer { - out := make(map[string]*analysis.Analyzer, len(analyzers)) - for k, v := range analyzers { - vc := *v - out[k] = &vc - - vc.Name = k - doc, ok := docs[k] - if !ok { - panic(fmt.Sprintf("missing documentation for check %s", k)) - } - vc.Doc = doc.String() - if vc.Flags.Usage == nil { - fs := flag.NewFlagSet("", flag.PanicOnError) - fs.Var(NewVersionFlag(), "go", "Target Go version") - vc.Flags = *fs - } - } - return out -} diff --git a/vendor/honnef.co/go/tools/lint/runner.go b/vendor/honnef.co/go/tools/lint/runner.go deleted file mode 100644 index 74106ced82..0000000000 --- a/vendor/honnef.co/go/tools/lint/runner.go +++ /dev/null @@ -1,1114 +0,0 @@ -package lint - -/* -Package loading - -Conceptually, package loading in the runner can be imagined as a -graph-shaped work list. We iteratively pop off leaf nodes (packages -that have no unloaded dependencies) and load data from export data, -our cache, or source. - -Specifically, non-initial packages are loaded from export data and the -fact cache if possible, otherwise from source. Initial packages are -loaded from export data, the fact cache and the (problems, ignores, -config) cache if possible, otherwise from source. - -The appeal of this approach is that it is both simple to implement and -easily parallelizable. Each leaf node can be processed independently, -and new leaf nodes appear as their dependencies are being processed. - -The downside of this approach, however, is that we're doing more work -than necessary. Imagine an initial package A, which has the following -dependency chain: A->B->C->D – in the current implementation, we will -load all 4 packages. However, if package A can be loaded fully from -cached information, then none of its dependencies are necessary, and -we could avoid loading them. - - -Parallelism - -Runner implements parallel processing of packages by spawning one -goroutine per package in the dependency graph, without any semaphores. -Each goroutine initially waits on the completion of all of its -dependencies, thus establishing correct order of processing. Once all -dependencies finish processing, the goroutine will load the package -from export data or source – this loading is guarded by a semaphore, -sized according to the number of CPU cores. This way, we only have as -many packages occupying memory and CPU resources as there are actual -cores to process them. - -This combination of unbounded goroutines but bounded package loading -means that if we have many parallel, independent subgraphs, they will -all execute in parallel, while not wasting resources for long linear -chains or trying to process more subgraphs in parallel than the system -can handle. - - -Caching - -We make use of several caches. These caches are Go's export data, our -facts cache, and our (problems, ignores, config) cache. - -Initial packages will either be loaded from a combination of all three -caches, or from source. Non-initial packages will either be loaded -from a combination of export data and facts cache, or from source. - -The facts cache is separate from the (problems, ignores, config) cache -because when we process non-initial packages, we generate facts, but -we discard problems and ignores. - -The facts cache is keyed by (package, analyzer), whereas the -(problems, ignores, config) cache is keyed by (package, list of -analyzes). The difference between the two exists because there are -only a handful of analyses that produce facts, but hundreds of -analyses that don't. Creating one cache entry per fact-generating -analysis is feasible, creating one cache entry per normal analysis has -significant performance and storage overheads. - -The downside of keying by the list of analyzes is, naturally, that a -change in list of analyzes changes the cache key. `staticcheck -checks -A` and `staticcheck -checks A,B` will therefore need their own cache -entries and not reuse each other's work. This problem does not affect -the facts cache. - -*/ - -import ( - "bytes" - "encoding/gob" - "encoding/hex" - "fmt" - "go/ast" - "go/token" - "go/types" - "reflect" - "regexp" - "runtime" - "sort" - "strconv" - "strings" - "sync" - "sync/atomic" - "time" - - "golang.org/x/tools/go/analysis" - "golang.org/x/tools/go/packages" - "golang.org/x/tools/go/types/objectpath" - "honnef.co/go/tools/config" - "honnef.co/go/tools/facts" - "honnef.co/go/tools/internal/cache" - "honnef.co/go/tools/loader" -) - -func init() { - gob.Register(&FileIgnore{}) - gob.Register(&LineIgnore{}) -} - -// If enabled, abuse of the go/analysis API will lead to panics -const sanityCheck = true - -// OPT(dh): for a dependency tree A->B->C->D, if we have cached data -// for B, there should be no need to load C and D individually. Go's -// export data for B contains all the data we need on types, and our -// fact cache could store the union of B, C and D in B. -// -// This may change unused's behavior, however, as it may observe fewer -// interfaces from transitive dependencies. - -// OPT(dh): every single package will have the same value for -// canClearTypes. We could move the Package.decUse method to runner to -// eliminate this field. This is probably not worth it, though. There -// are only thousands of packages, so the field only takes up -// kilobytes of memory. - -// OPT(dh): do we really need the Package.gen field? it's based -// trivially on pkg.results and merely caches the result of a type -// assertion. How often do we actually use the field? - -type Package struct { - // dependents is initially set to 1 plus the number of packages - // that directly import this package. It is atomically decreased - // by 1 every time a dependent has been processed or when the - // package itself has been processed. Once the value reaches zero, - // the package is no longer needed. - dependents uint64 - - *packages.Package - Imports []*Package - initial bool - // fromSource is set to true for packages that have been loaded - // from source. This is the case for initial packages, packages - // with missing export data, and packages with no cached facts. - fromSource bool - // hash stores the package hash, as computed by packageHash - hash string - actionID cache.ActionID - done chan struct{} - - resultsMu sync.Mutex - // results maps analyzer IDs to analyzer results. it is - // implemented as a deduplicating concurrent cache. - results []*result - - cfg *config.Config - // gen maps file names to the code generator that created them - gen map[string]facts.Generator - problems []Problem - ignores []Ignore - errs []error - - // these slices are indexed by analysis - facts []map[types.Object][]analysis.Fact - pkgFacts [][]analysis.Fact - - // canClearTypes is set to true if we can discard type - // information after the package and its dependents have been - // processed. This is the case when no cumulative checkers are - // being run. - canClearTypes bool -} - -type cachedPackage struct { - Problems []Problem - Ignores []Ignore - Config *config.Config -} - -func (pkg *Package) decUse() { - ret := atomic.AddUint64(&pkg.dependents, ^uint64(0)) - if ret == 0 { - // nobody depends on this package anymore - if pkg.canClearTypes { - pkg.Types = nil - } - pkg.facts = nil - pkg.pkgFacts = nil - - for _, imp := range pkg.Imports { - imp.decUse() - } - } -} - -type result struct { - v interface{} - err error - ready chan struct{} -} - -type Runner struct { - cache *cache.Cache - goVersion int - stats *Stats - repeatAnalyzers uint - - analyzerIDs analyzerIDs - problemsCacheKey string - - // limits parallelism of loading packages - loadSem chan struct{} -} - -type analyzerIDs struct { - m map[*analysis.Analyzer]int -} - -func (ids analyzerIDs) get(a *analysis.Analyzer) int { - id, ok := ids.m[a] - if !ok { - panic(fmt.Sprintf("no analyzer ID for %s", a.Name)) - } - return id -} - -type Fact struct { - Path string - Fact analysis.Fact -} - -type analysisAction struct { - analyzer *analysis.Analyzer - analyzerID int - pkg *Package - newPackageFacts []analysis.Fact - problems []Problem - - pkgFacts map[*types.Package][]analysis.Fact -} - -func (ac *analysisAction) String() string { - return fmt.Sprintf("%s @ %s", ac.analyzer, ac.pkg) -} - -func (ac *analysisAction) allObjectFacts() []analysis.ObjectFact { - out := make([]analysis.ObjectFact, 0, len(ac.pkg.facts[ac.analyzerID])) - for obj, facts := range ac.pkg.facts[ac.analyzerID] { - for _, fact := range facts { - out = append(out, analysis.ObjectFact{ - Object: obj, - Fact: fact, - }) - } - } - return out -} - -func (ac *analysisAction) allPackageFacts() []analysis.PackageFact { - out := make([]analysis.PackageFact, 0, len(ac.pkgFacts)) - for pkg, facts := range ac.pkgFacts { - for _, fact := range facts { - out = append(out, analysis.PackageFact{ - Package: pkg, - Fact: fact, - }) - } - } - return out -} - -func (ac *analysisAction) importObjectFact(obj types.Object, fact analysis.Fact) bool { - if sanityCheck && len(ac.analyzer.FactTypes) == 0 { - panic("analysis doesn't export any facts") - } - for _, f := range ac.pkg.facts[ac.analyzerID][obj] { - if reflect.TypeOf(f) == reflect.TypeOf(fact) { - reflect.ValueOf(fact).Elem().Set(reflect.ValueOf(f).Elem()) - return true - } - } - return false -} - -func (ac *analysisAction) importPackageFact(pkg *types.Package, fact analysis.Fact) bool { - if sanityCheck && len(ac.analyzer.FactTypes) == 0 { - panic("analysis doesn't export any facts") - } - for _, f := range ac.pkgFacts[pkg] { - if reflect.TypeOf(f) == reflect.TypeOf(fact) { - reflect.ValueOf(fact).Elem().Set(reflect.ValueOf(f).Elem()) - return true - } - } - return false -} - -func (ac *analysisAction) exportObjectFact(obj types.Object, fact analysis.Fact) { - if sanityCheck && len(ac.analyzer.FactTypes) == 0 { - panic("analysis doesn't export any facts") - } - ac.pkg.facts[ac.analyzerID][obj] = append(ac.pkg.facts[ac.analyzerID][obj], fact) -} - -func (ac *analysisAction) exportPackageFact(fact analysis.Fact) { - if sanityCheck && len(ac.analyzer.FactTypes) == 0 { - panic("analysis doesn't export any facts") - } - ac.pkgFacts[ac.pkg.Types] = append(ac.pkgFacts[ac.pkg.Types], fact) - ac.newPackageFacts = append(ac.newPackageFacts, fact) -} - -func (ac *analysisAction) report(pass *analysis.Pass, d analysis.Diagnostic) { - p := Problem{ - Pos: DisplayPosition(pass.Fset, d.Pos), - End: DisplayPosition(pass.Fset, d.End), - Message: d.Message, - Check: pass.Analyzer.Name, - } - for _, r := range d.Related { - p.Related = append(p.Related, Related{ - Pos: DisplayPosition(pass.Fset, r.Pos), - End: DisplayPosition(pass.Fset, r.End), - Message: r.Message, - }) - } - ac.problems = append(ac.problems, p) -} - -func (r *Runner) runAnalysis(ac *analysisAction) (ret interface{}, err error) { - ac.pkg.resultsMu.Lock() - res := ac.pkg.results[r.analyzerIDs.get(ac.analyzer)] - if res != nil { - ac.pkg.resultsMu.Unlock() - <-res.ready - return res.v, res.err - } else { - res = &result{ - ready: make(chan struct{}), - } - ac.pkg.results[r.analyzerIDs.get(ac.analyzer)] = res - ac.pkg.resultsMu.Unlock() - - defer func() { - res.v = ret - res.err = err - close(res.ready) - }() - - pass := new(analysis.Pass) - *pass = analysis.Pass{ - Analyzer: ac.analyzer, - Fset: ac.pkg.Fset, - Files: ac.pkg.Syntax, - // type information may be nil or may be populated. if it is - // nil, it will get populated later. - Pkg: ac.pkg.Types, - TypesInfo: ac.pkg.TypesInfo, - TypesSizes: ac.pkg.TypesSizes, - ResultOf: map[*analysis.Analyzer]interface{}{}, - ImportObjectFact: ac.importObjectFact, - ImportPackageFact: ac.importPackageFact, - ExportObjectFact: ac.exportObjectFact, - ExportPackageFact: ac.exportPackageFact, - Report: func(d analysis.Diagnostic) { - ac.report(pass, d) - }, - AllObjectFacts: ac.allObjectFacts, - AllPackageFacts: ac.allPackageFacts, - } - - if !ac.pkg.initial { - // Don't report problems in dependencies - pass.Report = func(analysis.Diagnostic) {} - } - return r.runAnalysisUser(pass, ac) - } -} - -func (r *Runner) loadCachedPackage(pkg *Package, analyzers []*analysis.Analyzer) (cachedPackage, bool) { - // OPT(dh): we can cache this computation, it'll be the same for all packages - id := cache.Subkey(pkg.actionID, "data "+r.problemsCacheKey) - - b, _, err := r.cache.GetBytes(id) - if err != nil { - return cachedPackage{}, false - } - var cpkg cachedPackage - if err := gob.NewDecoder(bytes.NewReader(b)).Decode(&cpkg); err != nil { - return cachedPackage{}, false - } - return cpkg, true -} - -func (r *Runner) loadCachedFacts(a *analysis.Analyzer, pkg *Package) ([]Fact, bool) { - if len(a.FactTypes) == 0 { - return nil, true - } - - var facts []Fact - // Look in the cache for facts - aID := passActionID(pkg, a) - aID = cache.Subkey(aID, "facts") - b, _, err := r.cache.GetBytes(aID) - if err != nil { - // No cached facts, analyse this package like a user-provided one, but ignore diagnostics - return nil, false - } - - if err := gob.NewDecoder(bytes.NewReader(b)).Decode(&facts); err != nil { - // Cached facts are broken, analyse this package like a user-provided one, but ignore diagnostics - return nil, false - } - return facts, true -} - -type dependencyError struct { - dep string - err error -} - -func (err dependencyError) nested() dependencyError { - if o, ok := err.err.(dependencyError); ok { - return o.nested() - } - return err -} - -func (err dependencyError) Error() string { - if o, ok := err.err.(dependencyError); ok { - return o.Error() - } - return fmt.Sprintf("error running dependency %s: %s", err.dep, err.err) -} - -func (r *Runner) makeAnalysisAction(a *analysis.Analyzer, pkg *Package) *analysisAction { - aid := r.analyzerIDs.get(a) - ac := &analysisAction{ - analyzer: a, - analyzerID: aid, - pkg: pkg, - } - - if len(a.FactTypes) == 0 { - return ac - } - - // Merge all package facts of dependencies - ac.pkgFacts = map[*types.Package][]analysis.Fact{} - seen := map[*Package]struct{}{} - var dfs func(*Package) - dfs = func(pkg *Package) { - if _, ok := seen[pkg]; ok { - return - } - seen[pkg] = struct{}{} - s := pkg.pkgFacts[aid] - ac.pkgFacts[pkg.Types] = s[0:len(s):len(s)] - for _, imp := range pkg.Imports { - dfs(imp) - } - } - dfs(pkg) - - return ac -} - -// analyzes that we always want to run, even if they're not being run -// explicitly or as dependencies. these are necessary for the inner -// workings of the runner. -var injectedAnalyses = []*analysis.Analyzer{facts.Generated, config.Analyzer} - -func (r *Runner) runAnalysisUser(pass *analysis.Pass, ac *analysisAction) (interface{}, error) { - if !ac.pkg.fromSource { - panic(fmt.Sprintf("internal error: %s was not loaded from source", ac.pkg)) - } - - // User-provided package, analyse it - // First analyze it with dependencies - for _, req := range ac.analyzer.Requires { - acReq := r.makeAnalysisAction(req, ac.pkg) - ret, err := r.runAnalysis(acReq) - if err != nil { - // We couldn't run a dependency, no point in going on - return nil, dependencyError{req.Name, err} - } - - pass.ResultOf[req] = ret - } - - // Then with this analyzer - var ret interface{} - for i := uint(0); i < r.repeatAnalyzers+1; i++ { - var err error - t := time.Now() - ret, err = ac.analyzer.Run(pass) - r.stats.MeasureAnalyzer(ac.analyzer, ac.pkg, time.Since(t)) - if err != nil { - return nil, err - } - } - - if len(ac.analyzer.FactTypes) > 0 { - // Merge new facts into the package and persist them. - var facts []Fact - for _, fact := range ac.newPackageFacts { - id := r.analyzerIDs.get(ac.analyzer) - ac.pkg.pkgFacts[id] = append(ac.pkg.pkgFacts[id], fact) - facts = append(facts, Fact{"", fact}) - } - for obj, afacts := range ac.pkg.facts[ac.analyzerID] { - if obj.Pkg() != ac.pkg.Package.Types { - continue - } - path, err := objectpath.For(obj) - if err != nil { - continue - } - for _, fact := range afacts { - facts = append(facts, Fact{string(path), fact}) - } - } - - if err := r.cacheData(facts, ac.pkg, ac.analyzer, "facts"); err != nil { - return nil, err - } - } - - return ret, nil -} - -func (r *Runner) cacheData(v interface{}, pkg *Package, a *analysis.Analyzer, subkey string) error { - buf := &bytes.Buffer{} - if err := gob.NewEncoder(buf).Encode(v); err != nil { - return err - } - aID := passActionID(pkg, a) - aID = cache.Subkey(aID, subkey) - if err := r.cache.PutBytes(aID, buf.Bytes()); err != nil { - return err - } - return nil -} - -func NewRunner(stats *Stats) (*Runner, error) { - cache, err := cache.Default() - if err != nil { - return nil, err - } - - return &Runner{ - cache: cache, - stats: stats, - }, nil -} - -// Run loads packages corresponding to patterns and analyses them with -// analyzers. It returns the loaded packages, which contain reported -// diagnostics as well as extracted ignore directives. -// -// Note that diagnostics have not been filtered at this point yet, to -// accommodate cumulative analyzes that require additional steps to -// produce diagnostics. -func (r *Runner) Run(cfg *packages.Config, patterns []string, analyzers []*analysis.Analyzer, hasCumulative bool) ([]*Package, error) { - checkerNames := make([]string, len(analyzers)) - for i, a := range analyzers { - checkerNames[i] = a.Name - } - sort.Strings(checkerNames) - r.problemsCacheKey = strings.Join(checkerNames, " ") - - var allAnalyzers []*analysis.Analyzer - r.analyzerIDs = analyzerIDs{m: map[*analysis.Analyzer]int{}} - id := 0 - seen := map[*analysis.Analyzer]struct{}{} - var dfs func(a *analysis.Analyzer) - dfs = func(a *analysis.Analyzer) { - if _, ok := seen[a]; ok { - return - } - seen[a] = struct{}{} - allAnalyzers = append(allAnalyzers, a) - r.analyzerIDs.m[a] = id - id++ - for _, f := range a.FactTypes { - gob.Register(f) - } - for _, req := range a.Requires { - dfs(req) - } - } - for _, a := range analyzers { - if v := a.Flags.Lookup("go"); v != nil { - v.Value.Set(fmt.Sprintf("1.%d", r.goVersion)) - } - dfs(a) - } - for _, a := range injectedAnalyses { - dfs(a) - } - // Run all analyzers on all packages (subject to further - // restrictions enforced later). This guarantees that if analyzer - // A1 depends on A2, and A2 has facts, that A2 will run on the - // dependencies of user-provided packages, even though A1 won't. - analyzers = allAnalyzers - - var dcfg packages.Config - if cfg != nil { - dcfg = *cfg - } - - atomic.StoreUint32(&r.stats.State, StateGraph) - initialPkgs, err := loader.Graph(dcfg, patterns...) - if err != nil { - return nil, err - } - defer r.cache.Trim() - - var allPkgs []*Package - m := map[*packages.Package]*Package{} - packages.Visit(initialPkgs, nil, func(l *packages.Package) { - m[l] = &Package{ - Package: l, - results: make([]*result, len(r.analyzerIDs.m)), - facts: make([]map[types.Object][]analysis.Fact, len(r.analyzerIDs.m)), - pkgFacts: make([][]analysis.Fact, len(r.analyzerIDs.m)), - done: make(chan struct{}), - // every package needs itself - dependents: 1, - canClearTypes: !hasCumulative, - } - allPkgs = append(allPkgs, m[l]) - for i := range m[l].facts { - m[l].facts[i] = map[types.Object][]analysis.Fact{} - } - for _, err := range l.Errors { - m[l].errs = append(m[l].errs, err) - } - for _, v := range l.Imports { - m[v].dependents++ - m[l].Imports = append(m[l].Imports, m[v]) - } - - m[l].hash, err = r.packageHash(m[l]) - m[l].actionID = packageActionID(m[l]) - if err != nil { - m[l].errs = append(m[l].errs, err) - } - }) - - pkgs := make([]*Package, len(initialPkgs)) - for i, l := range initialPkgs { - pkgs[i] = m[l] - pkgs[i].initial = true - } - - atomic.StoreUint32(&r.stats.InitialPackages, uint32(len(initialPkgs))) - atomic.StoreUint32(&r.stats.TotalPackages, uint32(len(allPkgs))) - atomic.StoreUint32(&r.stats.State, StateProcessing) - - var wg sync.WaitGroup - wg.Add(len(allPkgs)) - r.loadSem = make(chan struct{}, runtime.GOMAXPROCS(-1)) - atomic.StoreUint32(&r.stats.TotalWorkers, uint32(cap(r.loadSem))) - for _, pkg := range allPkgs { - pkg := pkg - go func() { - r.processPkg(pkg, analyzers) - - if pkg.initial { - atomic.AddUint32(&r.stats.ProcessedInitialPackages, 1) - } - atomic.AddUint32(&r.stats.Problems, uint32(len(pkg.problems))) - wg.Done() - }() - } - wg.Wait() - - return pkgs, nil -} - -var posRe = regexp.MustCompile(`^(.+?):(\d+)(?::(\d+)?)?`) - -func parsePos(pos string) (token.Position, int, error) { - if pos == "-" || pos == "" { - return token.Position{}, 0, nil - } - parts := posRe.FindStringSubmatch(pos) - if parts == nil { - return token.Position{}, 0, fmt.Errorf("malformed position %q", pos) - } - file := parts[1] - line, _ := strconv.Atoi(parts[2]) - col, _ := strconv.Atoi(parts[3]) - return token.Position{ - Filename: file, - Line: line, - Column: col, - }, len(parts[0]), nil -} - -// loadPkg loads a Go package. It may be loaded from a combination of -// caches, or from source. -func (r *Runner) loadPkg(pkg *Package, analyzers []*analysis.Analyzer) error { - if pkg.Types != nil { - panic(fmt.Sprintf("internal error: %s has already been loaded", pkg.Package)) - } - - if pkg.initial { - // Try to load cached package - cpkg, ok := r.loadCachedPackage(pkg, analyzers) - if ok { - pkg.problems = cpkg.Problems - pkg.ignores = cpkg.Ignores - pkg.cfg = cpkg.Config - } else { - pkg.fromSource = true - return loader.LoadFromSource(pkg.Package) - } - } - - // At this point we're either working with a non-initial package, - // or we managed to load cached problems for the package. We still - // need export data and facts. - - // OPT(dh): we don't need type information for this package if no - // other package depends on it. this may be the case for initial - // packages. - - // Load package from export data - if err := loader.LoadFromExport(pkg.Package); err != nil { - // We asked Go to give us up to date export data, yet - // we can't load it. There must be something wrong. - // - // Attempt loading from source. This should fail (because - // otherwise there would be export data); we just want to - // get the compile errors. If loading from source succeeds - // we discard the result, anyway. Otherwise we'll fail - // when trying to reload from export data later. - // - // FIXME(dh): we no longer reload from export data, so - // theoretically we should be able to continue - pkg.fromSource = true - if err := loader.LoadFromSource(pkg.Package); err != nil { - return err - } - // Make sure this package can't be imported successfully - pkg.Package.Errors = append(pkg.Package.Errors, packages.Error{ - Pos: "-", - Msg: fmt.Sprintf("could not load export data: %s", err), - Kind: packages.ParseError, - }) - return fmt.Errorf("could not load export data: %s", err) - } - - failed := false - seen := make([]bool, len(r.analyzerIDs.m)) - var dfs func(*analysis.Analyzer) - dfs = func(a *analysis.Analyzer) { - if seen[r.analyzerIDs.get(a)] { - return - } - seen[r.analyzerIDs.get(a)] = true - - if len(a.FactTypes) > 0 { - facts, ok := r.loadCachedFacts(a, pkg) - if !ok { - failed = true - return - } - - for _, f := range facts { - if f.Path == "" { - // This is a package fact - pkg.pkgFacts[r.analyzerIDs.get(a)] = append(pkg.pkgFacts[r.analyzerIDs.get(a)], f.Fact) - continue - } - obj, err := objectpath.Object(pkg.Types, objectpath.Path(f.Path)) - if err != nil { - // Be lenient about these errors. For example, when - // analysing io/ioutil from source, we may get a fact - // for methods on the devNull type, and objectpath - // will happily create a path for them. However, when - // we later load io/ioutil from export data, the path - // no longer resolves. - // - // If an exported type embeds the unexported type, - // then (part of) the unexported type will become part - // of the type information and our path will resolve - // again. - continue - } - pkg.facts[r.analyzerIDs.get(a)][obj] = append(pkg.facts[r.analyzerIDs.get(a)][obj], f.Fact) - } - } - - for _, req := range a.Requires { - dfs(req) - } - } - for _, a := range analyzers { - dfs(a) - } - - if !failed { - return nil - } - - // We failed to load some cached facts - pkg.fromSource = true - // XXX we added facts to the maps, we need to get rid of those - return loader.LoadFromSource(pkg.Package) -} - -type analysisError struct { - analyzer *analysis.Analyzer - pkg *Package - err error -} - -func (err analysisError) Error() string { - return fmt.Sprintf("error running analyzer %s on %s: %s", err.analyzer, err.pkg, err.err) -} - -// processPkg processes a package. This involves loading the package, -// either from export data or from source. For packages loaded from -// source, the provides analyzers will be run on the package. -func (r *Runner) processPkg(pkg *Package, analyzers []*analysis.Analyzer) { - defer func() { - // Clear information we no longer need. Make sure to do this - // when returning from processPkg so that we clear - // dependencies, not just initial packages. - pkg.TypesInfo = nil - pkg.Syntax = nil - pkg.results = nil - - atomic.AddUint32(&r.stats.ProcessedPackages, 1) - pkg.decUse() - close(pkg.done) - }() - - // Ensure all packages have the generated map and config. This is - // required by internals of the runner. Analyses that themselves - // make use of either have an explicit dependency so that other - // runners work correctly, too. - analyzers = append(analyzers[0:len(analyzers):len(analyzers)], injectedAnalyses...) - - if len(pkg.errs) != 0 { - return - } - - for _, imp := range pkg.Imports { - <-imp.done - if len(imp.errs) > 0 { - if imp.initial { - // Don't print the error of the dependency since it's - // an initial package and we're already printing the - // error. - pkg.errs = append(pkg.errs, fmt.Errorf("could not analyze dependency %s of %s", imp, pkg)) - } else { - var s string - for _, err := range imp.errs { - s += "\n\t" + err.Error() - } - pkg.errs = append(pkg.errs, fmt.Errorf("could not analyze dependency %s of %s: %s", imp, pkg, s)) - } - return - } - } - if pkg.PkgPath == "unsafe" { - pkg.Types = types.Unsafe - return - } - - r.loadSem <- struct{}{} - atomic.AddUint32(&r.stats.ActiveWorkers, 1) - defer func() { - <-r.loadSem - atomic.AddUint32(&r.stats.ActiveWorkers, ^uint32(0)) - }() - if err := r.loadPkg(pkg, analyzers); err != nil { - pkg.errs = append(pkg.errs, err) - return - } - - // A package's object facts is the union of all of its dependencies. - for _, imp := range pkg.Imports { - for ai, m := range imp.facts { - for obj, facts := range m { - pkg.facts[ai][obj] = facts[0:len(facts):len(facts)] - } - } - } - - if !pkg.fromSource { - // Nothing left to do for the package. - return - } - - // Run analyses on initial packages and those missing facts - var wg sync.WaitGroup - wg.Add(len(analyzers)) - errs := make([]error, len(analyzers)) - var acs []*analysisAction - for i, a := range analyzers { - i := i - a := a - ac := r.makeAnalysisAction(a, pkg) - acs = append(acs, ac) - go func() { - defer wg.Done() - // Only initial packages and packages with missing - // facts will have been loaded from source. - if pkg.initial || len(a.FactTypes) > 0 { - if _, err := r.runAnalysis(ac); err != nil { - errs[i] = analysisError{a, pkg, err} - return - } - } - }() - } - wg.Wait() - - depErrors := map[dependencyError]int{} - for _, err := range errs { - if err == nil { - continue - } - switch err := err.(type) { - case analysisError: - switch err := err.err.(type) { - case dependencyError: - depErrors[err.nested()]++ - default: - pkg.errs = append(pkg.errs, err) - } - default: - pkg.errs = append(pkg.errs, err) - } - } - for err, count := range depErrors { - pkg.errs = append(pkg.errs, - fmt.Errorf("could not run %s@%s, preventing %d analyzers from running: %s", err.dep, pkg, count, err.err)) - } - - // We can't process ignores at this point because `unused` needs - // to see more than one package to make its decision. - // - // OPT(dh): can't we guard this block of code by pkg.initial? - ignores, problems := parseDirectives(pkg.Package) - pkg.ignores = append(pkg.ignores, ignores...) - pkg.problems = append(pkg.problems, problems...) - for _, ac := range acs { - pkg.problems = append(pkg.problems, ac.problems...) - } - - if pkg.initial { - // Only initial packages have these analyzers run, and only - // initial packages need these. - if pkg.results[r.analyzerIDs.get(config.Analyzer)].v != nil { - pkg.cfg = pkg.results[r.analyzerIDs.get(config.Analyzer)].v.(*config.Config) - } - pkg.gen = pkg.results[r.analyzerIDs.get(facts.Generated)].v.(map[string]facts.Generator) - } - - // In a previous version of the code, we would throw away all type - // information and reload it from export data. That was - // nonsensical. The *types.Package doesn't keep any information - // live that export data wouldn't also. We only need to discard - // the AST and the TypesInfo maps; that happens after we return - // from processPkg. -} - -func parseDirective(s string) (cmd string, args []string) { - if !strings.HasPrefix(s, "//lint:") { - return "", nil - } - s = strings.TrimPrefix(s, "//lint:") - fields := strings.Split(s, " ") - return fields[0], fields[1:] -} - -// parseDirectives extracts all linter directives from the source -// files of the package. Malformed directives are returned as problems. -func parseDirectives(pkg *packages.Package) ([]Ignore, []Problem) { - var ignores []Ignore - var problems []Problem - - for _, f := range pkg.Syntax { - found := false - commentLoop: - for _, cg := range f.Comments { - for _, c := range cg.List { - if strings.Contains(c.Text, "//lint:") { - found = true - break commentLoop - } - } - } - if !found { - continue - } - cm := ast.NewCommentMap(pkg.Fset, f, f.Comments) - for node, cgs := range cm { - for _, cg := range cgs { - for _, c := range cg.List { - if !strings.HasPrefix(c.Text, "//lint:") { - continue - } - cmd, args := parseDirective(c.Text) - switch cmd { - case "ignore", "file-ignore": - if len(args) < 2 { - p := Problem{ - Pos: DisplayPosition(pkg.Fset, c.Pos()), - Message: "malformed linter directive; missing the required reason field?", - Severity: Error, - Check: "compile", - } - problems = append(problems, p) - continue - } - default: - // unknown directive, ignore - continue - } - checks := strings.Split(args[0], ",") - pos := DisplayPosition(pkg.Fset, node.Pos()) - var ig Ignore - switch cmd { - case "ignore": - ig = &LineIgnore{ - File: pos.Filename, - Line: pos.Line, - Checks: checks, - Pos: DisplayPosition(pkg.Fset, c.Pos()), - } - case "file-ignore": - ig = &FileIgnore{ - File: pos.Filename, - Checks: checks, - } - } - ignores = append(ignores, ig) - } - } - } - } - - return ignores, problems -} - -// packageHash computes a package's hash. The hash is based on all Go -// files that make up the package, as well as the hashes of imported -// packages. -func (r *Runner) packageHash(pkg *Package) (string, error) { - key := cache.NewHash("package hash") - fmt.Fprintf(key, "pkgpath %s\n", pkg.PkgPath) - fmt.Fprintf(key, "go %d\n", r.goVersion) - for _, f := range pkg.CompiledGoFiles { - h, err := cache.FileHash(f) - if err != nil { - return "", err - } - fmt.Fprintf(key, "file %s %x\n", f, h) - } - - // Actually load the configuration to calculate its hash. This - // will take into consideration inheritance of configuration - // files, as well as the default configuration. - // - // OPT(dh): doing this means we'll load the config twice: once for - // computing the hash, and once when analyzing the package from - // source. - cdir := config.Dir(pkg.GoFiles) - if cdir == "" { - fmt.Fprintf(key, "file %s %x\n", config.ConfigName, [cache.HashSize]byte{}) - } else { - cfg, err := config.Load(cdir) - if err != nil { - return "", err - } - h := cache.NewHash(config.ConfigName) - if _, err := h.Write([]byte(cfg.String())); err != nil { - return "", err - } - fmt.Fprintf(key, "file %s %x\n", config.ConfigName, h.Sum()) - } - - imps := make([]*Package, len(pkg.Imports)) - copy(imps, pkg.Imports) - sort.Slice(imps, func(i, j int) bool { - return imps[i].PkgPath < imps[j].PkgPath - }) - for _, dep := range imps { - if dep.PkgPath == "unsafe" { - continue - } - - fmt.Fprintf(key, "import %s %s\n", dep.PkgPath, dep.hash) - } - h := key.Sum() - return hex.EncodeToString(h[:]), nil -} - -func packageActionID(pkg *Package) cache.ActionID { - key := cache.NewHash("package ID") - fmt.Fprintf(key, "pkgpath %s\n", pkg.PkgPath) - fmt.Fprintf(key, "pkghash %s\n", pkg.hash) - return key.Sum() -} - -// passActionID computes an ActionID for an analysis pass. -func passActionID(pkg *Package, analyzer *analysis.Analyzer) cache.ActionID { - return cache.Subkey(pkg.actionID, fmt.Sprintf("analyzer %s", analyzer.Name)) -} diff --git a/vendor/honnef.co/go/tools/lint/stats.go b/vendor/honnef.co/go/tools/lint/stats.go deleted file mode 100644 index 85eb978448..0000000000 --- a/vendor/honnef.co/go/tools/lint/stats.go +++ /dev/null @@ -1,38 +0,0 @@ -package lint - -import ( - "time" - - "golang.org/x/tools/go/analysis" -) - -const ( - StateInitializing = 0 - StateGraph = 1 - StateProcessing = 2 - StateCumulative = 3 -) - -type Stats struct { - State uint32 - - InitialPackages uint32 - TotalPackages uint32 - ProcessedPackages uint32 - ProcessedInitialPackages uint32 - Problems uint32 - ActiveWorkers uint32 - TotalWorkers uint32 - PrintAnalyzerMeasurement func(*analysis.Analyzer, *Package, time.Duration) -} - -type AnalysisMeasurementKey struct { - Analysis string - Pkg string -} - -func (s *Stats) MeasureAnalyzer(analysis *analysis.Analyzer, pkg *Package, d time.Duration) { - if s.PrintAnalyzerMeasurement != nil { - s.PrintAnalyzerMeasurement(analysis, pkg, d) - } -} diff --git a/vendor/honnef.co/go/tools/loader/BUILD.bazel b/vendor/honnef.co/go/tools/loader/BUILD.bazel deleted file mode 100644 index 93f8920abc..0000000000 --- a/vendor/honnef.co/go/tools/loader/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["loader.go"], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/loader", - importpath = "honnef.co/go/tools/loader", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/go/gcexportdata:go_default_library", - "//vendor/golang.org/x/tools/go/packages:go_default_library", - ], -) diff --git a/vendor/honnef.co/go/tools/loader/loader.go b/vendor/honnef.co/go/tools/loader/loader.go deleted file mode 100644 index a14f274d29..0000000000 --- a/vendor/honnef.co/go/tools/loader/loader.go +++ /dev/null @@ -1,210 +0,0 @@ -package loader - -import ( - "errors" - "fmt" - "go/ast" - "go/parser" - "go/scanner" - "go/token" - "go/types" - "log" - "os" - - "golang.org/x/tools/go/gcexportdata" - "golang.org/x/tools/go/packages" -) - -// Graph resolves patterns and returns packages with all the -// information required to later load type information, and optionally -// syntax trees. -// -// The provided config can set any setting with the exception of Mode. -func Graph(cfg packages.Config, patterns ...string) ([]*packages.Package, error) { - cfg.Mode = packages.NeedName | packages.NeedImports | packages.NeedDeps | packages.NeedExportsFile | packages.NeedFiles | packages.NeedCompiledGoFiles | packages.NeedTypesSizes - pkgs, err := packages.Load(&cfg, patterns...) - if err != nil { - return nil, err - } - fset := token.NewFileSet() - packages.Visit(pkgs, nil, func(pkg *packages.Package) { - pkg.Fset = fset - }) - - n := 0 - for _, pkg := range pkgs { - if len(pkg.CompiledGoFiles) == 0 && len(pkg.Errors) == 0 && pkg.PkgPath != "unsafe" { - // If a package consists only of test files, then - // go/packages incorrectly(?) returns an empty package for - // the non-test variant. Get rid of those packages. See - // #646. - // - // Do not, however, skip packages that have errors. Those, - // too, may have no files, but we want to print the - // errors. - continue - } - pkgs[n] = pkg - n++ - } - return pkgs[:n], nil -} - -// LoadFromExport loads a package from export data. All of its -// dependencies must have been loaded already. -func LoadFromExport(pkg *packages.Package) error { - pkg.IllTyped = true - for path, pkg := range pkg.Imports { - if pkg.Types == nil { - return fmt.Errorf("dependency %q hasn't been loaded yet", path) - } - } - if pkg.ExportFile == "" { - return fmt.Errorf("no export data for %q", pkg.ID) - } - f, err := os.Open(pkg.ExportFile) - if err != nil { - return err - } - defer f.Close() - - r, err := gcexportdata.NewReader(f) - if err != nil { - return err - } - - view := make(map[string]*types.Package) // view seen by gcexportdata - seen := make(map[*packages.Package]bool) // all visited packages - var visit func(pkgs map[string]*packages.Package) - visit = func(pkgs map[string]*packages.Package) { - for _, pkg := range pkgs { - if !seen[pkg] { - seen[pkg] = true - view[pkg.PkgPath] = pkg.Types - visit(pkg.Imports) - } - } - } - visit(pkg.Imports) - tpkg, err := gcexportdata.Read(r, pkg.Fset, view, pkg.PkgPath) - if err != nil { - return err - } - pkg.Types = tpkg - pkg.IllTyped = false - return nil -} - -// LoadFromSource loads a package from source. All of its dependencies -// must have been loaded already. -func LoadFromSource(pkg *packages.Package) error { - pkg.IllTyped = true - pkg.Types = types.NewPackage(pkg.PkgPath, pkg.Name) - - // OPT(dh): many packages have few files, much fewer than there - // are CPU cores. Additionally, parsing each individual file is - // very fast. A naive parallel implementation of this loop won't - // be faster, and tends to be slower due to extra scheduling, - // bookkeeping and potentially false sharing of cache lines. - pkg.Syntax = make([]*ast.File, len(pkg.CompiledGoFiles)) - for i, file := range pkg.CompiledGoFiles { - f, err := parser.ParseFile(pkg.Fset, file, nil, parser.ParseComments) - if err != nil { - pkg.Errors = append(pkg.Errors, convertError(err)...) - return err - } - pkg.Syntax[i] = f - } - pkg.TypesInfo = &types.Info{ - Types: make(map[ast.Expr]types.TypeAndValue), - Defs: make(map[*ast.Ident]types.Object), - Uses: make(map[*ast.Ident]types.Object), - Implicits: make(map[ast.Node]types.Object), - Scopes: make(map[ast.Node]*types.Scope), - Selections: make(map[*ast.SelectorExpr]*types.Selection), - } - - importer := func(path string) (*types.Package, error) { - if path == "unsafe" { - return types.Unsafe, nil - } - if path == "C" { - // go/packages doesn't tell us that cgo preprocessing - // failed. When we subsequently try to parse the package, - // we'll encounter the raw C import. - return nil, errors.New("cgo preprocessing failed") - } - imp := pkg.Imports[path] - if imp == nil { - return nil, nil - } - if len(imp.Errors) > 0 { - return nil, imp.Errors[0] - } - return imp.Types, nil - } - tc := &types.Config{ - Importer: importerFunc(importer), - Error: func(err error) { - pkg.Errors = append(pkg.Errors, convertError(err)...) - }, - } - err := types.NewChecker(tc, pkg.Fset, pkg.Types, pkg.TypesInfo).Files(pkg.Syntax) - if err != nil { - return err - } - pkg.IllTyped = false - return nil -} - -func convertError(err error) []packages.Error { - var errs []packages.Error - // taken from go/packages - switch err := err.(type) { - case packages.Error: - // from driver - errs = append(errs, err) - - case *os.PathError: - // from parser - errs = append(errs, packages.Error{ - Pos: err.Path + ":1", - Msg: err.Err.Error(), - Kind: packages.ParseError, - }) - - case scanner.ErrorList: - // from parser - for _, err := range err { - errs = append(errs, packages.Error{ - Pos: err.Pos.String(), - Msg: err.Msg, - Kind: packages.ParseError, - }) - } - - case types.Error: - // from type checker - errs = append(errs, packages.Error{ - Pos: err.Fset.Position(err.Pos).String(), - Msg: err.Msg, - Kind: packages.TypeError, - }) - - default: - // unexpected impoverished error from parser? - errs = append(errs, packages.Error{ - Pos: "-", - Msg: err.Error(), - Kind: packages.UnknownError, - }) - - // If you see this error message, please file a bug. - log.Printf("internal error: error %q (%T) without position", err, err) - } - return errs -} - -type importerFunc func(path string) (*types.Package, error) - -func (f importerFunc) Import(path string) (*types.Package, error) { return f(path) } diff --git a/vendor/honnef.co/go/tools/pattern/BUILD.bazel b/vendor/honnef.co/go/tools/pattern/BUILD.bazel deleted file mode 100644 index 19fdba207b..0000000000 --- a/vendor/honnef.co/go/tools/pattern/BUILD.bazel +++ /dev/null @@ -1,17 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "convert.go", - "doc.go", - "lexer.go", - "match.go", - "parser.go", - "pattern.go", - ], - importmap = "k8s.io/kops/vendor/honnef.co/go/tools/pattern", - importpath = "honnef.co/go/tools/pattern", - visibility = ["//visibility:public"], - deps = ["//vendor/honnef.co/go/tools/lint:go_default_library"], -) diff --git a/vendor/honnef.co/go/tools/pattern/convert.go b/vendor/honnef.co/go/tools/pattern/convert.go deleted file mode 100644 index dfcd1560d7..0000000000 --- a/vendor/honnef.co/go/tools/pattern/convert.go +++ /dev/null @@ -1,242 +0,0 @@ -package pattern - -import ( - "fmt" - "go/ast" - "go/token" - "go/types" - "reflect" -) - -var astTypes = map[string]reflect.Type{ - "Ellipsis": reflect.TypeOf(ast.Ellipsis{}), - "RangeStmt": reflect.TypeOf(ast.RangeStmt{}), - "AssignStmt": reflect.TypeOf(ast.AssignStmt{}), - "IndexExpr": reflect.TypeOf(ast.IndexExpr{}), - "Ident": reflect.TypeOf(ast.Ident{}), - "ValueSpec": reflect.TypeOf(ast.ValueSpec{}), - "GenDecl": reflect.TypeOf(ast.GenDecl{}), - "BinaryExpr": reflect.TypeOf(ast.BinaryExpr{}), - "ForStmt": reflect.TypeOf(ast.ForStmt{}), - "ArrayType": reflect.TypeOf(ast.ArrayType{}), - "DeferStmt": reflect.TypeOf(ast.DeferStmt{}), - "MapType": reflect.TypeOf(ast.MapType{}), - "ReturnStmt": reflect.TypeOf(ast.ReturnStmt{}), - "SliceExpr": reflect.TypeOf(ast.SliceExpr{}), - "StarExpr": reflect.TypeOf(ast.StarExpr{}), - "UnaryExpr": reflect.TypeOf(ast.UnaryExpr{}), - "SendStmt": reflect.TypeOf(ast.SendStmt{}), - "SelectStmt": reflect.TypeOf(ast.SelectStmt{}), - "ImportSpec": reflect.TypeOf(ast.ImportSpec{}), - "IfStmt": reflect.TypeOf(ast.IfStmt{}), - "GoStmt": reflect.TypeOf(ast.GoStmt{}), - "Field": reflect.TypeOf(ast.Field{}), - "SelectorExpr": reflect.TypeOf(ast.SelectorExpr{}), - "StructType": reflect.TypeOf(ast.StructType{}), - "KeyValueExpr": reflect.TypeOf(ast.KeyValueExpr{}), - "FuncType": reflect.TypeOf(ast.FuncType{}), - "FuncLit": reflect.TypeOf(ast.FuncLit{}), - "FuncDecl": reflect.TypeOf(ast.FuncDecl{}), - "ChanType": reflect.TypeOf(ast.ChanType{}), - "CallExpr": reflect.TypeOf(ast.CallExpr{}), - "CaseClause": reflect.TypeOf(ast.CaseClause{}), - "CommClause": reflect.TypeOf(ast.CommClause{}), - "CompositeLit": reflect.TypeOf(ast.CompositeLit{}), - "EmptyStmt": reflect.TypeOf(ast.EmptyStmt{}), - "SwitchStmt": reflect.TypeOf(ast.SwitchStmt{}), - "TypeSwitchStmt": reflect.TypeOf(ast.TypeSwitchStmt{}), - "TypeAssertExpr": reflect.TypeOf(ast.TypeAssertExpr{}), - "TypeSpec": reflect.TypeOf(ast.TypeSpec{}), - "InterfaceType": reflect.TypeOf(ast.InterfaceType{}), - "BranchStmt": reflect.TypeOf(ast.BranchStmt{}), - "IncDecStmt": reflect.TypeOf(ast.IncDecStmt{}), - "BasicLit": reflect.TypeOf(ast.BasicLit{}), -} - -func ASTToNode(node interface{}) Node { - switch node := node.(type) { - case *ast.File: - panic("cannot convert *ast.File to Node") - case nil: - return Nil{} - case string: - return String(node) - case token.Token: - return Token(node) - case *ast.ExprStmt: - return ASTToNode(node.X) - case *ast.BlockStmt: - if node == nil { - return Nil{} - } - return ASTToNode(node.List) - case *ast.FieldList: - if node == nil { - return Nil{} - } - return ASTToNode(node.List) - case *ast.BasicLit: - if node == nil { - return Nil{} - } - case *ast.ParenExpr: - return ASTToNode(node.X) - } - - if node, ok := node.(ast.Node); ok { - name := reflect.TypeOf(node).Elem().Name() - T, ok := structNodes[name] - if !ok { - panic(fmt.Sprintf("internal error: unhandled type %T", node)) - } - - if reflect.ValueOf(node).IsNil() { - return Nil{} - } - v := reflect.ValueOf(node).Elem() - objs := make([]Node, T.NumField()) - for i := 0; i < T.NumField(); i++ { - f := v.FieldByName(T.Field(i).Name) - objs[i] = ASTToNode(f.Interface()) - } - - n, err := populateNode(name, objs, false) - if err != nil { - panic(fmt.Sprintf("internal error: %s", err)) - } - return n - } - - s := reflect.ValueOf(node) - if s.Kind() == reflect.Slice { - if s.Len() == 0 { - return List{} - } - if s.Len() == 1 { - return ASTToNode(s.Index(0).Interface()) - } - - tail := List{} - for i := s.Len() - 1; i >= 0; i-- { - head := ASTToNode(s.Index(i).Interface()) - l := List{ - Head: head, - Tail: tail, - } - tail = l - } - return tail - } - - panic(fmt.Sprintf("internal error: unhandled type %T", node)) -} - -func NodeToAST(node Node, state State) interface{} { - switch node := node.(type) { - case Binding: - v, ok := state[node.Name] - if !ok { - // really we want to return an error here - panic("XXX") - } - switch v := v.(type) { - case types.Object: - return &ast.Ident{Name: v.Name()} - default: - return v - } - case Builtin, Any, Object, Function, Not, Or: - panic("XXX") - case List: - if (node == List{}) { - return []ast.Node{} - } - x := []ast.Node{NodeToAST(node.Head, state).(ast.Node)} - x = append(x, NodeToAST(node.Tail, state).([]ast.Node)...) - return x - case Token: - return token.Token(node) - case String: - return string(node) - case Nil: - return nil - } - - name := reflect.TypeOf(node).Name() - T, ok := astTypes[name] - if !ok { - panic(fmt.Sprintf("internal error: unhandled type %T", node)) - } - v := reflect.ValueOf(node) - out := reflect.New(T) - for i := 0; i < T.NumField(); i++ { - fNode := v.FieldByName(T.Field(i).Name) - if (fNode == reflect.Value{}) { - continue - } - fAST := out.Elem().FieldByName(T.Field(i).Name) - switch fAST.Type().Kind() { - case reflect.Slice: - c := reflect.ValueOf(NodeToAST(fNode.Interface().(Node), state)) - if c.Kind() != reflect.Slice { - // it's a single node in the pattern, we have to wrap - // it in a slice - slice := reflect.MakeSlice(fAST.Type(), 1, 1) - slice.Index(0).Set(c) - c = slice - } - switch fAST.Interface().(type) { - case []ast.Node: - switch cc := c.Interface().(type) { - case []ast.Node: - fAST.Set(c) - case []ast.Expr: - var slice []ast.Node - for _, el := range cc { - slice = append(slice, el) - } - fAST.Set(reflect.ValueOf(slice)) - default: - panic("XXX") - } - case []ast.Expr: - switch cc := c.Interface().(type) { - case []ast.Node: - var slice []ast.Expr - for _, el := range cc { - slice = append(slice, el.(ast.Expr)) - } - fAST.Set(reflect.ValueOf(slice)) - case []ast.Expr: - fAST.Set(c) - default: - panic("XXX") - } - default: - panic("XXX") - } - case reflect.Int: - c := reflect.ValueOf(NodeToAST(fNode.Interface().(Node), state)) - switch c.Kind() { - case reflect.String: - tok, ok := tokensByString[c.Interface().(string)] - if !ok { - // really we want to return an error here - panic("XXX") - } - fAST.SetInt(int64(tok)) - case reflect.Int: - fAST.Set(c) - default: - panic(fmt.Sprintf("internal error: unexpected kind %s", c.Kind())) - } - default: - r := NodeToAST(fNode.Interface().(Node), state) - if r != nil { - fAST.Set(reflect.ValueOf(r)) - } - } - } - - return out.Interface().(ast.Node) -} diff --git a/vendor/honnef.co/go/tools/pattern/doc.go b/vendor/honnef.co/go/tools/pattern/doc.go deleted file mode 100644 index 05d86c2514..0000000000 --- a/vendor/honnef.co/go/tools/pattern/doc.go +++ /dev/null @@ -1,273 +0,0 @@ -/* -Package pattern implements a simple language for pattern matching Go ASTs. - -Design decisions and trade-offs - -The language is designed specifically for the task of filtering ASTs -to simplify the implementation of analyses in staticcheck. -It is also intended to be trivial to parse and execute. - -To that end, we make certain decisions that make the language more -suited to its task, while making certain queries infeasible. - -Furthermore, it is fully expected that the majority of analyses will still require ordinary Go code -to further process the filtered AST, to make use of type information and to enforce complex invariants. -It is not our goal to design a scripting language for writing entire checks in. - -The language - -At its core, patterns are a representation of Go ASTs, allowing for the use of placeholders to enable pattern matching. -Their syntax is inspired by LISP and Haskell, but unlike LISP, the core unit of patterns isn't the list, but the node. -There is a fixed set of nodes, identified by name, and with the exception of the Or node, all nodes have a fixed number of arguments. -In addition to nodes, there are atoms, which represent basic units such as strings or the nil value. - -Pattern matching is implemented via bindings, represented by the Binding node. -A Binding can match nodes and associate them with names, to later recall the nodes. -This allows for expressing "this node must be equal to that node" constraints. - -To simplify writing and reading patterns, a small amount of additional syntax exists on top of nodes and atoms. -This additional syntax doesn't add any new features of its own, it simply provides shortcuts to creating nodes and atoms. - -To show an example of a pattern, first consider this snippet of Go code: - - if x := fn(); x != nil { - for _, v := range x { - println(v, x) - } - } - -The corresponding AST expressed as an idiomatic pattern would look as follows: - - (IfStmt - (AssignStmt (Ident "x") ":=" (CallExpr (Ident "fn") [])) - (BinaryExpr (Ident "x") "!=" (Ident "nil")) - (RangeStmt - (Ident "_") (Ident "v") ":=" (Ident "x") - (CallExpr (Ident "println") [(Ident "v") (Ident "x")])) - nil) - -Two things are worth noting about this representation. -First, the [el1 el2 ...] syntax is a short-hand for creating lists. -It is a short-hand for el1:el2:[], which itself is a short-hand for (List el1 (List el2 (List nil nil)). -Second, note the absence of a lot of lists in places that normally accept lists. -For example, assignment assigns a number of right-hands to a number of left-hands, yet our AssignStmt is lacking any form of list. -This is due to the fact that a single node can match a list of exactly one element. -Thus, the two following forms have identical matching behavior: - - (AssignStmt (Ident "x") ":=" (CallExpr (Ident "fn") [])) - (AssignStmt [(Ident "x")] ":=" [(CallExpr (Ident "fn") [])]) - -This section serves as an overview of the language's syntax. -More in-depth explanations of the matching behavior as well as an exhaustive list of node types follows in the coming sections. - -Pattern matching - -TODO write about pattern matching - -- inspired by haskell syntax, but much, much simpler and naive - -Node types - -The language contains two kinds of nodes: those that map to nodes in the AST, and those that implement additional logic. - -Nodes that map directly to AST nodes are named identically to the types in the go/ast package. -What follows is an exhaustive list of these nodes: - - (ArrayType len elt) - (AssignStmt lhs tok rhs) - (BasicLit kind value) - (BinaryExpr x op y) - (BranchStmt tok label) - (CallExpr fun args) - (CaseClause list body) - (ChanType dir value) - (CommClause comm body) - (CompositeLit type elts) - (DeferStmt call) - (Ellipsis elt) - (EmptyStmt) - (Field names type tag) - (ForStmt init cond post body) - (FuncDecl recv name type body) - (FuncLit type body) - (FuncType params results) - (GenDecl specs) - (GoStmt call) - (Ident name) - (IfStmt init cond body else) - (ImportSpec name path) - (IncDecStmt x tok) - (IndexExpr x index) - (InterfaceType methods) - (KeyValueExpr key value) - (MapType key value) - (RangeStmt key value tok x body) - (ReturnStmt results) - (SelectStmt body) - (SelectorExpr x sel) - (SendStmt chan value) - (SliceExpr x low high max) - (StarExpr x) - (StructType fields) - (SwitchStmt init tag body) - (TypeAssertExpr) - (TypeSpec name type) - (TypeSwitchStmt init assign body) - (UnaryExpr op x) - (ValueSpec names type values) - -Additionally, there are the String, Token and nil atoms. -Strings are double-quoted string literals, as in (Ident "someName"). -Tokens are also represented as double-quoted string literals, but are converted to token.Token values in contexts that require tokens, -such as in (BinaryExpr x "<" y), where "<" is transparently converted to token.LSS during matching. -The keyword 'nil' denotes the nil value, which represents the absence of any value. - -We also defines the (List head tail) node, which is used to represent sequences of elements as a singly linked list. -The head is a single element, and the tail is the remainder of the list. -For example, - - (List "foo" (List "bar" (List "baz" (List nil nil)))) - -represents a list of three elements, "foo", "bar" and "baz". There is dedicated syntax for writing lists, which looks as follows: - - ["foo" "bar" "baz"] - -This syntax is itself syntactic sugar for the following form: - - "foo":"bar":"baz":[] - -This form is of particular interest for pattern matching, as it allows matching on the head and tail. For example, - - "foo":"bar":_ - -would match any list with at least two elements, where the first two elements are "foo" and "bar". This is equivalent to writing - - (List "foo" (List "bar" _)) - -Note that it is not possible to match from the end of the list. -That is, there is no way to express a query such as "a list of any length where the last element is foo". - -Note that unlike in LISP, nil and empty lists are distinct from one another. -In patterns, with respect to lists, nil is akin to Go's untyped nil. -It will match a nil ast.Node, but it will not match a nil []ast.Expr. Nil will, however, match pointers to named types such as *ast.Ident. -Similarly, lists are akin to Go's -slices. An empty list will match both a nil and an empty []ast.Expr, but it will not match a nil ast.Node. - -Due to the difference between nil and empty lists, an empty list is represented as (List nil nil), i.e. a list with no head or tail. -Similarly, a list of one element is represented as (List el (List nil nil)). Unlike in LISP, it cannot be represented by (List el nil). - -Finally, there are nodes that implement special logic or matching behavior. - -(Any) matches any value. The underscore (_) maps to this node, making the following two forms equivalent: - - (Ident _) - (Ident (Any)) - -(Builtin name) matches a built-in identifier or function by name. -This is a type-aware variant of (Ident name). -Instead of only comparing the name, it resolves the object behind the name and makes sure it's a pre-declared identifier. - -For example, in the following piece of code - - func fn() { - println(true) - true := false - println(true) - } - -the pattern - - (Builtin "true") - -will match exactly once, on the first use of 'true' in the function. -Subsequent occurrences of 'true' no longer refer to the pre-declared identifier. - -(Object name) matches an identifier by name, but yields the -types.Object it refers to. - -(Function name) matches ast.Idents and ast.SelectorExprs that refer to a function with a given fully qualified name. -For example, "net/url.PathEscape" matches the PathEscape function in the net/url package, -and "(net/url.EscapeError).Error" refers to the Error method on the net/url.EscapeError type, -either on an instance of the type, or on the type itself. - -For example, the following patterns match the following lines of code: - - (CallExpr (Function "fmt.Println") _) // pattern 1 - (CallExpr (Function "(net/url.EscapeError).Error") _) // pattern 2 - - fmt.Println("hello, world") // matches pattern 1 - var x url.EscapeError - x.Error() // matches pattern 2 - (url.EscapeError).Error(x) // also matches pattern 2 - -(Binding name node) creates or uses a binding. -Bindings work like variable assignments, allowing referring to already matched nodes. -As an example, bindings are necessary to match self-assignment of the form "x = x", -since we need to express that the right-hand side is identical to the left-hand side. - -If a binding's node is not nil, the matcher will attempt to match a node according to the pattern. -If a binding's node is nil, the binding will either recall an existing value, or match the Any node. -It is an error to provide a non-nil node to a binding that has already been bound. - -Referring back to the earlier example, the following pattern will match self-assignment of idents: - - (AssignStmt (Binding "lhs" (Ident _)) "=" (Binding "lhs" nil)) - -Because bindings are a crucial component of pattern matching, there is special syntax for creating and recalling bindings. -Lower-case names refer to bindings. If standing on its own, the name "foo" will be equivalent to (Binding "foo" nil). -If a name is followed by an at-sign (@) then it will create a binding for the node that follows. -Together, this allows us to rewrite the earlier example as follows: - - (AssignStmt lhs@(Ident _) "=" lhs) - -(Or nodes...) is a variadic node that tries matching each node until one succeeds. For example, the following pattern matches all idents of name "foo" or "bar": - - (Ident (Or "foo" "bar")) - -We could also have written - - (Or (Ident "foo") (Ident "bar")) - -and achieved the same result. We can also mix different kinds of nodes: - - (Or (Ident "foo") (CallExpr (Ident "bar") _)) - -When using bindings inside of nodes used inside Or, all or none of the bindings will be bound. -That is, partially matched nodes that ultimately failed to match will not produce any bindings observable outside of the matching attempt. -We can thus write - - (Or (Ident name) (CallExpr name)) - -and 'name' will either be a String if the first option matched, or an Ident or SelectorExpr if the second option matched. - -(Not node) - -The Not node negates a match. For example, (Not (Ident _)) will match all nodes that aren't identifiers. - -ChanDir(0) - -Automatic unnesting of AST nodes - -The Go AST has several types of nodes that wrap other nodes. -To simplify matching, we automatically unwrap some of these nodes. - -These nodes are ExprStmt (for using expressions in a statement context), -ParenExpr (for parenthesized expressions), -DeclStmt (for declarations in a statement context), -and LabeledStmt (for labeled statements). - -Thus, the query - - (FuncLit _ [(CallExpr _ _)] - -will match a function literal containing a single function call, -even though in the actual Go AST, the CallExpr is nested inside an ExprStmt, -as function bodies are made up of sequences of statements. - -On the flip-side, there is no way to specifically match these wrapper nodes. -For example, there is no way of searching for unnecessary parentheses, like in the following piece of Go code: - - ((x)) += 2 - -*/ -package pattern diff --git a/vendor/honnef.co/go/tools/pattern/fuzz.go b/vendor/honnef.co/go/tools/pattern/fuzz.go deleted file mode 100644 index 52e7df9742..0000000000 --- a/vendor/honnef.co/go/tools/pattern/fuzz.go +++ /dev/null @@ -1,50 +0,0 @@ -// +build gofuzz - -package pattern - -import ( - "go/ast" - goparser "go/parser" - "go/token" - "os" - "path/filepath" - "strings" -) - -var files []*ast.File - -func init() { - fset := token.NewFileSet() - filepath.Walk("/usr/lib/go/src", func(path string, info os.FileInfo, err error) error { - if err != nil { - // XXX error handling - panic(err) - } - if !strings.HasSuffix(path, ".go") { - return nil - } - f, err := goparser.ParseFile(fset, path, nil, 0) - if err != nil { - return nil - } - files = append(files, f) - return nil - }) -} - -func Fuzz(data []byte) int { - p := &Parser{} - pat, err := p.Parse(string(data)) - if err != nil { - if strings.Contains(err.Error(), "internal error") { - panic(err) - } - return 0 - } - _ = pat.Root.String() - - for _, f := range files { - Match(pat.Root, f) - } - return 1 -} diff --git a/vendor/honnef.co/go/tools/pattern/lexer.go b/vendor/honnef.co/go/tools/pattern/lexer.go deleted file mode 100644 index fb72e392bd..0000000000 --- a/vendor/honnef.co/go/tools/pattern/lexer.go +++ /dev/null @@ -1,221 +0,0 @@ -package pattern - -import ( - "fmt" - "go/token" - "unicode" - "unicode/utf8" -) - -type lexer struct { - f *token.File - - input string - start int - pos int - width int - items chan item -} - -type itemType int - -const eof = -1 - -const ( - itemError itemType = iota - itemLeftParen - itemRightParen - itemLeftBracket - itemRightBracket - itemTypeName - itemVariable - itemAt - itemColon - itemBlank - itemString - itemEOF -) - -func (typ itemType) String() string { - switch typ { - case itemError: - return "ERROR" - case itemLeftParen: - return "(" - case itemRightParen: - return ")" - case itemLeftBracket: - return "[" - case itemRightBracket: - return "]" - case itemTypeName: - return "TYPE" - case itemVariable: - return "VAR" - case itemAt: - return "@" - case itemColon: - return ":" - case itemBlank: - return "_" - case itemString: - return "STRING" - case itemEOF: - return "EOF" - default: - return fmt.Sprintf("itemType(%d)", typ) - } -} - -type item struct { - typ itemType - val string - pos int -} - -type stateFn func(*lexer) stateFn - -func (l *lexer) run() { - for state := lexStart; state != nil; { - state = state(l) - } - close(l.items) -} - -func (l *lexer) emitValue(t itemType, value string) { - l.items <- item{t, value, l.start} - l.start = l.pos -} - -func (l *lexer) emit(t itemType) { - l.items <- item{t, l.input[l.start:l.pos], l.start} - l.start = l.pos -} - -func lexStart(l *lexer) stateFn { - switch r := l.next(); { - case r == eof: - l.emit(itemEOF) - return nil - case unicode.IsSpace(r): - l.ignore() - case r == '(': - l.emit(itemLeftParen) - case r == ')': - l.emit(itemRightParen) - case r == '[': - l.emit(itemLeftBracket) - case r == ']': - l.emit(itemRightBracket) - case r == '@': - l.emit(itemAt) - case r == ':': - l.emit(itemColon) - case r == '_': - l.emit(itemBlank) - case r == '"': - l.backup() - return lexString - case unicode.IsUpper(r): - l.backup() - return lexType - case unicode.IsLower(r): - l.backup() - return lexVariable - default: - return l.errorf("unexpected character %c", r) - } - return lexStart -} - -func (l *lexer) next() (r rune) { - if l.pos >= len(l.input) { - l.width = 0 - return eof - } - r, l.width = utf8.DecodeRuneInString(l.input[l.pos:]) - - if r == '\n' { - l.f.AddLine(l.pos) - } - - l.pos += l.width - - return r -} - -func (l *lexer) ignore() { - l.start = l.pos -} - -func (l *lexer) backup() { - l.pos -= l.width -} - -func (l *lexer) errorf(format string, args ...interface{}) stateFn { - // TODO(dh): emit position information in errors - l.items <- item{ - itemError, - fmt.Sprintf(format, args...), - l.start, - } - return nil -} - -func isAlphaNumeric(r rune) bool { - return r >= '0' && r <= '9' || - r >= 'a' && r <= 'z' || - r >= 'A' && r <= 'Z' -} - -func lexString(l *lexer) stateFn { - l.next() // skip quote - escape := false - - var runes []rune - for { - switch r := l.next(); r { - case eof: - return l.errorf("unterminated string") - case '"': - if !escape { - l.emitValue(itemString, string(runes)) - return lexStart - } else { - runes = append(runes, '"') - escape = false - } - case '\\': - if escape { - runes = append(runes, '\\') - escape = false - } else { - escape = true - } - default: - runes = append(runes, r) - } - } -} - -func lexType(l *lexer) stateFn { - l.next() - for { - if !isAlphaNumeric(l.next()) { - l.backup() - l.emit(itemTypeName) - return lexStart - } - } -} - -func lexVariable(l *lexer) stateFn { - l.next() - for { - if !isAlphaNumeric(l.next()) { - l.backup() - l.emit(itemVariable) - return lexStart - } - } -} diff --git a/vendor/honnef.co/go/tools/pattern/match.go b/vendor/honnef.co/go/tools/pattern/match.go deleted file mode 100644 index ff039baa75..0000000000 --- a/vendor/honnef.co/go/tools/pattern/match.go +++ /dev/null @@ -1,513 +0,0 @@ -package pattern - -import ( - "fmt" - "go/ast" - "go/token" - "go/types" - "reflect" - - "honnef.co/go/tools/lint" -) - -var tokensByString = map[string]Token{ - "INT": Token(token.INT), - "FLOAT": Token(token.FLOAT), - "IMAG": Token(token.IMAG), - "CHAR": Token(token.CHAR), - "STRING": Token(token.STRING), - "+": Token(token.ADD), - "-": Token(token.SUB), - "*": Token(token.MUL), - "/": Token(token.QUO), - "%": Token(token.REM), - "&": Token(token.AND), - "|": Token(token.OR), - "^": Token(token.XOR), - "<<": Token(token.SHL), - ">>": Token(token.SHR), - "&^": Token(token.AND_NOT), - "+=": Token(token.ADD_ASSIGN), - "-=": Token(token.SUB_ASSIGN), - "*=": Token(token.MUL_ASSIGN), - "/=": Token(token.QUO_ASSIGN), - "%=": Token(token.REM_ASSIGN), - "&=": Token(token.AND_ASSIGN), - "|=": Token(token.OR_ASSIGN), - "^=": Token(token.XOR_ASSIGN), - "<<=": Token(token.SHL_ASSIGN), - ">>=": Token(token.SHR_ASSIGN), - "&^=": Token(token.AND_NOT_ASSIGN), - "&&": Token(token.LAND), - "||": Token(token.LOR), - "<-": Token(token.ARROW), - "++": Token(token.INC), - "--": Token(token.DEC), - "==": Token(token.EQL), - "<": Token(token.LSS), - ">": Token(token.GTR), - "=": Token(token.ASSIGN), - "!": Token(token.NOT), - "!=": Token(token.NEQ), - "<=": Token(token.LEQ), - ">=": Token(token.GEQ), - ":=": Token(token.DEFINE), - "...": Token(token.ELLIPSIS), - "IMPORT": Token(token.IMPORT), - "VAR": Token(token.VAR), - "TYPE": Token(token.TYPE), - "CONST": Token(token.CONST), -} - -func maybeToken(node Node) (Node, bool) { - if node, ok := node.(String); ok { - if tok, ok := tokensByString[string(node)]; ok { - return tok, true - } - return node, false - } - return node, false -} - -func isNil(v interface{}) bool { - if v == nil { - return true - } - if _, ok := v.(Nil); ok { - return true - } - return false -} - -type matcher interface { - Match(*Matcher, interface{}) (interface{}, bool) -} - -type State = map[string]interface{} - -type Matcher struct { - TypesInfo *types.Info - State State -} - -func (m *Matcher) fork() *Matcher { - state := make(State, len(m.State)) - for k, v := range m.State { - state[k] = v - } - return &Matcher{ - TypesInfo: m.TypesInfo, - State: state, - } -} - -func (m *Matcher) merge(mc *Matcher) { - m.State = mc.State -} - -func (m *Matcher) Match(a Node, b ast.Node) bool { - m.State = State{} - _, ok := match(m, a, b) - return ok -} - -func Match(a Node, b ast.Node) (*Matcher, bool) { - m := &Matcher{} - ret := m.Match(a, b) - return m, ret -} - -// Match two items, which may be (Node, AST) or (AST, AST) -func match(m *Matcher, l, r interface{}) (interface{}, bool) { - if _, ok := r.(Node); ok { - panic("Node mustn't be on right side of match") - } - - switch l := l.(type) { - case *ast.ParenExpr: - return match(m, l.X, r) - case *ast.ExprStmt: - return match(m, l.X, r) - case *ast.DeclStmt: - return match(m, l.Decl, r) - case *ast.LabeledStmt: - return match(m, l.Stmt, r) - case *ast.BlockStmt: - return match(m, l.List, r) - case *ast.FieldList: - return match(m, l.List, r) - } - - switch r := r.(type) { - case *ast.ParenExpr: - return match(m, l, r.X) - case *ast.ExprStmt: - return match(m, l, r.X) - case *ast.DeclStmt: - return match(m, l, r.Decl) - case *ast.LabeledStmt: - return match(m, l, r.Stmt) - case *ast.BlockStmt: - if r == nil { - return match(m, l, nil) - } - return match(m, l, r.List) - case *ast.FieldList: - if r == nil { - return match(m, l, nil) - } - return match(m, l, r.List) - case *ast.BasicLit: - if r == nil { - return match(m, l, nil) - } - } - - if l, ok := l.(matcher); ok { - return l.Match(m, r) - } - - if l, ok := l.(Node); ok { - // Matching of pattern with concrete value - return matchNodeAST(m, l, r) - } - - if l == nil || r == nil { - return nil, l == r - } - - { - ln, ok1 := l.(ast.Node) - rn, ok2 := r.(ast.Node) - if ok1 && ok2 { - return matchAST(m, ln, rn) - } - } - - { - obj, ok := l.(types.Object) - if ok { - switch r := r.(type) { - case *ast.Ident: - return obj, obj == m.TypesInfo.ObjectOf(r) - case *ast.SelectorExpr: - return obj, obj == m.TypesInfo.ObjectOf(r.Sel) - default: - return obj, false - } - } - } - - { - ln, ok1 := l.([]ast.Expr) - rn, ok2 := r.([]ast.Expr) - if ok1 || ok2 { - if ok1 && !ok2 { - rn = []ast.Expr{r.(ast.Expr)} - } else if !ok1 && ok2 { - ln = []ast.Expr{l.(ast.Expr)} - } - - if len(ln) != len(rn) { - return nil, false - } - for i, ll := range ln { - if _, ok := match(m, ll, rn[i]); !ok { - return nil, false - } - } - return r, true - } - } - - { - ln, ok1 := l.([]ast.Stmt) - rn, ok2 := r.([]ast.Stmt) - if ok1 || ok2 { - if ok1 && !ok2 { - rn = []ast.Stmt{r.(ast.Stmt)} - } else if !ok1 && ok2 { - ln = []ast.Stmt{l.(ast.Stmt)} - } - - if len(ln) != len(rn) { - return nil, false - } - for i, ll := range ln { - if _, ok := match(m, ll, rn[i]); !ok { - return nil, false - } - } - return r, true - } - } - - panic(fmt.Sprintf("unsupported comparison: %T and %T", l, r)) -} - -// Match a Node with an AST node -func matchNodeAST(m *Matcher, a Node, b interface{}) (interface{}, bool) { - switch b := b.(type) { - case []ast.Stmt: - // 'a' is not a List or we'd be using its Match - // implementation. - - if len(b) != 1 { - return nil, false - } - return match(m, a, b[0]) - case []ast.Expr: - // 'a' is not a List or we'd be using its Match - // implementation. - - if len(b) != 1 { - return nil, false - } - return match(m, a, b[0]) - case ast.Node: - ra := reflect.ValueOf(a) - rb := reflect.ValueOf(b).Elem() - - if ra.Type().Name() != rb.Type().Name() { - return nil, false - } - - for i := 0; i < ra.NumField(); i++ { - af := ra.Field(i) - fieldName := ra.Type().Field(i).Name - bf := rb.FieldByName(fieldName) - if (bf == reflect.Value{}) { - panic(fmt.Sprintf("internal error: could not find field %s in type %t when comparing with %T", fieldName, b, a)) - } - ai := af.Interface() - bi := bf.Interface() - if ai == nil { - return b, bi == nil - } - if _, ok := match(m, ai.(Node), bi); !ok { - return b, false - } - } - return b, true - case nil: - return nil, a == Nil{} - default: - panic(fmt.Sprintf("unhandled type %T", b)) - } -} - -// Match two AST nodes -func matchAST(m *Matcher, a, b ast.Node) (interface{}, bool) { - ra := reflect.ValueOf(a) - rb := reflect.ValueOf(b) - - if ra.Type() != rb.Type() { - return nil, false - } - if ra.IsNil() || rb.IsNil() { - return rb, ra.IsNil() == rb.IsNil() - } - - ra = ra.Elem() - rb = rb.Elem() - for i := 0; i < ra.NumField(); i++ { - af := ra.Field(i) - bf := rb.Field(i) - if af.Type() == rtTokPos || af.Type() == rtObject || af.Type() == rtCommentGroup { - continue - } - - switch af.Kind() { - case reflect.Slice: - if af.Len() != bf.Len() { - return nil, false - } - for j := 0; j < af.Len(); j++ { - if _, ok := match(m, af.Index(j).Interface().(ast.Node), bf.Index(j).Interface().(ast.Node)); !ok { - return nil, false - } - } - case reflect.String: - if af.String() != bf.String() { - return nil, false - } - case reflect.Int: - if af.Int() != bf.Int() { - return nil, false - } - case reflect.Bool: - if af.Bool() != bf.Bool() { - return nil, false - } - case reflect.Ptr, reflect.Interface: - if _, ok := match(m, af.Interface(), bf.Interface()); !ok { - return nil, false - } - default: - panic(fmt.Sprintf("internal error: unhandled kind %s (%T)", af.Kind(), af.Interface())) - } - } - return b, true -} - -func (b Binding) Match(m *Matcher, node interface{}) (interface{}, bool) { - if isNil(b.Node) { - v, ok := m.State[b.Name] - if ok { - // Recall value - return match(m, v, node) - } - // Matching anything - b.Node = Any{} - } - - // Store value - if _, ok := m.State[b.Name]; ok { - panic(fmt.Sprintf("binding already created: %s", b.Name)) - } - new, ret := match(m, b.Node, node) - if ret { - m.State[b.Name] = new - } - return new, ret -} - -func (Any) Match(m *Matcher, node interface{}) (interface{}, bool) { - return node, true -} - -func (l List) Match(m *Matcher, node interface{}) (interface{}, bool) { - v := reflect.ValueOf(node) - if v.Kind() == reflect.Slice { - if isNil(l.Head) { - return node, v.Len() == 0 - } - if v.Len() == 0 { - return nil, false - } - // OPT(dh): don't check the entire tail if head didn't match - _, ok1 := match(m, l.Head, v.Index(0).Interface()) - _, ok2 := match(m, l.Tail, v.Slice(1, v.Len()).Interface()) - return node, ok1 && ok2 - } - // Our empty list does not equal an untyped Go nil. This way, we can - // tell apart an if with no else and an if with an empty else. - return nil, false -} - -func (s String) Match(m *Matcher, node interface{}) (interface{}, bool) { - switch o := node.(type) { - case token.Token: - if tok, ok := maybeToken(s); ok { - return match(m, tok, node) - } - return nil, false - case string: - return o, string(s) == o - default: - return nil, false - } -} - -func (tok Token) Match(m *Matcher, node interface{}) (interface{}, bool) { - o, ok := node.(token.Token) - if !ok { - return nil, false - } - return o, token.Token(tok) == o -} - -func (Nil) Match(m *Matcher, node interface{}) (interface{}, bool) { - return nil, isNil(node) -} - -func (builtin Builtin) Match(m *Matcher, node interface{}) (interface{}, bool) { - ident, ok := node.(*ast.Ident) - if !ok { - return nil, false - } - obj := m.TypesInfo.ObjectOf(ident) - if obj != types.Universe.Lookup(ident.Name) { - return nil, false - } - return match(m, builtin.Name, ident.Name) -} - -func (obj Object) Match(m *Matcher, node interface{}) (interface{}, bool) { - ident, ok := node.(*ast.Ident) - if !ok { - return nil, false - } - - id := m.TypesInfo.ObjectOf(ident) - _, ok = match(m, obj.Name, ident.Name) - return id, ok -} - -func (fn Function) Match(m *Matcher, node interface{}) (interface{}, bool) { - var name string - var obj types.Object - switch node := node.(type) { - case *ast.Ident: - obj = m.TypesInfo.ObjectOf(node) - switch obj := obj.(type) { - case *types.Func: - name = lint.FuncName(obj) - case *types.Builtin: - name = obj.Name() - default: - return nil, false - } - case *ast.SelectorExpr: - var ok bool - obj, ok = m.TypesInfo.ObjectOf(node.Sel).(*types.Func) - if !ok { - return nil, false - } - name = lint.FuncName(obj.(*types.Func)) - default: - return nil, false - } - _, ok := match(m, fn.Name, name) - return obj, ok -} - -func (or Or) Match(m *Matcher, node interface{}) (interface{}, bool) { - for _, opt := range or.Nodes { - mc := m.fork() - if ret, ok := match(mc, opt, node); ok { - m.merge(mc) - return ret, true - } - } - return nil, false -} - -func (not Not) Match(m *Matcher, node interface{}) (interface{}, bool) { - _, ok := match(m, not.Node, node) - if ok { - return nil, false - } - return node, true -} - -var ( - // Types of fields in go/ast structs that we want to skip - rtTokPos = reflect.TypeOf(token.Pos(0)) - rtObject = reflect.TypeOf((*ast.Object)(nil)) - rtCommentGroup = reflect.TypeOf((*ast.CommentGroup)(nil)) -) - -var ( - _ matcher = Binding{} - _ matcher = Any{} - _ matcher = List{} - _ matcher = String("") - _ matcher = Token(0) - _ matcher = Nil{} - _ matcher = Builtin{} - _ matcher = Object{} - _ matcher = Function{} - _ matcher = Or{} - _ matcher = Not{} -) diff --git a/vendor/honnef.co/go/tools/pattern/parser.go b/vendor/honnef.co/go/tools/pattern/parser.go deleted file mode 100644 index 009238b860..0000000000 --- a/vendor/honnef.co/go/tools/pattern/parser.go +++ /dev/null @@ -1,455 +0,0 @@ -package pattern - -import ( - "fmt" - "go/ast" - "go/token" - "reflect" -) - -type Pattern struct { - Root Node - // Relevant contains instances of ast.Node that could potentially - // initiate a successful match of the pattern. - Relevant []reflect.Type -} - -func MustParse(s string) Pattern { - p := &Parser{AllowTypeInfo: true} - pat, err := p.Parse(s) - if err != nil { - panic(err) - } - return pat -} - -func roots(node Node) []reflect.Type { - switch node := node.(type) { - case Or: - var out []reflect.Type - for _, el := range node.Nodes { - out = append(out, roots(el)...) - } - return out - case Not: - return roots(node.Node) - case Binding: - return roots(node.Node) - case Nil, nil: - // this branch is reached via bindings - return allTypes - default: - Ts, ok := nodeToASTTypes[reflect.TypeOf(node)] - if !ok { - panic(fmt.Sprintf("internal error: unhandled type %T", node)) - } - return Ts - } -} - -var allTypes = []reflect.Type{ - reflect.TypeOf((*ast.RangeStmt)(nil)), - reflect.TypeOf((*ast.AssignStmt)(nil)), - reflect.TypeOf((*ast.IndexExpr)(nil)), - reflect.TypeOf((*ast.Ident)(nil)), - reflect.TypeOf((*ast.ValueSpec)(nil)), - reflect.TypeOf((*ast.GenDecl)(nil)), - reflect.TypeOf((*ast.BinaryExpr)(nil)), - reflect.TypeOf((*ast.ForStmt)(nil)), - reflect.TypeOf((*ast.ArrayType)(nil)), - reflect.TypeOf((*ast.DeferStmt)(nil)), - reflect.TypeOf((*ast.MapType)(nil)), - reflect.TypeOf((*ast.ReturnStmt)(nil)), - reflect.TypeOf((*ast.SliceExpr)(nil)), - reflect.TypeOf((*ast.StarExpr)(nil)), - reflect.TypeOf((*ast.UnaryExpr)(nil)), - reflect.TypeOf((*ast.SendStmt)(nil)), - reflect.TypeOf((*ast.SelectStmt)(nil)), - reflect.TypeOf((*ast.ImportSpec)(nil)), - reflect.TypeOf((*ast.IfStmt)(nil)), - reflect.TypeOf((*ast.GoStmt)(nil)), - reflect.TypeOf((*ast.Field)(nil)), - reflect.TypeOf((*ast.SelectorExpr)(nil)), - reflect.TypeOf((*ast.StructType)(nil)), - reflect.TypeOf((*ast.KeyValueExpr)(nil)), - reflect.TypeOf((*ast.FuncType)(nil)), - reflect.TypeOf((*ast.FuncLit)(nil)), - reflect.TypeOf((*ast.FuncDecl)(nil)), - reflect.TypeOf((*ast.ChanType)(nil)), - reflect.TypeOf((*ast.CallExpr)(nil)), - reflect.TypeOf((*ast.CaseClause)(nil)), - reflect.TypeOf((*ast.CommClause)(nil)), - reflect.TypeOf((*ast.CompositeLit)(nil)), - reflect.TypeOf((*ast.EmptyStmt)(nil)), - reflect.TypeOf((*ast.SwitchStmt)(nil)), - reflect.TypeOf((*ast.TypeSwitchStmt)(nil)), - reflect.TypeOf((*ast.TypeAssertExpr)(nil)), - reflect.TypeOf((*ast.TypeSpec)(nil)), - reflect.TypeOf((*ast.InterfaceType)(nil)), - reflect.TypeOf((*ast.BranchStmt)(nil)), - reflect.TypeOf((*ast.IncDecStmt)(nil)), - reflect.TypeOf((*ast.BasicLit)(nil)), -} - -var nodeToASTTypes = map[reflect.Type][]reflect.Type{ - reflect.TypeOf(String("")): nil, - reflect.TypeOf(Token(0)): nil, - reflect.TypeOf(List{}): {reflect.TypeOf((*ast.BlockStmt)(nil)), reflect.TypeOf((*ast.FieldList)(nil))}, - reflect.TypeOf(Builtin{}): {reflect.TypeOf((*ast.Ident)(nil))}, - reflect.TypeOf(Object{}): {reflect.TypeOf((*ast.Ident)(nil))}, - reflect.TypeOf(Function{}): {reflect.TypeOf((*ast.Ident)(nil)), reflect.TypeOf((*ast.SelectorExpr)(nil))}, - reflect.TypeOf(Any{}): allTypes, - reflect.TypeOf(RangeStmt{}): {reflect.TypeOf((*ast.RangeStmt)(nil))}, - reflect.TypeOf(AssignStmt{}): {reflect.TypeOf((*ast.AssignStmt)(nil))}, - reflect.TypeOf(IndexExpr{}): {reflect.TypeOf((*ast.IndexExpr)(nil))}, - reflect.TypeOf(Ident{}): {reflect.TypeOf((*ast.Ident)(nil))}, - reflect.TypeOf(ValueSpec{}): {reflect.TypeOf((*ast.ValueSpec)(nil))}, - reflect.TypeOf(GenDecl{}): {reflect.TypeOf((*ast.GenDecl)(nil))}, - reflect.TypeOf(BinaryExpr{}): {reflect.TypeOf((*ast.BinaryExpr)(nil))}, - reflect.TypeOf(ForStmt{}): {reflect.TypeOf((*ast.ForStmt)(nil))}, - reflect.TypeOf(ArrayType{}): {reflect.TypeOf((*ast.ArrayType)(nil))}, - reflect.TypeOf(DeferStmt{}): {reflect.TypeOf((*ast.DeferStmt)(nil))}, - reflect.TypeOf(MapType{}): {reflect.TypeOf((*ast.MapType)(nil))}, - reflect.TypeOf(ReturnStmt{}): {reflect.TypeOf((*ast.ReturnStmt)(nil))}, - reflect.TypeOf(SliceExpr{}): {reflect.TypeOf((*ast.SliceExpr)(nil))}, - reflect.TypeOf(StarExpr{}): {reflect.TypeOf((*ast.StarExpr)(nil))}, - reflect.TypeOf(UnaryExpr{}): {reflect.TypeOf((*ast.UnaryExpr)(nil))}, - reflect.TypeOf(SendStmt{}): {reflect.TypeOf((*ast.SendStmt)(nil))}, - reflect.TypeOf(SelectStmt{}): {reflect.TypeOf((*ast.SelectStmt)(nil))}, - reflect.TypeOf(ImportSpec{}): {reflect.TypeOf((*ast.ImportSpec)(nil))}, - reflect.TypeOf(IfStmt{}): {reflect.TypeOf((*ast.IfStmt)(nil))}, - reflect.TypeOf(GoStmt{}): {reflect.TypeOf((*ast.GoStmt)(nil))}, - reflect.TypeOf(Field{}): {reflect.TypeOf((*ast.Field)(nil))}, - reflect.TypeOf(SelectorExpr{}): {reflect.TypeOf((*ast.SelectorExpr)(nil))}, - reflect.TypeOf(StructType{}): {reflect.TypeOf((*ast.StructType)(nil))}, - reflect.TypeOf(KeyValueExpr{}): {reflect.TypeOf((*ast.KeyValueExpr)(nil))}, - reflect.TypeOf(FuncType{}): {reflect.TypeOf((*ast.FuncType)(nil))}, - reflect.TypeOf(FuncLit{}): {reflect.TypeOf((*ast.FuncLit)(nil))}, - reflect.TypeOf(FuncDecl{}): {reflect.TypeOf((*ast.FuncDecl)(nil))}, - reflect.TypeOf(ChanType{}): {reflect.TypeOf((*ast.ChanType)(nil))}, - reflect.TypeOf(CallExpr{}): {reflect.TypeOf((*ast.CallExpr)(nil))}, - reflect.TypeOf(CaseClause{}): {reflect.TypeOf((*ast.CaseClause)(nil))}, - reflect.TypeOf(CommClause{}): {reflect.TypeOf((*ast.CommClause)(nil))}, - reflect.TypeOf(CompositeLit{}): {reflect.TypeOf((*ast.CompositeLit)(nil))}, - reflect.TypeOf(EmptyStmt{}): {reflect.TypeOf((*ast.EmptyStmt)(nil))}, - reflect.TypeOf(SwitchStmt{}): {reflect.TypeOf((*ast.SwitchStmt)(nil))}, - reflect.TypeOf(TypeSwitchStmt{}): {reflect.TypeOf((*ast.TypeSwitchStmt)(nil))}, - reflect.TypeOf(TypeAssertExpr{}): {reflect.TypeOf((*ast.TypeAssertExpr)(nil))}, - reflect.TypeOf(TypeSpec{}): {reflect.TypeOf((*ast.TypeSpec)(nil))}, - reflect.TypeOf(InterfaceType{}): {reflect.TypeOf((*ast.InterfaceType)(nil))}, - reflect.TypeOf(BranchStmt{}): {reflect.TypeOf((*ast.BranchStmt)(nil))}, - reflect.TypeOf(IncDecStmt{}): {reflect.TypeOf((*ast.IncDecStmt)(nil))}, - reflect.TypeOf(BasicLit{}): {reflect.TypeOf((*ast.BasicLit)(nil))}, -} - -var requiresTypeInfo = map[string]bool{ - "Function": true, - "Builtin": true, - "Object": true, -} - -type Parser struct { - // Allow nodes that rely on type information - AllowTypeInfo bool - - lex *lexer - cur item - last *item - items chan item -} - -func (p *Parser) Parse(s string) (Pattern, error) { - p.cur = item{} - p.last = nil - p.items = nil - - fset := token.NewFileSet() - p.lex = &lexer{ - f: fset.AddFile("