.
This commit is contained in:
		
							
								
								
									
										248
									
								
								qwen/nodejs/node_modules/eslint/lib/rules/semi-spacing.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										248
									
								
								qwen/nodejs/node_modules/eslint/lib/rules/semi-spacing.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,248 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @fileoverview Validates spacing before and after semicolon
 | 
			
		||||
 * @author Mathias Schreck
 | 
			
		||||
 * @deprecated in ESLint v8.53.0
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
"use strict";
 | 
			
		||||
 | 
			
		||||
const astUtils = require("./utils/ast-utils");
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
// Rule Definition
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
/** @type {import('../shared/types').Rule} */
 | 
			
		||||
module.exports = {
 | 
			
		||||
    meta: {
 | 
			
		||||
        deprecated: true,
 | 
			
		||||
        replacedBy: [],
 | 
			
		||||
        type: "layout",
 | 
			
		||||
 | 
			
		||||
        docs: {
 | 
			
		||||
            description: "Enforce consistent spacing before and after semicolons",
 | 
			
		||||
            recommended: false,
 | 
			
		||||
            url: "https://eslint.org/docs/latest/rules/semi-spacing"
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        fixable: "whitespace",
 | 
			
		||||
 | 
			
		||||
        schema: [
 | 
			
		||||
            {
 | 
			
		||||
                type: "object",
 | 
			
		||||
                properties: {
 | 
			
		||||
                    before: {
 | 
			
		||||
                        type: "boolean",
 | 
			
		||||
                        default: false
 | 
			
		||||
                    },
 | 
			
		||||
                    after: {
 | 
			
		||||
                        type: "boolean",
 | 
			
		||||
                        default: true
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                additionalProperties: false
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
 | 
			
		||||
        messages: {
 | 
			
		||||
            unexpectedWhitespaceBefore: "Unexpected whitespace before semicolon.",
 | 
			
		||||
            unexpectedWhitespaceAfter: "Unexpected whitespace after semicolon.",
 | 
			
		||||
            missingWhitespaceBefore: "Missing whitespace before semicolon.",
 | 
			
		||||
            missingWhitespaceAfter: "Missing whitespace after semicolon."
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    create(context) {
 | 
			
		||||
 | 
			
		||||
        const config = context.options[0],
 | 
			
		||||
            sourceCode = context.sourceCode;
 | 
			
		||||
        let requireSpaceBefore = false,
 | 
			
		||||
            requireSpaceAfter = true;
 | 
			
		||||
 | 
			
		||||
        if (typeof config === "object") {
 | 
			
		||||
            requireSpaceBefore = config.before;
 | 
			
		||||
            requireSpaceAfter = config.after;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Checks if a given token has leading whitespace.
 | 
			
		||||
         * @param {Object} token The token to check.
 | 
			
		||||
         * @returns {boolean} True if the given token has leading space, false if not.
 | 
			
		||||
         */
 | 
			
		||||
        function hasLeadingSpace(token) {
 | 
			
		||||
            const tokenBefore = sourceCode.getTokenBefore(token);
 | 
			
		||||
 | 
			
		||||
            return tokenBefore && astUtils.isTokenOnSameLine(tokenBefore, token) && sourceCode.isSpaceBetweenTokens(tokenBefore, token);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Checks if a given token has trailing whitespace.
 | 
			
		||||
         * @param {Object} token The token to check.
 | 
			
		||||
         * @returns {boolean} True if the given token has trailing space, false if not.
 | 
			
		||||
         */
 | 
			
		||||
        function hasTrailingSpace(token) {
 | 
			
		||||
            const tokenAfter = sourceCode.getTokenAfter(token);
 | 
			
		||||
 | 
			
		||||
            return tokenAfter && astUtils.isTokenOnSameLine(token, tokenAfter) && sourceCode.isSpaceBetweenTokens(token, tokenAfter);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Checks if the given token is the last token in its line.
 | 
			
		||||
         * @param {Token} token The token to check.
 | 
			
		||||
         * @returns {boolean} Whether or not the token is the last in its line.
 | 
			
		||||
         */
 | 
			
		||||
        function isLastTokenInCurrentLine(token) {
 | 
			
		||||
            const tokenAfter = sourceCode.getTokenAfter(token);
 | 
			
		||||
 | 
			
		||||
            return !(tokenAfter && astUtils.isTokenOnSameLine(token, tokenAfter));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Checks if the given token is the first token in its line
 | 
			
		||||
         * @param {Token} token The token to check.
 | 
			
		||||
         * @returns {boolean} Whether or not the token is the first in its line.
 | 
			
		||||
         */
 | 
			
		||||
        function isFirstTokenInCurrentLine(token) {
 | 
			
		||||
            const tokenBefore = sourceCode.getTokenBefore(token);
 | 
			
		||||
 | 
			
		||||
            return !(tokenBefore && astUtils.isTokenOnSameLine(token, tokenBefore));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Checks if the next token of a given token is a closing parenthesis.
 | 
			
		||||
         * @param {Token} token The token to check.
 | 
			
		||||
         * @returns {boolean} Whether or not the next token of a given token is a closing parenthesis.
 | 
			
		||||
         */
 | 
			
		||||
        function isBeforeClosingParen(token) {
 | 
			
		||||
            const nextToken = sourceCode.getTokenAfter(token);
 | 
			
		||||
 | 
			
		||||
            return (nextToken && astUtils.isClosingBraceToken(nextToken) || astUtils.isClosingParenToken(nextToken));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Report location example :
 | 
			
		||||
         *
 | 
			
		||||
         * for unexpected space `before`
 | 
			
		||||
         *
 | 
			
		||||
         * var a = 'b'   ;
 | 
			
		||||
         *            ^^^
 | 
			
		||||
         *
 | 
			
		||||
         * for unexpected space `after`
 | 
			
		||||
         *
 | 
			
		||||
         * var a = 'b';  c = 10;
 | 
			
		||||
         *             ^^
 | 
			
		||||
         *
 | 
			
		||||
         * Reports if the given token has invalid spacing.
 | 
			
		||||
         * @param {Token} token The semicolon token to check.
 | 
			
		||||
         * @param {ASTNode} node The corresponding node of the token.
 | 
			
		||||
         * @returns {void}
 | 
			
		||||
         */
 | 
			
		||||
        function checkSemicolonSpacing(token, node) {
 | 
			
		||||
            if (astUtils.isSemicolonToken(token)) {
 | 
			
		||||
                if (hasLeadingSpace(token)) {
 | 
			
		||||
                    if (!requireSpaceBefore) {
 | 
			
		||||
                        const tokenBefore = sourceCode.getTokenBefore(token);
 | 
			
		||||
                        const loc = {
 | 
			
		||||
                            start: tokenBefore.loc.end,
 | 
			
		||||
                            end: token.loc.start
 | 
			
		||||
                        };
 | 
			
		||||
 | 
			
		||||
                        context.report({
 | 
			
		||||
                            node,
 | 
			
		||||
                            loc,
 | 
			
		||||
                            messageId: "unexpectedWhitespaceBefore",
 | 
			
		||||
                            fix(fixer) {
 | 
			
		||||
 | 
			
		||||
                                return fixer.removeRange([tokenBefore.range[1], token.range[0]]);
 | 
			
		||||
                            }
 | 
			
		||||
                        });
 | 
			
		||||
                    }
 | 
			
		||||
                } else {
 | 
			
		||||
                    if (requireSpaceBefore) {
 | 
			
		||||
                        const loc = token.loc;
 | 
			
		||||
 | 
			
		||||
                        context.report({
 | 
			
		||||
                            node,
 | 
			
		||||
                            loc,
 | 
			
		||||
                            messageId: "missingWhitespaceBefore",
 | 
			
		||||
                            fix(fixer) {
 | 
			
		||||
                                return fixer.insertTextBefore(token, " ");
 | 
			
		||||
                            }
 | 
			
		||||
                        });
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!isFirstTokenInCurrentLine(token) && !isLastTokenInCurrentLine(token) && !isBeforeClosingParen(token)) {
 | 
			
		||||
                    if (hasTrailingSpace(token)) {
 | 
			
		||||
                        if (!requireSpaceAfter) {
 | 
			
		||||
                            const tokenAfter = sourceCode.getTokenAfter(token);
 | 
			
		||||
                            const loc = {
 | 
			
		||||
                                start: token.loc.end,
 | 
			
		||||
                                end: tokenAfter.loc.start
 | 
			
		||||
                            };
 | 
			
		||||
 | 
			
		||||
                            context.report({
 | 
			
		||||
                                node,
 | 
			
		||||
                                loc,
 | 
			
		||||
                                messageId: "unexpectedWhitespaceAfter",
 | 
			
		||||
                                fix(fixer) {
 | 
			
		||||
 | 
			
		||||
                                    return fixer.removeRange([token.range[1], tokenAfter.range[0]]);
 | 
			
		||||
                                }
 | 
			
		||||
                            });
 | 
			
		||||
                        }
 | 
			
		||||
                    } else {
 | 
			
		||||
                        if (requireSpaceAfter) {
 | 
			
		||||
                            const loc = token.loc;
 | 
			
		||||
 | 
			
		||||
                            context.report({
 | 
			
		||||
                                node,
 | 
			
		||||
                                loc,
 | 
			
		||||
                                messageId: "missingWhitespaceAfter",
 | 
			
		||||
                                fix(fixer) {
 | 
			
		||||
                                    return fixer.insertTextAfter(token, " ");
 | 
			
		||||
                                }
 | 
			
		||||
                            });
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Checks the spacing of the semicolon with the assumption that the last token is the semicolon.
 | 
			
		||||
         * @param {ASTNode} node The node to check.
 | 
			
		||||
         * @returns {void}
 | 
			
		||||
         */
 | 
			
		||||
        function checkNode(node) {
 | 
			
		||||
            const token = sourceCode.getLastToken(node);
 | 
			
		||||
 | 
			
		||||
            checkSemicolonSpacing(token, node);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return {
 | 
			
		||||
            VariableDeclaration: checkNode,
 | 
			
		||||
            ExpressionStatement: checkNode,
 | 
			
		||||
            BreakStatement: checkNode,
 | 
			
		||||
            ContinueStatement: checkNode,
 | 
			
		||||
            DebuggerStatement: checkNode,
 | 
			
		||||
            DoWhileStatement: checkNode,
 | 
			
		||||
            ReturnStatement: checkNode,
 | 
			
		||||
            ThrowStatement: checkNode,
 | 
			
		||||
            ImportDeclaration: checkNode,
 | 
			
		||||
            ExportNamedDeclaration: checkNode,
 | 
			
		||||
            ExportAllDeclaration: checkNode,
 | 
			
		||||
            ExportDefaultDeclaration: checkNode,
 | 
			
		||||
            ForStatement(node) {
 | 
			
		||||
                if (node.init) {
 | 
			
		||||
                    checkSemicolonSpacing(sourceCode.getTokenAfter(node.init), node);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (node.test) {
 | 
			
		||||
                    checkSemicolonSpacing(sourceCode.getTokenAfter(node.test), node);
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            PropertyDefinition: checkNode
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user