Skip to content

Commit

Permalink
Merge branch 'code'
Browse files Browse the repository at this point in the history
  • Loading branch information
valueof committed Nov 3, 2012
2 parents fd623ea + 8683b08 commit 4ee711c
Show file tree
Hide file tree
Showing 10 changed files with 1,104 additions and 935 deletions.
39 changes: 0 additions & 39 deletions src/next/constants.js
Expand Up @@ -2,45 +2,6 @@

var _ = require("underscore");

// Identifiers provided by the ECMAScript standard

exports.reservedVars = {
undefined : false,
arguments : false,
NaN : false
};

exports.ecmaIdentifiers = {
Array : false,
Boolean : false,
Date : false,
decodeURI : false,
decodeURIComponent : false,
encodeURI : false,
encodeURIComponent : false,
Error : false,
"eval" : false,
EvalError : false,
Function : false,
hasOwnProperty : false,
isFinite : false,
isNaN : false,
JSON : false,
Math : false,
Number : false,
Object : false,
parseInt : false,
parseFloat : false,
RangeError : false,
ReferenceError : false,
RegExp : false,
String : false,
SyntaxError : false,
TypeError : false,
URIError : false
};


// Errors and warnings

var errors = {
Expand Down
6 changes: 3 additions & 3 deletions src/next/jshint.js
Expand Up @@ -6,7 +6,7 @@ var events = require("events");
var utils = require("./utils.js");
var reason = require("./reason.js");
var regexp = require("./regexp.js");
var constants = require("./constants.js");
var vars = require("../shared/vars.js");

var MAXERR = 50;

Expand Down Expand Up @@ -43,8 +43,8 @@ function Linter(code) {
// Pre-populate globals array with reserved variables,
// standard ECMAScript globals and user-supplied globals.

this.setGlobals(constants.reservedVars);
this.setGlobals(constants.ecmaIdentifiers);
this.setGlobals(vars.reservedVars);
this.setGlobals(vars.ecmaIdentifiers);
}

Linter.prototype = {
Expand Down
4 changes: 2 additions & 2 deletions src/next/reason.js
@@ -1,7 +1,7 @@
"use strict";

var _ = require("underscore");
var constants = require('./constants');
var vars = require("../shared/vars.js");

exports.register = function (linter) {
var report = linter.report;
Expand Down Expand Up @@ -267,7 +267,7 @@ exports.register = function (linter) {
return false;

return expr.object.name in
constants.ecmaIdentifiers && expr.property.name === "prototype";
vars.ecmaIdentifiers && expr.property.name === "prototype";
}

if (left.type !== "MemberExpression")
Expand Down
207 changes: 207 additions & 0 deletions src/shared/messages.js
@@ -0,0 +1,207 @@
"use strict";

var _ = require("underscore");

var errors = {
E001: "Bad option: '{a}'.",
E002: "Unmatched '{a}'.",
E003: "Expected '{a}' to match '{b}' from line {c} and " +
"instead saw '{d}'.",
E004: "Expected '{a}' and instead saw '{b}'.",
E005: "Expected an identifier and instead saw '{a}'.",
E006: "Line breaking error '{a}'.",
E007: "Attempting to override '{a}' which is a constant.",
E008: "Bad assignment.",
E009: "Missing \"use strict\" statement.",
E010: "Strict violation.",
E011: "const '{a}' has already been declared.",
E012: "const '{a}' is initialized to 'undefined'.",
E013: "Missing '{a}'.",
E014: "Unexpected '{a}'.",
E015: "Unclosed comment.",
E016: "A regular expression literal can be confused with '/='.",
E017: "Unclosed regular expression.",
E018: "Confusing regular expression.",
E019: "Unescaped '{a}'.",
E020: "Unbegun comment.",
E021: "What?", // FIXME,
E022: "Expected a small integer and instead saw '{a}'.",
E023: "Option 'validthis' can't be used in a global scope.",
E024: "Bad option value.",
E025: "Missing option value.",
E026: "Unexpected early end of program.",
E027: "Expected an operator and instead saw '{a}'.",
E028: "Strict violation.",
E029: "get/set are ES5 features.",
E030: "Missing property name.",
E031: "Expected to see a statement and instead saw a block.",
E032: "Constant {a} was not declared correctly.",
E033: "Variable {a} was not declared correctly.",
E034: "Function declarations are not invocable. Wrap the whole function " +
"invocation in parens.",
E035: "'with' is not allowed in strict mode.",
E036: "Each value should have its own case label.",
E037: "Missing ':' on a case clause.",
E038: "Missing '}' to match '{' from line {a}.",
E039: "Missing ']' to match '[' form line {a}.",
E040: "Unexpected comma.",
E041: "Expected a JSON value.",
E042: "Input is neither a string nor an array of strings.",
E043: "Input is empty.",
E044: "Unclosed string.",
};

var warnings = {
W001: "'hasOwnProperty' is a really bad name.",
W002: "Value of '{a}' may be overwritten in IE.",
W003: "'{a}' was used before it was defined.",
W004: "'{a}' is already defined.",
W005: "A dot following a number can be confused with a decimal point.",
W006: "Confusing minuses.",
W007: "Confusing pluses.",
W008: "A leading decimal point can be confused with a dot: '.{a}'.",
W009: "The array literal notation [] is preferrable.",
W010: "The object literal notation {} is preferrable.",
W011: "Unexpected space after '{a}'.",
W012: "Unexpected space before '{a}'.",
W013: "Missing space after '{a}'.",
W014: "Bad line breaking before '{a}'.",
W015: "Expected '{a}' to have an indentation at {b} instead at {c}.",
W016: "Unexpected use of '{a}'.",
W017: "Bad operand.",
W018: "Confusing use of '{a}'.",
W019: "Use the isNaN function to compare with NaN.",
W020: "Read only.",
W021: "'{a}' is a function.",
W022: "Do not assign to the exception parameter.",
W023: "Expected an identifier in an assignment and instead saw a " +
"function invocation.",
W024: "Expected an identifier and instead saw '{a}' (a reserved word).",
W025: "Missing name in function declaration.",
W026: "Inner functions should be listed at the top of the outer function.",
W027: "Unreachable '{a}' after '{b}'.",
W028: "Label '{a}' on {b} statement.",
W029: "Label '{a}' looks like a javascript url.",
W030: "Expected an assignment or function call and instead saw " +
"an expression.",
W031: "Do not use 'new' for side effects.",
W032: "Unnecessary semicolon.",
W033: "Missing semicolon.",
W034: "Unnecessary directive \"{a}\".",
W035: "Empty block.",
W036: "Unexpected /*member '{a}'.",
W037: "'{a}' is a statement label.",
W038: "'{a}' used out of scope.",
W039: "'{a}' is not allowed.",
W040: "Possible strict violation.",
W041: "Use '{a}' to compare with '{b}'.",
W050: "JavaScript URL.",
W051: "Variables should not be deleted.",
W052: "Unexpected '{a}'.",
W053: "Do not use {a} as a constructor.",
W054: "The Function constructor is a form of eval.",
W055: "A constructor name should start with an uppercase letter.",
W056: "Bad constructor.",
W057: "Weird construction. Is 'new' unnecessary?",
W058: "Missing '()' invoking a constructor.",
W059: "Avoid arguments.{a}.",
W060: "document.write can be a form of eval.",
W061: "eval can be harmful.",
W062: "Wrap an immediate function invocation in parens " +
"to assist the reader in understanding that the expression " +
"is the result of a function, and not the function itself.",
W063: "Math is not a function.",
W064: "Missing 'new' prefix when invoking a constructor.",
W065: "Missing radix parameter.",
W066: "Implied eval. Consider passing a function instead of a string.",
W067: "Bad invocation.",
W068: "Wrapping non-IIFE function literals in parens is unnecessary.",
W069: "['{a}'] is better written in dot notation.",
W070: "Extra comma. (it breaks older versions of IE)",
W071: "This function has too many statements. ({a})",
W072: "This function has too many parameters. ({a})",
W073: "Blocks are nested too deeply. ({a})",
W074: "This function's cyclomatic complexity is too high. ({a})",
W075: "Duplicate key '{a}'.",
W076: "Unexpected parameter '{a}' in get {b} function.",
W077: "Expected a single parameter in set {a} function.",
W078: "Setter is defined without getter.",
W079: "Redefinition of '{a}'.",
W080: "It's not necessary to initialize '{a}' to 'undefined'.",
W081: "Too many var statements.",
W082: "Function declarations should not be placed in blocks. " +
"Use a function expression or move the statement to the top of " +
"the outer function.",
W083: "Don't make functions within a loop.",
W084: "Expected a conditional expression and instead saw an " +
"assignment.",
W085: "Don't use 'with'.",
W086: "Expected a 'break' statement before '{a}'.",
W087: "Forgotten 'debugger' statement?",
W088: "Bad for in variable '{a}'.",
W089: "The body of a for in should be wrapped in an if statement to filter " +
"unwanted properties from the prototype.",
W090: "'{a}' is not a statement label.",
W091: "'{a}' is out of scope.",
W092: "Wrap the /regexp/ literal in parens to disambiguate the slash operator.",
W093: "Did you mean to return a conditional instead of an assignment?",
W094: "Unexpected comma.",
W095: "Expected a string and instead saw {a}.",
W096: "The '{a}' key may produce unexpected results.",
W097: "Use the function form of \"use strict\".",
W098: "'{a}' is defined but never used.",
W099: "Mixed spaces and tabs.",
W100: "This character may get silently deleted by one or more browsers.",
W101: "Line is too long.",
W102: "Trailing whitespace.",
W103: "The '{a}' property is deprecated.",
W104: "'{a}' is only available in JavaScript 1.7.",
W105: "Unexpected {a} in '{b}'.",
W106: "Identifier '{a}' is not in camel case.",
W107: "Script URL.",
W108: "Strings must use doublequote.",
W109: "Strings must use singlequote.",
W110: "Mixed double and single quotes.",
W111: "Unnecessary escapement.",
W112: "Unclosed string.",
W113: "Control character in string: {a}.",
W114: "Avoid {a}.",
W115: "Octal literals are not allowed in strict mode.",
W116: "Avoid EOL escapement.",
W117: "Bad escapement of EOL. Use option multistr if needed.",
W118: "Bad escapement.",
W119: "Bad number '{a}'.",
W120: "Don't use extra leading zeros '{a}'.",
W121: "A trailing decimal point can be confused with a dot: '{a}'.",
W122: "{a} unterminated regular expression group(s).",
W123: "Unexpected control character in regular expression.",
W124: "Unexpected escaped character '{a}' in regular expression.",
W125: "Unescaped '{a}'.",
W126: "Spaces are hard to count. Use {{a}}.",
W127: "Empty class.",
W128: "'{a}' in character sets should be escaped.",
W129: "Insecure '{a}'.",
W130: "Expected a number and instead saw '{a}'.",
W131: "'{a}' should not be greater than '{b}'.",
W132: "Expected '{a}' and instead saw '{b}'.",
};

var info = {
I001: "Comma warnings can be turned off with 'laxcomma'."
};

exports.errors = {};
exports.warnings = {};
exports.info = {};

_.each(errors, function (desc, code) {
exports.errors[code] = { code: code, desc: desc };
});

_.each(warnings, function (desc, code) {
exports.warnings[code] = { code: code, desc: desc };
});

_.each(info, function (desc, code) {
exports.info[code] = { code: code, desc: desc };
});

0 comments on commit 4ee711c

Please sign in to comment.