Skip to content

Commit

Permalink
Auto-fix XO version when still supporting Node.js 4
Browse files Browse the repository at this point in the history
  • Loading branch information
SamVerschueren committed May 9, 2018
1 parent 35690ea commit 5918d79
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 3 deletions.
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -79,6 +79,6 @@
"load-json-file": "^2.0.0",
"nyc": "^8.1.0",
"tempy": "^0.1.0",
"xo": "*"
"xo": "^0.20.3"
}
}
7 changes: 5 additions & 2 deletions rules/xo.js
Expand Up @@ -61,11 +61,14 @@ module.exports = ctx => {
installedVersion = installedVersion.replace(/^(~|\^)/, '');

const engine = pkg.engines && pkg.engines.node ? pkg.engines.node : undefined;
const supportsOlderVersions = engine && (semver.satisfies('0.10.0', engine) || semver.satisfies('0.12.0', engine));
const supportsNode0 = engine && (semver.satisfies('0.10.0', engine) || semver.satisfies('0.12.0', engine));
const supportsNode4 = engine && (semver.satisfies('4.0.0', engine));
const requiresUnicorn = requiredVersion === '*';

if (supportsOlderVersions && (!requiredVersion || requiredVersion === '*' || semver.gte(requiredVersion, '0.16.0'))) {
if (supportsNode0 && (!requiredVersion || requiredVersion === '*' || semver.gte(requiredVersion, '0.16.0'))) {
requiredVersion = '0.16.0';
} else if (supportsNode4 && (!requiredVersion || requiredVersion === '*' || semver.gte(requiredVersion, '0.20.3'))) {
requiredVersion = '0.20.3';
}

if (requiredVersion) {
Expand Down
12 changes: 12 additions & 0 deletions test/fixtures/xo/support/node4/package.json
@@ -0,0 +1,12 @@
{
"name": "xo",
"engines": {
"node": ">=4"
},
"scripts": {
"test": "xo"
},
"devDependencies": {
"xo": "*"
}
}
27 changes: 27 additions & 0 deletions test/xo.js
Expand Up @@ -233,6 +233,33 @@ test('support for older Node.js with unicorn version', async t => {
);
});

test('support for Node.js 4 with unicorn version', async t => {
await ruleTester(t, 'support/node4',
[
{
ruleId: 'xo',
severity: 'error',
message: 'Expected version \'0.20.3\' but found \'*\'.',
file: path.resolve(opts.cwd, 'support/node4/package.json')
}
],
[
{
name: 'xo',
engines: {
node: '>=4'
},
scripts: {
test: 'xo'
},
devDependencies: {
xo: '^0.20.3'
}
}
]
);
});

test('support for older Node.js with required unicorn version', async t => {
const ruleTester = clintonRuleTester(Object.assign({}, opts, {rules: {xo: ['error', '*']}}));

Expand Down

0 comments on commit 5918d79

Please sign in to comment.