diff --git a/src/get_differences.js b/src/get_differences.js index e350a66..c26b2d2 100644 --- a/src/get_differences.js +++ b/src/get_differences.js @@ -1,6 +1,6 @@ 'use strict'; -/* eslint-disable security/detect-object-injection */ +/* eslint-disable security/detect-object-injection, max-statements */ var _ = require('lodash'); var equal = require('deep-equal'); @@ -21,6 +21,22 @@ function compareRules(leftConfig, rightConfig) { var rightClean = _.omit(rightConfig, ['rules', 'plugins', 'extends']); var sharedRules = _.intersection(leftRules, rightRules); + var ruleDifferences = _.chain(sharedRules) + .map(function(rule) { + return { + rule: rule, + left: leftConfig.rules[rule], + right: rightConfig.rules[rule], + }; + }) + .reject(function(item) { + return equal(item.left, item.right); + }) + .value(); + var ruleDifferenceNames = _.map(ruleDifferences, function(item) { + return item.rule; + }); + var matchingRules = _.difference(sharedRules, ruleDifferenceNames); return { pluginsMissingFromLeft: _.difference(rightPlugins, leftPlugins), @@ -32,20 +48,9 @@ function compareRules(leftConfig, rightConfig) { extendsMissingFromRight: _.difference(leftExtends, rightExtends), rulesMissingFromLeft: _.difference(rightRules, leftRules), - sharedRules: sharedRules, + matchingRules: matchingRules, rulesMissingFromRight: _.difference(leftRules, rightRules), - ruleDifferences: _.chain(sharedRules) - .map(function(rule) { - return { - rule: rule, - left: leftConfig.rules[rule], - right: rightConfig.rules[rule], - }; - }) - .reject(function(item) { - return equal(item.left, item.right); - }) - .value(), + ruleDifferences: ruleDifferences, differences: deepDiff(leftClean, rightClean) || [], }; diff --git a/src/get_score.js b/src/get_score.js index 58bd86e..9f37bc6 100644 --- a/src/get_score.js +++ b/src/get_score.js @@ -5,21 +5,18 @@ var MAX = 100; module.exports = function(differences) { var totals = { rulesMissingFromLeft: getLength(differences.rulesMissingFromLeft), - sharedRules: getLength(differences.sharedRules), + matchingRules: getLength(differences.matchingRules), rulesMissingFromRight: getLength(differences.rulesMissingFromRight), ruleDifferences: getLength(differences.ruleDifferences), }; - var totalRules = totals.rulesMissingFromLeft + totals.sharedRules - + totals.rulesMissingFromRight; - var unmatched = totals.ruleDifferences + totals.rulesMissingFromLeft - + totals.rulesMissingFromRight; - + var totalRules = totals.rulesMissingFromLeft + totals.matchingRules + + totals.rulesMissingFromRight + totals.ruleDifferences; if (totalRules === 0) { return MAX; } - return Math.round((totalRules - unmatched) / totalRules * MAX); + return Math.round(totals.matchingRules / totalRules * MAX); }; function getLength(array) { diff --git a/src/render_differences.js b/src/render_differences.js index 301c382..956e481 100644 --- a/src/render_differences.js +++ b/src/render_differences.js @@ -76,8 +76,8 @@ function printExtendsDifferences(result) { function printRuleDifferences(result) { - return 'Rules shared:' - + joinOrNone(_.map(result.sharedRules, bold)) + return 'Rules matching:' + + joinOrNone(_.map(result.matchingRules, bold)) + SEPARATOR + 'Rules missing from left:' + joinOrNone(_.map(result.rulesMissingFromLeft, bold)) diff --git a/test/unit/test_get_differences.js b/test/unit/test_get_differences.js index 8047b95..b4db45d 100644 --- a/test/unit/test_get_differences.js +++ b/test/unit/test_get_differences.js @@ -25,7 +25,7 @@ describe('unit/getDifferences', function() { expect(actual).to.have.property('extendsMissingFromRight').that.deep.equal([]); expect(actual).to.have.property('rulesMissingFromLeft').that.deep.equal([]); - expect(actual).to.have.property('sharedRules').that.deep.equal([]); + expect(actual).to.have.property('matchingRules').that.deep.equal([]); expect(actual).to.have.property('rulesMissingFromRight').that.deep.equal([]); expect(actual).to.have.property('ruleDifferences').that.deep.equal([]); @@ -42,6 +42,7 @@ describe('unit/getDifferences', function() { three: ['error', { setting: 1, }], + four: 'error', }, }; var right = { @@ -51,6 +52,7 @@ describe('unit/getDifferences', function() { setting: 2, }], four: 'error', + five: 'error', }, }; @@ -65,9 +67,9 @@ describe('unit/getDifferences', function() { expect(actual).to.have.property('extendsMissingFromRight').that.deep.equal([]); expect(actual).to.have.property('rulesMissingFromLeft') - .that.deep.equal(['four']); - expect(actual).to.have.property('sharedRules') - .that.deep.equal(['two', 'three']); + .that.deep.equal(['five']); + expect(actual).to.have.property('matchingRules') + .that.deep.equal(['two', 'four']); expect(actual).to.have.property('rulesMissingFromRight') .that.deep.equal(['one']); expect(actual).to.have.property('ruleDifferences') @@ -107,7 +109,7 @@ describe('unit/getDifferences', function() { expect(actual).to.have.property('extendsMissingFromRight').that.deep.equal([]); expect(actual).to.have.property('rulesMissingFromLeft').that.deep.equal([]); - expect(actual).to.have.property('sharedRules').that.deep.equal([]); + expect(actual).to.have.property('matchingRules').that.deep.equal([]); expect(actual).to.have.property('rulesMissingFromRight').that.deep.equal([]); expect(actual).to.have.property('ruleDifferences').that.deep.equal([]); @@ -142,7 +144,7 @@ describe('unit/getDifferences', function() { expect(actual).to.have.property('extendsMissingFromRight').that.deep.equal([]); expect(actual).to.have.property('rulesMissingFromLeft').that.deep.equal([]); - expect(actual).to.have.property('sharedRules').that.deep.equal([]); + expect(actual).to.have.property('matchingRules').that.deep.equal([]); expect(actual).to.have.property('rulesMissingFromRight').that.deep.equal([]); expect(actual).to.have.property('ruleDifferences').that.deep.equal([]); diff --git a/test/unit/test_get_score.js b/test/unit/test_get_score.js index f26f30f..e597887 100644 --- a/test/unit/test_get_score.js +++ b/test/unit/test_get_score.js @@ -16,7 +16,7 @@ describe('unit/getScore', function() { it('returns 100 for no differences', function() { var differences = { rulesMissingFromLeft: [], - sharedRules: [], + matchingRules: [], rulesMissingFromRight: [], ruleDifferences: [], }; @@ -28,11 +28,11 @@ describe('unit/getScore', function() { it('returns all differences', function() { var differences = { - rulesMissingFromLeft: ['one', 'two'], - sharedRules: ['three', 'four'], - rulesMissingFromRight: ['five', 'six'], + rulesMissingFromLeft: ['one', 'two', 'three'], + matchingRules: ['four', 'five'], + rulesMissingFromRight: ['six', 'seven'], ruleDifferences: [{ - rule: 'five', + rule: 'eight', left: ['error', { setting: 1, }], @@ -41,13 +41,13 @@ describe('unit/getScore', function() { }; var actual = getScore(differences); - expect(actual).to.equal(17); + expect(actual).to.equal(25); }); it('returns minimal differences', function() { var differences = { rulesMissingFromLeft: [], - sharedRules: ['one'], + matchingRules: ['one'], rulesMissingFromRight: [], ruleDifferences: [], }; diff --git a/test/unit/test_render_differences.js b/test/unit/test_render_differences.js index a86ad7d..db057ba 100644 --- a/test/unit/test_render_differences.js +++ b/test/unit/test_render_differences.js @@ -92,7 +92,7 @@ describe('unit/renderDifferences', function() { + ' _three\n' + ' _four\n' + '\n' - + 'Rules shared: None\n' + + 'Rules matching: None\n' + '\n' + 'Rules missing from left: 2\n' + ' +one\n' @@ -144,7 +144,7 @@ describe('unit/renderDifferences', function() { + '\n' + 'Extends missing from right: None\n' + '\n' - + 'Rules shared: None\n' + + 'Rules matching: None\n' + '\n' + 'Rules missing from left: None\n' + '\n'