     for line in data
       match = XRegExp.exec(line, regex)
       if match
-        options.baseReduction = 1 if not options.baseReduction
+        options.baseReduction = 1 unless options.baseReduction
         lineStart = 0
         lineStart = match.line - options.baseReduction if match.line
         lineStart = match.lineStart - options.baseReduction if match.lineStart

  # We place priority on `lineStart` and `lineEnd` over `line.`
  # We place priority on `colStart` and `colEnd` over `col.`
  parse: (data, rawRegex, options = {baseReduction: 1}) ->
    toReturn = []
    if xcache.has(rawRegex)
      regex = xcache.get(rawRegex)


  exec: (command, args = [], options = {}) ->
    options.stream ?= 'stdout'
    throw new Error "Nothing to execute." unless arguments.length
    return new Promise (resolve, reject) ->
      spawnedProcess = child_process.spawn(command, args, options)
      data = []
      if options.stream is 'stdout'
        spawnedProcess.stdout.on 'data', (d) -> data.push(d.toString())
      else if options.stream is 'stderr'
        spawnedProcess.stderr.on 'data', (d) -> data.push(d.toString())
      if options.stdin
        spawnedProcess.stdin.write(options.stdin.toString())
        spawnedProcess.stdin.end() # We have to end it or the programs will keep waiting forever
      spawnedProcess.on 'error', (err) ->
        reject(err)
      spawnedProcess.on 'close', ->
        resolve(data.join(''))

  # This should only be used if the linter is only working with files in their
  #   base directory. Else wise they should use `Helpers#exec`.
  execFilePath: (command, args = [], filePath, options = {}) ->
    throw new Error "Nothing to execute." unless arguments.length
    throw new Error "No File Path to work with." unless filePath
    return new Promise (resolve) ->
      options.cwd = path.dirname(filePath) unless options.cwd
      args.push(filePath)
      resolve(Helpers.exec(command, args, options))

