You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
891 B
31 lines
891 B
1 month ago
|
module.exports = {
|
||
|
getScope
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Gets the scope for the current node
|
||
|
* @param {RuleContext} context The rule context
|
||
|
* @param {ESNode} currentNode The node to get the scope of
|
||
|
* @returns { import('eslint').Scope.Scope } The scope information for this node
|
||
|
*/
|
||
|
function getScope(context, currentNode) {
|
||
|
// On Program node, get the outermost scope to avoid return Node.js special function scope or ES modules scope.
|
||
|
const inner = currentNode.type !== 'Program'
|
||
|
const scopeManager = context.getSourceCode().scopeManager
|
||
|
|
||
|
/** @type {ESNode | null} */
|
||
|
let node = currentNode
|
||
|
for (; node; node = /** @type {ESNode | null} */ (node.parent)) {
|
||
|
const scope = scopeManager.acquire(node, inner)
|
||
|
|
||
|
if (scope) {
|
||
|
if (scope.type === 'function-expression-name') {
|
||
|
return scope.childScopes[0]
|
||
|
}
|
||
|
return scope
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return scopeManager.scopes[0]
|
||
|
}
|