Skip to content

Commit

Permalink
Revert "Reduce the diff (hopefully)"
Browse files Browse the repository at this point in the history
This reverts commit 0544a84.
  • Loading branch information
pralkarz committed Jan 23, 2025
1 parent 0544a84 commit 27b79f5
Showing 1 changed file with 98 additions and 98 deletions.
196 changes: 98 additions & 98 deletions lib/rules/prefer-node-protocol.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,104 @@ const messageId = "preferNodeProtocol"
const supportedRangeForEsm = new Range("^12.20.0 || >= 14.13.1")
const supportedRangeForCjs = new Range("^14.18.0 || >= 16.0.0")

/**
* @param {import('estree').Node} [node]
* @returns {node is import('estree').Literal}
*/
function isStringLiteral(node) {
return node?.type === "Literal" && typeof node.type === "string"
}

/**
* @param {import('eslint').Rule.RuleContext} context
* @param {import('../util/import-target.js').ModuleStyle} moduleStyle
* @returns {boolean}
*/
function isEnablingThisRule(context, moduleStyle) {
const version = getConfiguredNodeVersion(context)

// Only check Node.js version because this rule is meaningless if configured Node.js version doesn't match semver range.
if (!version.intersects(supportedRangeForEsm)) {
return false
}

// Only check when using `require`
if (
moduleStyle === "require" &&
!version.intersects(supportedRangeForCjs)
) {
return false
}

return true
}

/**
* @param {import('estree').Node} node
* @returns {boolean}
**/
function isValidRequireArgument(node) {
const rawName = getStringIfConstant(node)
if (typeof rawName !== "string") {
return false
}

const name = stripImportPathParams(rawName)
if (!isBuiltin(name)) {
return false
}

return true
}

/**
* @param {import('estree').Node | null | undefined} node
* @param {import('eslint').Rule.RuleContext} context
* @param {import('../util/import-target.js').ModuleStyle} moduleStyle
*/
function validate(node, context, moduleStyle) {
if (node == null) {
return
}

if (!isEnablingThisRule(context, moduleStyle)) {
return
}

if (!isStringLiteral(node)) {
return
}

if (moduleStyle === "require" && !isValidRequireArgument(node)) {
return
}

if (
!("value" in node) ||
typeof node.value !== "string" ||
node.value.startsWith("node:") ||
!isBuiltin(node.value) ||
!isBuiltin(`node:${node.value}`)
) {
return
}

context.report({
node,
messageId,
data: {
moduleName: node.value,
},
fix(fixer) {
const firstCharacterIndex = (node?.range?.[0] ?? 0) + 1
return fixer.replaceTextRange(
[firstCharacterIndex, firstCharacterIndex],
"node:"
)
},
})
}

/** @type {import('eslint').Rule.RuleModule} */
module.exports = {
meta: {
Expand All @@ -53,104 +151,6 @@ module.exports = {
type: "suggestion",
},
create(context) {
/**
* @param {import('estree').Node} [node]
* @returns {node is import('estree').Literal}
*/
function isStringLiteral(node) {
return node?.type === "Literal" && typeof node.type === "string"
}

/**
* @param {import('eslint').Rule.RuleContext} context
* @param {import('../util/import-target.js').ModuleStyle} moduleStyle
* @returns {boolean}
*/
function isEnablingThisRule(context, moduleStyle) {
const version = getConfiguredNodeVersion(context)

// Only check Node.js version because this rule is meaningless if configured Node.js version doesn't match semver range.
if (!version.intersects(supportedRangeForEsm)) {
return false
}

// Only check when using `require`
if (
moduleStyle === "require" &&
!version.intersects(supportedRangeForCjs)
) {
return false
}

return true
}

/**
* @param {import('estree').Node} node
* @returns {boolean}
**/
function isValidRequireArgument(node) {
const rawName = getStringIfConstant(node)
if (typeof rawName !== "string") {
return false
}

const name = stripImportPathParams(rawName)
if (!isBuiltin(name)) {
return false
}

return true
}

/**
* @param {import('estree').Node | null | undefined} node
* @param {import('eslint').Rule.RuleContext} context
* @param {import('../util/import-target.js').ModuleStyle} moduleStyle
*/
function validate(node, context, moduleStyle) {
if (node == null) {
return
}

if (!isEnablingThisRule(context, moduleStyle)) {
return
}

if (!isStringLiteral(node)) {
return
}

if (moduleStyle === "require" && !isValidRequireArgument(node)) {
return
}

if (
!("value" in node) ||
typeof node.value !== "string" ||
node.value.startsWith("node:") ||
!isBuiltin(node.value) ||
!isBuiltin(`node:${node.value}`)
) {
return
}

context.report({
node,
messageId,
data: {
moduleName: node.value,
},
fix(fixer) {
const firstCharacterIndex = (node?.range?.[0] ?? 0) + 1
return fixer.replaceTextRange(
[firstCharacterIndex, firstCharacterIndex],
"node:"
)
},
})
}

return {
CallExpression(node) {
if (node.type !== "CallExpression") {
Expand Down

0 comments on commit 27b79f5

Please sign in to comment.