Skip to content

Commit 4cc0e3f

Browse files
committed
Fix: third-party does not hide core modules
1 parent 61fcbb0 commit 4cc0e3f

File tree

3 files changed

+10
-101
lines changed

3 files changed

+10
-101
lines changed

docs/rules/no-deprecated-api.md

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,7 @@ This rule has 2 options.
9393
"rules": {
9494
"node/no-deprecated-api": ["error", {
9595
"ignoreModuleItems": [],
96-
"ignoreGlobalItems": [],
97-
"ignoreIndirectDependencies": false
96+
"ignoreGlobalItems": []
9897
}]
9998
}
10099
}
@@ -185,12 +184,6 @@ Examples of :+1: **correct** code for the `{"ignoreGlobalItems": ["new Buffer()"
185184
const data = new Buffer(10) // OK since it's in ignoreGlobalItems.
186185
```
187186

188-
### ignoreIndirectDependencies
189-
190-
If `ignoreIndirectDependencies: true`, this rule ignores deprecated APIs if your module depends on third-party modules which have the same name as core modules indirectly. Default is `false`.
191-
192-
If your module depends on such third-party modules directly (explicitly), this rule always ignores deprecated APIs of those.
193-
194187
## Known Limitations
195188

196189
This rule cannot report the following cases:

lib/rules/no-deprecated-api.js

Lines changed: 5 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,8 @@
1010
// Requirements
1111
//------------------------------------------------------------------------------
1212

13-
const dirname = require("path").dirname
1413
const assign = require("object-assign")
15-
const resolve = require("resolve").sync
1614
const deprecatedApis = require("../util/deprecated-apis")
17-
const getPackageJson = require("../util/get-package-json")
1815
const getValueIfString = require("../util/get-value-if-string")
1916

