virtual-scope

0.1.1 • Public • Published

virtual-scope

A library for manipulating scopes without having to worry about conflicting names

Usage

import Scope from 'virtual-scope';
 
// Create a new top-level scope.
const top = new Scope();
 
// Create two virtual scopes within the top scope.
const a = top.virtual();
const b = top.virtual();
 
// Define names...
a.define( 'foo' );
 
// ... that appear within only the expected scopes.
a.defines( 'foo' ); // true
b.defines( 'foo' ); // false
 
b.define( 'foo' );
 
b.bind( 'bar', a.reference( 'foo' ) );
 
assert.equal( b.lookup( 'bar' ), a.lookup( 'foo' ) ); // true
 
// With two virtual scopes both defining 'foo', we must
// deconflict names within the the scope.
top.deconflict();
 
// When we now lookup the actual names, we get:
a.lookup( 'foo' ).name; // 'foo'
b.lookup( 'foo' ).name; // '_foo'
 
// The names that are used in the scope are, unsurprisingly:
top.usedNames(); // [ '_foo', 'foo' ]

Readme

Keywords

none

Package Sidebar

Install

npm i virtual-scope

Weekly Downloads

2

Version

0.1.1

License

MIT

Last publish

Collaborators

  • victorystick