// this file is lib/lintstream.js
// provides a stream interface to JSLint
//
// Copyright 2014 Cubane Canada Inc.
//
// Released under modified MIT/BSD 3-clause license
// See LICENSE for details.

/*jslint unparam: true*/

(function () {
    'use strict';

    var util = require('util'),
        Transform = require('stream').Transform,
        nodelint = require('./nodelint'),
        optModule = require('./options'),
        linter = require('./linter'),
        LintStream;

    LintStream = function LintStream_constructor(options) {
        if (!(this instanceof LintStream)) {
            return new LintStream(options);
        }
        Transform.call(this, {objectMode: true});

        // shallow copy options
        options = optModule.merge({}, options);
        this.JSlint = nodelint.load(options.edition);

        // initialize members
        this.options = options;
        this.linter = linter;
    };
    util.inherits(LintStream, Transform);

    function LintStream_transform(chunk, encoding, callback) {
        var fileName = chunk.file,
            body = chunk.body,
            linted = this.linter.doLint(this.JSlint, body, this.options);

        this.push({file: fileName, linted: linted});

        callback();
    }

    /*jslint nomen: true */
    LintStream.prototype._transform = LintStream_transform;

    module.exports = LintStream;

}());
