Skip to content

Instantly share code, notes, and snippets.

@aseemk
Last active December 2, 2017 20:22
Show Gist options
  • Star 56 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aseemk/8637896 to your computer and use it in GitHub Desktop.
Save aseemk/8637896 to your computer and use it in GitHub Desktop.
CoffeeScript upcoming changes.

CoffeeScript 1.7 is shaping up to be a pretty kick-ass release with significant improvements. Here are the ones I'm most excited about, in order of my own excitement.

Parentheses-free chaining

jashkenas/coffeescript#3263

Years of being wished for, finally granted!

result = range 1, 3
  .concat range 4, 6
  .map (x) -> x * x
  .filter (x) -> x % 2 is 0

console.log result # [4, 16, 36]
$ 'body'
.click (e) ->
  $ '.box'
  .fadeIn 'fast'
  .addClass '.active'
  .css 'marginRight', '10px'

Proper multiline strings

These two both solve roughly the same problem:

jashkenas/coffeescript#3246
jashkenas/coffeescript#3256

These'll finally let you wrap long strings (e.g. user-facing messages) without breaking your code's indentation, or manually stripping newlines out. I've been wanting these for so long!

if true
  if not false
    console.log 'Hello world.
      This is a long line of text
      that I’d like split in my code.'

# equivalent to:

if true
  if not false
    console.log 'Hello world. This is a long line of text that I’d like split in my code.'
console.log '''
  By default, prefixed CSS will rewrite original files.
  If you didn't set input files, autoprefixer will \
    read from stdin stream.
  Output CSS will be written to stdout stream on \
    `-o -' argument or stdin input.
'''

# equivalent to:

desc = '''
  By default, prefixed CSS will rewrite original files.
  If you didn't set input files, autoprefixer will read from stdin stream.
  Output CSS will be written to stdout stream on `-o -' argument or stdin input.
'''

Expansion in array destructuring

jashkenas/coffeescript#3268

The name sounds confusing, but this is straightforward:

# to get the first and last, what you have to do today:
[first, middle..., last] = array

# what you can do now:
[first, ..., last] = array

But here's the killer use for it:

# what you have to do today to get the last element in an array:
last = array[array.length - 1]

# or if you, like me, like to use features to their fullest:
[last] = array[-1..]

# what you can do now:
[..., last] = array

New mathematical operators

jashkenas/coffeescript#2887

  • Power operator **
  • Floor division operator //
  • Correct modulo operator %% (respects negatives)

I remember wishing for each one of these when I worked on Seadragon Ajax!

Whitespace escaping in heregexes

jashkenas/coffeescript#3214

Not a huge deal to most people, but I've frequently wondered about this.

regex = /// <link\ href="#{URL}" ///

Proper require.extensions registration

jashkenas/coffeescript#3279

Like Streamline.js and others, extending Node's require() to automatically compile CoffeeScript files is now an explicit action. This now prevents versioning conflicts, etc. with nested local CoffeeScript dependencies.

# if you're working with the compiler programmatically:
CoffeeScript = require 'coffee-script'
CoffeeScript.register()

# or, e.g. for Mocha configuration
require 'coffee-script/register'

coffee <dir> executes index.coffee now

jashkenas/coffeescript#3292

Like the title says. This brings the coffee executable closer in line with node. There's still a little room for improvement (e.g. if your main file is named app.coffee), but this is already a great step forward.

Credits

Phew! Talk about a powerful list.

My undying gratitute to the contributors of the above pull requests. A special shout-out to @xixixao in particular for contributing about half of them! Thank you all very, very much.

Looking forward to CoffeeScript 1.7!

@dearfrankg
Copy link

Some cool stuff - great job!

@trueter
Copy link

trueter commented Feb 2, 2014

Nice!

@vassilevsky
Copy link

Ermagerd stweengs!

@ranska
Copy link

ranska commented Mar 2, 2014

nice, love Parentheses-free chaining

@alvaromuir
Copy link

I was under a rock. Glad this was released.... been dreaming about chaining for a while. Thanks for continued work on this.

Now only if my IDE plugins would indent the new chain . . .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment