Sha256: 51273a61348f2c31d3b9b176ffafb87d2a637b0472ca0fe64dc5f19e3b6f8833
Contents?: true
Size: 1.33 KB
Versions: 4
Compression:
Stored size: 1.33 KB
Contents
import Node from '../Node.js'; import isReference from '../../utils/isReference.js'; import { loopStatement } from '../../utils/patterns.js'; export default class Identifier extends Node { findScope(functionScope) { if (this.parent.params && ~this.parent.params.indexOf(this)) { return this.parent.body.scope; } if (this.parent.type === 'FunctionExpression' && this === this.parent.id) { return this.parent.body.scope; } return this.parent.findScope(functionScope); } initialise(transforms) { if (isReference(this, this.parent)) { if ( transforms.arrow && this.name === 'arguments' && !this.findScope(false).contains(this.name) ) { const lexicalBoundary = this.findLexicalBoundary(); const arrowFunction = this.findNearest('ArrowFunctionExpression'); const loop = this.findNearest(loopStatement); if (arrowFunction && arrowFunction.depth > lexicalBoundary.depth) { this.alias = lexicalBoundary.getArgumentsAlias(); } if ( loop && loop.body.contains(this) && loop.depth > lexicalBoundary.depth ) { this.alias = lexicalBoundary.getArgumentsAlias(); } } this.findScope(false).addReference(this); } } transpile(code) { if (this.alias) { code.overwrite(this.start, this.end, this.alias, { storeName: true, contentOnly: true }); } } }
Version data entries
4 entries across 4 versions & 1 rubygems