Release 2.3.2 (#5110)
* Bump version to 2.3.2 * 2.3.2 changelog * Update output for 2.3.2
This commit is contained in:
parent
b4dceaea67
commit
6e86b67818
|
@ -875,6 +875,9 @@ browsers) or use a proper build chain like Gulp or Webpack.</p>
|
|||
</div>
|
||||
|
||||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">try</span>
|
||||
<span class="hljs-built_in">require</span> <span class="hljs-string">'@babel/core'</span>
|
||||
<span class="hljs-keyword">catch</span>
|
||||
<span class="hljs-keyword">try</span>
|
||||
<span class="hljs-built_in">require</span> <span class="hljs-string">'babel-core'</span>
|
||||
<span class="hljs-keyword">catch</span></pre></div></div>
|
||||
|
||||
|
@ -894,15 +897,15 @@ locally or globally.</p>
|
|||
|
||||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> <span class="hljs-built_in">require</span>.resolve(<span class="hljs-string">'.'</span>).indexOf(process.cwd()) <span class="hljs-keyword">is</span> <span class="hljs-number">0</span>
|
||||
<span class="hljs-built_in">console</span>.error <span class="hljs-string">'''
|
||||
To use --transpile, you must have babel-core installed:
|
||||
npm install --save-dev babel-core
|
||||
To use --transpile, you must have @babel/core installed:
|
||||
npm install --save-dev @babel/core
|
||||
And you must save options to configure Babel in one of the places it looks to find its options.
|
||||
See https://coffeescript.org/#transpilation
|
||||
'''</span>
|
||||
<span class="hljs-keyword">else</span>
|
||||
<span class="hljs-built_in">console</span>.error <span class="hljs-string">'''
|
||||
To use --transpile with globally-installed CoffeeScript, you must have babel-core installed globally:
|
||||
npm install --global babel-core
|
||||
To use --transpile with globally-installed CoffeeScript, you must have @babel/core installed globally:
|
||||
npm install --global @babel/core
|
||||
And you must save options to configure Babel in one of the places it looks to find its options, relative to the file being compiled or to the current folder.
|
||||
See https://coffeescript.org/#transpilation
|
||||
'''</span>
|
||||
|
|
|
@ -442,6 +442,7 @@ wrapped in braces: E.g <code>a = b if do -> f a is 1</code>, <code>if f (a) -
|
|||
Yield: [
|
||||
o <span class="hljs-string">'YIELD'</span>, <span class="hljs-function">-></span> <span class="hljs-keyword">new</span> Op $<span class="hljs-number">1</span>, <span class="hljs-keyword">new</span> Value <span class="hljs-keyword">new</span> Literal <span class="hljs-string">''</span>
|
||||
o <span class="hljs-string">'YIELD Expression'</span>, <span class="hljs-function">-></span> <span class="hljs-keyword">new</span> Op $<span class="hljs-number">1</span>, $<span class="hljs-number">2</span>
|
||||
o <span class="hljs-string">'YIELD INDENT Object OUTDENT'</span>, <span class="hljs-function">-></span> <span class="hljs-keyword">new</span> Op $<span class="hljs-number">1</span>, $<span class="hljs-number">3</span>
|
||||
o <span class="hljs-string">'YIELD FROM Expression'</span>, <span class="hljs-function">-></span> <span class="hljs-keyword">new</span> Op $<span class="hljs-number">1.</span>concat($<span class="hljs-number">2</span>), $<span class="hljs-number">3</span>
|
||||
]</pre></div></div>
|
||||
|
||||
|
@ -1734,6 +1735,7 @@ rules are necessary.</p>
|
|||
o <span class="hljs-string">'+ Expression'</span>, (<span class="hljs-function">-></span> <span class="hljs-keyword">new</span> Op <span class="hljs-string">'+'</span>, $<span class="hljs-number">2</span>), prec: <span class="hljs-string">'UNARY_MATH'</span>
|
||||
|
||||
o <span class="hljs-string">'AWAIT Expression'</span>, <span class="hljs-function">-></span> <span class="hljs-keyword">new</span> Op $<span class="hljs-number">1</span>, $<span class="hljs-number">2</span>
|
||||
o <span class="hljs-string">'AWAIT INDENT Object OUTDENT'</span>, <span class="hljs-function">-></span> <span class="hljs-keyword">new</span> Op $<span class="hljs-number">1</span>, $<span class="hljs-number">3</span>
|
||||
|
||||
o <span class="hljs-string">'-- SimpleAssignable'</span>, <span class="hljs-function">-></span> <span class="hljs-keyword">new</span> Op <span class="hljs-string">'--'</span>, $<span class="hljs-number">2</span>
|
||||
o <span class="hljs-string">'++ SimpleAssignable'</span>, <span class="hljs-function">-></span> <span class="hljs-keyword">new</span> Op <span class="hljs-string">'++'</span>, $<span class="hljs-number">2</span>
|
||||
|
|
|
@ -127,6 +127,9 @@ path = <span class="hljs-built_in">require</span> <span class="hljs-str
|
|||
helpers = CoffeeScript.helpers
|
||||
|
||||
CoffeeScript.transpile = <span class="hljs-function"><span class="hljs-params">(js, options)</span> -></span>
|
||||
<span class="hljs-keyword">try</span>
|
||||
babel = <span class="hljs-built_in">require</span> <span class="hljs-string">'@babel/core'</span>
|
||||
<span class="hljs-keyword">catch</span>
|
||||
<span class="hljs-keyword">try</span>
|
||||
babel = <span class="hljs-built_in">require</span> <span class="hljs-string">'babel-core'</span>
|
||||
<span class="hljs-keyword">catch</span></pre></div></div>
|
||||
|
@ -145,7 +148,7 @@ earlier if they don’t have Babel installed.</p>
|
|||
|
||||
</div>
|
||||
|
||||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> Error <span class="hljs-string">'To use the transpile option, you must have the \'babel-core\' module installed'</span>
|
||||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> Error <span class="hljs-string">'To use the transpile option, you must have the \'@babel/core\' module installed'</span>
|
||||
babel.transform js, options</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
|
|
@ -465,6 +465,8 @@ what CoffeeScript would normally interpret as calls to functions named
|
|||
@tokens.length > <span class="hljs-number">1</span> <span class="hljs-keyword">and</span> @tokens[@tokens.length - <span class="hljs-number">2</span>][<span class="hljs-number">0</span>] <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> [<span class="hljs-string">'.'</span>, <span class="hljs-string">'?.'</span>, <span class="hljs-string">'@'</span>]
|
||||
@error <span class="hljs-string">"'<span class="hljs-subst">#{prev[<span class="hljs-number">1</span>]}</span>' cannot be used as a keyword, or as a function call
|
||||
without parentheses"</span>, prev[<span class="hljs-number">2</span>]
|
||||
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> prev[<span class="hljs-number">0</span>] <span class="hljs-keyword">is</span> <span class="hljs-string">'.'</span> <span class="hljs-keyword">and</span> @tokens.length > <span class="hljs-number">1</span> <span class="hljs-keyword">and</span> (prevprev = @tokens[@tokens.length - <span class="hljs-number">2</span>])[<span class="hljs-number">0</span>] <span class="hljs-keyword">is</span> <span class="hljs-string">'UNARY'</span> <span class="hljs-keyword">and</span> prevprev[<span class="hljs-number">1</span>] <span class="hljs-keyword">is</span> <span class="hljs-string">'new'</span>
|
||||
prevprev[<span class="hljs-number">0</span>] = <span class="hljs-string">'IDENTIFIER'</span>
|
||||
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> @tokens.length > <span class="hljs-number">2</span>
|
||||
prevprev = @tokens[@tokens.length - <span class="hljs-number">2</span>]
|
||||
<span class="hljs-keyword">if</span> prev[<span class="hljs-number">0</span>] <span class="hljs-keyword">in</span> [<span class="hljs-string">'@'</span>, <span class="hljs-string">'THIS'</span>] <span class="hljs-keyword">and</span> prevprev <span class="hljs-keyword">and</span> prevprev.spaced <span class="hljs-keyword">and</span>
|
||||
|
|
|
@ -2117,6 +2117,7 @@ evaluate anything twice when building the soak chain.</p>
|
|||
</div>
|
||||
|
||||
<div class="content"><div class='highlight'><pre> compileNode: <span class="hljs-function"><span class="hljs-params">(o)</span> -></span>
|
||||
@checkNewTarget o
|
||||
@base.front = @front
|
||||
props = @properties
|
||||
<span class="hljs-keyword">if</span> props.length <span class="hljs-keyword">and</span> @base.cached?</pre></div></div>
|
||||
|
@ -2147,7 +2148,15 @@ Example:
|
|||
<span class="hljs-keyword">for</span> prop <span class="hljs-keyword">in</span> props
|
||||
fragments.push (prop.compileToFragments o)...
|
||||
|
||||
fragments</pre></div></div>
|
||||
fragments
|
||||
|
||||
checkNewTarget: <span class="hljs-function"><span class="hljs-params">(o)</span> -></span>
|
||||
<span class="hljs-keyword">return</span> <span class="hljs-keyword">unless</span> @base <span class="hljs-keyword">instanceof</span> IdentifierLiteral <span class="hljs-keyword">and</span> @base.value <span class="hljs-keyword">is</span> <span class="hljs-string">'new'</span> <span class="hljs-keyword">and</span> @properties.length
|
||||
<span class="hljs-keyword">if</span> @properties[<span class="hljs-number">0</span>] <span class="hljs-keyword">instanceof</span> Access <span class="hljs-keyword">and</span> @properties[<span class="hljs-number">0</span>].name.value <span class="hljs-keyword">is</span> <span class="hljs-string">'target'</span>
|
||||
<span class="hljs-keyword">unless</span> o.scope.parent?
|
||||
@error <span class="hljs-string">"new.target can only occur inside functions"</span>
|
||||
<span class="hljs-keyword">else</span>
|
||||
@error <span class="hljs-string">"the only valid meta property for new is new.target"</span></pre></div></div>
|
||||
|
||||
</li>
|
||||
|
||||
|
@ -7071,7 +7080,8 @@ and using @body.compileNode. <code>StringWithInterpolations.compileNode</code> i
|
|||
<span class="hljs-keyword">else</span>
|
||||
fragments.push @makeCode <span class="hljs-string">'$'</span> <span class="hljs-keyword">unless</span> @csx
|
||||
code = element.compileToFragments(o, LEVEL_PAREN)
|
||||
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> @isNestedTag(element) <span class="hljs-keyword">or</span> code.some(<span class="hljs-function"><span class="hljs-params">(fragment)</span> -></span> fragment.comments?)
|
||||
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> @isNestedTag(element) <span class="hljs-keyword">or</span>
|
||||
code.some(<span class="hljs-function"><span class="hljs-params">(fragment)</span> -></span> fragment.comments?.some(<span class="hljs-function"><span class="hljs-params">(comment)</span> -></span> comment.here <span class="hljs-keyword">is</span> <span class="hljs-literal">no</span>))
|
||||
code = @wrapInBraces code</pre></div></div>
|
||||
|
||||
</li>
|
||||
|
@ -7085,8 +7095,10 @@ and using @body.compileNode. <code>StringWithInterpolations.compileNode</code> i
|
|||
</div>
|
||||
<p>Flag the <code>{</code> and <code>}</code> fragments as having been generated by this
|
||||
<code>StringWithInterpolations</code> node, so that <code>compileComments</code> knows
|
||||
to treat them as bounds. Don’t trust <code>fragment.type</code>, which can
|
||||
report minified variable names when this compiler is minified.</p>
|
||||
to treat them as bounds. But the braces are unnecessary if all of
|
||||
the enclosed comments are <code>/* */</code> comments. Don’t trust
|
||||
<code>fragment.type</code>, which can report minified variable names when
|
||||
this compiler is minified.</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
|
|
@ -699,15 +699,18 @@ undeclared variable <code>__</code>.</p>
|
|||
CoffeeScript.register()
|
||||
process.argv = [<span class="hljs-string">'coffee'</span>].concat process.argv[<span class="hljs-number">2.</span>.]
|
||||
<span class="hljs-keyword">if</span> opts.transpile
|
||||
<span class="hljs-keyword">try</span>
|
||||
transpile = {}
|
||||
<span class="hljs-keyword">try</span>
|
||||
transpile.transpile = <span class="hljs-built_in">require</span>(<span class="hljs-string">'@babel/core'</span>).transform
|
||||
<span class="hljs-keyword">catch</span>
|
||||
<span class="hljs-keyword">try</span>
|
||||
transpile.transpile = <span class="hljs-built_in">require</span>(<span class="hljs-string">'babel-core'</span>).transform
|
||||
<span class="hljs-keyword">catch</span>
|
||||
<span class="hljs-built_in">console</span>.error <span class="hljs-string">'''
|
||||
To use --transpile with an interactive REPL, babel-core must be installed either in the current folder or globally:
|
||||
npm install --save-dev babel-core
|
||||
To use --transpile with an interactive REPL, @babel/core must be installed either in the current folder or globally:
|
||||
npm install --save-dev @babel/core
|
||||
or
|
||||
npm install --global babel-core
|
||||
npm install --global @babel/core
|
||||
And you must save options to configure Babel in one of the places it looks to find its options.
|
||||
See https://coffeescript.org/#transpilation
|
||||
'''</span>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -693,7 +693,7 @@ textarea {
|
|||
<section id="introduction">
|
||||
<p><strong>CoffeeScript is a little language that compiles into JavaScript.</strong> Underneath that awkward Java-esque patina, JavaScript has always had a gorgeous heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way.</p>
|
||||
<p>The golden rule of CoffeeScript is: <em>“It’s just JavaScript.”</em> The code compiles one-to-one into the equivalent JS, and there is no interpretation at runtime. You can use any existing JavaScript library seamlessly from CoffeeScript (and vice-versa). The compiled output is readable, pretty-printed, and tends to run as fast or faster than the equivalent handwritten JavaScript.</p>
|
||||
<p><strong>Latest Version:</strong> <a href="https://github.com/jashkenas/coffeescript/tarball/2.3.1">2.3.1</a></p>
|
||||
<p><strong>Latest Version:</strong> <a href="https://github.com/jashkenas/coffeescript/tarball/2.3.2">2.3.2</a></p>
|
||||
<blockquote class="uneditable-code-block"><pre><code class="language-bash"><span class="comment"># Install locally for a project:</span>
|
||||
npm install --save-dev coffeescript
|
||||
|
||||
|
@ -4845,7 +4845,7 @@ The CoffeeScript logo is available in SVG for use in presentations.</li>
|
|||
</section>
|
||||
<section id="annotated-source">
|
||||
<h2>Annotated Source</h2>
|
||||
<p>You can browse the CoffeeScript 2.3.1 source in readable, annotated form <a href="annotated-source/">here</a>. You can also jump directly to a particular source file:</p>
|
||||
<p>You can browse the CoffeeScript 2.3.2 source in readable, annotated form <a href="annotated-source/">here</a>. You can also jump directly to a particular source file:</p>
|
||||
<ul>
|
||||
<li><a href="annotated-source/grammar.html">Grammar Rules — src/grammar</a></li>
|
||||
<li><a href="annotated-source/lexer.html">Lexing Tokens — src/lexer</a></li>
|
||||
|
@ -5523,6 +5523,17 @@ x = <span class="number">2</span> + <span class="number">2</span>
|
|||
<section id="changelog">
|
||||
<h2>Changelog</h2>
|
||||
|
||||
<section id="2.3.2">
|
||||
<h3><a href="https://github.com/jashkenas/coffeescript/compare/2.3.1...2.3.2">2.3.2</a>
|
||||
<span class="timestamp"> — <time datetime="2018-09-19">2018-09-19</time></span>
|
||||
</h3><ul>
|
||||
<li>Babel 7 is now supported. With version 7, the Babel team moved from <code>babel-core</code> on NPM to <code>@babel/core</code>. Now the CoffeeScript <code>--transpile</code> option will first search for <code>@babel/core</code> (Babel versions 7 and above) and then search for <code>babel-core</code> (versions 6 and below) to try to find an installed version of Babel to use for transpilation.</li>
|
||||
<li>The syntax <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target"><code>new.target</code></a> is now supported.</li>
|
||||
<li>You can now follow the keyword <code>yield</code> with an indented object, like has already been allowed for <code>return</code> and other keywords.</li>
|
||||
<li>Previously, any comments inside a JSX tag or attribute would cause interpolation braces (<code>{</code> and <code>}</code>) to be output. This is only necessary for line (<code>#</code>, or <code>//</code> in JavaScript) comments, not here (<code>###</code>, or <code>/* */</code>) comments; so now the compiler checks if all the comments that would trigger the braces are here comments, and if so it doesn’t generate the unnecessary interpolation braces.</li>
|
||||
</ul>
|
||||
|
||||
</section>
|
||||
<section id="2.3.1">
|
||||
<h3><a href="https://github.com/jashkenas/coffeescript/compare/2.3.0...2.3.1">2.3.1</a>
|
||||
<span class="timestamp"> — <time datetime="2018-05-21">2018-05-21</time></span>
|
||||
|
|
|
@ -1552,6 +1552,14 @@ test "async methods in classes", ->
|
|||
eq await Child.static(), 1
|
||||
eq await new Child().method(), 2
|
||||
|
||||
test "#3199: await multiline implicit object", ->
|
||||
do ->
|
||||
y =
|
||||
if no then await
|
||||
type: 'a'
|
||||
msg: 'b'
|
||||
eq undefined, y
|
||||
|
||||
</script>
|
||||
<script type="text/x-coffeescript" class="test" id="async_iterators">
|
||||
# This is always fulfilled.
|
||||
|
@ -3515,6 +3523,29 @@ test "#4868: Incorrect ‘Can’t call super with @params’ error", ->
|
|||
|
||||
d = new (new D).c
|
||||
eq 3, d.a
|
||||
|
||||
test "#4609: Support new.target", ->
|
||||
class A
|
||||
constructor: ->
|
||||
@calledAs = new.target.name
|
||||
|
||||
class B extends A
|
||||
|
||||
b = new B
|
||||
eq b.calledAs, 'B'
|
||||
|
||||
newTarget = null
|
||||
Foo = ->
|
||||
newTarget = !!new.target
|
||||
|
||||
Foo()
|
||||
eq newTarget, no
|
||||
|
||||
newTarget = null
|
||||
|
||||
new Foo()
|
||||
eq newTarget, yes
|
||||
|
||||
</script>
|
||||
<script type="text/x-coffeescript" class="test" id="cluster">
|
||||
# Cluster Module
|
||||
|
@ -4673,7 +4704,7 @@ transpile = (method, code, options = {}) ->
|
|||
options.bare = yes
|
||||
options.transpile =
|
||||
# Target Internet Explorer 6, which supports no ES2015+ features.
|
||||
presets: [['env', {targets: browsers: ['ie 6']}]]
|
||||
presets: [['@babel/env', {targets: browsers: ['ie 6']}]]
|
||||
CoffeeScript[method] code, options
|
||||
|
||||
|
||||
|
@ -4839,6 +4870,7 @@ test "#3306: trailing comma in a function call in the last line", ->
|
|||
''', '''
|
||||
foo(bar);
|
||||
'''
|
||||
|
||||
</script>
|
||||
<script type="text/x-coffeescript" class="test" id="comprehensions">
|
||||
# Comprehensions
|
||||
|
@ -7480,6 +7512,47 @@ test '#4686: comments inside interpolations that also contain CSX attributes', -
|
|||
</div>;
|
||||
'''
|
||||
|
||||
test '#5086: comments inside CSX tags but outside interpolations', ->
|
||||
eqJS '''
|
||||
<div>
|
||||
<div ###comment### attribute={value} />
|
||||
</div>
|
||||
''', '''
|
||||
<div>
|
||||
<div /*comment*/attribute={value} />
|
||||
</div>;
|
||||
'''
|
||||
|
||||
test '#5086: comments inside CSX attributes but outside interpolations', ->
|
||||
eqJS '''
|
||||
<div>
|
||||
<div attribute={###attr comment### value} />
|
||||
</div>
|
||||
''', '''
|
||||
<div>
|
||||
<div attribute={/*attr comment*/value} />
|
||||
</div>;
|
||||
'''
|
||||
|
||||
test '#5086: comments inside nested CSX tags and attributes but outside interpolations', ->
|
||||
eqJS '''
|
||||
<div>
|
||||
<div>
|
||||
<div>
|
||||
<div ###comment### attribute={###attr comment### value} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
''', '''
|
||||
<div>
|
||||
<div>
|
||||
<div>
|
||||
<div /*comment*/attribute={/*attr comment*/value} />
|
||||
</div>
|
||||
</div>
|
||||
</div>;
|
||||
'''
|
||||
|
||||
# https://reactjs.org/blog/2017/11/28/react-v16.2.0-fragment-support.html
|
||||
test 'JSX fragments: empty fragment', ->
|
||||
eqJS '''
|
||||
|
@ -9377,6 +9450,50 @@ test "#3199: error message for throw indented comprehension", ->
|
|||
^
|
||||
'''
|
||||
|
||||
test "#3199: error message for yield indented non-object", ->
|
||||
assertErrorFormat '''
|
||||
->
|
||||
yield
|
||||
1
|
||||
''', '''
|
||||
[stdin]:3:5: error: unexpected number
|
||||
1
|
||||
^
|
||||
'''
|
||||
|
||||
test "#3199: error message for yield indented comprehension", ->
|
||||
assertErrorFormat '''
|
||||
->
|
||||
yield
|
||||
x for x in [1, 2, 3]
|
||||
''', '''
|
||||
[stdin]:3:5: error: unexpected identifier
|
||||
x for x in [1, 2, 3]
|
||||
^
|
||||
'''
|
||||
|
||||
test "#3199: error message for await indented non-object", ->
|
||||
assertErrorFormat '''
|
||||
->
|
||||
await
|
||||
1
|
||||
''', '''
|
||||
[stdin]:3:5: error: unexpected number
|
||||
1
|
||||
^
|
||||
'''
|
||||
|
||||
test "#3199: error message for await indented comprehension", ->
|
||||
assertErrorFormat '''
|
||||
->
|
||||
await
|
||||
x for x in [1, 2, 3]
|
||||
''', '''
|
||||
[stdin]:3:5: error: unexpected identifier
|
||||
x for x in [1, 2, 3]
|
||||
^
|
||||
'''
|
||||
|
||||
test "#3098: suppressed newline should be unsuppressed by semicolon", ->
|
||||
assertErrorFormat '''
|
||||
a = ; 5
|
||||
|
@ -9445,6 +9562,24 @@ test "#3933: prevent implicit calls when cotrol flow is missing `THEN`", ->
|
|||
^^
|
||||
'''
|
||||
|
||||
test "`new.target` outside of a function", ->
|
||||
assertErrorFormat '''
|
||||
new.target
|
||||
''', '''
|
||||
[stdin]:1:1: error: new.target can only occur inside functions
|
||||
new.target
|
||||
^^^^^^^^^^
|
||||
'''
|
||||
|
||||
test "`new.target` is only allowed meta property", ->
|
||||
assertErrorFormat '''
|
||||
-> new.something
|
||||
''', '''
|
||||
[stdin]:1:4: error: the only valid meta property for new is new.target
|
||||
-> new.something
|
||||
^^^^^^^^^^^^^
|
||||
'''
|
||||
|
||||
</script>
|
||||
<script type="text/x-coffeescript" class="test" id="eval">
|
||||
if vm = require? 'vm'
|
||||
|
@ -10108,6 +10243,22 @@ test "#3199: throw multiline implicit object", ->
|
|||
msg: 'b'
|
||||
eq undefined, y
|
||||
|
||||
y = do ->
|
||||
yield
|
||||
type: 'a'
|
||||
msg: 'b'
|
||||
|
||||
if no then yield
|
||||
type: 'c'
|
||||
msg: 'd'
|
||||
|
||||
1
|
||||
{value, done} = y.next()
|
||||
ok value.type is 'a' and done is no
|
||||
|
||||
{value, done} = y.next()
|
||||
ok value is 1 and done is yes
|
||||
|
||||
test "#4576: multiple row function chaining", ->
|
||||
->
|
||||
eq @a, 3
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
```
|
||||
releaseHeader('2018-09-19', '2.3.2', '2.3.1')
|
||||
```
|
||||
|
||||
* Babel 7 is now supported. With version 7, the Babel team moved from `babel-core` on NPM to `@babel/core`. Now the CoffeeScript `--transpile` option will first search for `@babel/core` (Babel versions 7 and above) and then search for `babel-core` (versions 6 and below) to try to find an installed version of Babel to use for transpilation.
|
||||
* The syntax [`new.target`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target) is now supported.
|
||||
* You can now follow the keyword `yield` with an indented object, like has already been allowed for `return` and other keywords.
|
||||
* Previously, any comments inside a JSX tag or attribute would cause interpolation braces (`{` and `}`) to be output. This is only necessary for line (`#`, or `//` in JavaScript) comments, not here (`###`, or `/* */`) comments; so now the compiler checks if all the comments that would trigger the braces are here comments, and if so it doesn’t generate the unnecessary interpolation braces.
|
|
@ -207,6 +207,9 @@
|
|||
</section>
|
||||
<section id="changelog">
|
||||
<%= htmlFor('changelog') %>
|
||||
<section id="2.3.2">
|
||||
<%= htmlFor('changelog/2.3.2') %>
|
||||
</section>
|
||||
<section id="2.3.1">
|
||||
<%= htmlFor('changelog/2.3.1') %>
|
||||
</section>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
// This **Browser** compatibility layer extends core CoffeeScript functions
|
||||
// to make things work smoothly when compiling code directly in the browser.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
// `cake` is a simplified version of [Make](http://www.gnu.org/software/make/)
|
||||
// ([Rake](http://rake.rubyforge.org/), [Jake](https://github.com/280north/jake))
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
// CoffeeScript can be used both on the server, as a command-line compiler based
|
||||
// on Node.js/V8, or to run CoffeeScript directly in the browser. This module
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
// The `coffee` utility. Handles command-line compilation of CoffeeScript
|
||||
// into various forms: saved into `.js` files or printed to stdout
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
// The CoffeeScript parser is generated by [Jison](https://github.com/zaach/jison)
|
||||
// from this grammar file. Jison is a bottom-up parser generator, similar in
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
// This file contains the common helper functions that we'd like to share among
|
||||
// the **Lexer**, **Rewriter**, and the **Nodes**. Merge objects, flatten
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
// Node.js Implementation
|
||||
var CoffeeScript, ext, fs, helpers, i, len, path, ref, universalCompile, vm,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
// The CoffeeScript Lexer. Uses a series of token-matching regexes to attempt
|
||||
// matches against the beginning of the source code. When a match is found,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
// `nodes.coffee` contains all of the node classes for the syntax tree. Most
|
||||
// nodes are created as the result of actions in the [grammar](grammar.html),
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments, repeat,
|
||||
splice = [].splice;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
var CoffeeScript, Module, binary, child_process, ext, findExtension, fork, getRootModule, helpers, i, len, loadFile, path, ref;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
var CoffeeScript, addHistory, addMultilineHandler, fs, getCommandId, merge, nodeREPL, path, replDefaults, runInContext, sawSIGINT, transpile, updateSyntaxError, vm;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
// The CoffeeScript language has a good deal of optional syntax, implicit syntax,
|
||||
// and shorthand syntax. This can greatly complicate a grammar and bloat
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
// The **Scope** class regulates lexical scoping within CoffeeScript. As you
|
||||
// generate code, you create a tree of scopes in the same shape as the nested
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 2.3.1
|
||||
// Generated by CoffeeScript 2.3.2
|
||||
(function() {
|
||||
// Source maps allow JavaScript runtimes to match running JavaScript back to
|
||||
// the original source code that corresponds to it. This can be minified
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"compiler"
|
||||
],
|
||||
"author": "Jeremy Ashkenas",
|
||||
"version": "2.3.1",
|
||||
"version": "2.3.2",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
|
|
Loading…
Reference in New Issue