Skip to content

Commit ff851de

Browse files
authored
improve conditionals all over (pangloss#1002)
tests are only performed when relevant
1 parent 37a68c3 commit ff851de

1 file changed

Lines changed: 33 additions & 33 deletions

File tree

indent/javascript.vim

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ if has('reltime')
6868
else
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
7373
endif
7474

@@ -107,7 +107,7 @@ endfunction
107107

108108
" Optimized {skip} expr, used only once per GetJavascriptIndent() call
109109
function 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

129129
function 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)
154153
endfunction
@@ -191,20 +190,21 @@ function s:__PreviousToken()
191190
endfunction
192191

193192
function 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()
316316
endfunction
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
354354
function 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

Comments
 (0)