summaryrefslogblamecommitdiffstats
path: root/autoload/scss_indent.vim
blob: 27caa780c30b0ea70e4dbac83c80fad08248f423 (plain) (tree)
1
2
3
4



                                                                            




































                                                            
if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'scss') != -1
  finish
endif

" usage:
" set indentexpr=scss_indent#GetIndent(v:lnum)
fun! scss_indent#GetIndent(lnum)
  " { -> increase indent
  " } -> decrease indent
  if a:lnum == 1
    " start at 0 indentation
    return 0
  endif

  " try to find last line ending with { or }
  " ignoring // comments
  let regex = '\([{}]\)\%(\/\/.*\)\?$'
  let nr = search(regex, 'bnW')
  if nr > 0
    let last = indent(nr)
    let m = matchlist(getline(nr), regex)
    let m_curr = matchlist(getline(a:lnum), regex)
    echoe string(m).string(m_curr)
    if !empty(m_curr) && m_curr[1] == '}' && m[1] == '{'
      " last was open, current is close, use same indent
      return last
    elseif !empty(m_curr) && m_curr[1] == '}' && m[1] == '}'
      " } line and last line was }: decrease
      return last - &sw
    endif
    if m[1] == '{'
      " line after {: increase indent
      return last + &sw
    else
      " line after } or { - same indent
      return last
    endif
  else
    return 0
  endif
endfun