Skip to content

Instantly share code, notes, and snippets.

@aseemk
Last active December 2, 2017 20:22
Show Gist options
  • Select an option

  • Save aseemk/8637896 to your computer and use it in GitHub Desktop.

Select an option

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.

P.S. My undying gratitute to the contributors — thank you!

Method call 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

This'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 this for so long!

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

# equivalent to:

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.
'''

New mathetmatical operators

jashkenas/coffeescript#2887

  • the power operator **,
  • the floor division operator // and
  • the (correct) modulo operator %%.

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'
@Anonyfox
Copy link

Great! But still there are some goodies missing for some reason:

  1. regexp operator =~ as in ruby.
  2. functional style pattern matching for function definitions
  3. chained comparisons as in LiveScript, eg.: 1 < 2 == 4/2 > 0

@stefanpenner
Copy link

seems like es6 import export support would be killer..

@mattparlane
Copy link

My bug, which was a regression from something which worked in 1.5.0, is fixed too:
jashkenas/coffeescript#3216

Again, thanks to @xixixao

@aseemk
Copy link
Author

aseemk commented Jan 27, 2014

@Anonyfox: nice! I wasn't even aware of those. (I looked through only the past 6 months of commits; boy, it's been a while since the last release!) If it's not too much effort, would you mind linking the PRs here?

@aseemk
Copy link
Author

aseemk commented Jan 28, 2014

Ah, I just now realized @Anonyfox might have been saying "CoffeeScript still doesn't have these things", not "this gist didn't mention these things (that have also been added)". Alas, we all have our wishlists. =)

@msuarz
Copy link

msuarz commented Jan 28, 2014

Awesome features ... thank you very much

@caiogondim
Copy link

Awesome =)

@burkeholland
Copy link

Baller

@L8D
Copy link

L8D commented Jan 28, 2014

@Anonyfox CoffeeScript already has function style pattern matching(i.e. head = ([x, xs...]) -> x). The RegEx testing operator has already been suggested and denied.

@xixixao
Copy link

xixixao commented Jan 28, 2014

@aseemk What @Anonyfox mentions are things he wishes for, but are not in the language. I'd say 1) JS regex syntax is already pretty good, 2) Then you'd want algebraic data types as well, this is implementable via a library, 3) CoffeeScript has 2 < a < 3, not sure how LS works. Thanks for the shout-out .)

@redchair123
Copy link

@aseemk spelling mistake: 'mathetmatical' should be 'mathematical'

@aseemk
Copy link
Author

aseemk commented Jan 29, 2014

Thanks @Niggler!

@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