text: 'use strict';
  
  Object.defineProperty(exports, "__esModule", {
    value: true
  });
  
  var _utilities = require('../utilities');
  
  var schema = [{
    enum: ['always', 'never'],
    type: 'string'
  }];
  
  var create = function create(context) {
    var never = (context.options[0] || 'never') === 'never';
  
    return {
      GenericTypeAnnotation(node) {
        var types = node.typeParameters;
  
        // Promise<foo>
        // ^^^^^^^^^^^^ GenericTypeAnnotation (with typeParameters)
        //         ^^^  GenericTypeAnnotation (without typeParameters)
        if (!types) {
          return;
        }
  
        var spaceBefore = types.start - node.id.end;
  
        if (never && spaceBefore) {
          context.report({
            data: { name: node.id.name },
            fix: _utilities.spacingFixers.stripSpacesAfter(node.id, spaceBefore),
            message: 'There must be no space before "{{name}}" generic type annotation bracket',
            node
          });
        }
  
        if (!never && !spaceBefore) {
          context.report({
            data: { name: node.id.name },
            fix: _utilities.spacingFixers.addSpaceAfter(node.id),
            message: 'There must be a space before "{{name}}" generic type annotation bracket',
            node
          });
        }
  
        if (!never && spaceBefore > 1) {
          context.report({
            data: { name: node.id.name },
            fix: _utilities.spacingFixers.stripSpacesAfter(node.id, spaceBefore - 1),
            message: 'There must be one space before "{{name}}" generic type annotation bracket',
            node
          });
        }
      }
    };
  };
  
  exports.default = {
    create,
    schema
  };
  module.exports = exports.default;