I wouldn't tag CoffeeScript as 'make your code prettier', it brings so much more.
From what I've seen it brings an alternative syntax without reducing any complexity. And before you say it, no, removing braces does not reduce complexity.
class Widget
render: =>
alert "Here I am!"
class Button extends Widget
...into this equivalent JavaScript: var Button, Widget;
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }
function ctor() { this.constructor = child; }
ctor.prototype = parent.prototype;
child.prototype = new ctor;
child.__super__ = parent.prototype;
return child;
};
Widget = (function() {
function Widget() {
this.render = __bind(this.render, this);
}
Widget.prototype.render = function() {
return alert("Here I am!");
};
return Widget;
})();
Button = (function() {
__extends(Button, Widget);
function Button() {
Button.__super__.constructor.apply(this, arguments);
}
return Button;
})();
I'd say that's more than sugar. That is complexity reduction.