mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-03 13:19:29 +08:00
37 lines
No EOL
1.8 KiB
Text
37 lines
No EOL
1.8 KiB
Text
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.FunctionScope = void 0;
|
|
const types_1 = require("@typescript-eslint/types");
|
|
const ScopeBase_1 = require("./ScopeBase");
|
|
const ScopeType_1 = require("./ScopeType");
|
|
class FunctionScope extends ScopeBase_1.ScopeBase {
|
|
constructor(scopeManager, upperScope, block, isMethodDefinition) {
|
|
super(scopeManager, ScopeType_1.ScopeType.function, upperScope, block, isMethodDefinition);
|
|
// section 9.2.13, FunctionDeclarationInstantiation.
|
|
// NOTE Arrow functions never have an arguments objects.
|
|
if (this.block.type !== types_1.AST_NODE_TYPES.ArrowFunctionExpression) {
|
|
this.defineVariable('arguments', this.set, this.variables, null, null);
|
|
}
|
|
}
|
|
// References in default parameters isn't resolved to variables which are in their function body.
|
|
// const x = 1
|
|
// function f(a = x) { // This `x` is resolved to the `x` in the outer scope.
|
|
// const x = 2
|
|
// console.log(a)
|
|
// }
|
|
isValidResolution(ref, variable) {
|
|
var _a, _b;
|
|
// If `options.globalReturn` is true, `this.block` becomes a Program node.
|
|
if (this.block.type === types_1.AST_NODE_TYPES.Program) {
|
|
return true;
|
|
}
|
|
const bodyStart = (_b = (_a = this.block.body) === null || _a === void 0 ? void 0 : _a.range[0]) !== null && _b !== void 0 ? _b : -1;
|
|
// It's invalid resolution in the following case:
|
|
return !((variable.scope === this &&
|
|
ref.identifier.range[0] < bodyStart && // the reference is in the parameter part.
|
|
variable.defs.every(d => d.name.range[0] >= bodyStart)) // the variable is in the body.
|
|
);
|
|
}
|
|
}
|
|
exports.FunctionScope = FunctionScope;
|
|
//# sourceMappingURL=FunctionScope.js.map |