Skip to content
This repository has been archived by the owner on Jan 2, 2019. It is now read-only.

Transforms iota() calls into ever-increasing literals.

License

Notifications You must be signed in to change notification settings

passcod/babel-plugin-transform-iota

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Babel transform: iota

Greenkeeper badge

License: ISC Travis CI Test Status Code of Conduct

Transforms iota() calls into ever-increasing literals, à la Go.

Installation

$ npm install babel-plugin-transform-iota

Usage

Via .babelrc (Recommended)

.babelrc

{
  "plugins": ["transform-iota"]
}

Via CLI

$ babel --plugins transform-iota script.js

Via Node API

require("babel-core").transform("code", {
  plugins: ["transform-iota"]
});

Synopsis

Input

var foo = iota()
let bar = iota()
bar.baz = iota()
const qux = {
  a: iota(),
  [iota()]: 'b'
}

Output

var foo = [1]
let bar = [2]
bar.baz = [3]
const qux = {
  a: [4],
  [[5]]: 'b'
}

([5] coerces to "5", which becomes a valid key. We cannot directly use "5" as iota, because we want to support the case where we add properties to an iota, and we can't do that on string literals.)

Also removes all functions named iota(), so you can still define them and have a working implementation without Babel (and so your code lints without /* global iota */ overrides). Here's a working example:

function iota () {
  if (!this.i) { this.i = 0 }
  return [this.i += 1]
}

About

Made by Félix Saparelli. Licensed under ISC. Inspired by Go.

About

Transforms iota() calls into ever-increasing literals.

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published