| /** | |
|  * @fileoverview Rule to enforce line breaks between arguments of a function call | |
|  * @author Alexey Gonchar <https://github.com/finico> | |
|  * @deprecated in ESLint v8.53.0 | |
|  */ | |
| 
 | |
| "use strict"; | |
| 
 | |
| //------------------------------------------------------------------------------ | |
| // Rule Definition | |
| //------------------------------------------------------------------------------ | |
|  | |
| /** @type {import('../shared/types').Rule} */ | |
| module.exports = { | |
|     meta: { | |
|         deprecated: true, | |
|         replacedBy: [], | |
|         type: "layout", | |
| 
 | |
|         docs: { | |
|             description: "Enforce line breaks between arguments of a function call", | |
|             recommended: false, | |
|             url: "https://eslint.org/docs/latest/rules/function-call-argument-newline" | |
|         }, | |
| 
 | |
|         fixable: "whitespace", | |
| 
 | |
|         schema: [ | |
|             { | |
|                 enum: ["always", "never", "consistent"] | |
|             } | |
|         ], | |
| 
 | |
|         messages: { | |
|             unexpectedLineBreak: "There should be no line break here.", | |
|             missingLineBreak: "There should be a line break after this argument." | |
|         } | |
|     }, | |
| 
 | |
|     create(context) { | |
|         const sourceCode = context.sourceCode; | |
| 
 | |
|         const checkers = { | |
|             unexpected: { | |
|                 messageId: "unexpectedLineBreak", | |
|                 check: (prevToken, currentToken) => prevToken.loc.end.line !== currentToken.loc.start.line, | |
|                 createFix: (token, tokenBefore) => fixer => | |
|                     fixer.replaceTextRange([tokenBefore.range[1], token.range[0]], " ") | |
|             }, | |
|             missing: { | |
|                 messageId: "missingLineBreak", | |
|                 check: (prevToken, currentToken) => prevToken.loc.end.line === currentToken.loc.start.line, | |
|                 createFix: (token, tokenBefore) => fixer => | |
|                     fixer.replaceTextRange([tokenBefore.range[1], token.range[0]], "\n") | |
|             } | |
|         }; | |
| 
 | |
|         /** | |
|          * Check all arguments for line breaks in the CallExpression | |
|          * @param {CallExpression} node node to evaluate | |
|          * @param {{ messageId: string, check: Function }} checker selected checker | |
|          * @returns {void} | |
|          * @private | |
|          */ | |
|         function checkArguments(node, checker) { | |
|             for (let i = 1; i < node.arguments.length; i++) { | |
|                 const prevArgToken = sourceCode.getLastToken(node.arguments[i - 1]); | |
|                 const currentArgToken = sourceCode.getFirstToken(node.arguments[i]); | |
| 
 | |
|                 if (checker.check(prevArgToken, currentArgToken)) { | |
|                     const tokenBefore = sourceCode.getTokenBefore( | |
|                         currentArgToken, | |
|                         { includeComments: true } | |
|                     ); | |
| 
 | |
|                     const hasLineCommentBefore = tokenBefore.type === "Line"; | |
| 
 | |
|                     context.report({ | |
|                         node, | |
|                         loc: { | |
|                             start: tokenBefore.loc.end, | |
|                             end: currentArgToken.loc.start | |
|                         }, | |
|                         messageId: checker.messageId, | |
|                         fix: hasLineCommentBefore ? null : checker.createFix(currentArgToken, tokenBefore) | |
|                     }); | |
|                 } | |
|             } | |
|         } | |
| 
 | |
|         /** | |
|          * Check if open space is present in a function name | |
|          * @param {CallExpression} node node to evaluate | |
|          * @returns {void} | |
|          * @private | |
|          */ | |
|         function check(node) { | |
|             if (node.arguments.length < 2) { | |
|                 return; | |
|             } | |
| 
 | |
|             const option = context.options[0] || "always"; | |
| 
 | |
|             if (option === "never") { | |
|                 checkArguments(node, checkers.unexpected); | |
|             } else if (option === "always") { | |
|                 checkArguments(node, checkers.missing); | |
|             } else if (option === "consistent") { | |
|                 const firstArgToken = sourceCode.getLastToken(node.arguments[0]); | |
|                 const secondArgToken = sourceCode.getFirstToken(node.arguments[1]); | |
| 
 | |
|                 if (firstArgToken.loc.end.line === secondArgToken.loc.start.line) { | |
|                     checkArguments(node, checkers.unexpected); | |
|                 } else { | |
|                     checkArguments(node, checkers.missing); | |
|                 } | |
|             } | |
|         } | |
| 
 | |
|         return { | |
|             CallExpression: check, | |
|             NewExpression: check | |
|         }; | |
|     } | |
| };
 |