Package Exports
- coco
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (coco) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
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/pointless keywords, long extension, and so on. Coco tries to amend them, entwining good parts of both.
Principles
- Respect JavaScript/ECMAScript semantics.
- Die for DRY.
- Performance over readability.
- Perl over Ruby.
- Less keywords, punctuations and runtime errors.
Differences
Documents
Installation
on node.js
git clone git://github.com/satyr/coco.git && cd coco && bin/coke i
via npm
npm i coco
Changelog
0.6.7
- Fixed coffee#1715 etc.
- Trivial improvements.
0.6.6
- Added unary assignments:
!! = x
=>x = !!x
- Made
a? <<< b
short fora <<< 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 underclass
.- 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. import
ing onto a soaked expression is now safe.--json
now modifies--ast
or--compile
.- Fixed #81 etc.
0.6.0
Additions
- Added soak assign.
- Added
<?
and>?
operators. - Loops can now have
else
clause. import x
is now short forthis <<< x
.,
after(
,[
or another,
now impliesvoid
.
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 delegatethis
. extended
hook is back.from
offor
is now optional, meaningfrom 0
.til
lessfrom
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 underunless
/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
new
ed/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.
- Dieted heregex:
->
is now optional whenfunction
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
- ADI on
- 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
. Unarydo
is back at being simple call. - Added
with
. - Added semiautovivification.
- Made
::
a pure sugar forprototype
, 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 thanslice
ing 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 nowthis[0]
rather thanarguments[0]
.
0.2.2
is not
is the newisnt
.@'++'
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 forfor 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 forarguments
.do
can now indicate a call against indented arguments.and
andor
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 toa[\b, \c]
(wasa(\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
withinif
,while
orcase
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 toimport
/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 toa[0]['0']
.- Added syntax for cloning objects;
obj{key:val}
acts like a simple version of ES5Object.create
, creating a prototypal child ofobj
and assigning to.key
withval
. - 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 thecoco
utility. Removed--lint
. - src/ now has doc view.
0.1.1
Release.