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.
30 lines
891 B
30 lines
891 B
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] |
|
}
|
|
|