]> code.delx.au - gnu-emacs-elpa/blob - NEWS.md
Bump the version and update NEWS
[gnu-emacs-elpa] / NEWS.md
1 # History of user-visible changes
2
3 ## 20150202
4
5 Support for:
6
7 * [ES6 modules](http://www.2ality.com/2014/09/es6-modules-final.html).
8 * [Short-hand object literals](http://ariya.ofilabs.com/2013/02/es6-and-object-literal-property-value-shorthand.html).
9 * [Method definitions](http://ariya.ofilabs.com/2013/03/es6-and-method-definitions.html).
10 * ['u' and 'y' RegExp flags](https://mathiasbynens.be/notes/es6-unicode-regex).
11 * [Computed property names](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object-initializer).
12 * [Class statements and expressions](https://github.com/lukehoban/es6features#classes).
13 * [Template strings](http://tc39wiki.calculist.org/es6/template-strings/), including tagged ones.
14
15 The variable `js2-allow-keywords-as-property-names` has been
16 removed. Instead we check if `js2-language-version` is 180 or highter.
17
18 ## 20141115
19
20 Support for:
21
22 * Unicode characters in identifiers (improved).
23 * [Delegating yield](http://wiki.ecmascript.org/doku.php?id=harmony:generators#delegating_yield).
24 * [ES6 numeric literals](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-numeric-literals) (octal, binary).
25 * Harmony [array and generator comprehensions](http://wingolog.org/archives/2014/03/07/es6-generator-and-array-comprehensions-in-spidermonkey).
26
27 ## 20131106
28
29 Support for:
30
31 * [Arrow functions](http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax)
32 * [Generators](http://wiki.ecmascript.org/doku.php?id=harmony:generators)
33 * [Spread operator](http://wiki.ecmascript.org/doku.php?id=harmony:spread)
34
35 ## 20130510
36
37 ### Support for JSLint global declaration
38
39 See the docstring for `js2-include-jslint-globals`.
40
41 ## 20130216
42
43 ### We don't rebind `RET` anymore
44
45 Because well-behaving major modes aren't supposed to do that.
46
47 So pressing it won't continue a block comment, or turn a string into a concatenation.
48 Pressing `M-j`, however, will.
49
50 The options `js2-indent-on-enter-key` and `js2-enter-indents-newline` were also removed.
51
52 To bring back the previous behavior, put this in your init file:
53
54 ```js
55 (eval-after-load 'js2-mode
56 '(define-key js2-mode-map (kbd "RET") 'js2-line-break))
57 ```
58
59 ## 20120617
60
61 ### Support for [default](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/default_parameters) and [rest](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/rest_parameters) parameters
62
63 ## 20120614
64
65 ### Support for [for..of loops](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of)
66
67 ## Older changes
68
69 ### Popular indentation style
70
71 ```js
72 [foo, bar, baz].forEach(function (v) {
73 if (validate(v))
74 process(v);
75 });
76
77 [a, b, c].some(function (v) {
78 return validate(v);
79 });
80 ```
81
82 ### Pretty multiline variable declaration
83
84 In the original mode,
85
86 ```js
87 var foo = 10,
88 bar = 20,
89 baz = 30;
90 ```
91
92 In this mode when the value of `js2-pretty-multiline-declarations` is non-nil,
93
94 ```js
95 var foo = 10,
96 bar = 20,
97 baz = 30;
98 ```
99
100 ### Abbreviated destructuring assignments
101
102 ```js
103 let {a, b} = {a: 10, b: 20}; // Abbreviated (Not supported in the original mode)
104 let {a: a, b: b} = {a: 10, b: 20}; // Same as above (Supported in the original mode)
105
106 (function ({responseText}) { /* */ })(xhr); // As the argument of function
107
108 for (let [k, { name, age }] in Iterator(obj)) // nested
109 print(k, name, age);
110 ```
111
112 ### Expression closure in property value
113
114 ```js
115 let worker = {
116 get age() 20,
117 get sex() "male",
118 fire: function () _fire()
119 };
120 ```
121
122 ### Fix for odd indentation of "else if" with no braces
123
124 In the original mode,
125
126 ```js
127 if (foo)
128 return foo;
129 else if (bar)
130 return bar; // here
131 ```
132
133 In this mode,
134
135 ```js
136 if (foo)
137 return foo;
138 else if (bar)
139 return bar; // fixed
140 ```
141
142 ### Imenu support for function nesting
143
144 Supports function nesting and anonymous wrappers:
145
146 ```js
147 (function() {
148 var foo = function() {
149 function bar() { // shown as foo.bar.<definition-1>
150 function baz() {} // foo.bar.baz
151 var qux = function() {}; // foo.bar.quux
152 }
153 };
154 });
155 ```
156
157 Examples of output:
158
159 * [jQuery 1.5](https://gist.github.com/845449)
160 * [Underscore.js](https://gist.github.com/824262)
161 * [Backbone.js](https://gist.github.com/824260)
162
163 For library-specific extension methods like `$.extend` and `dojo.declare`, see [js2-imenu-extras](/mooz/js2-mode/blob/master/js2-imenu-extras.el).
164
165 ### Undeclared/external variables highlighting
166
167 Original mode highlights them only on the left side of assignments:
168
169 ```js
170 var house;
171 hose = new House(); // highlights "hose"
172 ```
173
174 Here they are highlighted in all expressions:
175
176 ```js
177 function feed(fishes, food) {
178 for each (var fish in fshes) { // highlights "fshes"
179 food.feed(fsh); // highlights "fsh"
180 }
181 hood.discard(); // highlights "hood"
182 }
183 ```
184
185 Destructuring assignments and array comprehensions (JS 1.7) are supported:
186
187 ```js
188 let three, [one, two] = [1, 2];
189 thee = one + two; // highlights "thee"
190
191 function revenue(goods) {
192 // highlights "coast"
193 return [price - coast for each ({price, cost} in goods)].reduce(add);
194 }
195 ```