12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /**
- * @author Toru Nagashima
- * See LICENSE file in root directory for full license.
- */
- "use strict"
- const { CALL, ReferenceTracker } = require("eslint-utils")
- const trackMap = {
- fs: {
- access: { [CALL]: true },
- copyFile: { [CALL]: true },
- open: { [CALL]: true },
- rename: { [CALL]: true },
- truncate: { [CALL]: true },
- rmdir: { [CALL]: true },
- mkdir: { [CALL]: true },
- readdir: { [CALL]: true },
- readlink: { [CALL]: true },
- symlink: { [CALL]: true },
- lstat: { [CALL]: true },
- stat: { [CALL]: true },
- link: { [CALL]: true },
- unlink: { [CALL]: true },
- chmod: { [CALL]: true },
- lchmod: { [CALL]: true },
- lchown: { [CALL]: true },
- chown: { [CALL]: true },
- utimes: { [CALL]: true },
- realpath: { [CALL]: true },
- mkdtemp: { [CALL]: true },
- writeFile: { [CALL]: true },
- appendFile: { [CALL]: true },
- readFile: { [CALL]: true },
- },
- }
- module.exports = {
- meta: {
- docs: {
- description: 'enforce `require("fs").promises`',
- category: "Stylistic Issues",
- recommended: false,
- url:
- "https://github.com/mysticatea/eslint-plugin-node/blob/v11.1.0/docs/rules/prefer-promises/fs.md",
- },
- fixable: null,
- messages: {
- preferPromises: "Use 'fs.promises.{{name}}()' instead.",
- },
- schema: [],
- type: "suggestion",
- },
- create(context) {
- return {
- "Program:exit"() {
- const scope = context.getScope()
- const tracker = new ReferenceTracker(scope, { mode: "legacy" })
- const references = [
- ...tracker.iterateCjsReferences(trackMap),
- ...tracker.iterateEsmReferences(trackMap),
- ]
- for (const { node, path } of references) {
- const name = path[path.length - 1]
- context.report({
- node,
- messageId: "preferPromises",
- data: { name },
- })
- }
- },
- }
- },
- }
|