code: function Reporter(lines, ruleset, allow, ignore) {
      "use strict";
  
      /**
       * List of messages being reported.
       * @property messages
       * @type String[]
       */
      this.messages = [];
  
      /**
       * List of statistics being reported.
       * @property stats
       * @type String[]
       */
      this.stats = [];
  
      /**
       * Lines of code being reported on. Used to provide contextual information
       * for messages.
       * @property lines
       * @type String[]
       */
      this.lines = lines;
  
      /**
       * Information about the rules. Used to determine whether an issue is an
       * error or warning.
       * @property ruleset
       * @type Object
       */
      this.ruleset = ruleset;
  
      /**
       * Lines with specific rule messages to leave out of the report.
       * @property allow
       * @type Object
       */
      this.allow = allow;
      if (!this.allow) {
          this.allow = {};
      }
  
      /**
       * Linesets not to include in the report.
       * @property ignore
       * @type [][]
       */
      this.ignore = ignore;
      if (!this.ignore) {
          this.ignore = [];
      }
  }
docs: An instance of Report is used to report results of the
  verification back to the main API.
  @class Reporter
  @constructor
  @param {String[]} lines The text lines of the source.
  @param {Object} ruleset The set of rules to work with, including if
  they are errors or warnings.
  @param {Object} explicitly allowed lines
  @param {[][]} ingore list of line ranges to be ignored