Skip to content

Commit

Permalink
Breaking: add new deprecated APIs to no-deprecated-api rule. (fixes #…
Browse files Browse the repository at this point in the history
  • Loading branch information
mysticatea committed Oct 30, 2016
1 parent 02a3ace commit ce465b8
Show file tree
Hide file tree
Showing 5 changed files with 213 additions and 22 deletions.
19 changes: 17 additions & 2 deletions docs/rules/no-deprecated-api.md
Expand Up @@ -24,7 +24,7 @@ const {exists} = require("fs"); /*ERROR: 'fs.exists' was deprecated since
This rule reports the following deprecated API.

- buffer
- [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`)
- [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`)
- [SlowBuffer class](https://nodejs.org/dist/v6.0.0/docs/api/buffer.html#buffer_class_slowbuffer)
- crypto
- [createCredentials](https://nodejs.org/dist/v0.12.0/docs/api/crypto.html#crypto_crypto_createcredentials_details)
Expand All @@ -35,9 +35,22 @@ This rule reports the following deprecated API.
- [exists](https://nodejs.org/dist/v4.0.0/docs/api/fs.html#fs_fs_exists_path_callback)
- globals
- [require.extensions](https://nodejs.org/dist/v0.12.0/docs/api/globals.html#globals_require_extensions)
- `Intl.v8BreakIterator` (undocumented)
- http
- [createClient](https://nodejs.org/dist/v0.10.0/docs/api/http.html#http_http_createclient_port_host)
- REPL
- module
- `requireRepl` (undocumented)
- os
- `tmpDir` (undocumented)
- process
- `EventEmitter` (undocumented)
- [punycode](https://nodejs.org/dist/v7.0.0/docs/api/punycode.html)
- readline
- `codePointAt` (undocumented)
- `getStringWidth` (undocumented)
- `isFullWidthCodePoint` (undocumented)
- `stripVTControlCharacters` (undocumented)
- repl
- [process.env.NODE_REPL_HISTORY_FILE](https://nodejs.org/dist/v4.0.0/docs/api/repl.html#repl_node_repl_history_file)
- tls
- [CleartextStream](https://nodejs.org/dist/v0.10.0/docs/api/tls.html#tls_class_tls_cleartextstream)
Expand Down Expand Up @@ -83,6 +96,8 @@ This rule cannot report the following cases:
- [ecdh.setPublicKey](https://nodejs.org/dist/v6.0.0/docs/api/crypto.html#crypto_ecdh_setpublickey_public_key_encoding)
- net
- [server.connections](https://nodejs.org/dist/v0.10.0/docs/api/net.html#net_server_connections)
- repl
- `replServer.convertToContext` (undocumented)

### dynamic things

Expand Down
36 changes: 33 additions & 3 deletions lib/rules/no-deprecated-api.js
Expand Up @@ -12,6 +12,7 @@
//------------------------------------------------------------------------------

var assign = require("object-assign")
var resolve = require("resolve").sync
var deprecatedApis = require("../util/deprecated-apis")
var getValueIfString = require("../util/get-value-if-string")

Expand All @@ -28,9 +29,12 @@ var SENTINEL_TYPE = /^(?:.+?Statement|.+?Declaration|(?:Array|ArrowFunction|Assi
* @returns {string} Covnerted text.
*/
function toVersionText(value) {
if (value < 1) {
if (value <= 0.12) {
return value.toFixed(2)
}
if (value < 1) {
return value.toFixed(1)
}
return String(value)
}

Expand Down Expand Up @@ -150,6 +154,27 @@ function eachReadReferences(variable, f) {
module.exports = function(context) {
var globalScope = null

/**
* Checks whether the third party module of the given module ID exists or
* not.
*
* @param {string} moduleId - The module ID to check.
* @returns {boolean} `true` if the third party module existed.
*/
function isThirdPartyInstalled(moduleId) {
try {
var basedir = context.getFilename()
if (basedir !== "<input>") {
return resolve(moduleId, {basedir: basedir}) !== moduleId
}
}
catch (_err) {
// ignore
}

return false
}

/**
* Reports a use of a deprecated API.
*
Expand Down Expand Up @@ -395,7 +420,10 @@ module.exports = function(context) {

if (node.type === "CallExpression" && node.callee === id) {
var key = getValueIfString(node.arguments[0])
if (key != null && hasOwnProperty.call(infoMap, key)) {
if (key != null &&
hasOwnProperty.call(infoMap, key) &&
!isThirdPartyInstalled(key)
) {
var moduleInfo = infoMap[key]
if (moduleInfo.$deprecated) {
reportModule(node, key, moduleInfo)
Expand All @@ -419,7 +447,9 @@ module.exports = function(context) {

programNode.body.filter(isImportDeclaration).forEach(function(node) {
var key = node.source.value
if (hasOwnProperty.call(infoMap, key)) {
if (hasOwnProperty.call(infoMap, key) &&
!isThirdPartyInstalled(key)
) {
var moduleInfo = infoMap[key]
if (moduleInfo.$deprecated) {
reportModule(node, key, moduleInfo)
Expand Down
62 changes: 61 additions & 1 deletion lib/util/deprecated-apis.js
Expand Up @@ -17,7 +17,7 @@ module.exports = {
$constructor: {
$deprecated: true,
since: 6,
replacedBy: "'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' (use 'safe-buffer' module for '<6.0.0')",
replacedBy: "'buffer.Buffer.alloc()' or 'buffer.Buffer.from()' (use 'https://www.npmjs.com/package/safe-buffer' for '<6.0.0')",
omittableNew: true,
},
},
Expand Down Expand Up @@ -67,6 +67,54 @@ module.exports = {
replacedBy: "'http.request()'",
},
},
module: {
Module: {
requireRepl: {
$deprecated: true,
since: 6,
replacedBy: "'require(\"repl\")'",
},
},
requireRepl: {
$deprecated: true,
since: 6,
replacedBy: "'require(\"repl\")'",
},
},
os: {
tmpDir: {
$deprecated: true,
since: 7,
replacedBy: "'os.tmpdir()'",
},
},
punycode: {
$deprecated: true,
since: 7,
replacedBy: "'https://www.npmjs.com/package/punycode'",
},
readline: {
codePointAt: {
$deprecated: true,
since: 4,
replacedBy: null,
},
getStringWidth: {
$deprecated: true,
since: 6,
replacedBy: null,
},
isFullWidthCodePoint: {
$deprecated: true,
since: 6,
replacedBy: null,
},
stripVTControlCharacters: {
$deprecated: true,
since: 6,
replacedBy: null,
},
},
tls: {
CleartextStream: {
$deprecated: true,
Expand Down Expand Up @@ -218,6 +266,13 @@ module.exports = {
omittableNew: true,
},
},
Intl: {
v8BreakIterator: {
$deprecated: true,
since: 7,
replacedBy: null,
},
},
require: {
extensions: {
$deprecated: true,
Expand All @@ -226,6 +281,11 @@ module.exports = {
},
},
process: {
EventEmitter: {
$deprecated: true,
since: 0.6,
replacedBy: "'require(\"events\")'",
},
env: {
NODE_REPL_HISTORY_FILE: {
$deprecated: true,
Expand Down
Empty file.

0 comments on commit ce465b8

Please sign in to comment.