Permalink
Cannot retrieve contributors at this time
105 lines (87 sloc)
3.35 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/eslint/lib/rules/dot-location.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @fileoverview Validates newlines before and after dots | |
* @author Greg Cochard | |
*/ | |
"use strict"; | |
const astUtils = require("./utils/ast-utils"); | |
//------------------------------------------------------------------------------ | |
// Rule Definition | |
//------------------------------------------------------------------------------ | |
/** @type {import('../shared/types').Rule} */ | |
module.exports = { | |
meta: { | |
type: "layout", | |
docs: { | |
description: "Enforce consistent newlines before and after dots", | |
recommended: false, | |
url: "https://eslint.org/docs/latest/rules/dot-location" | |
}, | |
schema: [ | |
{ | |
enum: ["object", "property"] | |
} | |
], | |
fixable: "code", | |
messages: { | |
expectedDotAfterObject: "Expected dot to be on same line as object.", | |
expectedDotBeforeProperty: "Expected dot to be on same line as property." | |
} | |
}, | |
create(context) { | |
const config = context.options[0]; | |
// default to onObject if no preference is passed | |
const onObject = config === "object" || !config; | |
const sourceCode = context.sourceCode; | |
/** | |
* Reports if the dot between object and property is on the correct location. | |
* @param {ASTNode} node The `MemberExpression` node. | |
* @returns {void} | |
*/ | |
function checkDotLocation(node) { | |
const property = node.property; | |
const dotToken = sourceCode.getTokenBefore(property); | |
if (onObject) { | |
// `obj` expression can be parenthesized, but those paren tokens are not a part of the `obj` node. | |
const tokenBeforeDot = sourceCode.getTokenBefore(dotToken); | |
if (!astUtils.isTokenOnSameLine(tokenBeforeDot, dotToken)) { | |
context.report({ | |
node, | |
loc: dotToken.loc, | |
messageId: "expectedDotAfterObject", | |
*fix(fixer) { | |
if (dotToken.value.startsWith(".") && astUtils.isDecimalIntegerNumericToken(tokenBeforeDot)) { | |
yield fixer.insertTextAfter(tokenBeforeDot, ` ${dotToken.value}`); | |
} else { | |
yield fixer.insertTextAfter(tokenBeforeDot, dotToken.value); | |
} | |
yield fixer.remove(dotToken); | |
} | |
}); | |
} | |
} else if (!astUtils.isTokenOnSameLine(dotToken, property)) { | |
context.report({ | |
node, | |
loc: dotToken.loc, | |
messageId: "expectedDotBeforeProperty", | |
*fix(fixer) { | |
yield fixer.remove(dotToken); | |
yield fixer.insertTextBefore(property, dotToken.value); | |
} | |
}); | |
} | |
} | |
/** | |
* Checks the spacing of the dot within a member expression. | |
* @param {ASTNode} node The node to check. | |
* @returns {void} | |
*/ | |
function checkNode(node) { | |
if (!node.computed) { | |
checkDotLocation(node); | |
} | |
} | |
return { | |
MemberExpression: checkNode | |
}; | |
} | |
}; |