Skip to content

Commit ce465b8

Browse files
committed
Breaking: add new deprecated APIs to no-deprecated-api rule. (fixes #54)
1 parent 02a3ace commit ce465b8

File tree

5 files changed

+213
-22
lines changed

5 files changed

+213
-22
lines changed

docs/rules/no-deprecated-api.md

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const {exists} = require("fs"); /*ERROR: 'fs.exists' was deprecated since
2424
This rule reports the following deprecated API.
2525

2626
- buffer
27-
- [Buffer constructors](https://nodejs.org/dist/v6.0.0/docs/api/buffer.html#buffer_class_buffer) (You can use [safe-buffer](https://www.npmjs.com/package/safe-buffer) module for `Node@<6.0.0`)
27+
- [Buffer constructors](https://nodejs.org/dist/v6.0.0/docs/api/buffer.html#buffer_class_buffer) (Use [safe-buffer](https://www.npmjs.com/package/safe-buffer) module for `Node@<6.0.0`)
2828
- [SlowBuffer class](https://nodejs.org/dist/v6.0.0/docs/api/buffer.html#buffer_class_slowbuffer)
2929
- crypto
3030
- [createCredentials](https://nodejs.org/dist/v0.12.0/docs/api/crypto.html#crypto_crypto_createcredentials_details)
@@ -35,9 +35,22 @@ This rule reports the following deprecated API.
3535
- [exists](https://nodejs.org/dist/v4.0.0/docs/api/fs.html#fs_fs_exists_path_callback)
3636
- globals
3737
- [require.extensions](https://nodejs.org/dist/v0.12.0/docs/api/globals.html#globals_require_extensions)
38+
- `Intl.v8BreakIterator` (undocumented)
3839
- http
3940
- [createClient](https://nodejs.org/dist/v0.10.0/docs/api/http.html#http_http_createclient_port_host)
40-
- REPL
41+
- module
42+
- `requireRepl` (undocumented)
43+
- os
44+
- `tmpDir` (undocumented)
45+
- process
46+
- `EventEmitter` (undocumented)
47+
- [punycode](https://nodejs.org/dist/v7.0.0/docs/api/punycode.html)
48+
- readline
49+
- `codePointAt` (undocumented)
50+
- `getStringWidth` (undocumented)
51+
- `isFullWidthCodePoint` (undocumented)
52+
- `stripVTControlCharacters` (undocumented)
53+
- repl
4154
- [process.env.NODE_REPL_HISTORY_FILE](https://nodejs.org/dist/v4.0.0/docs/api/repl.html#repl_node_repl_history_file)
4255
- tls
4356
- [CleartextStream](https://nodejs.org/dist/v0.10.0/docs/api/tls.html#tls_class_tls_cleartextstream)
@@ -83,6 +96,8 @@ This rule cannot report the following cases:
8396
- [ecdh.setPublicKey](https://nodejs.org/dist/v6.0.0/docs/api/crypto.html#crypto_ecdh_setpublickey_public_key_encoding)
8497
- net
8598
- [server.connections](https://nodejs.org/dist/v0.10.0/docs/api/net.html#net_server_connections)
99+
- repl
100+
- `replServer.convertToContext` (undocumented)
86101

87102
### dynamic things
88103

lib/rules/no-deprecated-api.js

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
//------------------------------------------------------------------------------
1313

1414
var assign = require("object-assign")
15+
var resolve = require("resolve").sync
1516
var deprecatedApis = require("../util/deprecated-apis")
1617
var getValueIfString = require("../util/get-value-if-string")
1718

@@ -28,9 +29,12 @@ var SENTINEL_TYPE = /^(?:.+?Statement|.+?Declaration|(?:Array|ArrowFunction|Assi
2829
* @returns {string} Covnerted text.
2930
*/
3031
function toVersionText(value) {
31-
if (value < 1) {
32+
if (value <= 0.12) {
3233
return value.toFixed(2)
3334
}
35+
if (value < 1) {
36+
return value.toFixed(1)
37+
}
3438
return String(value)
3539
}
3640

@@ -150,6 +154,27 @@ function eachReadReferences(variable, f) {
150154
module.exports = function(context) {
151155
var globalScope = null
152156

157+
/**
158+
* Checks whether the third party module of the given module ID exists or
159+
* not.
160+
*
161+
* @param {string} moduleId - The module ID to check.
162+
* @returns {boolean} `true` if the third party module existed.
163+
*/
164+
function isThirdPartyInstalled(moduleId) {
165+
try {
166+
var basedir = context.getFilename()
167+
if (basedir !== "<input>") {
168+
return resolve(moduleId, {basedir: basedir}) !== moduleId
169+
}
170+
}
171+
catch (_err) {
172+
// ignore
173+
}
174+
175+
return false
176+
}
177+
153178
/**
154179
* Reports a use of a deprecated API.
155180
*
@@ -395,7 +420,10 @@ module.exports = function(context) {
395420

396421
if (node.type === "CallExpression" && node.callee === id) {
397422
var key = getValueIfString(node.arguments[0])
398-
if (key != null && hasOwnProperty.call(infoMap, key)) {
423+
if (key != null &&
424+
hasOwnProperty.call(infoMap, key) &&
425+
!isThirdPartyInstalled(key)
426+
) {
399427
var moduleInfo = infoMap[key]
400428
if (moduleInfo.$deprecated) {
401429
reportModule(node, key, moduleInfo)
@@ -419,7 +447,9 @@ module.exports = function(context) {
419447

420448
programNode.body.filter(isImportDeclaration).forEach(function(node) {
421449
var key = node.source.value
422-
if (hasOwnProperty.call(infoMap, key)) {
450+
if (hasOwnProperty.call(infoMap, key) &&
451+
!isThirdPartyInstalled(key)
452+
) {
423453
var moduleInfo = infoMap[key]
424454
if (moduleInfo.$deprecated) {
425455
reportModule(node, key, moduleInfo)

lib/util/deprecated-apis.js

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ module.exports = {
1717
$constructor: {
1818
$deprecated: true,
1919
since: 6,
20-
replacedBy: "'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' (use 'safe-buffer' module for '<6.0.0')",
20+
replacedBy: "'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' (use 'https://www.npmjs.com/package/safe-buffer' for '<6.0.0')",
2121
omittableNew: true,
2222
},
2323
},
@@ -67,6 +67,54 @@ module.exports = {
6767
replacedBy: "'http.request()'",
6868
},
6969
},
70+
module: {
71+
Module: {
72+
requireRepl: {
73+
$deprecated: true,
74+
since: 6,
75+
replacedBy: "'require(\"repl\")'",
76+
},
77+
},
78+
requireRepl: {
79+
$deprecated: true,
80+
since: 6,
81+
replacedBy: "'require(\"repl\")'",
82+
},
83+
},
84+
os: {
85+
tmpDir: {
86+
$deprecated: true,
87+
since: 7,
88+
replacedBy: "'os.tmpdir()'",
89+
},
90+
},
91+
punycode: {
92+
$deprecated: true,
93+
since: 7,
94+
replacedBy: "'https://www.npmjs.com/package/punycode'",
95+
},
96+
readline: {
97+
codePointAt: {
98+
$deprecated: true,
99+
since: 4,
100+
replacedBy: null,
101+
},
102+
getStringWidth: {
103+
$deprecated: true,
104+
since: 6,
105+
replacedBy: null,
106+
},
107+
isFullWidthCodePoint: {
108+
$deprecated: true,
109+
since: 6,
110+
replacedBy: null,
111+
},
112+
stripVTControlCharacters: {
113+
$deprecated: true,
114+
since: 6,
115+
replacedBy: null,
116+
},
117+
},
70118
tls: {
71119
CleartextStream: {
72120
$deprecated: true,
@@ -218,6 +266,13 @@ module.exports = {
218266
omittableNew: true,
219267
},
220268
},
269+
Intl: {
270+
v8BreakIterator: {
271+
$deprecated: true,
272+
since: 7,
273+
replacedBy: null,
274+
},
275+
},
221276
require: {
222277
extensions: {
223278
$deprecated: true,
@@ -226,6 +281,11 @@ module.exports = {
226281
},
227282
},
228283
process: {
284+
EventEmitter: {
285+
$deprecated: true,
286+
since: 0.6,
287+
replacedBy: "'require(\"events\")'",
288+
},
229289
env: {
230290
NODE_REPL_HISTORY_FILE: {
231291
$deprecated: true,

tests/fixtures/no-deprecated-api/thirdparty/node_modules/punycode.js

Whitespace-only changes.

0 commit comments

Comments
 (0)