* etc/NEWS: Document new and improved JSX support in js-mode

This commit is contained in:
Jackson Ray Hamilton 2019-04-09 00:52:43 -07:00
parent cf416d96c2
commit 062369e3ae
No known key found for this signature in database
GPG key ID: B4771664B476B290

View file

@ -1259,6 +1259,51 @@ near the current column in Tabulated Lists (see variables
This defcustom allows for the customization of the modifier key used
in a terminal frame.
** JS mode
*** JSX syntax is now automatically detected and enabled.
If a file imports Facebook's 'React' library, or if the file uses the
extension '.jsx', then various features supporting XML-like syntax
will be supported in 'js-mode' and derivative modes. ('js-jsx-mode'
no longer needs to be enabled.)
*** New defcustom 'js-jsx-detect-syntax' disables automatic detection.
*** New defcustom 'js-jsx-syntax' enables JSX syntax unconditionally.
*** New variable 'js-jsx-regexps' controls JSX detection.
*** JSX syntax is now highlighted like SGML.
*** JSX code is properly indented in many more scenarios.
Previously, JSX indentation usually only worked when an element was
wrapped in parenthesis (e.g. in a 'return' statement or a function
call). It would also fail in many intricate cases. Now, indentation
should work anywhere without parenthesis; many more intricacies are
supported; and, indentation conventions align more closely with those
of the React developer community, otherwise still adhering to SGML
conventions.
*** Indentation uses 'js-indent-level' instead of 'sgml-basic-offset'.
It was never really intuitive that JSX indentation would be controlled
by an SGML variable. JSX is a syntax extension of JavaScript, so it
should be indented just like any other expression in JavaScript. This
is technically a breaking change, but it will probably align with how
you would normally expect for this indentation to be controlled, and
you probably won't need to change your config.
*** New defcustom 'js-jsx-attribute-offset' for JSX attribute indents.
*** New variable 'js-syntactic-mode-name' controls mode name display.
Previously, the mode name was simply 'JavaScript'. Now, when a syntax
extension like JSX is enabled, the mode name is 'JavaScript[JSX]'.
Setting this variable to nil can disable the new formatting.
*** New function 'js-use-syntactic-mode-name' for deriving modes.
Packages deriving from 'js-mode' with 'define-derived-mode' should
call this function to add enabled syntax extensions to their mode
name, too.
* New Modes and Packages in Emacs 27.1