Merge branch '2' into async-docs

This commit is contained in:
Geoffrey Booth 2016-11-27 19:05:45 -08:00
commit 4d4839011b
9 changed files with 101 additions and 14 deletions

View File

@ -59,7 +59,7 @@ codeFor = ->
cshtml = "<pre><code>#{hljs.highlight('coffeescript', cs).value}</code></pre>" cshtml = "<pre><code>#{hljs.highlight('coffeescript', cs).value}</code></pre>"
# Temporary fix until highlight.js adds support for newer CoffeeScript keywords # Temporary fix until highlight.js adds support for newer CoffeeScript keywords
# Added in https://github.com/isagalaev/highlight.js/pull/1357, awaiting release # Added in https://github.com/isagalaev/highlight.js/pull/1357, awaiting release
if file in ['generators', 'modules'] if file in ['generator_iteration', 'generators', 'modules']
cshtml = cshtml.replace /(yield|import|export|from|as|default) /g, '<span class="keyword">$1</span> ' cshtml = cshtml.replace /(yield|import|export|from|as|default) /g, '<span class="keyword">$1</span> '
jshtml = "<pre><code>#{hljs.highlight('javascript', js).value}</code></pre>" jshtml = "<pre><code>#{hljs.highlight('javascript', js).value}</code></pre>"
append = if executable is yes then '' else "alert(#{executable});" append = if executable is yes then '' else "alert(#{executable});"

View File

@ -1,6 +1,5 @@
{ {
"name": "coffee-script", "name": "coffee-script",
"version": "2.0.0-alpha",
"main": [ "main": [
"lib/coffee-script/coffee-script.js" "lib/coffee-script/coffee-script.js"
], ],
@ -11,13 +10,6 @@
"coffeescript", "coffeescript",
"compiler" "compiler"
], ],
"devDependencies": {
"uglify-js": "~2.2",
"jison": ">=0.2.0",
"highlight.js": "~9.6.0",
"underscore": "~1.5.2",
"docco": "~0.6.2"
},
"author": { "author": {
"name": "Jeremy Ashkenas" "name": "Jeremy Ashkenas"
}, },

View File

@ -0,0 +1,5 @@
```
function time() {
return `The time is ${new Date().toLocaleTimeString()}`;
}
```

View File

@ -0,0 +1,3 @@
markdown = `function () {
return \`In Markdown, write code like \\\`this\\\`\`;
}`

View File

@ -0,0 +1,13 @@
fibonacci = ->
[previous, current] = [1, 1]
loop
[previous, current] = [current, previous + current]
yield current
return
getFibonacciNumbers = (length) ->
results = [1]
for n from fibonacci()
results.push n
break if results.length is length
results

View File

@ -0,0 +1,5 @@
name = "Michelangelo"
mask = "orange"
weapon = "nunchuks"
turtle = {name, mask, weapon}
output = "#{turtle.name} wears an #{turtle.mask} mask. Watch out for his #{turtle.weapon}!"

View File

@ -0,0 +1,8 @@
upperCaseExpr = (textParts, expressions...) ->
textParts.reduce (text, textPart, i) ->
text + expressions[i - 1].toUpperCase() + textPart
greet = (name, adjective) ->
upperCaseExpr"""
Hi #{name}. You look #{adjective}!
"""

View File

