@plugjs/eslint 0.5.41 → 0.6.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/eslint.cjs +24 -9
- package/dist/eslint.cjs.map +1 -1
- package/dist/eslint.mjs +25 -10
- package/dist/eslint.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -6
- package/src/eslint.ts +28 -12
- package/src/index.ts +2 -0
package/dist/eslint.cjs
CHANGED
|
@@ -35,7 +35,7 @@ var ESLint = class {
|
|
|
35
35
|
this._options = typeof arg === "string" ? { configFile: arg } : arg;
|
|
36
36
|
}
|
|
37
37
|
async pipe(files, context) {
|
|
38
|
-
const { directory, configFile } = this._options;
|
|
38
|
+
const { directory, configFile, ingoreDeprecatedRules } = this._options;
|
|
39
39
|
const cwd = directory ? context.resolve(directory) : (0, import_paths.getCurrentWorkingDirectory)();
|
|
40
40
|
(0, import_plug.assert)((0, import_paths.resolveDirectory)(cwd), `ESLint directory ${(0, import_logging.$p)(cwd)} does not exist`);
|
|
41
41
|
const overrideConfigFile = configFile ? context.resolve(configFile) : void 0;
|
|
@@ -43,14 +43,12 @@ var ESLint = class {
|
|
|
43
43
|
(0, import_plug.assert)((0, import_paths.resolveFile)(overrideConfigFile), `ESLint configuration ${(0, import_logging.$p)(overrideConfigFile)} does not exist`);
|
|
44
44
|
}
|
|
45
45
|
const eslint = new import_eslint.ESLint({
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"parserOptions": {
|
|
49
|
-
loggerFn: (arg, ...args) => context.log.warn(arg, ...args)
|
|
50
|
-
}
|
|
51
|
-
},
|
|
46
|
+
globInputPaths: false,
|
|
47
|
+
// we already have all globs resolved
|
|
52
48
|
overrideConfigFile,
|
|
49
|
+
// if any override config file was supplied...
|
|
53
50
|
cwd
|
|
51
|
+
// current working directory for eslint (where everything starts)
|
|
54
52
|
});
|
|
55
53
|
const paths = [...files.absolutePaths()];
|
|
56
54
|
const promises = paths.map(async (filePath) => {
|
|
@@ -73,22 +71,26 @@ var ESLint = class {
|
|
|
73
71
|
const { results, failures } = summary;
|
|
74
72
|
if (failures) throw import_asserts.BuildFailure.fail();
|
|
75
73
|
const report = context.log.report("ESLint Report");
|
|
74
|
+
const deprecated = {};
|
|
76
75
|
for (const result of results) {
|
|
77
76
|
const { filePath, source, messages } = result;
|
|
78
77
|
const file = (0, import_paths.resolveAbsolutePath)((0, import_paths.getCurrentWorkingDirectory)(), filePath);
|
|
78
|
+
for (const deprecation of result.usedDeprecatedRules) {
|
|
79
|
+
deprecated[deprecation.ruleId] = deprecation.replacedBy;
|
|
80
|
+
}
|
|
79
81
|
for (const record of messages) {
|
|
80
82
|
const {
|
|
81
83
|
severity,
|
|
82
84
|
message: msg,
|
|
83
85
|
ruleId: tags,
|
|
84
|
-
suggestions,
|
|
86
|
+
suggestions = [],
|
|
85
87
|
line,
|
|
86
88
|
column,
|
|
87
89
|
endLine = line,
|
|
88
90
|
endColumn = column + 1
|
|
89
91
|
} = record;
|
|
90
92
|
const message = [msg];
|
|
91
|
-
for (const suggestion of suggestions
|
|
93
|
+
for (const suggestion of suggestions) {
|
|
92
94
|
message.push(`- ${suggestion.desc}`);
|
|
93
95
|
}
|
|
94
96
|
const level = severity < 2 ? import_logging.WARN : import_logging.ERROR;
|
|
@@ -96,6 +98,19 @@ var ESLint = class {
|
|
|
96
98
|
report.add({ level, message, tags, line, column, length, file, source });
|
|
97
99
|
}
|
|
98
100
|
}
|
|
101
|
+
if (!ingoreDeprecatedRules) {
|
|
102
|
+
for (const [rule, replacedBy] of Object.entries(deprecated)) {
|
|
103
|
+
if (replacedBy.length) {
|
|
104
|
+
const replacements = replacedBy.map(import_logging.$grn);
|
|
105
|
+
replacements.unshift("");
|
|
106
|
+
const repl = replacements.join(`
|
|
107
|
+
${(0, import_logging.$gry)("*")} `);
|
|
108
|
+
report.add({ level: import_logging.WARN, message: `Rule ${(0, import_logging.$ylw)(rule)} was deprecated and replaced by ${repl}` });
|
|
109
|
+
} else {
|
|
110
|
+
report.add({ level: import_logging.WARN, message: `Rule ${(0, import_logging.$ylw)(rule)} was deprecated without replacement` });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
99
114
|
report.done(this._options.showSources);
|
|
100
115
|
context.log.notice("ESLint processed", files.length, "files");
|
|
101
116
|
}
|
package/dist/eslint.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/eslint.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAuB;AACvB,qBAA6B;AAC7B,gBAAyB;AACzB,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAuB;AACvB,qBAA6B;AAC7B,gBAAyB;AACzB,qBAAkD;AAClD,mBAA+F;AAC/F,oBAAqC;AAO9B,IAAM,SAAN,MAAmC;AAAA,EACvB;AAAA,EAGjB,YAAY,MAA8B,CAAC,GAAG;AAC5C,SAAK,WAAW,OAAO,QAAQ,WAAW,EAAE,YAAY,IAAI,IAAI;AAAA,EAClE;AAAA,EAEA,MAAM,KAAK,OAAc,SAAiC;AACxD,UAAM,EAAE,WAAW,YAAY,sBAAsB,IAAI,KAAK;AAE9D,UAAM,MAAM,YAAY,QAAQ,QAAQ,SAAS,QAAI,yCAA2B;AAChF,gCAAO,+BAAiB,GAAG,GAAG,wBAAoB,mBAAG,GAAG,CAAC,iBAAiB;AAE1E,UAAM,qBAAqB,aAAa,QAAQ,QAAQ,UAAU,IAAI;AACtE,QAAI,oBAAoB;AACtB,kCAAO,0BAAY,kBAAkB,GAAG,4BAAwB,mBAAG,kBAAkB,CAAC,iBAAiB;AAAA,IACzG;AAGA,UAAM,SAAS,IAAI,cAAAA,OAAW;AAAA,MAC5B,gBAAgB;AAAA;AAAA,MAChB;AAAA;AAAA,MACA;AAAA;AAAA,IACF,CAAC;AAGD,UAAM,QAAQ,CAAE,GAAG,MAAM,cAAc,CAAE;AACzC,UAAM,WAAW,MAAM,IAAI,OAAO,aAAa;AAC7C,YAAM,OAAO,UAAM,oBAAS,UAAU,OAAO;AAC7C,aAAO,OAAO,SAAS,MAAM,EAAE,SAAS,CAAC;AAAA,IAC3C,CAAC;AAGD,UAAM,cAAc,MAAM,QAAQ,WAAW,QAAQ;AAGrD,UAAM,UAAU,YAAY,OAAO,CAACC,UAAS,YAAY,MAAM;AAE7D,UAAI,WAAW,WAAW,YAAY;AACpC,gBAAQ,IAAI,MAAM,qBAAiB,mBAAG,MAAM,CAAC,CAAE,GAAG,WAAW,MAAM;AACnE,QAAAA,SAAQ;AACR,eAAOA;AAAA,MACT;AAGA,MAAAA,SAAQ,QAAQ,KAAK,GAAG,WAAW,KAAK;AACxC,aAAOA;AAAA,IACT,GAAG;AAAA,MACD,SAAS,CAAC;AAAA,MACV,UAAU;AAAA,IACZ,CAAC;AAGD,UAAM,EAAE,SAAS,SAAS,IAAI;AAC9B,QAAI,SAAU,OAAM,4BAAa,KAAK;AAGtC,UAAM,SAAS,QAAQ,IAAI,OAAO,eAAe;AAGjD,UAAM,aAAuC,CAAC;AAG9C,eAAW,UAAU,SAAS;AAC5B,YAAM,EAAE,UAAU,QAAQ,SAAS,IAAI;AACvC,YAAM,WAAO,sCAAoB,yCAA2B,GAAG,QAAQ;AAEvE,iBAAW,eAAe,OAAO,qBAAqB;AACpD,mBAAW,YAAY,MAAM,IAAI,YAAY;AAAA,MAC/C;AAEA,iBAAW,UAAU,UAAU;AAC7B,cAAM;AAAA,UACJ;AAAA,UACA,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,cAAc,CAAC;AAAA,UACf;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV,YAAY,SAAS;AAAA,QACvB,IAAI;AAEJ,cAAM,UAAU,CAAE,GAAI;AACtB,mBAAW,cAAc,aAAa;AACpC,kBAAQ,KAAK,KAAK,WAAW,IAAI,EAAE;AAAA,QACrC;AAGA,cAAM,QAAQ,WAAW,IAAI,sBAAO;AAGpC,cAAM,SAAS,YAAY,OAAO,YAAY,SAAS;AAGvD,eAAO,IAAI,EAAE,OAAO,SAAS,MAAM,MAAM,QAAQ,QAAQ,MAAM,OAAO,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,QAAI,CAAE,uBAAuB;AAC3B,iBAAW,CAAE,MAAM,UAAW,KAAK,OAAO,QAAQ,UAAU,GAAG;AAC7D,YAAI,WAAW,QAAQ;AACrB,gBAAM,eAAe,WAAW,IAAI,mBAAI;AACxC,uBAAa,QAAQ,EAAE;AACvB,gBAAM,OAAO,aAAa,KAAK;AAAA,MAAK,qBAAK,GAAG,CAAC,GAAG;AAChD,iBAAO,IAAI,EAAE,OAAO,qBAAM,SAAS,YAAQ,qBAAK,IAAI,CAAC,mCAAmC,IAAI,GAAG,CAAC;AAAA,QAClG,OAAO;AACL,iBAAO,IAAI,EAAE,OAAO,qBAAM,SAAS,YAAQ,qBAAK,IAAI,CAAC,sCAAsC,CAAC;AAAA,QAC9F;AAAA,MACF;AAAA,IACF;AAGA,WAAO,KAAK,KAAK,SAAS,WAAW;AACrC,YAAQ,IAAI,OAAO,oBAAoB,MAAM,QAAQ,OAAO;AAAA,EAC9D;AACF;",
|
|
5
5
|
"names": ["RealESLint", "summary"]
|
|
6
6
|
}
|
package/dist/eslint.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { assert } from "@plugjs/plug";
|
|
3
3
|
import { BuildFailure } from "@plugjs/plug/asserts";
|
|
4
4
|
import { readFile } from "@plugjs/plug/fs";
|
|
5
|
-
import { $p, ERROR, WARN } from "@plugjs/plug/logging";
|
|
5
|
+
import { $p, $grn, $ylw, ERROR, WARN, $gry } from "@plugjs/plug/logging";
|
|
6
6
|
import { getCurrentWorkingDirectory, resolveAbsolutePath, resolveDirectory, resolveFile } from "@plugjs/plug/paths";
|
|
7
7
|
import { ESLint as RealESLint } from "eslint";
|
|
8
8
|
var ESLint = class {
|
|
@@ -11,7 +11,7 @@ var ESLint = class {
|
|
|
11
11
|
this._options = typeof arg === "string" ? { configFile: arg } : arg;
|
|
12
12
|
}
|
|
13
13
|
async pipe(files, context) {
|
|
14
|
-
const { directory, configFile } = this._options;
|
|
14
|
+
const { directory, configFile, ingoreDeprecatedRules } = this._options;
|
|
15
15
|
const cwd = directory ? context.resolve(directory) : getCurrentWorkingDirectory();
|
|
16
16
|
assert(resolveDirectory(cwd), `ESLint directory ${$p(cwd)} does not exist`);
|
|
17
17
|
const overrideConfigFile = configFile ? context.resolve(configFile) : void 0;
|
|
@@ -19,14 +19,12 @@ var ESLint = class {
|
|
|
19
19
|
assert(resolveFile(overrideConfigFile), `ESLint configuration ${$p(overrideConfigFile)} does not exist`);
|
|
20
20
|
}
|
|
21
21
|
const eslint = new RealESLint({
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"parserOptions": {
|
|
25
|
-
loggerFn: (arg, ...args) => context.log.warn(arg, ...args)
|
|
26
|
-
}
|
|
27
|
-
},
|
|
22
|
+
globInputPaths: false,
|
|
23
|
+
// we already have all globs resolved
|
|
28
24
|
overrideConfigFile,
|
|
25
|
+
// if any override config file was supplied...
|
|
29
26
|
cwd
|
|
27
|
+
// current working directory for eslint (where everything starts)
|
|
30
28
|
});
|
|
31
29
|
const paths = [...files.absolutePaths()];
|
|
32
30
|
const promises = paths.map(async (filePath) => {
|
|
@@ -49,22 +47,26 @@ var ESLint = class {
|
|
|
49
47
|
const { results, failures } = summary;
|
|
50
48
|
if (failures) throw BuildFailure.fail();
|
|
51
49
|
const report = context.log.report("ESLint Report");
|
|
50
|
+
const deprecated = {};
|
|
52
51
|
for (const result of results) {
|
|
53
52
|
const { filePath, source, messages } = result;
|
|
54
53
|
const file = resolveAbsolutePath(getCurrentWorkingDirectory(), filePath);
|
|
54
|
+
for (const deprecation of result.usedDeprecatedRules) {
|
|
55
|
+
deprecated[deprecation.ruleId] = deprecation.replacedBy;
|
|
56
|
+
}
|
|
55
57
|
for (const record of messages) {
|
|
56
58
|
const {
|
|
57
59
|
severity,
|
|
58
60
|
message: msg,
|
|
59
61
|
ruleId: tags,
|
|
60
|
-
suggestions,
|
|
62
|
+
suggestions = [],
|
|
61
63
|
line,
|
|
62
64
|
column,
|
|
63
65
|
endLine = line,
|
|
64
66
|
endColumn = column + 1
|
|
65
67
|
} = record;
|
|
66
68
|
const message = [msg];
|
|
67
|
-
for (const suggestion of suggestions
|
|
69
|
+
for (const suggestion of suggestions) {
|
|
68
70
|
message.push(`- ${suggestion.desc}`);
|
|
69
71
|
}
|
|
70
72
|
const level = severity < 2 ? WARN : ERROR;
|
|
@@ -72,6 +74,19 @@ var ESLint = class {
|
|
|
72
74
|
report.add({ level, message, tags, line, column, length, file, source });
|
|
73
75
|
}
|
|
74
76
|
}
|
|
77
|
+
if (!ingoreDeprecatedRules) {
|
|
78
|
+
for (const [rule, replacedBy] of Object.entries(deprecated)) {
|
|
79
|
+
if (replacedBy.length) {
|
|
80
|
+
const replacements = replacedBy.map($grn);
|
|
81
|
+
replacements.unshift("");
|
|
82
|
+
const repl = replacements.join(`
|
|
83
|
+
${$gry("*")} `);
|
|
84
|
+
report.add({ level: WARN, message: `Rule ${$ylw(rule)} was deprecated and replaced by ${repl}` });
|
|
85
|
+
} else {
|
|
86
|
+
report.add({ level: WARN, message: `Rule ${$ylw(rule)} was deprecated without replacement` });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
75
90
|
report.done(this._options.showSources);
|
|
76
91
|
context.log.notice("ESLint processed", files.length, "files");
|
|
77
92
|
}
|
package/dist/eslint.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/eslint.ts"],
|
|
4
|
-
"mappings": ";AAGA,SAAS,cAAc;AACvB,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB;AACzB,SAAS,IAAI,OAAO,YAAY;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["summary"]
|
|
6
6
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,kBAA+B;AAC/B,mBAA+B;AAAA,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,kBAA+B;AAC/B,mBAA+B;AAAA,IA0C/B,4BAAe,cAAU,6BAAe,YAAW,UAAU,GAAG,QAAQ;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export interface ESLintOptions {
|
|
|
3
3
|
directory?: string;
|
|
4
4
|
/** Show sources in report? */
|
|
5
5
|
showSources?: boolean;
|
|
6
|
+
/** Do not warn about ESLint deprecated rule? */
|
|
7
|
+
ingoreDeprecatedRules?: boolean;
|
|
6
8
|
/**
|
|
7
9
|
* ESLint's _override_ configuration file: configurations specified in this
|
|
8
10
|
* file will override any other configuration specified elsewhere.
|
package/dist/index.mjs.map
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plugjs/eslint",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0-beta.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -30,13 +30,10 @@
|
|
|
30
30
|
"author": "Juit Developers <developers@juit.com>",
|
|
31
31
|
"license": "Apache-2.0",
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"eslint": "
|
|
34
|
-
},
|
|
35
|
-
"devDependencies": {
|
|
36
|
-
"@types/eslint": "^8.56.10"
|
|
33
|
+
"eslint": "9.5.0"
|
|
37
34
|
},
|
|
38
35
|
"peerDependencies": {
|
|
39
|
-
"@plugjs/plug": "0.
|
|
36
|
+
"@plugjs/plug": "0.6.0-beta.1"
|
|
40
37
|
},
|
|
41
38
|
"files": [
|
|
42
39
|
"*.md",
|
package/src/eslint.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { assert } from '@plugjs/plug'
|
|
5
5
|
import { BuildFailure } from '@plugjs/plug/asserts'
|
|
6
6
|
import { readFile } from '@plugjs/plug/fs'
|
|
7
|
-
import { $p, ERROR, WARN } from '@plugjs/plug/logging'
|
|
7
|
+
import { $p, $grn, $ylw, ERROR, WARN, $gry } from '@plugjs/plug/logging'
|
|
8
8
|
import { getCurrentWorkingDirectory, resolveAbsolutePath, resolveDirectory, resolveFile } from '@plugjs/plug/paths'
|
|
9
9
|
import { ESLint as RealESLint } from 'eslint'
|
|
10
10
|
|
|
@@ -22,7 +22,7 @@ export class ESLint implements Plug<void> {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
async pipe(files: Files, context: Context): Promise<void> {
|
|
25
|
-
const { directory, configFile } = this._options
|
|
25
|
+
const { directory, configFile, ingoreDeprecatedRules } = this._options
|
|
26
26
|
|
|
27
27
|
const cwd = directory ? context.resolve(directory) : getCurrentWorkingDirectory()
|
|
28
28
|
assert(resolveDirectory(cwd), `ESLint directory ${$p(cwd)} does not exist`)
|
|
@@ -34,14 +34,9 @@ export class ESLint implements Plug<void> {
|
|
|
34
34
|
|
|
35
35
|
/* Create our ESLint instance */
|
|
36
36
|
const eslint = new RealESLint({
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
loggerFn: (arg: any, ...args: any[]): void => context.log.warn(arg, ...args),
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
overrideConfigFile,
|
|
44
|
-
cwd,
|
|
37
|
+
globInputPaths: false, // we already have all globs resolved
|
|
38
|
+
overrideConfigFile, // if any override config file was supplied...
|
|
39
|
+
cwd, // current working directory for eslint (where everything starts)
|
|
45
40
|
})
|
|
46
41
|
|
|
47
42
|
/* Lint all files in parallel */
|
|
@@ -78,17 +73,24 @@ export class ESLint implements Plug<void> {
|
|
|
78
73
|
/* Create our report */
|
|
79
74
|
const report = context.log.report('ESLint Report')
|
|
80
75
|
|
|
76
|
+
/* Keep an eye on deprecated rules */
|
|
77
|
+
const deprecated: Record<string, string[]> = {}
|
|
78
|
+
|
|
81
79
|
/* Convert ESLint results into our report records */
|
|
82
80
|
for (const result of results) {
|
|
83
81
|
const { filePath, source, messages } = result
|
|
84
82
|
const file = resolveAbsolutePath(getCurrentWorkingDirectory(), filePath)
|
|
85
83
|
|
|
84
|
+
for (const deprecation of result.usedDeprecatedRules) {
|
|
85
|
+
deprecated[deprecation.ruleId] = deprecation.replacedBy
|
|
86
|
+
}
|
|
87
|
+
|
|
86
88
|
for (const record of messages) {
|
|
87
89
|
const {
|
|
88
90
|
severity,
|
|
89
91
|
message: msg,
|
|
90
92
|
ruleId: tags,
|
|
91
|
-
suggestions,
|
|
93
|
+
suggestions = [],
|
|
92
94
|
line,
|
|
93
95
|
column,
|
|
94
96
|
endLine = line,
|
|
@@ -96,7 +98,7 @@ export class ESLint implements Plug<void> {
|
|
|
96
98
|
} = record
|
|
97
99
|
|
|
98
100
|
const message = [ msg ]
|
|
99
|
-
for (const suggestion of suggestions
|
|
101
|
+
for (const suggestion of suggestions) {
|
|
100
102
|
message.push(`- ${suggestion.desc}`)
|
|
101
103
|
}
|
|
102
104
|
|
|
@@ -111,6 +113,20 @@ export class ESLint implements Plug<void> {
|
|
|
111
113
|
}
|
|
112
114
|
}
|
|
113
115
|
|
|
116
|
+
/* Report ESLint deprecated rules */
|
|
117
|
+
if (! ingoreDeprecatedRules) {
|
|
118
|
+
for (const [ rule, replacedBy ] of Object.entries(deprecated)) {
|
|
119
|
+
if (replacedBy.length) {
|
|
120
|
+
const replacements = replacedBy.map($grn)
|
|
121
|
+
replacements.unshift('')
|
|
122
|
+
const repl = replacements.join(`\n${$gry('*')} `)
|
|
123
|
+
report.add({ level: WARN, message: `Rule ${$ylw(rule)} was deprecated and replaced by ${repl}` })
|
|
124
|
+
} else {
|
|
125
|
+
report.add({ level: WARN, message: `Rule ${$ylw(rule)} was deprecated without replacement` })
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
114
130
|
/* Emit our report and fail on errors */
|
|
115
131
|
report.done(this._options.showSources)
|
|
116
132
|
context.log.notice('ESLint processed', files.length, 'files')
|
package/src/index.ts
CHANGED
|
@@ -6,6 +6,8 @@ export interface ESLintOptions {
|
|
|
6
6
|
directory?: string
|
|
7
7
|
/** Show sources in report? */
|
|
8
8
|
showSources?: boolean
|
|
9
|
+
/** Do not warn about ESLint deprecated rule? */
|
|
10
|
+
ingoreDeprecatedRules?: boolean
|
|
9
11
|
/**
|
|
10
12
|
* ESLint's _override_ configuration file: configurations specified in this
|
|
11
13
|
* file will override any other configuration specified elsewhere.
|