Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Unfancy CoffeeScript
JavaScript

This branch is 3 commits ahead, 144 commits behind satyr:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
bin
doc
extras
lib
src
test
.gitignore
Cokefile
LICENSE
README.md
coco.png
index.html
package.co
package.json

README.md

Coco

is a CoffeeScript dialect that aims to be more radical and practical.

Why

On its way to hide JavaScript's bad parts, CoffeeScript has accumulated own quirks: horrible variable scope, awkward ranges, confusing and/or pointless keywords, verbose file extension, and so on. Coco tries to amend them, entwining good parts of both.

Principles

  • Respect JS semantics and idioms.
  • Die for DRY.
  • Perl over Ruby.
  • Fewer keywords, punctuations and runtime errors.

Differences

Documents

Tools

Installation

Get Node.js and npm, then:

  • npm i -g coco
  • git clone git://github.com/satyr/coco.git && cd coco && bin/coke i

Changelog

0.7.4

  • Added import declaration in place of the implicit this import: import a, b => this <<< a <<< b
  • Made super work in accessor methods.
  • Disallowed redeclarations via var.
  • Improved handling of nonexistent files.

0.7.3

  • Node.js 0.8.x.
  • Added const and var. (#139)
  • Made function variables read-only.
  • Removed -n shorthand for --nodejs. (#142)
  • Bug fixes:
    • super with nested classes and methods
    • f a, while b then c etc.
    • and others: #138 #141 #143

0.7.2

  • Revised accessor. (#5)
  • Allowed implicit array after some unary operators.
  • Added named backcall: <-:f g => g(:f ->)
  • Made {[q]:p} short for {p: [q]:p}.

0.7.1

  • Added export statement. (#121)
  • Made {{q}:p} short for {p: {q}:p}.
  • Allowed keyword literals as object shorthand: {true} => {true: true}
  • Allowed decimals and $ in number comments.
  • Removed uppercase radix prefixes and exponential notation as per coffee#2061.
  • Labelling a function (literal or IIFE sugar) now names it. E.g. :f -> compiles to (function f(){}).
  • super call to a bound class now works as expected.
  • All compiler-generated variables are now double-underscore prefixed.
  • --interactive no longer implies --bare. Use -bi when you want top-level variables to persist.

0.7.0

  • Caught up Node.js 0.6.x.
  • ! against function/backcall now suppresses its auto-return.
  • superclass now points to the constructor that the class extends.
  • super now relies solely on superclass rather than requiring special forms like C::m = ->.
  • of no longer delegates to Array::indexOf, making it consistent with for-of behavior.
  • Inline implicit objects now close at newline or if/for/while/until.
  • --print no longer implies --compile.
  • --watch now works on Windows.

0.6.7

0.6.6

  • Added unary assignments: !! = x => x = !!x
  • Made a? <<< b short for a <<< b if a?.
  • Improved stack traces from directly run .co files.

0.6.5

  • case/of/instanceof now works better with array slice.
  • instanceof now rejects invalid right operands.

0.6.4

  • Unary operators now spread into an array operand: +[a, b] => [+a, +b]
  • .. now points to the constructor under class.
  • coke now works from subdirectories. (coffee#1687)

0.6.3

  • Added pipe operator: f! => g _ => _ = f!; g _
  • Fixed identifier lexing as per ES5.
  • Improved label handlings.
  • Helper functions are now declared last. (coffee#1638)

0.6.2

  • Added character ranges: [\a to \d] => [\a \b \c \d]
  • Added named destructuring: {p, q}:o = f! => o = f!; {p, q} = o
  • Numbers can no longer start with ..
  • function can no longer prefix ->/~>. Use ~function to declare bound functions instead.

0.6.1

  • Allowed line folding after for prepositions.
  • importing onto a soaked expression is now safe.
  • --json now modifies --ast or --compile.
  • Fixed #81 etc.

0.6.0

Additions

Changes

  • Added object slice.
  • Added bang call: f! => f()
  • Revised clone syntax from x{} to ^x.
  • Revised semiautovivification syntax from .!/.@ to .@/.@@.
  • Variable interpolations no longer require braces: "(#id)" => "(" + id + ")"
  • Spaced dots now close implicit calls. See coffee#1407.
  • Direct calls to super now delegate this.
  • extended hook is back.
  • from of for is now optional, meaning from 0. tilless from is no longer allowed.

0.5.4

  • while/until can now have update clause after test clause: continue while f(), g() => for (; f(); g()) {}
  • that no longer triggers anaphoric conversion under unless/until.
  • Disallowed a.=b = c p:~ (a, b) -> f ..., a etc.
  • Fixed coffee#1416.

0.5.3

  • Added do-while/until construction.
  • Added $ flag to regexes. Same as .source, but more efficient.
  • Suppressed implicit return on newed/setter functions.
  • Sped up lexer.

0.5.2

  • Added !? (inexistence) operator.
  • function no longer requires parens around parameters.
  • class block is now mandatory.
  • Bug fixes: coffee#1352 coffee#1354

0.5.1

  • a.b.c?.=d.e now works as expected.
  • a[b, c] = d now works as expected.
  • extras/coco.js works again on WSH.
  • --output implies --compile again.

0.5.0

  • Added ** operator.
  • Overloaded +/-// (in addition to *) for arrays and strings.
  • Revised let: let (a) ~> => let a then
  • Allowed underscores within number literals.
  • Major regex changes:
    • Dieted heregex: /// re /// => // re //
    • Allowed leading whitespace in normal regex literals when unambiguous.
    • No longer accepts invalid regexes.
  • -> is now optional when function is used.
  • case accepts comma-separated tests again.
  • return/throw can now take a block.
  • REPL now uses ^J to continue lines.

0.4.2

  • Enabled:
    • ADI on ?.
    • ACI on ++/--
    • conditional destructuring assignments
    • colors and tab completion in REPL
  • Made leading *s serve like list markers.

0.4.1

  • Added string/array multiplication.
  • Added label support.
  • Aliased constructor as ...

0.4.0

  • Added let. Unary do is back at being simple call.
  • Added with.
  • Added semiautovivification.
  • Made :: a pure sugar for prototype, which can now directly refer to @:: under class body.
  • ?. can now appear anywhere a normal dot can be used.
  • ~. is changed to . ~.
  • new no longer accepts splatted arguments.
  • --interactive now works with --compile and --bare.
  • Renamed --nodes option and .nodes method to --ast/.ast.
  • Fixed the performance bug wrt long method chains.
  • Quit supporting Node.js 0.3.x or lower.

0.3.2

  • Unrestricted ADI for identifiers beyond @ and ::.
  • Expanded property shorthands beyond @foo.
  • Added typeof!, which inspects the internal [[Class]] property.
  • Added shebang support.
  • REPL results now evaluate more intuitively.
  • Disallowed whitespace mixup for indentations.

0.3.1

  • debugger now works anywhere.
  • Revised heregex flag syntax: ///#{x}#{y}///? -> RegExp('' + x, y);
  • Removed Coco.eval.
  • Made extras/coco.js work as a mini-compiler on WSH.
  • Added extras/mode-coco.js, an editing mode for Ace.
  • Added --json option.

0.3.0

Pure Additions

  • Added backcall, a sugar to flatten nested callbacks.
  • do block can now work as a pair of normal parentheses.
  • Improved ACI (automatic comma insertion): f {} [] x -> f({}, [], x);
  • Improved ADI (automatic dot insertion): @@0'!' -> arguments[0]['!'];
  • Multiline block on the RHS of object property now works as an implicit array.
  • Heregexes now support dynamic flags: /// x #{? y } /// -> RegExp('x', y);
  • Enabled compound accessigns: a.+=b -> a += a.b;
  • ... in array destructuring (same as ...[]) now skips items rather than sliceing them. (coffee#870)
  • Compilation errors now report line numbers.
  • Coco object now emits more events for use with --require.

Incompatible Changes

  • => -> ~>
  • &. -> ~.
  • Braceless objects no longer consume property shorthands. (coffee#618)
  • Indentations within non-here strings are now stripped.
  • Fixed block comment syntax to good ol' /* */.
  • @0 is now this[0] rather than arguments[0].

0.2.2

  • is not is the new isnt.
  • @'++' is now valid as a shorthand for @['++'].
  • Commas between primitive values are now optional.
  • coke now automatically aliases tasks.
  • extras/coco.js now works as a Gecko JS Module.
  • Grouped documentation suite into doc/ for portability.
  • Rewrote src/optparse.co.

0.2.1

  • Added numeric ranges.
  • Destructuring assignments can now specify default values using logical operators. Default arguments syntax has been changed accordingly. ((a || b) -> instead of (a ||= b) ->)
  • do now performs special conversions against function literals with parameters, making it work as pseudo-let and Coffee 1.0.0 compliant.
  • Allowed for i from x then as a sugar for for i from 0 til x then.
  • Disallowed duplicate formal arguments.
  • Improved syntax-highlight in src/index.html.

0.2.0

  • Version bump for Xmas, in concert with Coffee 1.0.0.
  • @@ is now a shorthand for arguments.
  • do can now indicate a call against indented arguments.
  • and and or now close implicit calls, making you write even less parens: f x and g y or z -> f(x) && g(y) || z;
  • catch's variable declaration is no longer required.
  • a<[ b c ]> is now equivalent to a[\b, \c] (was a(\b, \c)).
  • case now requires brackets to have multiple conditions.
  • Added --nodejs option. See coffee#910.
  • Renamed --stdio to --stdin.

0.1.6

  • Added character/word literal: \C + \++ -> 'C' + '++';
  • Retrieving multiple properties at once is now possible: a[b, c] -> [a[b], a[c]];
  • Destructuring into an object's properties is now possible:
    • a[b, c] = d -> a[b] = d[0], a[c] = d[1];
    • a{b, c} = d -> a.b = d.b, a.c = d.c;
  • Compound assignments can now destructure: [@a, @b] /= c -> this.a /= c[0], this.b /= c[1];

0.1.5

  • Conditional control structures can now be anaphoric; that within if, while or case block now refers to the condition value.
  • Decimal numbers can now have arbitrary trailing alphabets as comments. e.g. 9times, 1.5s
  • Added <<</<<<< as aliases to import/import all
  • non-ASCII identifiers are now allowed.

0.1.4

  • . and its families can now be used with numbers and strings, instead of []. a.0.'0' compiles to a[0]['0'].
  • Added syntax for cloning objects; obj{key:val} acts like a simple version of ES5 Object.create, creating a prototypal child of obj and assigning to .key with val.
  • default arguments can now choose to use ||/&&.
  • super under a class block now refers to the superclass.
  • .coffee extension is no longer supported.

0.1.3

  • Compilation now prefers single quotes.
  • AST now compiles faster, roughly 1.4 times than 0.1.2.
  • []/{} can now be safely used as an placeholder within array destructuring.
  • Improved --nodes output.

0.1.2

  • ... is now prefix.
  • {0: first, (*-1): last} = array now works.
  • Added --lex to the coco utility. Removed --lint.
  • src/ now has doc view.

0.1.1

Release.

Something went wrong with that request. Please try again.