"use strict"; exports.register = function(linter) { // Check for properties named __proto__. This special property was // deprecated and then re-introduced for ES6. linter.on("Identifier", function style_scanProto(data) { if (linter.getOption("proto")) { return; } if (data.name === "__proto__") { linter.warn("W103", { line: data.line, char: data.char, data: [ data.name, "6" ] }); } }); // Check for properties named __iterator__. This is a special property // available only in browsers with JavaScript 1.7 implementation, but // it is deprecated for ES6 linter.on("Identifier", function style_scanIterator(data) { if (linter.getOption("iterator")) { return; } if (data.name === "__iterator__") { linter.warn("W103", { line: data.line, char: data.char, data: [ data.name ] }); } }); // Check that all identifiers are using camelCase notation. // Exceptions: names like MY_VAR and _myVar. linter.on("Identifier", function style_scanCamelCase(data) { if (!linter.getOption("camelcase")) { return; } if (data.name.replace(/^_+|_+$/g, "").indexOf("_") > -1 && !data.name.match(/^[A-Z0-9_]*$/)) { linter.warn("W106", { line: data.line, char: data.char, data: [ data.name ] }); } }); // Enforce consistency in style of quoting. linter.on("String", function style_scanQuotes(data) { var quotmark = linter.getOption("quotmark"); var code; if (!quotmark) { return; } // If quotmark is set to 'single' warn about all double-quotes. if (quotmark === "single" && data.quote !== "'") { code = "W109"; } // If quotmark is set to 'double' warn about all single-quotes. if (quotmark === "double" && data.quote !== "\"") { code = "W108"; } // If quotmark is set to true, remember the first quotation style // and then warn about all others. if (quotmark === true) { if (!linter.getCache("quotmark")) { linter.setCache("quotmark", data.quote); } if (linter.getCache("quotmark") !== data.quote) { code = "W110"; } } if (code) { linter.warn(code, { line: data.line, char: data.char, }); } }); linter.on("Number", function style_scanNumbers(data) { if (data.value.charAt(0) === ".") { // Warn about a leading decimal point. linter.warn("W008", { line: data.line, char: data.char, data: [ data.value ] }); } if (data.value.substr(data.value.length - 1) === ".") { // Warn about a trailing decimal point. linter.warn("W047", { line: data.line, char: data.char, data: [ data.value ] }); } if (/^00+/.test(data.value)) { // Multiple leading zeroes. linter.warn("W046", { line: data.line, char: data.char, data: [ data.value ] }); } }); // Warn about script URLs. linter.on("String", function style_scanJavaScriptURLs(data) { var re = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\s*:/i; if (linter.getOption("scripturl")) { return; } if (re.test(data.value)) { linter.warn("W107", { line: data.line, char: data.char }); } }); };