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 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
Installation
npm i -g cocogit clone git://github.com/satyr/coco.git && cd coco && bin/coke i
Changelog
0.9.1
- Added
if-block. (#151) - Added
<>aka lef. (#180) - Added
for-let. (#164) - Gave
|>the lowest precedence. - Made block constructions directly dot-accessible.
- Made JS literal Markdown-esque. To include N
`, close with N+1`:``` '``' ``` - Quit reusing temporary variables.
- File extensions like co.json, coon, or cocoon now imply
--json. - Fixed:
0.9.0
- Literal
&is now used to reference several new targets:- Left hand of
|>(in place of_). - Current item of newly added quick map:
for [0 1] => &+2 # [2 3] - Subject of new
withas proposed in #172.
- Left hand of
- Made cascade, now
within disguise, require at least one&in body. (#179) - Made
letacceptthis =on the first assignment to substitute oldwith. - Made bodyless
catchreturn the catchee. - Made
by -1implied on downward ranges. - Made interpolation apply to
#&and#@. - Quit expanding
superfollowed by::to parent method, so that call tosuper::anotherMethodworks as expected. - Fixed:
0.8.2
- Fixed:
0.8.1
- Fixed #162.
0.8.0
- Allowed hyphenated alphabets within identifiers as alias to their upper case:
encode-URI-component=>encodeURIComponent - Added cascade. (#72
- Changed the pipe operator to
|>. - Revised
=>as another block creation operator. export/import/const/varcan now appear anywhere.catched variables are now function-scoped. (coffee#2422)- Generated variables now get postfix
$rather than prefix__.
0.7.6
- Added
export const. - Enabled object splat within brace objects via
...:. - Allowed array repetition to work on slices and comprehensions.
- Disallowed malformed hex/unicode escape sequence in string.
- Quit overloading
+for array concatenation. classcan be bodyless again.superno longer auto-.calls more than once.
0.7.5
- Implemented
implements. (#144) - Top-level
voids are now simply ignored and usable like Python's pass.
0.7.4
- Added
importdeclaration in place of the implicitthis import:import a, b=>this <<< a <<< b - Made
superwork in accessor methods. - Disallowed redeclarations via
var. - Improved handling of nonexistent files.
0.7.3
- Node.js 0.8.x.
- Added
constandvar. (#139) - Made
functionvariables read-only. - Removed
-nshorthand for--nodejs. (#142) - Bug fixes:
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
exportstatement. (#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(){}). supercall to a bound class now works as expected.- All compiler-generated variables are now double-underscore prefixed.
--interactiveno longer implies--bare. Use-biwhen 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.superclassnow points to the constructor that theclass extends.supernow relies solely onsuperclassrather than requiring special forms likeC::m = ->.ofno longer delegates toArray::indexOf, making it consistent withfor-ofbehavior.- Inline implicit objects now close at newline or
if/for/while/until. --printno longer implies--compile.--watchnow works on Windows.
0.6.7
- Fixed coffee#1715 etc.
- Trivial improvements.
0.6.6
- Added unary assignments:
!! = x=>x = !!x - Made
a? <<< bshort fora <<< b if a?. - Improved stack traces from directly run .co files.
0.6.5
case/of/instanceofnow works better with array slice.instanceofnow 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
.. functioncan no longer prefix->/~>. Use~functionto declare bound functions instead.
0.6.1
- Allowed line folding after
forprepositions. importing onto a soaked expression is now safe.--jsonnow modifies--astor--compile.- Fixed #81 etc.
0.6.0
Additions
- Added soak assign.
- Added
<?and>?operators. - Loops can now have
elseclause. import xis 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
supernow delegatethis. extendedhook is back.fromofforis now optional, meaningfrom 0.tillessfromis no longer allowed.
0.5.4
while/untilcan now have update clause after test clause:continue while f(), g()=>for (; f(); g()) {}thatno longer triggers anaphoric conversion underunless/until.- Disallowed
a.=b = cp:~ (a, b) ->f ..., aetc. - Fixed coffee#1416.
0.5.3
- Added
do-while/untilconstruction. - 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. functionno longer requires parens around parameters.classblock is now mandatory.- Bug fixes: coffee#1352 coffee#1354
0.5.1
a.b.c?.=d.enow works as expected.a[b, c] = dnow works as expected.- extras/coco.js works again on WSH.
--outputimplies--compileagain.
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 whenfunctionis used.caseaccepts comma-separated tests again.return/throwcan 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
constructoras...
0.4.0
- Added
let. Unarydois 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. ~.newno longer accepts splatted arguments.--interactivenow works with--compileand--bare.- Renamed
--nodesoption and.nodesmethod 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
debuggernow 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
--jsonoption.
0.3.0
Pure Additions
- Added backcall, a sugar to flatten nested callbacks.
doblock 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 thansliceing them. (coffee#870)- Compilation errors now report line numbers.
Cocoobject 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'
/* */. @0is nowthis[0]rather thanarguments[0].
0.2.2
is notis 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) ->) donow performs special conversions against function literals with parameters, making it work as pseudo-letand Coffee 1.0.0 compliant.- Allowed
for i from x thenas 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.docan now indicate a call against indented arguments.andandornow 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)).casenow requires brackets to have multiple conditions.- Added
--nodejsoption. See coffee#910. - Renamed
--stdioto--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;
thatwithinif,whileorcaseblock 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 ofobjand assigning to.keywithval. - default arguments can now choose to use
||/&&. superunder 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
--nodesoutput.
0.1.2
...is now prefix.{0: first, (*-1): last} = arraynow works.- Added
--lexto thecocoutility. Removed--lint. - src/ now has doc view.
0.1.1
Release.