/*
* @package jscodesniffer
* @author sheiko
* @license MIT
* @copyright (c) Dmitry Sheiko http://www.dsheiko.com
* jscs standard:Jquery
* jshint unused:false
* Code style: http://docs.jquery.com/JQuery_Core_Style_Guidelines
*/
/**
* A module representing a sniffer.
* @module lib/Sniff/SourceCode/LineSpacing
*/
// UMD boilerplate according to https://github.com/umdjs/umd
if ( typeof module === "object" && typeof define !== "function" ) {
/**
* Override AMD `define` function for RequireJS
* @param {function( function, Object, Object )} factory
*/
var define = function ( factory ) {
module.exports = factory( require, exports, module );
};
}
/**
* @param {function( string )} require
*/
define(function( require ) {
"use strict";
/**
* @type {utilsSniff/Utils}
*/
var utils = require( "../Utils" ),
/**
* @constant
* @type {String}
* @default
*/
NAME = "LineSpacing",
/**
* @constructor
* @alias module:lib/Sniff/SourceCode/LineSpacing
* @param {module:lib/SourceCode} sourceCode
* @param {module:lib/Mediator} mediator
*/
Sniff = function( sourceCode, mediator ) {
/** @lends module:lib/Sniff/SourceCode/LineSpacing.prototype */
return {
/**
* Check the contract
* @access public
* @param {Object} rule
*/
validateRule: function( rule ) {
utils.validateRule( rule, "allowLineTrailingSpaces", "boolean", true );
},
/**
* Run the sniffer according a given rule if a given node type matches the case
* @access public
*/
run: function() {
var re = /( +)$/g,
that = this,
lines = sourceCode.asLines();
lines.forEach(function( line, inx ){
var matches = re.exec( line ), pos;
if ( matches ) {
pos = lines.slice( 0, inx ).join( "\n" ).length;
that.sniff( inx + 1, pos, matches[ 1 ].length, "LineTrailingSpacesNotAllowed" );
}
});
},
/**
* Report ot the mediator
* @access protected
* @param {number} line
* @param {number} pos
* @param {number} actual
* @param {string} errorCode
*/
sniff: function( line, pos, actual, errorCode ) {
mediator.publish( "violation", NAME, errorCode, [ pos, pos + actual ], {
start: {
line: line,
column: 0
},
end: {
line: line,
column: actual
}
}, {
expected: 0,
actual: actual,
excerpt: sourceCode.extract( pos, pos + actual ).get(),
trace: ".." + sourceCode.extract( pos, pos + actual ).get() + "..",
where: ""
});
}
};
};
return Sniff;
});