@ -41,6 +41,7 @@
<a href="#switch">Switch and Try/Catch</a> <a href="#switch">Switch and Try/Catch</a>
<a href="#comparisons">Chained Comparisons</a> <a href="#comparisons">Chained Comparisons</a>
<a href="#strings">String Interpolation, Block Strings, and Block Comments</a> <a href="#strings">String Interpolation, Block Strings, and Block Comments</a>
<a href="#tagged-template-literals">Tagged Template Literals</a>
<a href="#regexes">Block Regular Expressions</a> <a href="#regexes">Block Regular Expressions</a>
<a href="#modules">Modules</a> <a href="#modules">Modules</a>
<a href="#cake">Cake, and Cakefiles</a> <a href="#cake">Cake, and Cakefiles</a>
@ -107,8 +108,19 @@
compiles one-to-one into the equivalent JS, and there is compiles one-to-one into the equivalent JS, and there is
no interpretation at runtime. You can use any existing JavaScript library no interpretation at runtime. You can use any existing JavaScript library
seamlessly from CoffeeScript (and vice-versa). The compiled output is seamlessly from CoffeeScript (and vice-versa). The compiled output is
readable and pretty-printed, will work in every JavaScript runtime, and tends readable, pretty-printed, and tends to run as fast or faster than the
to run as fast or faster than the equivalent handwritten JavaScript. equivalent handwritten JavaScript.
</p>
<p>
The CoffeeScript compiler goes to great lengths to generate output JavaScript
that runs in every JavaScript runtime, but there are exceptions. Use
<a href="#generator-functions">generator functions</a> or
<a href="#tagged-template-literals">tagged template literals</a> only if you
know that your <a href="http://kangax.github.io/compat-table/es6/">target
runtimes can support them</a>. If you use <a href="#modules">modules</a>,
you will need to <a href="#modules-note">use an additional tool to resolve
them</a>.
</p> </p>
<p> <p>
@ -457,6 +469,11 @@ Block
about it (say, when using jQuery). about it (say, when using jQuery).
</p> </p>
<%= codeFor('objects_reserved') %> <%= codeFor('objects_reserved') %>
<p>
CoffeeScript has a shortcut for creating objects when you want the key
to be set with a variable of the same name.
</p>
<%= codeFor('objects_shorthand') %>
<p> <p>
<span id="lexical-scope" class="bookmark"></span> <span id="lexical-scope" class="bookmark"></span>
@ -572,6 +589,9 @@ Block
check to avoid properties that may be inherited from the prototype, use<br /> check to avoid properties that may be inherited from the prototype, use<br />
<code>for own key, value of object</code> <code>for own key, value of object</code>
</p> </p>
<p>
To iterate a generator function, use <code>from</code>.
See <a href="#generator-iteration">Generator Functions</a>.
<p> <p>
The only low-level loop that CoffeeScript provides is the <b>while</b> loop. The The only low-level loop that CoffeeScript provides is the <b>while</b> loop. The
main difference from JavaScript is that the <b>while</b> loop can be used main difference from JavaScript is that the <b>while</b> loop can be used
@ -869,6 +889,11 @@ Block
<code>yield*</code> is called <code>yield from</code>, and <code>yield return</code> <code>yield*</code> is called <code>yield from</code>, and <code>yield return</code>
may be used if you need to force a generator that doesn't yield. may be used if you need to force a generator that doesn't yield.
</p> </p>
<p>
<span id="generator-iteration" class="bookmark"></span>
You can iterate over a generator function using <code>for&hellip;from</code>.
</p>
<%= codeFor('generator_iteration', 'getFibonacciNumbers(10)') %>
<%= codeFor('async', true) %> <%= codeFor('async', true) %>
<p> <p>
@ -884,6 +909,19 @@ Block
use backticks to pass it straight through. use backticks to pass it straight through.
</p> </p>
<%= codeFor('embedded', 'hi()') %> <%= codeFor('embedded', 'hi()') %>
<p>
Escape backticks with backslashes: <code>\`</code> becomes <code>`</code>.
</p>
<p>
Escape backslashes before backticks with more backslashes: <code>\\\`</code>
becomes <code>\`</code>.
</p>
<%= codeFor('embedded_escaped', 'markdown()') %>
<p>
You can also embed blocks of JavaScript using triple backticks. That's easier
than escaping backticks, if you need them inside your JavaScript block.
</p>
<%= codeFor('embedded_block', 'time()') %>
<p> <p>
<span id="switch" class="bookmark"></span> <span id="switch" class="bookmark"></span>
@ -957,6 +995,28 @@ Block
</p> </p>
<%= codeFor('block_comment') %> <%= codeFor('block_comment') %>
<p>
<span id="tagged-template-literals" class="bookmark"></span>
<b class="header">Tagged Template Literals</b>
CoffeeScript supports
<a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals">ES2015 tagged template literals</a>,
which enable customized string interpolation. If you immediately prefix a string
with a function name (no space between the two), CoffeeScript will output this
'function plus string' combination as an ES2015 tagged template literal, which will
<a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals">behave accordingly</a>:
the function is called, with the parameters being the input text and expression parts
that make up the interpolated string. The function can then assemble these parts
into an output string, providing custom string interpolation.
</p>
<p>
Be aware that the CoffeeScript compiler is outputting ES2015 syntax for this feature,
so your target JavaScript runtime(s) must support this syntax for your code to work;
or you could use tools like <a href="http://babeljs.io/">Babel</a> or
<a href="https://github.com/google/traceur-compiler">Traceur Compiler</a> to convert
this ES2015 syntax into compatible JavaScript.
</p>
<%= codeFor('tagged_template_literals', 'greet("greg", "awesome")') %>
<p> <p>
<span id="regexes" class="bookmark"></span> <span id="regexes" class="bookmark"></span>
<b class="header">Block Regular Expressions</b> <b class="header">Block Regular Expressions</b>
@ -976,6 +1036,7 @@ Block
</p> </p>
<%= codeFor('modules') %> <%= codeFor('modules') %>
<p> <p>
<span id="modules-note" class="bookmark"></span>
Note that the CoffeeScript compiler <strong>does not resolve modules</strong>; writing an Note that the CoffeeScript compiler <strong>does not resolve modules</strong>; writing an
<code>import</code> or <code>export</code> statement in CoffeeScript will produce an <code>import</code> or <code>export</code> statement in CoffeeScript will produce an
<code>import</code> or <code>export</code> statement in the resulting output. <code>import</code> or <code>export</code> statement in the resulting output.
@ -1394,7 +1455,7 @@ six = -&gt;
<%= releaseHeader('2015-09-03', '1.10.0', '1.9.3') %> <%= releaseHeader('2015-09-03', '1.10.0', '1.9.3') %>
<ul> <ul>
<li> <li>
CoffeeScript now supports ES6-style destructuring defaults. CoffeeScript now supports ES2015-style destructuring defaults.
</li> </li>
<li> <li>
<code>(offsetHeight: height) -&gt;</code> no longer compiles. That <code>(offsetHeight: height) -&gt;</code> no longer compiles. That
@ -1503,7 +1564,7 @@ six = -&gt;
<%= releaseHeader('2015-01-29', '1.9.0', '1.8.0') %> <%= releaseHeader('2015-01-29', '1.9.0', '1.8.0') %>
<ul> <ul>
<li> <li>
CoffeeScript now supports ES6 generators. A generator is simply a function CoffeeScript now supports ES2015 generators. A generator is simply a function
that <code>yield</code>s. that <code>yield</code>s.
</li> </li>
<li> <li>

View File

@ -36,7 +36,7 @@ test "tagged template literal for html templating", ->
""", """,
html""" html"""
<p> <p>
Hi ${state.name}. You're looking ${state.adjective}! Hi #{state.name}. You're looking #{state.adjective}!
</p> </p>
""" """