line.js 1020 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
module.exports = class CovLine {
  constructor (line, startCol, lineStr) {
    this.line = line
    // note that startCol and endCol are absolute positions
    // within a file, not relative to the line.
    this.startCol = startCol

    // the line length itself does not include the newline characters,
    // these are however taken into account when enumerating absolute offset.
    const matchedNewLineChar = lineStr.match(/\r?\n$/u)
    const newLineLength = matchedNewLineChar ? matchedNewLineChar[0].length : 0
    this.endCol = startCol + lineStr.length - newLineLength

    // we start with all lines having been executed, and work
    // backwards zeroing out lines based on V8 output.
    this.count = 1

    // set by source.js during parsing, if /* c8 ignore next */ is found.
    this.ignore = false
  }

  toIstanbul () {
    return {
      start: {
        line: this.line,
        column: 0
      },
      end: {
        line: this.line,
        column: this.endCol - this.startCol
      }
    }
  }
}