Prisée des développeurs web, la nouvelle version de ce langage qui permet de compiler facilement en JavaScript, met l'accent sur des améliorations de syntaxe. CoffeeScript 2 est doté d'un compilateur qui traduit son code en syntaxe JavaScript moderne. Par exemple, en utilisant le mot-clé « class », il est possible de générer une « classe » CoffeeScript. La version 2 supporte également la syntaxe des fonctions asynchrones, la future syntaxe d’affectation par décomposition et le JSX, un sur-ensemble de JavaScript qui supporte des éléments de syntaxe XML transformés en appel de fonctions JavaScript. L’un des principaux objectifs de CoffeeScript 2 est de mettre fin aux éventuelles incompatibilités avec JavaScript qui empêchaient l’usage du langage dans un projet et de préserver le plus haut degré possible de compatibilité ascendante.

Pour implémenter les nouvelles fonctions, les développeurs ont dû introduire quelques changements radicaux par rapport à la version 1.x. L'équipe avait prévenu que la version 2 subirait des modifications importantes pour se conformer à la spécification ECMAScript 2015 et aux suivantes. « La plupart des projets CoffeeScript actuels devraient pouvoir évoluer sans trop, voir aucun, refactoring », ont déclaré les développeurs. Les changements les plus radicaux concernent des fonctions liées (dites Fat Arrow »), des fonctions de générateur liées et l'analyseur syntaxique Literate CoffeeScript, dont le code a été remanié pour ne plus traiter les listes d’indentation en blocs de code. Cette modernisation de la syntaxe de JavaScript signifie que les développeurs devront peut-être traduire et compiler - « transpiler » – le code en sortie du compilateur, la transpilation convertissant le code source en un code source équivalent, mais différent.

Certaines fonctionnalités de JavaScript délibérément ignorées

La documentation de CoffeeScript mentionne un cas d’usage dans lequel les développeurs voudraient convertir le JavaScript moderne en JavaScript plus ancien de façon à pouvoir exécuter le code dans les anciennes versions de Node.js ou dans des versions antérieures de navigateurs. Le support intégré du transpiler Babel est inclus dans CoffeeScript. La version 2 produit à nouveau des commentaires de ligne, lesquels avaient disparu dans la version 1.1. Et les commentaires de blocs sont désormais autorisés partout, ce qui permet des annotations de type statique. La mise à jour améliore également l'outil de ligne de commande coffee.

À noter que certaines fonctionnalités JavaScript ont été délibérément ignorées, comme les fonctions « let » et « var », les fonctions nommées (Names Function), ainsi que les mots-clés « get » et « set ». Si les fonctions « let » et « named » ont été omises par souci de simplification, la fonction « var » a été laissée de côté pour ne pas exposer les développeurs CoffeeScript à des déclarations de variables. Quant aux mots-clés « get » et « set », ils ont été omis pour éviter l'ambiguïté grammaticale. Cependant, l’absence de ces fonctions dans CoffeeScript n'affecte pas la compatibilité ou l'interopérabilité avec les modules ou les bibliothèques JavaScript.