X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/b67d97bb406917d33fedd8474695a61b4a70f433..0cda39255827f283e7578cd469ae42daad9556a2:/NEWS.md?ds=sidebyside diff --git a/NEWS.md b/NEWS.md index 1972f3eb8..87e9d726a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,62 @@ +# History of user-visible changes + +## 2016-06-23 + +* New variable `js2-mode-assume-strict`, for use with ES6 modules. +* Support for JSDoc @callback, @func and @method tags. +* Object properties are highlighted using a different face: + `js2-object-property`, which has no color by default. +* Experimental support for object rest/spread ECMAScript proposal. +* `js2-getter-setter-node` is renamed to `js2-method-node`, together with + its related functions. It already handles generator methods, and we + added support for async methods (see below), so the old name would get + more confusing. +* Support for default parameters in destructuring. It should work for both + objects and arrays, in both literals and function arguments. +* New mode: `js2-jsx-mode`, deriving from `js2-mode`. Supports indentation of + JSXElement expressions wrapped within parentheses or as function arguments. + Indentation is customizable via `sgml-attribute-offset`. +* Experimental support for async/await ECMAScript proposal. + +## 20150909 + +* `js2-mode` now derives from `js-mode`. That means the former + function will run `js-mode-hook`, as well as `js2-mode-hook`. The + key bindings will default to `js-mode-map` where they're not set in + `js2-mode-map`. And in Emacs 25 or later (including the snapshot + builds), `js2-mode` uses the indentation code from `js-mode`. Where + feasible, the user options (and functions) now have aliases, but if + you're using Emacs 25 and you see an indentation-related setting + that stopped working, try looking for a corresponding one in the + `js` group: `M-x customize-group RET js RET`. + +* New command: `js2-jump-to-definition`. It's bound to `M-.` by + default, via remapping `js-find-symbol`. To get back to the default + `M-.` binding (e.g. `find-tag`), put this in your init file: + + (eval-after-load 'js (define-key js-mode-map (kbd "M-.") nil)) + +## 20150713 + +* More comprehensive strict mode warnings and syntax errors. +* New minor mode: `js2-highlight-unused-variables-mode`. +* `js2-pretty-multiline-declarations` can take the value `dynamic` now. + +## 20150202 + +Support for: + +* [ES6 modules](http://www.2ality.com/2014/09/es6-modules-final.html). +* [Short-hand object literals](http://ariya.ofilabs.com/2013/02/es6-and-object-literal-property-value-shorthand.html). +* [Method definitions](http://ariya.ofilabs.com/2013/03/es6-and-method-definitions.html). +* ['u' and 'y' RegExp flags](https://mathiasbynens.be/notes/es6-unicode-regex). +* [Computed property names](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object-initializer). +* [Class statements and expressions](https://github.com/lukehoban/es6features#classes). +* [Template strings](http://tc39wiki.calculist.org/es6/template-strings/), including tagged ones. + +The variable `js2-allow-keywords-as-property-names` has been +removed. Instead we check if `js2-language-version` is 180 or highter. + ## 20141115 Support for: @@ -34,8 +93,10 @@ The options `js2-indent-on-enter-key` and `js2-enter-indents-newline` were also To bring back the previous behavior, put this in your init file: - (eval-after-load 'js2-mode - '(define-key js2-mode-map (kbd "RET") 'js2-line-break)) +```js +(eval-after-load 'js2-mode + '(define-key js2-mode-map (kbd "RET") 'js2-line-break)) +``` ## 20120617 @@ -49,75 +110,91 @@ To bring back the previous behavior, put this in your init file: ### Popular indentation style - [foo, bar, baz].forEach(function (v) { - if (validate(v)) - process(v); - }); +```js +[foo, bar, baz].forEach(function (v) { + if (validate(v)) + process(v); +}); - [a, b, c].some(function (v) { - return validate(v); - }); +[a, b, c].some(function (v) { + return validate(v); +}); +``` ### Pretty multiline variable declaration In the original mode, - var foo = 10, - bar = 20, - baz = 30; +```js +var foo = 10, +bar = 20, +baz = 30; +``` In this mode when the value of `js2-pretty-multiline-declarations` is non-nil, - var foo = 10, - bar = 20, - baz = 30; +```js +var foo = 10, + bar = 20, + baz = 30; +``` ### Abbreviated destructuring assignments - let {a, b} = {a: 10, b: 20}; // Abbreviated (Not supported in the original mode) - let {a: a, b: b} = {a: 10, b: 20}; // Same as above (Supported in the original mode) +```js +let {a, b} = {a: 10, b: 20}; // Abbreviated (Not supported in the original mode) +let {a: a, b: b} = {a: 10, b: 20}; // Same as above (Supported in the original mode) - (function ({responseText}) { /* */ })(xhr); // As the argument of function +(function ({responseText}) { /* */ })(xhr); // As the argument of function - for (let [k, { name, age }] in Iterator(obj)) // nested - print(k, name, age); +for (let [k, { name, age }] in Iterator(obj)) // nested + print(k, name, age); +``` ### Expression closure in property value - let worker = { - get age() 20, - get sex() "male", - fire: function () _fire() - }; +```js +let worker = { + get age() 20, + get sex() "male", + fire: function () _fire() +}; +``` ### Fix for odd indentation of "else if" with no braces In the original mode, - if (foo) - return foo; - else if (bar) - return bar; // here +```js +if (foo) + return foo; +else if (bar) +return bar; // here +``` In this mode, - if (foo) - return foo; - else if (bar) - return bar; // fixed +```js +if (foo) + return foo; +else if (bar) + return bar; // fixed +``` ### Imenu support for function nesting Supports function nesting and anonymous wrappers: - (function() { - var foo = function() { - function bar() { // shown as foo.bar. - function baz() {} // foo.bar.baz - var qux = function() {}; // foo.bar.quux - } - }; - }); +```js +(function() { + var foo = function() { + function bar() { // shown as foo.bar. + function baz() {} // foo.bar.baz + var qux = function() {}; // foo.bar.quux + } + }; +}); +``` Examples of output: @@ -131,24 +208,30 @@ For library-specific extension methods like `$.extend` and `dojo.declare`, see [ Original mode highlights them only on the left side of assignments: - var house; - hose = new House(); // highlights "hose" +```js +var house; +hose = new House(); // highlights "hose" +``` Here they are highlighted in all expressions: - function feed(fishes, food) { - for each (var fish in fshes) { // highlights "fshes" - food.feed(fsh); // highlights "fsh" - } - hood.discard(); // highlights "hood" +```js +function feed(fishes, food) { + for each (var fish in fshes) { // highlights "fshes" + food.feed(fsh); // highlights "fsh" } + hood.discard(); // highlights "hood" +} +``` Destructuring assignments and array comprehensions (JS 1.7) are supported: - let three, [one, two] = [1, 2]; - thee = one + two; // highlights "thee" +```js +let three, [one, two] = [1, 2]; +thee = one + two; // highlights "thee" - function revenue(goods) { - // highlights "coast" - return [price - coast for each ({price, cost} in goods)].reduce(add); - } +function revenue(goods) { + // highlights "coast" + return [price - coast for each ({price, cost} in goods)].reduce(add); +} +```