eslint-plugin-node
Advanced tools
Comparing version 0.4.1 to 0.5.0
@@ -14,2 +14,3 @@ /** | ||
var features = require("../util/features"); | ||
var getValueIfString = require("../util/get-value-if-string"); | ||
@@ -23,2 +24,3 @@ //------------------------------------------------------------------------------ | ||
var FUNC_TYPE = /^(?:Arrow)?Function(?:Declaration|Expression)$/; | ||
var CLASS_TYPE = /^Class(?:Declaration|Expression)$/; | ||
var DESTRUCTURING_PARENT_TYPE = /^(?:Function(?:Declaration|Expression)|ArrowFunctionExpression|AssignmentExpression|VariableDeclarator)$/; | ||
@@ -28,2 +30,29 @@ var BINARY_NUMBER = /^0[bB]/; | ||
var UNICODE_ESC = /\\u\{.+?\}/; | ||
var NEW_BUILTIN_TYPES = [ | ||
"Int8Array", "Uint8Array", "Uint8ClampedArray", "Int16Array", "Uint16Array", | ||
"Int32Array", "Uint32Array", "Float32Array", "Float64Array", "DataView", | ||
"Map", "Set", "WeakMap", "WeakSet", "Proxy", "Reflect", "Promise", "Symbol" | ||
]; | ||
var SUBCLASSING_TEST_TARGETS = [ | ||
"Array", "RegExp", "Function", "Promise", "Boolean", "Number", "String", | ||
"Map", "Set" | ||
]; | ||
var PROPERTY_TEST_TARGETS = { | ||
Object: ["assign", "is", "getOwnPropertySymbols", "setPrototypeOf"], | ||
String: ["raw", "fromCodePoint"], | ||
Array: ["from", "of"], | ||
Number: [ | ||
"isFinite", "isInteger", "isSafeInteger", "isNaN", "EPSILON", | ||
"MIN_SAFE_INTEGER", "MAX_SAFE_INTEGER" | ||
], | ||
Math: [ | ||
"clz32", "imul", "sign", "log10", "log2", "log1p", "expm1", "cosh", | ||
"sinh", "tanh", "acosh", "asinh", "atanh", "trunc", "fround", "cbrt", | ||
"hypot" | ||
], | ||
Symbol: [ | ||
"hasInstance", "isConcatSpreadablec", "iterator", "species", "replace", | ||
"search", "split", "match", "toPrimitive", "toStringTag", "unscopables" | ||
] | ||
}; | ||
@@ -42,3 +71,4 @@ /** | ||
ignores = []; | ||
} else { | ||
} | ||
else { | ||
version = options.version; | ||
@@ -61,3 +91,4 @@ ignores = options.ignores || []; | ||
}); | ||
} else if (typeof feature.node === "number") { | ||
} | ||
else if (typeof feature.node === "number") { | ||
retv[key] = Object.freeze({ | ||
@@ -69,3 +100,4 @@ name: feature.name, | ||
}); | ||
} else { | ||
} | ||
else { | ||
retv[key] = Object.freeze({ | ||
@@ -113,2 +145,6 @@ name: feature.name, | ||
function getIdentifierName(node) { | ||
return node.name; | ||
} | ||
//------------------------------------------------------------------------------ | ||
@@ -191,3 +227,4 @@ // Rule Definition | ||
}); | ||
} else if (!isStrict()) { | ||
} | ||
else if (!isStrict()) { | ||
context.report({ | ||
@@ -210,31 +247,44 @@ node: node, | ||
Program: function() { | ||
"Program:exit": function() { | ||
// Check new global variables. | ||
NEW_BUILTIN_TYPES.forEach(function(name) { | ||
eachReferences([name], function(reference) { | ||
report(reference.identifier, name); | ||
}); | ||
}); | ||
// Check static methods. | ||
eachReferences( | ||
[ | ||
"Int8Array", "Uint8Array", "Uint8ClampedArray", "Int16Array", | ||
"Uint16Array", "Int32Array", "Uint32Array", "Float32Array", | ||
"Float64Array", "DataView" | ||
], | ||
Object.keys(PROPERTY_TEST_TARGETS), | ||
function(reference) { | ||
report(reference.identifier, "typedArrays"); | ||
var node = reference.identifier; | ||
var parentNode = node.parent; | ||
if (parentNode.type !== "MemberExpression" || | ||
parentNode.object !== node | ||
) { | ||
return; | ||
} | ||
var objectName = node.name; | ||
var properties = PROPERTY_TEST_TARGETS[objectName]; | ||
var propertyName = (parentNode.computed ? getValueIfString : getIdentifierName)(parentNode.property); | ||
if (propertyName && properties.indexOf(propertyName) !== -1) { | ||
report(parentNode, objectName + "." + propertyName); | ||
} | ||
} | ||
); | ||
eachReferences(["Map", "Set"], function(reference) { | ||
report(reference.identifier, "mapSet"); | ||
}); | ||
eachReferences(["WeakMap", "WeakSet"], function(reference) { | ||
report(reference.identifier, "weakMapSet"); | ||
}); | ||
eachReferences(["Proxy"], function(reference) { | ||
report(reference.identifier, "proxy"); | ||
}); | ||
eachReferences(["Reflect"], function(reference) { | ||
report(reference.identifier, "reflect"); | ||
}); | ||
eachReferences(["Promise"], function(reference) { | ||
report(reference.identifier, "promise"); | ||
}); | ||
eachReferences(["Symbol"], function(reference) { | ||
report(reference.identifier, "symbol"); | ||
}); | ||
// Check subclassing | ||
eachReferences( | ||
SUBCLASSING_TEST_TARGETS, | ||
function(reference) { | ||
var node = reference.identifier; | ||
var parentNode = node.parent; | ||
if (CLASS_TYPE.test(parentNode.type) && | ||
parentNode.superClass === node | ||
) { | ||
report(node, "extends" + node.name); | ||
} | ||
} | ||
); | ||
}, | ||
@@ -246,7 +296,7 @@ | ||
ArrowFunctionExpression: function(node) { | ||
"ArrowFunctionExpression": function(node) { | ||
report(node, "arrowFunctions"); | ||
}, | ||
AssignmentPattern: function(node) { | ||
"AssignmentPattern": function(node) { | ||
if (FUNC_TYPE.test(node.parent.type)) { | ||
@@ -257,3 +307,3 @@ report(node, "defaultParameters"); | ||
FunctionDeclaration: function(node) { | ||
"FunctionDeclaration": function(node) { | ||
var scope = context.getScope().upper; | ||
@@ -268,3 +318,3 @@ if (scope.type !== "global" && scope.type !== "function") { | ||
FunctionExpression: function(node) { | ||
"FunctionExpression": function(node) { | ||
if (node.generator) { | ||
@@ -275,11 +325,11 @@ report(node, "generatorFunctions"); | ||
MetaProperty: function(node) { | ||
"MetaProperty": function(node) { | ||
var meta = node.meta.name || node.meta; | ||
var property = node.property.name || node.property; | ||
if (meta === "new" && property === "target") { | ||
report(node, "newTarget"); | ||
report(node, "new.target"); | ||
} | ||
}, | ||
RestElement: function(node) { | ||
"RestElement": function(node) { | ||
if (FUNC_TYPE.test(node.parent.type)) { | ||
@@ -294,7 +344,7 @@ report(node, "restParameters"); | ||
ClassDeclaration: function(node) { | ||
"ClassDeclaration": function(node) { | ||
report(node, "classes"); | ||
}, | ||
ClassExpression: function(node) { | ||
"ClassExpression": function(node) { | ||
report(node, "classes"); | ||
@@ -307,10 +357,11 @@ }, | ||
ForOfStatement: function(node) { | ||
"ForOfStatement": function(node) { | ||
report(node, "forOf"); | ||
}, | ||
VariableDeclaration: function(node) { | ||
"VariableDeclaration": function(node) { | ||
if (node.kind === "const") { | ||
report(node, "const"); | ||
} else if (node.kind === "let") { | ||
} | ||
else if (node.kind === "let") { | ||
report(node, "let"); | ||
@@ -324,3 +375,3 @@ } | ||
ArrayPattern: function(node) { | ||
"ArrayPattern": function(node) { | ||
if (DESTRUCTURING_PARENT_TYPE.test(node.parent.type)) { | ||
@@ -331,3 +382,3 @@ report(node, "destructuring"); | ||
Identifier: function(node) { | ||
"Identifier": function(node) { | ||
var raw = sourceCode.getText(node); | ||
@@ -339,14 +390,17 @@ if (UNICODE_ESC.test(raw)) { | ||
Literal: function(node) { | ||
"Literal": function(node) { | ||
if (typeof node.value === "number") { | ||
if (BINARY_NUMBER.test(node.raw)) { | ||
report(node, "binaryNumberLiterals"); | ||
} else if (OCTAL_NUMBER.test(node.raw)) { | ||
} | ||
else if (OCTAL_NUMBER.test(node.raw)) { | ||
report(node, "octalNumberLiterals"); | ||
} | ||
} else if (typeof node.value === "string") { | ||
} | ||
else if (typeof node.value === "string") { | ||
if (UNICODE_ESC.test(node.raw)) { | ||
report(node, "unicodeCodePointEscapes"); | ||
} | ||
} else if (node.regex) { | ||
} | ||
else if (node.regex) { | ||
if (node.regex.flags.indexOf("y") !== -1) { | ||
@@ -361,3 +415,3 @@ report(node, "regexpY"); | ||
NewExpression: function(node) { | ||
"NewExpression": function(node) { | ||
if (node.callee.type === "Identifier" && | ||
@@ -378,3 +432,3 @@ node.callee.name === "RegExp" && | ||
ObjectPattern: function(node) { | ||
"ObjectPattern": function(node) { | ||
if (DESTRUCTURING_PARENT_TYPE.test(node.parent.type)) { | ||
@@ -385,3 +439,3 @@ report(node, "destructuring"); | ||
Property: function(node) { | ||
"Property": function(node) { | ||
if (node.parent.type === "ObjectExpression" && | ||
@@ -394,7 +448,7 @@ (node.computed || node.shorthand || node.method) | ||
SpreadElement: function(node) { | ||
"SpreadElement": function(node) { | ||
report(node, "spreadOperators", 5); | ||
}, | ||
TemplateLiteral: function(node) { | ||
"TemplateLiteral": function(node) { | ||
report(node, "templateStrings"); | ||
@@ -407,15 +461,15 @@ }, | ||
ExportAllDeclaration: function(node) { | ||
"ExportAllDeclaration": function(node) { | ||
report(node, "modules"); | ||
}, | ||
ExportDefaultDeclaration: function(node) { | ||
"ExportDefaultDeclaration": function(node) { | ||
report(node, "modules"); | ||
}, | ||
ExportNamedDeclaration: function(node) { | ||
"ExportNamedDeclaration": function(node) { | ||
report(node, "modules"); | ||
}, | ||
ImportDeclaration: function(node) { | ||
"ImportDeclaration": function(node) { | ||
report(node, "modules"); | ||
@@ -422,0 +476,0 @@ } |
@@ -85,3 +85,3 @@ /** | ||
return { | ||
"Program": function(node) { | ||
Program: function(node) { | ||
context.report({ | ||
@@ -93,5 +93,4 @@ node: node, | ||
return fixer.replaceTextRange([0, shebang.length], NODE_SHEBANG); | ||
} else { | ||
return fixer.insertTextBeforeRange([0, 0], NODE_SHEBANG); | ||
} | ||
return fixer.insertTextBeforeRange([0, 0], NODE_SHEBANG); | ||
} | ||
@@ -101,15 +100,14 @@ }); | ||
}; | ||
} else { | ||
return { | ||
"Program": function(node) { | ||
context.report({ | ||
node: node, | ||
message: "This file needs no shebang.", | ||
fix: function(fixer) { | ||
return fixer.removeRange([0, shebang.length]); | ||
} | ||
}); | ||
} | ||
}; | ||
} | ||
return { | ||
Program: function(node) { | ||
context.report({ | ||
node: node, | ||
message: "This file needs no shebang.", | ||
fix: function(fixer) { | ||
return fixer.removeRange([0, shebang.length]); | ||
} | ||
}); | ||
} | ||
}; | ||
}; | ||
@@ -116,0 +114,0 @@ |
@@ -54,3 +54,4 @@ /** | ||
entry.expire = now + SKIP_TIME; | ||
} else { | ||
} | ||
else { | ||
this.map[key] = { | ||
@@ -57,0 +58,0 @@ value: value, |
@@ -44,7 +44,9 @@ /** | ||
} | ||
} else { | ||
} | ||
else { | ||
try { | ||
resolve.sync(target.name, opts); | ||
continue; | ||
} catch (err) { | ||
} | ||
catch (err) { | ||
// ignore. | ||
@@ -51,0 +53,0 @@ } |
@@ -75,3 +75,4 @@ /** | ||
} | ||
} else { | ||
} | ||
else { | ||
// This file is published, so this cannot import private files. | ||
@@ -78,0 +79,0 @@ for (i = 0; i < targets.length; ++i) { |
@@ -28,5 +28,6 @@ /** | ||
return fs.statSync(filePath).isFile(); | ||
} catch (err) { | ||
} | ||
catch (err) { | ||
return false; | ||
} | ||
}; |
@@ -14,56 +14,60 @@ /** | ||
module.exports = { | ||
defaultParameters: { | ||
//-------------------------------------------------------------------------- | ||
// Syntax | ||
//-------------------------------------------------------------------------- | ||
"defaultParameters": { | ||
name: "Default Parameters", | ||
node: NaN | ||
}, | ||
restParameters: { | ||
"restParameters": { | ||
name: "Rest Parameters", | ||
node: NaN | ||
}, | ||
spreadOperators: { | ||
"spreadOperators": { | ||
name: "Spread Operators", | ||
node: 5 | ||
}, | ||
objectLiteralExtensions: { | ||
"objectLiteralExtensions": { | ||
name: "Object Literal Extensions", | ||
node: 4 | ||
}, | ||
forOf: { | ||
name: "For..of Loops", | ||
"forOf": { | ||
name: "'for..of' Loops", | ||
node: 0.12 | ||
}, | ||
binaryNumberLiterals: { | ||
"binaryNumberLiterals": { | ||
name: "Binary Number Literals", | ||
node: 4 | ||
}, | ||
octalNumberLiterals: { | ||
"octalNumberLiterals": { | ||
name: "Octal Number Literals", | ||
node: 4 | ||
}, | ||
templateStrings: { | ||
"templateStrings": { | ||
name: "Template Strings", | ||
node: 4 | ||
}, | ||
regexpY: { | ||
name: "RegExp \"y\" Flags", | ||
"regexpY": { | ||
name: "RegExp 'y' Flags", | ||
node: NaN | ||
}, | ||
regexpU: { | ||
name: "RegExp \"u\" Flags", | ||
"regexpU": { | ||
name: "RegExp 'u' Flags", | ||
node: NaN | ||
}, | ||
destructuring: { | ||
"destructuring": { | ||
name: "Destructuring", | ||
node: NaN | ||
}, | ||
unicodeCodePointEscapes: { | ||
"unicodeCodePointEscapes": { | ||
name: "Unicode Code Point Escapes", | ||
node: 4 | ||
}, | ||
newTarget: { | ||
name: "\"new.target\"", | ||
"new.target": { | ||
name: "'new.target'", | ||
node: 5 | ||
}, | ||
const: { | ||
name: "\"const\" Declarations", | ||
"const": { | ||
name: "'const' Declarations", | ||
node: { | ||
@@ -74,4 +78,4 @@ sloppy: NaN, | ||
}, | ||
let: { | ||
name: "\"let\" Declarations", | ||
"let": { | ||
name: "'let' Declarations", | ||
node: { | ||
@@ -82,3 +86,3 @@ sloppy: NaN, | ||
}, | ||
blockScopedFunctions: { | ||
"blockScopedFunctions": { | ||
name: "Block-Scoped Functions", | ||
@@ -90,11 +94,11 @@ node: { | ||
}, | ||
arrowFunctions: { | ||
"arrowFunctions": { | ||
name: "Arrow Functions", | ||
node: 4 | ||
}, | ||
generatorFunctions: { | ||
"generatorFunctions": { | ||
name: "Generator Functions", | ||
node: 4 | ||
}, | ||
classes: { | ||
"classes": { | ||
name: "Classes", | ||
@@ -106,38 +110,368 @@ node: { | ||
}, | ||
typedArrays: { | ||
name: "Typed Arrays", | ||
"modules": { | ||
name: "Import and Export Declarations", | ||
node: NaN | ||
}, | ||
//-------------------------------------------------------------------------- | ||
// Runtime | ||
//-------------------------------------------------------------------------- | ||
"Object.assign": { | ||
name: "'Object.assign'", | ||
singular: true, | ||
node: 4 | ||
}, | ||
"Object.is": { | ||
name: "'Object.is'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
mapSet: { | ||
name: "Map and Set", | ||
"Object.getOwnPropertySymbols": { | ||
name: "'Object.getOwnPropertySymbols'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
weakMapSet: { | ||
name: "WeakMap and WeakSet", | ||
"Object.setPrototypeOf": { | ||
name: "'Object.setPrototypeOf'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
proxy: { | ||
name: "Proxy", | ||
"String.raw": { | ||
name: "'String.raw'", | ||
singular: true, | ||
node: 4 | ||
}, | ||
"String.fromCodePoint": { | ||
name: "'String.fromCodePoint'", | ||
singular: true, | ||
node: 4 | ||
}, | ||
"Array.from": { | ||
name: "'Array.from'", | ||
singular: true, | ||
node: 4 | ||
}, | ||
"Array.of": { | ||
name: "'Array.of'", | ||
singular: true, | ||
node: 4 | ||
}, | ||
"Number.isFinite": { | ||
name: "'Number.isFinite'", | ||
singular: true, | ||
node: 0.10 | ||
}, | ||
"Number.isInteger": { | ||
name: "'Number.isInteger'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Number.isSafeInteger": { | ||
name: "'Number.isSafeInteger'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Number.isNaN": { | ||
name: "'Number.isNaN'", | ||
singular: true, | ||
node: 0.10 | ||
}, | ||
"Number.EPSILON": { | ||
name: "'Number.EPSILON'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Number.MIN_SAFE_INTEGER": { | ||
name: "'Number.MIN_SAFE_INTEGER'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Number.MAX_SAFE_INTEGER": { | ||
name: "'Number.MAX_SAFE_INTEGER'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.clz32": { | ||
name: "'Math.clz32'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.imul": { | ||
name: "'Math.imul'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.sign": { | ||
name: "'Math.sign'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.log10": { | ||
name: "'Math.log10'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.log2": { | ||
name: "'Math.log2'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.log1p": { | ||
name: "'Math.log1p'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.expm1": { | ||
name: "'Math.expm1'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.cosh": { | ||
name: "'Math.cosh'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.sinh": { | ||
name: "'Math.sinh'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.tanh": { | ||
name: "'Math.tanh'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.acosh": { | ||
name: "'Math.acosh'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.asinh": { | ||
name: "'Math.asinh'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.atanh": { | ||
name: "'Math.atanh'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.trunc": { | ||
name: "'Math.trunc'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.fround": { | ||
name: "'Math.fround'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.cbrt": { | ||
name: "'Math.cbrt'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Math.hypot": { | ||
name: "'Math.hypot'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Int8Array": { | ||
name: "'Int8Array'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Uint8Array": { | ||
name: "'Uint8Array'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Uint8ClampedArray": { | ||
name: "'Uint8ClampedArray'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Int16Array": { | ||
name: "'Int16Array'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Uint16Array": { | ||
name: "'Uint16Array'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Int32Array": { | ||
name: "'Int32Array'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Uint32Array": { | ||
name: "'Uint32Array'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Float32Array": { | ||
name: "'Float32Array'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Float64Array": { | ||
name: "'Float64Array'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"DataView": { | ||
name: "'DataView'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Map": { | ||
name: "'Map'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Set": { | ||
name: "'Set'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"WeakMap": { | ||
name: "'WeakMap'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"WeakSet": { | ||
name: "'WeakSet'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Proxy": { | ||
name: "'Proxy'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
reflect: { | ||
name: "Reflect", | ||
"Reflect": { | ||
name: "'Reflect'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
promise: { | ||
name: "Promise", | ||
"Promise": { | ||
name: "'Promise'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
symbol: { | ||
name: "Symbol", | ||
"Symbol": { | ||
name: "'Symbol'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
modules: { | ||
name: "Import and Export Declarations", | ||
"Symbol.hasInstance": { | ||
name: "'Symbol.hasInstance'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
"Symbol.isConcatSpreadablec": { | ||
name: "'Symbol.isConcatSpreadablec'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
"Symbol.iterator": { | ||
name: "'Symbol.iterator'", | ||
singular: true, | ||
node: 0.12 | ||
}, | ||
"Symbol.species": { | ||
name: "'Symbol.species'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
"Symbol.replace": { | ||
name: "'Symbol.replace'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
"Symbol.search": { | ||
name: "'Symbol.search'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
"Symbol.split": { | ||
name: "'Symbol.split'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
"Symbol.match": { | ||
name: "'Symbol.match'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
"Symbol.toPrimitive": { | ||
name: "'Symbol.toPrimitive'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
"Symbol.toStringTag": { | ||
name: "'Symbol.toStringTag'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
"Symbol.unscopables": { | ||
name: "'Symbol.unscopables'", | ||
singular: true, | ||
node: 4 | ||
}, | ||
"extendsArray": { | ||
name: "Subclassing of 'Array'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
"extendsRegExp": { | ||
name: "Subclassing of 'RegExp'", | ||
singular: true, | ||
node: 5 | ||
}, | ||
"extendsFunction": { | ||
name: "Subclassing of 'Function'", | ||
singular: true, | ||
node: NaN | ||
}, | ||
"extendsPromise": { | ||
name: "Subclassing of 'Promise'", | ||
singular: true, | ||
node: 5 | ||
}, | ||
"extendsBoolean": { | ||
name: "Subclassing of 'Boolean'", | ||
singular: true, | ||
node: 4 | ||
}, | ||
"extendsNumber": { | ||
name: "Subclassing of 'Number'", | ||
singular: true, | ||
node: 4 | ||
}, | ||
"extendsString": { | ||
name: "Subclassing of 'String'", | ||
singular: true, | ||
node: 4 | ||
}, | ||
"extendsMap": { | ||
name: "Subclassing of 'Map'", | ||
singular: true, | ||
node: 4 | ||
}, | ||
"extendsSet": { | ||
name: "Subclassing of 'Set'", | ||
singular: true, | ||
node: 4 | ||
} | ||
}; |
@@ -168,5 +168,7 @@ /** | ||
retv.match = and(filterNeverIgnoredFiles(p), or(filesIgnore, npmignoreIgnore)); | ||
} else if (filesIgnore) { | ||
} | ||
else if (filesIgnore) { | ||
retv.match = and(filterNeverIgnoredFiles(p), filesIgnore); | ||
} else if (npmignoreIgnore) { | ||
} | ||
else if (npmignoreIgnore) { | ||
retv.match = and(filterNeverIgnoredFiles(p), npmignoreIgnore); | ||
@@ -173,0 +175,0 @@ } |
@@ -41,3 +41,4 @@ /** | ||
} | ||
} catch (err) { | ||
} | ||
catch (err) { | ||
// do nothing. | ||
@@ -64,4 +65,3 @@ } | ||
var dir = startDir; | ||
var prevDir; | ||
var data; | ||
var prevDir, data; | ||
@@ -68,0 +68,0 @@ do { |
@@ -16,2 +16,3 @@ /** | ||
var getTryExtensions = require("./get-try-extensions"); | ||
var getValueIfString = require("./get-value-if-string"); | ||
var ImportTarget = require("./import-target"); | ||
@@ -44,32 +45,2 @@ | ||
/** | ||
* Gets the value of a given node if it's a literal or a template literal. | ||
* | ||
* @param {ASTNode} node - A node to get. | ||
* @returns {string|null} The value of the node, or `null`. | ||
*/ | ||
function getValueIfString(node) { | ||
if (!node) { | ||
return null; | ||
} | ||
switch (node.type) { | ||
case "Literal": | ||
if (typeof node.value === "string") { | ||
return node.value; | ||
} | ||
break; | ||
case "TemplateLiteral": | ||
if (node.expressions.length === 0) { | ||
return node.quasis[0].value.cooked; | ||
} | ||
break; | ||
// no default | ||
} | ||
return null; | ||
} | ||
/** | ||
* Gets references of "require". | ||
@@ -76,0 +47,0 @@ * |
{ | ||
"name": "eslint-plugin-node", | ||
"version": "0.4.1", | ||
"version": "0.5.0", | ||
"description": "Additional ESLint's rules for Node.js", | ||
@@ -13,3 +13,3 @@ "files": [ | ||
"clean": "rimraf coverage", | ||
"lint": "eslint lib tests --rulesdir lib/rules --rule \"{no-missing-require:2, no-unpublished-require:2, shebang:2}\"", | ||
"lint": "eslint lib tests/lib --rulesdir lib/rules --rule \"{no-missing-require:2, no-unpublished-require:2, shebang:2}\"", | ||
"build": "node scripts/generate-index.js", | ||
@@ -31,4 +31,5 @@ "test": "npm-run-all clean lint test:mocha", | ||
"coveralls": "^2.11.4", | ||
"eslint": "^1.10.3", | ||
"eslint-config-eslint": "^1.0.1", | ||
"eslint": "1.10.3", | ||
"eslint-config-mysticatea": "^1.9.0", | ||
"eslint-plugin-mysticatea": "^1.0.3", | ||
"istanbul": "^0.4.0", | ||
@@ -35,0 +36,0 @@ "mocha": "^2.3.4", |
@@ -46,1 +46,7 @@ # eslint-plugin-node | ||
- [shebang](docs/rules/shebang.md) - Suggest correct usage of shebang. (fixable) | ||
## FAQ | ||
Q: The `no-missing-import` / `no-missing-require` rules don't work with nested folders in SublimeLinter-eslint | ||
A: See [context.getFilename() in rule returns relative path](https://github.com/roadhump/SublimeLinter-eslint#contextgetfilename-in-rule-returns-relative-path) in the SublimeLinter-eslint FAQ. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
70709
23
2074
51
9