You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.0 KiB
39 lines
1.0 KiB
/** |
|
* @author Toru Nagashima <https://github.com/mysticatea> |
|
* See LICENSE file in root directory for full license. |
|
*/ |
|
"use strict" |
|
|
|
const { CALL, CONSTRUCT, READ } = require("eslint-utils") |
|
|
|
/** |
|
* Enumerate property names of a given object recursively. |
|
* @param {object} trackMap The map for APIs to enumerate. |
|
* @param {string[]|undefined} path The path to the current map. |
|
* @returns {IterableIterator<string>} The property names of the map. |
|
*/ |
|
function* enumeratePropertyNames(trackMap, path = []) { |
|
for (const key of Object.keys(trackMap)) { |
|
const value = trackMap[key] |
|
if (typeof value !== "object") { |
|
continue |
|
} |
|
|
|
path.push(key) |
|
|
|
if (value[CALL]) { |
|
yield `${path.join(".")}()` |
|
} |
|
if (value[CONSTRUCT]) { |
|
yield `new ${path.join(".")}()` |
|
} |
|
if (value[READ]) { |
|
yield path.join(".") |
|
} |
|
yield* enumeratePropertyNames(value, path) |
|
|
|
path.pop() |
|
} |
|
} |
|
|
|
module.exports = enumeratePropertyNames
|
|
|