virtual-scope

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

Usage no npm install needed!

<script type="module">
  import virtualScope from 'https://cdn.skypack.dev/virtual-scope';
</script>

README

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' ]