Skip to content

Commit f6919aa

Browse files
committed
[BREAKING] ES2015ify and require Node.js >=4
ESLint now requires Node.js >=4, so no point in us supporting lower. http://eslint.org/blog/2016/07/eslint-v3.0.0-released#requires-nodejs-4-or-higher
1 parent c5bb5a3 commit f6919aa

25 files changed

+322
-364
lines changed

.travis.yml

-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
language: node_js
22
node_js:
33
- '6'
4-
- '5'
54
- '4'
6-
- '0.12'
7-
- '0.10'
85
before_install:
96
- npm i -g npm
107
after_success: npm run coveralls

create-ava-rule.js

+32-44
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
'use strict';
2-
var espurify = require('espurify');
3-
var assign = require('object-assign');
4-
var rest = require('lodash.rest');
5-
var deepStrictEqual = require('deep-strict-equal');
2+
const espurify = require('espurify');
3+
const rest = require('lodash.rest');
4+
const deepStrictEqual = require('deep-strict-equal');
65

7-
var avaImportDeclarationAst = {
6+
const avaImportDeclarationAst = {
87
type: 'ImportDeclaration',
98
specifiers: [
109
{
@@ -21,7 +20,7 @@ var avaImportDeclarationAst = {
2120
}
2221
};
2322

24-
var avaVariableDeclaratorAst = {
23+
const avaVariableDeclaratorAst = {
2524
type: 'VariableDeclarator',
2625
id: {
2726
type: 'Identifier',
@@ -59,62 +58,60 @@ function hasTestModifier(node, mod) {
5958
if (node.property.type === 'Identifier' && node.property.name === mod) {
6059
return true;
6160
}
61+
6262
return hasTestModifier(node.object, mod);
6363
}
64+
6465
return false;
6566
}
6667

67-
module.exports = function createAvaRule() {
68-
var isTestFile = false;
69-
var currentTestNode = null;
68+
module.exports = () => {
69+
let isTestFile = false;
70+
let currentTestNode = null;
7071

7172
/* eslint quote-props: [2, "as-needed"] */
72-
var predefinedRules = {
73-
ImportDeclaration: function (node) {
73+
const predefinedRules = {
74+
ImportDeclaration: node => {
7475
if (!isTestFile && deepStrictEqual(espurify(node), avaImportDeclarationAst)) {
7576
isTestFile = true;
7677
}
7778
},
78-
VariableDeclarator: function (node) {
79+
VariableDeclarator: node => {
7980
if (!isTestFile && deepStrictEqual(espurify(node), avaVariableDeclaratorAst)) {
8081
isTestFile = true;
8182
}
8283
},
83-
CallExpression: function (node) {
84+
CallExpression: node => {
8485
if (!currentTestNode) {
8586
if (isTestFunctionCall(node.callee)) {
8687
// entering test function
8788
currentTestNode = node;
8889
}
8990
}
9091
},
91-
'CallExpression:exit': function (node) {
92+
'CallExpression:exit': node => {
9293
if (currentTestNode === node) {
9394
// leaving test function
9495
currentTestNode = null;
9596
}
9697
},
97-
'Program:exit': function () {
98+
'Program:exit': () => {
9899
isTestFile = false;
99100
}
100101
};
101102

102-
var rule = {
103-
hasTestModifier: function (mod) {
104-
return hasTestModifier(currentTestNode, mod);
105-
},
106-
hasNoHookModifier: function () {
107-
return !hasTestModifier(currentTestNode, 'before') &&
103+
const rule = {
104+
hasTestModifier: mod => hasTestModifier(currentTestNode, mod),
105+
hasNoHookModifier: () => !hasTestModifier(currentTestNode, 'before') &&
108106
!hasTestModifier(currentTestNode, 'beforeEach') &&
109107
!hasTestModifier(currentTestNode, 'after') &&
110-
!hasTestModifier(currentTestNode, 'afterEach');
111-
},
112-
merge: function (customHandlers) {
113-
Object.keys(predefinedRules).forEach(function (key) {
114-
var predef = predefinedRules[key];
108+
!hasTestModifier(currentTestNode, 'afterEach'),
109+
merge: customHandlers => {
110+
Object.keys(predefinedRules).forEach(key => {
111+
const predef = predefinedRules[key];
115112

116113
if (typeof customHandlers[key] === 'function') {
117-
predefinedRules[key] = function (node) {
114+
predefinedRules[key] = node => {
118115
if (/:exit$/.test(key)) {
119116
customHandlers[key](node);
120117
predef(node); // append predefined rules on exit
@@ -126,28 +123,19 @@ module.exports = function createAvaRule() {
126123
}
127124
});
128125

129-
return assign({}, customHandlers, predefinedRules);
126+
return Object.assign({}, customHandlers, predefinedRules);
130127
}
131128
};
132129

133-
rule.isInTestFile = function () {
134-
return isTestFile;
135-
};
136-
137-
rule.isTestNode = function (node) {
138-
return currentTestNode === node;
139-
};
130+
rule.isInTestFile = () => isTestFile;
131+
rule.isTestNode = node => currentTestNode === node;
132+
rule.isInTestNode = () => currentTestNode;
140133

141-
rule.isInTestNode = function () {
142-
return currentTestNode;
143-
};
134+
rule.if = rest(predicates => {
135+
return visitor => {
136+
return node => {
137+
const isValid = predicates.every(fn => fn(node));
144138

145-
rule.if = rest(function (predicates) {
146-
return function (visitor) {
147-
return function (node) {
148-
var isValid = predicates.every(function (fn) {
149-
return fn(node);
150-
});
151139
if (isValid) {
152140
return visitor(node);
153141
}

package.json

+7-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
}
3838
],
3939
"engines": {
40-
"node": ">=0.10.0"
40+
"node": ">=4"
4141
},
4242
"scripts": {
4343
"test": "xo && nyc ava",
@@ -68,7 +68,6 @@
6868
"espurify": "^1.5.0",
6969
"lodash.rest": "^4.0.3",
7070
"multimatch": "^2.1.0",
71-
"object-assign": "^4.0.1",
7271
"pkg-up": "^1.0.0",
7372
"req-all": "^0.1.0"
7473
},
@@ -84,5 +83,11 @@
8483
},
8584
"peerDependencies": {
8685
"eslint": ">=2"
86+
},
87+
"xo": {
88+
"esnext": true,
89+
"rules": {
90+
"prefer-template": "off"
91+
}
8792
}
8893
}

rules/assertion-arguments.js

+18-21
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
'use strict';
2-
var util = require('../util');
3-
var createAvaRule = require('../create-ava-rule');
2+
const util = require('../util');
3+
const createAvaRule = require('../create-ava-rule');
44

5-
var expectedNbArguments = {
5+
const expectedNbArguments = {
66
deepEqual: {
77
min: 2,
88
max: 3
@@ -74,8 +74,8 @@ var expectedNbArguments = {
7474
};
7575

7676
function nbArguments(node) {
77-
var name = node.property.name;
78-
var nArgs = expectedNbArguments[name];
77+
const name = node.property.name;
78+
const nArgs = expectedNbArguments[name];
7979

8080
if (nArgs) {
8181
return nArgs;
@@ -88,25 +88,22 @@ function nbArguments(node) {
8888
return false;
8989
}
9090

91-
module.exports = function (context) {
92-
var ava = createAvaRule();
93-
var options = context.options[0] || {};
94-
var enforcesMessage = Boolean(options.message);
95-
var shouldHaveMessage = options.message !== 'never';
91+
module.exports = context => {
92+
const ava = createAvaRule();
93+
const options = context.options[0] || {};
94+
const enforcesMessage = Boolean(options.message);
95+
const shouldHaveMessage = options.message !== 'never';
9696

9797
function report(node, message) {
98-
context.report({
99-
node: node,
100-
message: message
101-
});
98+
context.report({node, message});
10299
}
103100

104101
return ava.merge({
105102
CallExpression: ava.if(
106103
ava.isInTestFile,
107104
ava.isInTestNode
108-
)(function (node) {
109-
var callee = node.callee;
105+
)(node => {
106+
const callee = node.callee;
110107

111108
if (callee.type !== 'MemberExpression' ||
112109
!callee.property ||
@@ -116,19 +113,19 @@ module.exports = function (context) {
116113
return;
117114
}
118115

119-
var gottenArgs = node.arguments.length;
120-
var nArgs = nbArguments(callee);
116+
const gottenArgs = node.arguments.length;
117+
const nArgs = nbArguments(callee);
121118

122119
if (!nArgs) {
123120
return;
124121
}
125122

126123
if (gottenArgs < nArgs.min) {
127-
report(node, 'Not enough arguments. Expected at least ' + nArgs.min + '.');
124+
report(node, `Not enough arguments. Expected at least ${nArgs.min}.`);
128125
} else if (node.arguments.length > nArgs.max) {
129-
report(node, 'Too many arguments. Expected at most ' + nArgs.max + '.');
126+
report(node, `Too many arguments. Expected at most ${nArgs.max}.`);
130127
} else if (enforcesMessage && nArgs.min !== nArgs.max) {
131-
var hasMessage = gottenArgs === nArgs.max;
128+
const hasMessage = gottenArgs === nArgs.max;
132129

133130
if (!hasMessage && shouldHaveMessage) {
134131
report(node, 'Expected an assertion message, but found none.');

rules/assertion-message.js

+14-13
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
'use strict';
2-
var util = require('../util');
3-
var createAvaRule = require('../create-ava-rule');
2+
const util = require('../util');
3+
const createAvaRule = require('../create-ava-rule');
44

5-
var expectedNbArguments = {
5+
const expectedNbArguments = {
66
deepEqual: 2,
77
fail: 0,
88
false: 1,
@@ -21,7 +21,7 @@ var expectedNbArguments = {
2121
};
2222

2323
function nbArguments(node) {
24-
var nArgs = expectedNbArguments[node.property.name];
24+
const nArgs = expectedNbArguments[node.property.name];
2525

2626
if (nArgs !== undefined) {
2727
return nArgs;
@@ -34,37 +34,38 @@ function nbArguments(node) {
3434
return -1;
3535
}
3636

37-
module.exports = function (context) {
38-
var ava = createAvaRule();
39-
var shouldHaveMessage = context.options[0] !== 'never';
37+
module.exports = context => {
38+
const ava = createAvaRule();
39+
const shouldHaveMessage = context.options[0] !== 'never';
4040

4141
return ava.merge({
4242
CallExpression: ava.if(
4343
ava.isInTestFile,
4444
ava.isInTestNode
45-
)(function (node) {
46-
var callee = node.callee;
45+
)(node => {
46+
const callee = node.callee;
47+
4748
if (callee.type !== 'MemberExpression') {
4849
return;
4950
}
5051

5152
if (callee.property && util.nameOfRootObject(callee) === 't') {
52-
var nArgs = nbArguments(callee);
53+
const nArgs = nbArguments(callee);
5354

5455
if (nArgs === -1) {
5556
return;
5657
}
5758

58-
var hasMessage = nArgs < node.arguments.length;
59+
const hasMessage = nArgs < node.arguments.length;
5960

6061
if (!hasMessage && shouldHaveMessage) {
6162
context.report({
62-
node: node,
63+
node,
6364
message: 'Expected an assertion message, but found none.'
6465
});
6566
} else if (hasMessage && !shouldHaveMessage) {
6667
context.report({
67-
node: node,
68+
node,
6869
message: 'Expected no assertion message, but found one.'
6970
});
7071
}

rules/max-asserts.js

+13-12
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
'use strict';
2-
var util = require('../util');
3-
var createAvaRule = require('../create-ava-rule');
2+
const util = require('../util');
3+
const createAvaRule = require('../create-ava-rule');
44

5-
var notAssertionMethods = ['plan', 'end'];
5+
const notAssertionMethods = ['plan', 'end'];
66

7-
module.exports = function (context) {
8-
var ava = createAvaRule();
9-
var maxAssertions = context.options[0] || 5;
10-
var assertionCount = 0;
11-
var nodeToReport = null;
7+
module.exports = context => {
8+
const ava = createAvaRule();
9+
const maxAssertions = context.options[0] || 5;
10+
let assertionCount = 0;
11+
let nodeToReport = null;
1212

1313
return ava.merge({
1414
'CallExpression': ava.if(
1515
ava.isInTestFile,
1616
ava.isInTestNode
17-
)(function (node) {
18-
var callee = node.callee;
17+
)(node => {
18+
const callee = node.callee;
19+
1920
if (callee.type !== 'MemberExpression') {
2021
return;
2122
}
@@ -30,12 +31,12 @@ module.exports = function (context) {
3031
}
3132
}
3233
}),
33-
'CallExpression:exit': ava.if(ava.isTestNode)(function () {
34+
'CallExpression:exit': ava.if(ava.isTestNode)(() => {
3435
// leaving test function
3536
if (assertionCount > maxAssertions) {
3637
context.report({
3738
node: nodeToReport,
38-
message: 'Expected at most ' + maxAssertions + ' assertions, but found ' + assertionCount + '.'
39+
message: `Expected at most ${maxAssertions} assertions, but found ${assertionCount}.`
3940
});
4041
}
4142

0 commit comments

Comments
 (0)