2017
//------------------------------------------------------------------------------
@@ -195,45 +192,8 @@ function create(context) {
195192
const options = context.options[0] || {}
196193
const ignoredModuleItems = options.ignoreModuleItems || []
197194
const ignoredGlobalItems = options.ignoreGlobalItems || []
198-
const ignoreIndirectDependencies = Boolean(options.ignoreIndirectDependencies)
199195
let globalScope = null
200196

201-
/**
202-
* Checks whether the third party module of the given module ID exists or
203-
* not.
204-
*
205-
* @param {string} moduleId - The module ID to check.
206-
* @returns {boolean} `true` if the third party module existed.
207-
*/
208-
function isThirdPartyInstalled(moduleId) {
209-
const fileName = context.getFilename()
210-
if (fileName !== "<input>") {
211-
if (ignoreIndirectDependencies) {
212-
const basedir = dirname(fileName)
213-
try {
214-
return resolve(moduleId, {basedir}) !== moduleId
215-
}
216-
catch (_err) {
217-
// ignore
218-
}
219-
}
220-
else {
221-
const packageInfo = getPackageJson(fileName)
222-
const deps = packageInfo && packageInfo.dependencies
223-
const devDeps = packageInfo && packageInfo.devDependencies
224-
225-
/*eslint-disable no-prototype-builtins */
226-
return Boolean(
227-
(deps && deps.hasOwnProperty(moduleId)) ||
228-
(devDeps && devDeps.hasOwnProperty(moduleId))
229-
)
230-
/*eslint-enable */
231-
}
232-
}
233-
234-
return false
235-
}
236-
237197
/**
238198
* Reports a use of a deprecated API.
239199
*
@@ -512,10 +472,7 @@ function create(context) {
512472

513473
if (node.type === "CallExpression" && node.callee === id) {
514474
const key = getValueIfString(node.arguments[0])
515-
if (key != null &&
516-
hasOwnProperty.call(infoMap, key) &&
517-
!isThirdPartyInstalled(key)
518-
) {
475+
if (key != null && hasOwnProperty.call(infoMap, key)) {
519476
const moduleInfo = infoMap[key]
520477
if (moduleInfo.$deprecated) {
521478
reportModule(node, key, moduleInfo)
@@ -538,9 +495,7 @@ function create(context) {
538495

539496
for (const node of programNode.body.filter(isImportDeclaration)) {
540497
const key = node.source.value
541-
if (hasOwnProperty.call(infoMap, key) &&
542-
!isThirdPartyInstalled(key)
543-
) {
498+
if (hasOwnProperty.call(infoMap, key)) {
544499
const moduleInfo = infoMap[key]
545500
if (moduleInfo.$deprecated) {
546501
reportModule(node, key, moduleInfo)
@@ -611,9 +566,9 @@ module.exports = {
611566
additionalItems: false,
612567
uniqueItems: true,
613568
},
614-
ignoreIndirectDependencies: { //
615-
type: "boolean",
616-
},
569+
570+
// Deprecated since v4.2.0
571+
ignoreIndirectDependencies: {type: "boolean"},
617572
},
618573
additionalProperties: false,
619574
},

tests/lib/rules/no-deprecated-api.js

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,9 @@
1010
// Requirements
1111
//------------------------------------------------------------------------------
1212

13-
const path = require("path")
1413
const rule = require("../../../lib/rules/no-deprecated-api")
1514
const RuleTester = require("eslint/lib/testers/rule-tester")
1615

17-
//------------------------------------------------------------------------------
18-
// Helpers
19-
//------------------------------------------------------------------------------
20-
21-
const THIRD_PERTY = path.resolve(
22-
__dirname,
23-
"../../fixtures/no-deprecated-api/thirdparty/test.js"
24-
)
25-
const NO_THIRD_PERTY = path.resolve(
26-
__dirname,
27-
"../../fixtures/no-deprecated-api/no-thirdparty/test.js"
28-
)
29-
const INDIRECT_THIRD_PERTY = path.resolve(
30-
__dirname,
31-
"../../fixtures/no-deprecated-api/indirect-thirdparty/test.js"
32-
)
33-
3416
//------------------------------------------------------------------------------
3517
// Tests
3618
//------------------------------------------------------------------------------
@@ -83,15 +65,13 @@ ruleTester.run("no-deprecated-api", rule, {
8365
env: {node: true},
8466
},
8567

86-
// there are third parties.
68+
// use third parties.
8769
{
88-
filename: THIRD_PERTY,
89-
code: "require('domain');",
70+
code: "require('domain/');",
9071
env: {node: true},
9172
},
9273
{
93-
filename: THIRD_PERTY,
94-
code: "import domain from 'domain';",
74+
code: "import domain from 'domain/';",
9575
parserOptions: {sourceType: "module"},
9676
},
9777

@@ -168,8 +148,7 @@ ruleTester.run("no-deprecated-api", rule, {
168148

169149
// https://github.com/mysticatea/eslint-plugin-node/issues/65
170150
{
171-
filename: INDIRECT_THIRD_PERTY,
172-
code: "require(\"domain\")",
151+
code: "require(\"domain/\")",
173152
env: {node: true},
174153
options: [{ignoreIndirectDependencies: true}],
175154
},
@@ -458,21 +437,6 @@ ruleTester.run("no-deprecated-api", rule, {
458437
errors: ["'util._extend' was deprecated since v6. Use 'Object.assign()' instead."],
459438
},
460439

461-
// https://github.com/mysticatea/eslint-plugin-node/issues/65
462-
{
463-
filename: INDIRECT_THIRD_PERTY,
464-
code: "require(\"domain\")",
465-
env: {node: true},
466-
errors: ["'domain' module was deprecated since v4."],
467-
},
468-
{
469-
filename: INDIRECT_THIRD_PERTY,
470-
code: "require(\"domain\")",
471-
env: {node: true},
472-
options: [{ignoreIndirectDependencies: false}],
473-
errors: ["'domain' module was deprecated since v4."],
474-
},
475-
476440
// ES2015 Modules
477441
{
478442
code: "import b from 'buffer'; new b.Buffer()",
@@ -587,15 +551,12 @@ ruleTester.run("no-deprecated-api", rule, {
587551
errors: ["'process.env.NODE_REPL_HISTORY_FILE' was deprecated since v4. Use 'NODE_REPL_HISTORY' instead."],
588552
},
589553

590-
// there are no third parties.
591554
{
592-
filename: NO_THIRD_PERTY,
593555
code: "require('domain');",
594556
env: {node: true},
595557
errors: ["'domain' module was deprecated since v4."],
596558
},
597559
{
598-
filename: NO_THIRD_PERTY,
599560
code: "import domain from 'domain';",
600561
parserOptions: {sourceType: "module"},
601562
errors: ["'domain' module was deprecated since v4."],

0 commit comments

Comments
 (0)