Skip to content

Commit

Permalink
New: Additional APIs (fixes #6256) (#7669)
Browse files Browse the repository at this point in the history
* New: Additional APIs (fixes #6256)

* Fix unit test
  • Loading branch information
ilyavolodin committed Dec 9, 2016
1 parent 4278c42 commit 2cdfb4e
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 14 deletions.
2 changes: 2 additions & 0 deletions lib/cli-engine.js
Expand Up @@ -792,4 +792,6 @@ CLIEngine.prototype = {

};

CLIEngine.version = pkg.version;

module.exports = CLIEngine;
15 changes: 14 additions & 1 deletion lib/eslint.js
Expand Up @@ -26,7 +26,10 @@ const assert = require("assert"),
Traverser = require("./util/traverser"),
RuleContext = require("./rule-context"),
rules = require("./rules"),
timing = require("./timing");
timing = require("./timing"),

pkg = require("../package.json");


//------------------------------------------------------------------------------
// Typedefs
Expand Down Expand Up @@ -1192,6 +1195,16 @@ module.exports = (function() {
return require("../conf/eslint.json");
};

/**
* Gets an object with all loaded rules.
* @returns {Map} All loaded rules
*/
api.getRules = function() {
return rules.getAllLoadedRules();
};

api.version = pkg.version;

/**
* Gets variables that are declared by a specified node.
*
Expand Down
16 changes: 16 additions & 0 deletions lib/rules.js
Expand Up @@ -75,6 +75,21 @@ function getHandler(ruleId) {
}
}

/**
* Get an object with all currently loaded rules
* @returns {Map} All loaded rules
*/
function getAllLoadedRules() {
const allRules = new Map();

Object.keys(rules).forEach(name => {
const rule = getHandler(name);

allRules.set(name, rule);
});
return allRules;
}

/**
* Reset rules storage.
* Should be used only in tests.
Expand All @@ -89,6 +104,7 @@ module.exports = {
load,
importPlugin,
get: getHandler,
getAllLoadedRules,
testClear,

/**
Expand Down
14 changes: 13 additions & 1 deletion tests/lib/cli-engine.js
Expand Up @@ -18,7 +18,8 @@ const assert = require("chai").assert,
Plugins = require("../../lib/config/plugins"),
fs = require("fs"),
os = require("os"),
hash = require("../../lib/util/hash");
hash = require("../../lib/util/hash"),
rules = require("../../lib/rules");

require("shelljs/global");

Expand Down Expand Up @@ -82,6 +83,7 @@ describe("CLIEngine", () => {
after(() => {
rm("-r", fixtureDir);
Plugins.testReset();
rules.testReset();
});

describe("new CLIEngine(options)", () => {
Expand Down Expand Up @@ -2704,4 +2706,14 @@ describe("CLIEngine", () => {

});

describe("when retreiving version number", () => {
it("should return current version number", () => {
const eslintCLI = require("../../lib/cli-engine");
const version = eslintCLI.version;

assert.isString(version);
assert.isTrue(parseInt(version[0], 10) >= 3);
});
});

});
4 changes: 3 additions & 1 deletion tests/lib/cli.js
Expand Up @@ -19,7 +19,8 @@ const assert = require("chai").assert,
leche = require("leche"),
fs = require("fs"),
os = require("os"),
sh = require("shelljs");
sh = require("shelljs"),
rules = require("../../lib/rules");

const proxyquire = require("proxyquire").noCallThru().noPreserveCache();

Expand Down Expand Up @@ -91,6 +92,7 @@ describe("cli", () => {

after(() => {
sh.rm("-r", fixtureDir);
rules.testReset();
});

describe("execute()", () => {
Expand Down
32 changes: 26 additions & 6 deletions tests/lib/eslint.js
Expand Up @@ -1917,13 +1917,15 @@ describe("eslint", () => {

describe("when evaluating code with comments to disable and enable configurable rule as part of plugin", () => {

eslint.defineRule("test-plugin/test-rule", context => ({
Literal(node) {
if (node.value === "trigger violation") {
context.report(node, "Reporting violation.");
before(() => {
eslint.defineRule("test-plugin/test-rule", context => ({
Literal(node) {
if (node.value === "trigger violation") {
context.report(node, "Reporting violation.");
}
}
}
}));
}));
});

it("should not report a violation when inline comment enables plugin rule and there's no violation", () => {
const config = { rules: {} };
Expand Down Expand Up @@ -2735,6 +2737,24 @@ describe("eslint", () => {
});
});

describe("when calling getRules", () => {
it("should return all loaded rules", () => {
const rules = eslint.getRules();

assert.isAbove(rules.size, 230);
assert.isObject(rules.get("no-alert"));
});
});

describe("when calling version", () => {
it("should return current version number", () => {
const version = eslint.version;

assert.isString(version);
assert.isTrue(parseInt(version[0], 10) >= 3);
});
});

describe("when evaluating code without comments to environment", () => {
it("should report a violation when using typed array", () => {
const code = "var array = new Uint8Array();";
Expand Down
24 changes: 19 additions & 5 deletions tests/lib/rules.js
Expand Up @@ -19,11 +19,7 @@ const assert = require("chai").assert,
describe("rules", () => {

beforeEach(() => {
rules.testClear();
});

afterEach(() => {
rules.load();
rules.testReset();
});

describe("when given an invalid rules directory", () => {
Expand Down Expand Up @@ -69,5 +65,23 @@ describe("rules", () => {
assert.isDefined(rules.get("custom-plugin/custom-rule"));
assert.equal(rules.get("custom-plugin/custom-rule"), customPlugin.rules["custom-rule"]);
});

it("should return custom rules as part of getAllLoadedRules", () => {
rules.importPlugin(customPlugin, pluginName);

const allRules = rules.getAllLoadedRules();

assert.equal(allRules.get("custom-plugin/custom-rule"), customPlugin.rules["custom-rule"]);
});
});

describe("when loading all rules", () => {
it("should return a map", () => {
const allRules = rules.getAllLoadedRules();

assert.isAbove(allRules.size, 230);
assert.instanceOf(allRules, Map);
assert.isObject(allRules.get("no-alert"));
});
});
});

0 comments on commit 2cdfb4e

Please sign in to comment.