diff options
author | Jackson Ray Hamilton <jackson@jacksonrayhamilton.com> | 2019-04-09 18:44:36 -0700 |
---|---|---|
committer | Jackson Ray Hamilton <jackson@jacksonrayhamilton.com> | 2019-04-09 18:44:36 -0700 |
commit | 5772971f255c7031753e02492ae979c501018a50 (patch) | |
tree | fd79d0b01e84787dcb61fd97c1c695fec60ae598 /lisp | |
parent | d82603747564063f908c9c877449c827a9808528 (diff) | |
download | emacs-5772971f255c7031753e02492ae979c501018a50.tar.gz |
Add new defcustom js-jsx-indent-level
* lisp/progmodes/js.el (js-jsx-indent-level): New variable for users
to set JSX indentation differently than JS, like before.
(js-jsx--contextual-indentation): Respect js-jsx-indent-level when
it’s set.
* test/manual/indent/jsx-indent-level.jsx: New test for
js-jsx-indent-level.
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/progmodes/js.el | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 70998245818..90f857c96fa 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -600,6 +600,42 @@ It is set to be buffer-local (and t) when in `js-jsx-mode'." :safe 'booleanp :group 'js) +(defcustom js-jsx-indent-level nil + "When non-nil, indent JSX by this value, instead of like JS. + +Let `js-indent-level' be 4. When this variable is also set to +nil, JSX indentation looks like this (consistent): + + return ( + <element> + <element> + Hello World! + </element> + </element> + ) + +Alternatively, when this variable is also set to 2, JSX +indentation looks like this (different): + + return ( + <element> + <element> + Hello World! + </element> + </element> + )" + :version "27.1" + :type 'integer + :safe (lambda (x) (or (null x) (integerp x))) + :group 'js) +;; This is how indentation behaved out-of-the-box until Emacs 27. JSX +;; indentation was controlled with `sgml-basic-offset', which defaults +;; to 2, whereas `js-indent-level' defaults to 4. Users who had the +;; same values configured for both their HTML and JS indentation would +;; luckily get consistent JSX indentation; most others were probably +;; unhappy. I’d be surprised if anyone actually wants different +;; indentation levels, but just in case, here’s a way back to that. + (defcustom js-jsx-attribute-offset 0 "Specifies a delta for JSXAttribute indentation. @@ -2706,7 +2742,7 @@ The column calculation is based off of `sgml-calculate-indent'." (current-column) ;; This is the first attribute: indent. (goto-char (+ (nth 1 context) js-jsx-attribute-offset)) - (+ (current-column) js-indent-level)))) + (+ (current-column) (or js-jsx-indent-level js-indent-level))))) ('text ;; Indent to reflect nesting. @@ -2715,7 +2751,7 @@ The column calculation is based off of `sgml-calculate-indent'." ;; The last line isn’t nested, but the rest are. (if (or (not (nth 2 context)) ; Unclosed. (< line (line-number-at-pos (nth 2 context)))) - js-indent-level + (or js-jsx-indent-level js-indent-level) 0))) )) |