[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debbugs-tracker] bug#24896: closed (JSX prop indentation after fat arro

From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#24896: closed (JSX prop indentation after fat arrow)
Date: Wed, 05 Jun 2019 11:01:02 +0000

Your message dated Wed, 5 Jun 2019 14:00:16 +0300
with message-id <address@hidden>
and subject line Re: bug#32158: 26.1; Broken JSX indentation in case of arrow 
function passing to props
has caused the debbugs.gnu.org bug report #32158,
regarding JSX prop indentation after fat arrow
to be marked as done.

(If you believe you have received this mail in error, please contact

32158: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=32158
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: JSX prop indentation after fat arrow Date: Mon, 7 Nov 2016 10:56:21 +0100
(Preemptive apologies if this is the wrong list/format for this comment -- first time filer here!)

When indenting JSX code using js2- or js-mode, the indentation function gets confused when there's a fat arrow function in a JSX prop. Compare the way the following two code blocks are auto-indented:

const Component = props => ( // Incorrect indentation
    <FatArrow a={e => c}

const Component = props => ( // Correct indentation
    <NoFatArrow a={123}

I've tracked the problem down to `sgml-calculate-indent' using `parse-partial-sexp' with `sgml-tag-syntax-table', where `>' is treated as a close-parenthesis character (and thus the end-of-tag marker). I don't think there's a way to patch the syntax table that would let `>' flip between punctuation and close-parens based on context, but one possible fix when using js2-mode (not sure about js-mode) is to apply a "." 'syntax-table text property to the `>' when parsing a fat arrow.

Unfortunately, `js-jsx-indent-line' calls `sgml-indent-line' using `js--as-sgml', which sets `parse-sexp-lookup-properties' to nil.

Would there be any harm in
setting `parse-sexp-lookup-properties' to t instead? As far as I can tell, js-mode and js2-mode only use 'syntax-table propeties for regex literals.

As a side-note, there may well be a different solution to this problem; I still don't understand why the following block is indented correctly:

const Component = props => (
    <WithRegex a={/>/}

--- End Message ---
--- Begin Message --- Subject: Re: bug#32158: 26.1; Broken JSX indentation in case of arrow function passing to props Date: Wed, 5 Jun 2019 14:00:16 +0300 User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0
On 05.06.2019 13:58, Dmitry Gutov wrote:

Jackson, here's a slight variation on this example that looks problematic:

const foo = (props) => (
   cat={i => i} />


(Note the empty line)

That seems incorrect to me.

Sorry, never mind. I had to enable js-jsx-mode to test it properly.

So, closing.

Note that you can do it yourself by appending -done to a bug email.

--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]