@@ -68,7 +68,7 @@ if has('reltime')
6868else
6969 function s: GetPair (start ,end ,flags,skip ,... )
7070 return s: Nat (searchpair (' \m' .(a: start == ' [' ? ' \[' : a: start ),' ' ,' \m' .a: end ,
71- \ a: flags ,a: skip ,max ([prevnonblank (v: lnum ) - 1000 ,get (a: 000 ,1 )])))
71+ \ a: flags ,a: skip ,max ([prevnonblank (v: lnum ) - 1000 ,0 , get (a: 000 ,1 )])))
7272 endfunction
7373endif
7474
@@ -107,7 +107,7 @@ endfunction
107107
108108" Optimized {skip} expr, used only once per GetJavascriptIndent() call
109109function s: SkipFunc ()
110- if s: top_col == 1 || line ( ' . ' ) < s: script_tag
110+ if s: top_col == 1
111111 return {} " E728, used as limit condition for loops and searchpair()
112112 endif
113113 let s: top_col = col (' .' )
@@ -128,27 +128,26 @@ endfunction
128128
129129function s: AlternatePair ()
130130 let [l: pos , pat, l: for ] = [getpos (' .' ), ' [][(){};]' , 2 ]
131- while search (' \m' .pat,' bW' )
132- let tok = s: SkipFunc () ? ' ' : s: LookingAt ()
133- if tok is ' '
131+ while search (' \m' .pat,' bW' ,s: script_tag )
132+ if s: SkipFunc ()
134133 continue
135- elseif tok == ' ;'
134+ elseif s: LookingAt () == ' ;'
136135 if ! l: for
137- if s: GetPair (' {' ,' }' ,' bW' ,' s:SkipFunc()' ,2000 )
136+ if s: GetPair (' {' ,' }' ,' bW' ,' s:SkipFunc()' ,2000 , s: script_tag )
138137 return
139138 endif
139+ break
140140 else
141141 let [pat, l: for ] = [' [{}();]' , l: for - 1 ]
142- continue
143- endif
144- elseif tok = ~ ' [])}]'
145- if s: GetPair (tr (tok,' ])}' ,' [({' ), tok,' bW' ,' s:SkipFunc()' ,2000 )
146- continue
147142 endif
148143 else
149- return
144+ let idx = stridx (' ])}' ,s: LookingAt ())
145+ if idx == -1
146+ return
147+ elseif ! s: GetPair (' [({' [idx],' ])}' [idx],' bW' ,' s:SkipFunc()' ,2000 ,s: script_tag )
148+ break
149+ endif
150150 endif
151- break
152151 endwhile
153152 call setpos (' .' ,l: pos )
154153endfunction
@@ -191,20 +190,21 @@ function s:__PreviousToken()
191190endfunction
192191
193192function s: ExprCol ()
193+ if getline (' .' )[col (' .' )-2 ] == ' :'
194+ return 1
195+ endif
194196 let [bal, l: pos ] = [0 , getpos (' .' )]
195- while bal < 1 && search (' \m[{}?:]' ,' bW' ,s: script_tag )
196- let tok = eval (s: skip_expr ) ? ' ' : s: LookingAt ()
197- if tok is ' '
197+ while search (' \m[{}?:]' ,' bW' ,s: script_tag )
198+ if eval (s: skip_expr )
198199 continue
199- elseif tok == ' :'
200- if getpos (' .' )[1 :2 ] == [l: pos [1 ],l: pos [2 ]-1 ]
201- let bal = 1
202- else
203- let bal -= strpart (getline (' .' ),col (' .' )-2 ,3 ) !~ ' ::'
204- endif
205- elseif tok == ' ?'
200+ elseif s: LookingAt () == ' :'
201+ let bal -= strpart (getline (' .' ),col (' .' )-2 ,3 ) !~ ' ::'
202+ elseif s: LookingAt () == ' ?'
206203 let bal += 1
207- elseif tok == ' {'
204+ if bal == 1
205+ break
206+ endif
207+ elseif s: LookingAt () == ' {'
208208 let bal = ! s: IsBlock ()
209209 break
210210 elseif ! s: GetPair (' {' ,' }' ,' bW' ,s: skip_expr ,200 )
@@ -311,7 +311,7 @@ function s:OneScope(lnum)
311311 let kw = ' for if let while with'
312312 endif
313313 endif
314- return pline[-2 :] == ' =>' || index (split (kw),s: Token ()) != -1 &&
314+ return pline[-2 :] == ' =>' || count (split (kw),s: Token ()) &&
315315 \ s: __PreviousToken () != ' .' && ! s: DoWhile ()
316316endfunction
317317
@@ -338,7 +338,7 @@ function s:IsContOne(i,num,cont)
338338 let [l: i , l: num , b_l] = [a: i , a: num + ! a: num , 0 ]
339339 let pind = a: num ? indent (a: num ) + s: sw () : 0
340340 let ind = indent (a: i ) + (a: cont ? 0 : s: sw ())
341- while l: i >= l: num && ( ind > pind || l: i == l: num)
341+ while l: i > l: num && ind > pind || l: i == l: num
342342 if indent (l: i ) < ind && s: OneScope (l: i )
343343 let b_l += 1
344344 let l: i = line (' .' )
@@ -354,8 +354,8 @@ endfunction
354354function s: IsSwitch ()
355355 if s: PreviousToken () !~ ' [.*]'
356356 if s: GetPair (' {' ,' }' ,' cbW' ,s: skip_expr ,100 )
357- return s: IsBlock () && (s: Token () !~ ' ^\K\k*$' || expand (' <cword>' ) !=# ' class'
358- \ && s: PreviousToken () !~# ' ^class$\|^extends$' || s: PreviousToken () == ' .' )
357+ return s: IsBlock () && (s: Token () !~ ' ^\K\k*$' || expand (' <cword>' ) !=# ' class' &&
358+ \ s: PreviousToken () !~# ' ^class$\|^extends$' || s: PreviousToken () == ' .' )
359359 endif
360360 return 1
361361 endif
@@ -431,16 +431,16 @@ function GetJavascriptIndent()
431431 " the containing paren, bracket, or curly. Many hacks for performance
432432 let [ s: script_tag , idx ] = [ get (get (b: ,' hi_indent' ,{}),' blocklnr' ),
433433 \ index ([' ]' ,' )' ,' }' ],l: line [0 ]) ]
434- if b: js_cache [0 ] >= l: lnum && b: js_cache [0 ] < v: lnum &&
435- \ ( b: js_cache [0 ] > l: lnum || s: Balanced (l: lnum) )
434+ if b: js_cache [0 ] > l: lnum && b: js_cache [0 ] < v: lnum ||
435+ \ b: js_cache [0 ] == l: lnum && s: Balanced (l: lnum )
436436 call call (' cursor' ,b: js_cache [2 ] ? b: js_cache [1 :] : [v: lnum ,1 ])
437437 else
438438 call cursor (v: lnum ,1 )
439439 let [s: looksyn , s: check_in , s: top_col ] = [v: lnum - 1 , 0 , 0 ]
440440 if idx != -1
441- call s: GetPair (' [({' [idx],' ])}' [idx],' bW' ,' s:SkipFunc()' ,2000 )
441+ call s: GetPair (' [({' [idx],' ])}' [idx],' bW' ,' s:SkipFunc()' ,2000 , s: script_tag )
442442 elseif getline (v: lnum ) !~ ' ^\S' && syns = ~? ' block'
443- call s: GetPair (' {' ,' }' ,' bW' ,' s:SkipFunc()' ,2000 )
443+ call s: GetPair (' {' ,' }' ,' bW' ,' s:SkipFunc()' ,2000 , s: script_tag )
444444 else
445445 call s: AlternatePair ()
446446 endif
0 commit comments