Skip to content

Latest commit

 

History

History
120 lines (96 loc) · 3.54 KB

README.md

File metadata and controls

120 lines (96 loc) · 3.54 KB

The light ES6 syntax. With many of the great features from CoffeeScript landing in ES6, but a very conservative path for ES6 feature to come to coffeescript (and many ES5 features still not in coffeescript coughnamed functionscough), AmericanoScript will bridge the gap as merely a reduction of some "clutter" in the language.

AmericanoScript Syntax is an ES6 shorthand, with these features:

  • Indent/Dedent to control blocks (Python, Coffeescript)
  • CS Aliases (and, or, is)
  • No Semicolons (Insert a semicolon at end of every non-ambiguous line)
  • Heredocs """, #{} for interpolation.
  • Block Regex /// ... /// with whitespace.
  • Drop parens around control structures (if, for, while, switch)
  • Existential Operator (foo.bar?.baz?)
  • Array slice/splice (foo.bar[i..j], foo.bar[m...n] = [])
  • Drop parens around callbacks.
  • Literate (markdown document, with parsed code blocks.)(Might get dropped.)

Targets - while not targeting these languages specifically, using the features should "Just Work".

  • AtScript

    @Component()
    class MyApp
      server:Server
      @Bind('name') name:string
      @Event('foo') fooFn:Function
    
      @Inject()
      constructor(@parent server:Server) {}
      greet():string {}

    Compiles to

    @Component()
    class MyApp {
      server:Server;
      @Bind('name') name:string;
      @Event('foo') fooFn:Function;
    
      @Inject()
      constructor(@parent server:Server) {}
      greet():string {}
    }
  • TypeScript

    class Greeter
        constructor(public greeting: string) { }
        greet()
            return "<h1>" + this.greeting + "</h1>"
    
    var greeter = new Greeter("Hello, world!")
    var str = greeter.greet()
    document.body.innerHTML = str

    Compiles to

    class Greeter {
        constructor(public greeting: string) { }
        greet() {
            return "<h1>" + this.greeting + "</h1>";
        }
    }
    var greeter = new Greeter("Hello, world!")
    var str = greeter.greet()
    document.body.innerHTML = str;
  • ES6

  • ES5

    var Path = require('path')
    module.exports = function bootstrapConfig(config)
        config.vendors = config.vendors or {}
        config.vendors.prefix = config.vendors.prefix or []
        config.vendors.prefix.push(Path.resolve(__dirname, '../node_modules'))
    
        config.vendors.js = (config.vendors.js or []).concat([
            'jquery/dist/jquery.js',
            'bootstrap/dist/js/bootstrap.js',
        ])
    
        config.vendors.css = (config.vendors.css or []).concat([
            'bootstrap/dist/css/bootstrap.css',
            'bootstrap/dist/css/bootstrap-theme.css',
        ])
        return config

    compiles to

    var Path = require('path')
    module.exports = function bootstrapConfig(config) {
        config.vendors = config.vendors || {}
        config.vendors.prefix = config.vendors.prefix || []
        config.vendors.prefix.push(Path.resolve(__dirname, '../node_modules'))
    
        config.vendors.js = (config.vendors.js || []).concat([
            'jquery/dist/jquery.js',
            'bootstrap/dist/js/bootstrap.js'
        ])
    
        config.vendors.css = (config.vendors.css || []).concat([
            'bootstrap/dist/css/bootstrap.css',
            'bootstrap/dist/css/bootstrap-theme.css',
        ])
        return config;
    }

Changelog

  • 0.0.1 2014-11-08 First implementation of faux-compiler.