@@ -68,6 +68,14 @@ function! SynJSXDepth(syns)
6868 return len (filter (copy (a: syns ), ' v:val ==# "jsxRegion"' ))
6969endfunction
7070
71+ function ! SynJsFuncBrace (syns)
72+ return len (filter (copy (a: syns ), ' v:val ==# "jsFuncBraces"' ))
73+ endfunction
74+
75+ function ! SynJSXCloseTag (syns)
76+ return len (filter (copy (a: syns ), ' v:val ==# "jsxCloseTag"' ))
77+ endfunction
78+
7179function ! SynJSXContinues (cursyn, prevsyn)
7280 let curdepth = SynJSXDepth (a: cursyn )
7381 let prevdepth = SynJSXDepth (a: prevsyn )
@@ -79,12 +87,13 @@ endfunction
7987function ! GetJsxIndent ()
8088 let cursyn = SynSOL (v: lnum )
8189 let prevsyn = SynEOL (v: lnum - 1 )
90+ let nextsyn = SynEOL (v: lnum + 1 )
8291
8392 if (SynXMLish (prevsyn) || SynJSXBlockEnd (prevsyn)) &&
8493 \ SynJSXContinues (cursyn, prevsyn)
8594 let ind = XmlIndentGet (v: lnum , 0 )
8695
87- if cursyn == 0 || && ( getline (v: lnum - 1 ) = ~? ' (' || getline (v: lnum - 1 ) = ~? ' {' )
96+ if getline (v: lnum - 1 ) = ~? ' (' || getline (v: lnum - 1 ) = ~? ' {'
8897 let ind = ind + s: sw ()
8998 endif
9099
@@ -96,10 +105,36 @@ function! GetJsxIndent()
96105 let ind = ind + s: sw ()
97106 endif
98107
108+ " <div> | <div>
109+ " {(test => test.length| {(test => test.length
110+ " ? 'foo' | ? 'foo'
111+ " : 'bar' | : 'bar'
112+ " ####)()} | )()} <----
113+ " </div> | </div>
99114 if getline (v: lnum - 1 ) = ~? ' :' && getline (v: lnum - 2 ) = ~? ' ?'
100115 let ind = ind - s: sw () * 2
101116 endif
102117
118+ " <div | <div
119+ " foo={ | foo={
120+ " <Bar />| <Bar />
121+ " ##} | } <--
122+ " > | >
123+ if getline (v: lnum ) = ~? ' }' && SynJSXCloseTag (prevsyn) && ! SynJsFuncBrace (nextsyn)
124+ let ind = ind - s: sw ()
125+ endif
126+
127+ " </div> | </div>
128+ " {(hoge => { | {(hoge => {
129+ " if (hoge) { | if (hoge) {
130+ " return <div />;| return <div />;
131+ " } | }
132+ " })()} | })()}
133+ " ##</div> | </div> <--
134+ if match (getline (v: lnum ), ' <[^!?<>]\+>' , ' ' ) != -1 && SynJsFuncBrace (prevsyn)
135+ let ind = ind - s: sw ()
136+ endif
137+
103138 " return ( | return (
104139 " <div> | <div>
105140 " </div> | </div>
0 commit comments