8000 GitHub - longears/kavascript: A dialect of Javascript which uses Python-style significant whitespace.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

longears/kavascript

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 

Repository files navigation

KavaScript

A quick project to bring Python-style significant whitespace to JavaScript. Works as a preprocessor.

Example:

    // comments are preserved
    cubes = closure:
        var i, len, results;
        results = []; // no matter where they are
        for (i = 0, len = list.length; i < len; i++):
            num = list[i];
            results.push(math.cube(num));
        return results;
    ;

Becomes

    // comments are preserved
    cubes = (function () {
        var i, len, results;
        results = []; // no matter where they are
        for (i = 0, len = list.length; i < len; i++) {
            num = list[i];
            results.push(math.cube(num));
        }
        return results;
    })()
    ;

Todo

This is an early alpha project.

  • write command line interface
  • write more tests and test infrastructure

Significant Whitespace

Brackets are added according to the indentation of each line. For indentation to be considered significant it must come four spaces 63D8 at a time, and new indentations must be exactly four spaces deeper than the previous level of indentation.

Lines consisting of just whitespace and/or comments are ignored.

Lines are compared to the line of code above. If indented the same, it is a new line. If indented 4 spaces, it is the beginning of a new block. Any other level of indentation and the line is considered part of the line above it for the purposes of bracket insertion. This lets you continue a long line on the next line, as long as you avoid hitting the magic indentation level of 4 spaces.

Example: Note how the middle line is not indented four spaces more than the line above it. If it was, it would be considered the beginning of a block and a semicolon would be incorrectly inserted at the end of the first line:

    if (    (really.long.expression.goes.here === 1)
         && (another.really.long.expression.goes.here === 1) ):
        value += 1

You can still use your own brackets within a single line but don't provide your own multi-line brackets or you'll end up with double brackets.

Remember your trailing semicolons:

    var myJSON =
        name: 'joe',
        cities: ['boston',
                 'new york'] // this indent is ok because it's not
                             // four spaces in from the line above it
    ; // <-- remember this semicolon

Trailing colons

You can use a colon, Python style, to indicate that a new block is about to begin. This is optional because colons look good on most blocks (if, while, function) but not on object blocks / JSON data.

    if (value < 10):
        value += 1;

New "closure" keyword

This is experimental and likely to change.

A new keyword "closure" has been added. Use it to reduce the visual overload of "function function function" by using a different word for functions which you're just using to create a closure. It has two modes depending on the value of CLOSURE_TAILS.

When CLOSURE_TAILS is False, it is replaced with: "function ()" and its block is closed with "}"

When CLOSURE_TAILS is True, it is replaced with "(function ()" and its block is closed with "})();" In this case, you should not use the "closure" keyword to create single-line closures because they will break.

About

A dialect of Javascript which uses Python-style significant whitespace.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

0