Source: Sniff/SourceCode/LineSpacing.js

/*
* @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;
});