code: function attacher(retext, options) {
      var settings = options || {};
      var ignore = settings.ignore || stopwords;
      var patterns = settings.list || thesaurus;
      var limit = settings.limit || 3;
      var list = keys(patterns);
      var phrases = difference(list, ignore);
  
      /**
       * Search `tree` for overuse.
       *
       * @param {Node} tree - NLCST node.
       * @param {VFile} file - Virtual file.
       */
      function transformer(tree, file) {
          var duplicates = getDuplicates(tree, phrases)
          var overuse = getOveruse(duplicates, limit)
  
          search(tree, overuse, function (match, position, parent, phrase) {
              var suggestions = patterns[phrase];
              var value = quotation(nlcstToString(match), '“', '”');
  
              var reason = 'Replace ' + value + ' with ' +
                  quotation(suggestions, '“', '”').join(', ');
  
              var message = file.warn(reason, {
                  'start': match[0].position.start,
                  'end': match[match.length - 1].position.end
              });
  
              message.ruleId = phrase;
              message.source = 'retext-overuse';
              message.actual = value.slice(1, -1);
              message.expected = suggestions;
          });
      }
      return transformer;
  }
docs: Attach.
  
  @param {Retext} retext - Instance.
  @param {Object?} [options] - Configuration.
  @param {Object.<Object>?} [options.list] - Phrases with suggestions
  @param {Object.<Array>?} [options.ignore] - Phrases in the list
  to ignore.
  @param {Object.<number>?} [options.limit] - Number of times phrase
  must have been used.
  @return {Function} - `transformer`.