From 5dec4fc835aaf8969fb2ff61c5196fe5fa5f0eb4 Mon Sep 17 00:00:00 2001 From: Kevin Partington Date: Mon, 11 May 2020 18:34:08 -0500 Subject: [PATCH] Chore: Add eslint-plugin-eslint-plugin devDependency (fixes #85) --- .eslintrc.json | 18 +++++- lib/rules/literal-compare-order.js | 2 +- lib/rules/no-assert-logical-expression.js | 2 +- lib/rules/no-compare-relation-boolean.js | 2 +- package-lock.json | 6 ++ package.json | 1 + tests/lib/rules/no-async-in-loops.js | 23 ------- tests/lib/rules/require-expect.js | 76 +++++++++++------------ tests/lib/rules/resolve-async.js | 8 --- 9 files changed, 63 insertions(+), 75 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 1bc009db..2f55e9bb 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,11 +1,11 @@ { - "extends": ["plugin:node/recommended"], + "extends": ["plugin:node/recommended", "plugin:eslint-plugin/recommended"], "env": { "node": true }, - "plugins": ["node"], + "plugins": ["node", "eslint-plugin"], "rules": { "array-bracket-spacing": ["error", "never"], @@ -155,6 +155,18 @@ }], "valid-typeof": "error", "wrap-iife": "error", - "yoda": ["error", "never"] + "yoda": ["error", "never"], + + "eslint-plugin/consistent-output": "error", + "eslint-plugin/meta-property-ordering": ["error", [ + "type", "docs", "fixable", "messages", "schema", "deprecated", "replacedBy" + ]], + "eslint-plugin/no-deprecated-context-methods": "error", + "eslint-plugin/prefer-output-null": "error", + "eslint-plugin/prefer-placeholders": "error", + "eslint-plugin/report-message-format": ["error", "^[A-Z].*\\.$"], + "eslint-plugin/require-meta-schema": "error", + "eslint-plugin/test-case-property-ordering": "error", + "eslint-plugin/test-case-shorthand-strings": "error" } } diff --git a/lib/rules/literal-compare-order.js b/lib/rules/literal-compare-order.js index 35d3267e..61f8705d 100644 --- a/lib/rules/literal-compare-order.js +++ b/lib/rules/literal-compare-order.js @@ -51,7 +51,7 @@ module.exports = { } else /* istanbul ignore next: no assertions compare expected first */ if (!compareActualFirst && args[0].type !== "Literal" && args[1].type === "Literal") { context.report({ node: args[0], - message: "expectedFirst", + messageId: "expectedFirst", data: { expected: sourceCode.getText(args[0]), actual: sourceCode.getText(args[1]) diff --git a/lib/rules/no-assert-logical-expression.js b/lib/rules/no-assert-logical-expression.js index 0bfc140e..377f04e8 100644 --- a/lib/rules/no-assert-logical-expression.js +++ b/lib/rules/no-assert-logical-expression.js @@ -21,10 +21,10 @@ module.exports = { category: "Best Practices", recommended: false }, + fixable: null, messages: { noLogicalOperator: "Do not use '{{operator}}' in assertion arguments." }, - fixable: null, schema: [] }, diff --git a/lib/rules/no-compare-relation-boolean.js b/lib/rules/no-compare-relation-boolean.js index a3eeb3c0..211a45f0 100644 --- a/lib/rules/no-compare-relation-boolean.js +++ b/lib/rules/no-compare-relation-boolean.js @@ -22,7 +22,7 @@ module.exports = { category: "Best Practices" }, messages: { - redundantComparison: "Redundant comparison of relational expression to boolean literal" + redundantComparison: "Redundant comparison of relational expression to boolean literal." }, schema: [] }, diff --git a/package-lock.json b/package-lock.json index ddc0fec0..f1f6573a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -897,6 +897,12 @@ "regexpp": "^2.0.0" } }, + "eslint-plugin-eslint-plugin": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-2.2.1.tgz", + "integrity": "sha512-nvmoefIqdFX+skyCt/dN9HaeSNyL8A9UvEtCqCFfJBjKpAR0uRL3SGPLlvDsnfXWtN72G/viowvpA33VjQkGCg==", + "dev": true + }, "eslint-plugin-node": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz", diff --git a/package.json b/package.json index 6dac05da..68c2a405 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "chai": "^4.2.0", "coveralls": "^3.0.8", "eslint": "^5.16.0", + "eslint-plugin-eslint-plugin": "^2.2.1", "eslint-plugin-node": "^7.0.1", "mocha": "^5.2.0", "mocha-lcov-reporter": "^1.3.0", diff --git a/tests/lib/rules/no-async-in-loops.js b/tests/lib/rules/no-async-in-loops.js index 2e679c92..61df0b60 100644 --- a/tests/lib/rules/no-async-in-loops.js +++ b/tests/lib/rules/no-async-in-loops.js @@ -564,29 +564,6 @@ ruleTester.run("no-async-in-loops", rule, { type: "CallExpression" }] }, - { - code: "test('name', function (assert) { for (i in x) assert.async(); });", - errors: [{ - messageId: "unexpectedAsyncInLoop", - data: { - call: "assert.async()", - loopTypeText: "for-in loop" - }, - type: "CallExpression" - }] - }, - { - code: "test('name', function (assert) { for (i of x) assert.async(); });", - parserOptions: { ecmaVersion: 6 }, - errors: [{ - messageId: "unexpectedAsyncInLoop", - data: { - call: "assert.async()", - loopTypeText: "for-of loop" - }, - type: "CallExpression" - }] - }, { code: "test('name', function (assert) { for (i of x) assert.async(); });", parserOptions: { ecmaVersion: 6 }, diff --git a/tests/lib/rules/require-expect.js b/tests/lib/rules/require-expect.js index 3a980a99..a3adcaf5 100644 --- a/tests/lib/rules/require-expect.js +++ b/tests/lib/rules/require-expect.js @@ -132,102 +132,102 @@ ruleTester.run("require-expect", rule, { // default - make sure expect is identified correctly { code: "test('name', function(assert) { other.assert.expect(0) });", - errors: [alwaysErrorMessage("assert.expect")], - options: [] + options: [], + errors: [alwaysErrorMessage("assert.expect")] }, // assert in loop block { code: "test('name', function(assert) { while (false) { assert.ok(true) } });", - errors: [exceptSimpleErrorMessage("assert.expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("assert.expect")] }, // global assertion in loop block { code: "test('name', function() { for (;;) { ok(true) } });", - errors: [exceptSimpleErrorMessage("expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("expect")] }, // assert used in callback { code: "test('name', function(assert) { maybe(function() { assert.ok(true) }); });", - errors: [exceptSimpleErrorMessage("assert.expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("assert.expect")] }, { code: "test('name', function(assert) { maybe(() => { assert.ok(true) }); });", - errors: [exceptSimpleErrorMessage("assert.expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("assert.expect")] }, { code: "test('name', function(assert) { maybe(() => assert.ok(true)); });", - errors: [exceptSimpleErrorMessage("assert.expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("assert.expect")] }, // global assertion used in callback { code: "test('name', function(assert) { maybe(function() { ok(true) }); });", - errors: [exceptSimpleErrorMessage("assert.expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("assert.expect")] }, // assert in function expression { code: "test('name', function(assert) { var maybe = function() { assert.ok(true) }; });", - errors: [exceptSimpleErrorMessage("assert.expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("assert.expect")] }, // global assertion in function expression { code: "test('name', function() { var maybe = function() { ok(true) }; });", - errors: [exceptSimpleErrorMessage("expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("expect")] }, // `expect` does not count when used inside of a block. { code: "test('name', function(assert) { function name() { assert.expect(1); assert.ok(true) } });", - errors: [exceptSimpleErrorMessage("assert.expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("assert.expect")] }, // global `expect` does not count when used inside of a block. { code: "test('name', function() { function name() { expect(1); ok(true) } });", - errors: [exceptSimpleErrorMessage("expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("expect")] }, // `expect` does not count when used inside of a callback { code: "test('name', function(assert) { maybe(function() { assert.expect(1); assert.ok(true) }); });", - errors: [exceptSimpleErrorMessage("assert.expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("assert.expect")] }, // global `expect` does not count when used inside of a callback { code: "test('name', function() { maybe(function() { expect(1); ok(true) }); });", - errors: [exceptSimpleErrorMessage("expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("expect")] }, // assert in outer test context and nested in a block { code: "test('name', function(assert) { assert.ok(true); if (true) { assert.ok(true); } });", - errors: [exceptSimpleErrorMessage("assert.expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("assert.expect")] }, // Deeply nested { code: "test('name', function() { if (true) { if (true) { ok(true); } } });", - errors: [exceptSimpleErrorMessage("expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("expect")] }, // Sending assert to a function @@ -236,8 +236,8 @@ ruleTester.run("require-expect", rule, { "function myAssertion(a, assert, c) { assert.ok(true); }", "test('name', function(assert) { myAssertion(null, assert, null); });" ].join(returnAndIndent), - errors: [exceptSimpleErrorMessage("assert.expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("assert.expect")] }, // Sending assert to a function - renaming assert @@ -246,8 +246,8 @@ ruleTester.run("require-expect", rule, { "function myAssertion(a, localAssert, c) { localAssert.ok(true); }", "test('name', function(myAssert) { myAssertion(null, myAssert, null); });" ].join(returnAndIndent), - errors: [exceptSimpleErrorMessage("myAssert.expect")], - options: ["except-simple"] + options: ["except-simple"], + errors: [exceptSimpleErrorMessage("myAssert.expect")] }, // nested modules @@ -268,15 +268,15 @@ ruleTester.run("require-expect", rule, { " });", "});" ].join(returnAndIndent), - errors: [Object.assign(exceptSimpleErrorMessage("assert.expect"), { line: 2 })], - options: ["except-simple"] + options: ["except-simple"], + errors: [Object.assign(exceptSimpleErrorMessage("assert.expect"), { line: 2 })] }, // Multiple assert statements only report one error per test { code: "test('name', function(assert) { maybe(function() { assert.ok(true); assert.ok(true); }) });", - errors: [Object.assign(exceptSimpleErrorMessage("assert.expect"), { column: 1 })], - options: ["except-simple"] + options: ["except-simple"], + errors: [Object.assign(exceptSimpleErrorMessage("assert.expect"), { column: 1 })] }, // "always" configration - simple case diff --git a/tests/lib/rules/resolve-async.js b/tests/lib/rules/resolve-async.js index 2447f52c..1445230b 100644 --- a/tests/lib/rules/resolve-async.js +++ b/tests/lib/rules/resolve-async.js @@ -166,18 +166,10 @@ ruleTester.run("resolve-async", rule, { code: "QUnit.test('name', function () { stop(); });", errors: [createNeedStartCallsMessage("CallExpression")] }, - { - code: "asyncTest('name', function () {});", - errors: [createNeedStartCallsMessage("CallExpression")] - }, { code: "test('name', function () { QUnit.stop(); });", errors: [createNeedStartCallsMessage("CallExpression")] }, - { - code: "QUnit.asyncTest('name', function () {});", - errors: [createNeedStartCallsMessage("CallExpression")] - }, { code: "QUnit.test('name', function () { QUnit.stop(); });", errors: [createNeedStartCallsMessage("CallExpression")]