| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | 
							- (function() {
 
-   var bogus = [ "Dangerous comment" ];
 
-   var warnings = [ [ "Expected '{'",
 
- 		     "Statement body should be inside '{ }' braces." ] ];
 
-   var errors = [ "Missing semicolon", "Extra comma", "Missing property name",
 
- 	         "Unmatched ", " and instead saw", " is not defined",
 
- 	         "Unclosed string", "Stopping, unable to continue" ];
 
-   function validator(options, text) {
 
-     JSHINT(text, options);
 
-     var errors = JSHINT.data().errors, result = [];
 
-     if (errors) parseErrors(errors, result);
 
-     return result;
 
-   }
 
-   CodeMirror.javascriptValidatorWithOptions = function(options) {
 
-     return function(text) { return validator(options, text); };
 
-   };
 
-   CodeMirror.javascriptValidator = CodeMirror.javascriptValidatorWithOptions(null);
 
-   function cleanup(error) {
 
-     // All problems are warnings by default
 
-     fixWith(error, warnings, "warning", true);
 
-     fixWith(error, errors, "error");
 
-     return isBogus(error) ? null : error;
 
-   }
 
-   function fixWith(error, fixes, severity, force) {
 
-     var description, fix, find, replace, found;
 
-     description = error.description;
 
-     for ( var i = 0; i < fixes.length; i++) {
 
-       fix = fixes[i];
 
-       find = (typeof fix === "string" ? fix : fix[0]);
 
-       replace = (typeof fix === "string" ? null : fix[1]);
 
-       found = description.indexOf(find) !== -1;
 
-       if (force || found) {
 
- 	error.severity = severity;
 
-       }
 
-       if (found && replace) {
 
- 	error.description = replace;
 
-       }
 
-     }
 
-   }
 
-   function isBogus(error) {
 
-     var description = error.description;
 
-     for ( var i = 0; i < bogus.length; i++) {
 
-       if (description.indexOf(bogus[i]) !== -1) {
 
- 	return true;
 
-       }
 
-     }
 
-     return false;
 
-   }
 
-   function parseErrors(errors, output) {
 
-     for ( var i = 0; i < errors.length; i++) {
 
-       var error = errors[i];
 
-       if (error) {
 
- 	var linetabpositions, index;
 
- 	linetabpositions = [];
 
- 	// This next block is to fix a problem in jshint. Jshint
 
- 	// replaces
 
- 	// all tabs with spaces then performs some checks. The error
 
- 	// positions (character/space) are then reported incorrectly,
 
- 	// not taking the replacement step into account. Here we look
 
- 	// at the evidence line and try to adjust the character position
 
- 	// to the correct value.
 
- 	if (error.evidence) {
 
- 	  // Tab positions are computed once per line and cached
 
- 	  var tabpositions = linetabpositions[error.line];
 
- 	  if (!tabpositions) {
 
- 	    var evidence = error.evidence;
 
- 	    tabpositions = [];
 
- 	    // ugggh phantomjs does not like this
 
- 	    // forEachChar(evidence, function(item, index) {
 
- 	    Array.prototype.forEach.call(evidence, function(item,
 
- 							    index) {
 
- 	      if (item === '\t') {
 
- 		// First col is 1 (not 0) to match error
 
- 		// positions
 
- 		tabpositions.push(index + 1);
 
- 	      }
 
- 	    });
 
- 	    linetabpositions[error.line] = tabpositions;
 
- 	  }
 
- 	  if (tabpositions.length > 0) {
 
- 	    var pos = error.character;
 
- 	    tabpositions.forEach(function(tabposition) {
 
- 	      if (pos > tabposition) pos -= 1;
 
- 	    });
 
- 	    error.character = pos;
 
- 	  }
 
- 	}
 
- 	var start = error.character - 1, end = start + 1;
 
- 	if (error.evidence) {
 
- 	  index = error.evidence.substring(start).search(/.\b/);
 
- 	  if (index > -1) {
 
- 	    end += index;
 
- 	  }
 
- 	}
 
- 	// Convert to format expected by validation service
 
- 	error.description = error.reason;// + "(jshint)";
 
- 	error.start = error.character;
 
- 	error.end = end;
 
- 	error = cleanup(error);
 
- 	if (error)
 
-           output.push({message: error.description,
 
-                        severity: error.severity,
 
-                        from: CodeMirror.Pos(error.line - 1, start),
 
-                        to: CodeMirror.Pos(error.line - 1, end)});
 
-       }
 
-     }
 
-   }
 
- })();
 
 
  |