mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
" Vim indent file
 | 
						|
" Language:            C#
 | 
						|
" Maintainer:          Nick Jensen <nickspoon@gmail.com>
 | 
						|
" Former Maintainers:  Aquila Deus
 | 
						|
"                      Johannes Zellner <johannes@zellner.org>
 | 
						|
" Last Change:         2020-03-26
 | 
						|
" License:             Vim (see :h license)
 | 
						|
" Repository:          https://github.com/nickspoons/vim-cs
 | 
						|
 | 
						|
if exists('b:did_indent')
 | 
						|
  finish
 | 
						|
endif
 | 
						|
let b:did_indent = 1
 | 
						|
 | 
						|
let s:save_cpo = &cpoptions
 | 
						|
set cpoptions&vim
 | 
						|
 | 
						|
 | 
						|
setlocal indentexpr=GetCSIndent(v:lnum)
 | 
						|
 | 
						|
function! s:IsCompilerDirective(line)
 | 
						|
  " Exclude #region and #endregion - these should be indented normally
 | 
						|
  return a:line =~# '^\s*#' && !s:IsRegionDirective(a:line)
 | 
						|
endf
 | 
						|
 | 
						|
function! s:IsRegionDirective(line)
 | 
						|
  return a:line =~# '^\s*#\s*region' || a:line =~# '^\s*#\s*endregion'
 | 
						|
endf
 | 
						|
 | 
						|
function! s:IsAttributeLine(line)
 | 
						|
  return a:line =~# '^\s*\[[A-Za-z]' && a:line =~# '\]$'
 | 
						|
endf
 | 
						|
 | 
						|
function! s:FindPreviousNonCompilerDirectiveLine(start_lnum)
 | 
						|
  for delta in range(0, a:start_lnum)
 | 
						|
    let lnum = a:start_lnum - delta
 | 
						|
    let line = getline(lnum)
 | 
						|
    if !s:IsCompilerDirective(line) && !s:IsRegionDirective(line)
 | 
						|
      return lnum
 | 
						|
    endif
 | 
						|
  endfor
 | 
						|
  return 0
 | 
						|
endf
 | 
						|
 | 
						|
function! GetCSIndent(lnum) abort
 | 
						|
  " Hit the start of the file, use zero indent.
 | 
						|
  if a:lnum == 0
 | 
						|
    return 0
 | 
						|
  endif
 | 
						|
 | 
						|
  let this_line = getline(a:lnum)
 | 
						|
 | 
						|
  " Compiler directives use zero indent if so configured.
 | 
						|
  let is_first_col_macro = s:IsCompilerDirective(this_line) && stridx(&l:cinkeys, '0#') >= 0
 | 
						|
  if is_first_col_macro
 | 
						|
    return cindent(a:lnum)
 | 
						|
  endif
 | 
						|
 | 
						|
  let lnum = s:FindPreviousNonCompilerDirectiveLine(a:lnum - 1)
 | 
						|
  let previous_code_line = getline(lnum)
 | 
						|
  if s:IsAttributeLine(previous_code_line)
 | 
						|
    return indent(lnum)
 | 
						|
  elseif s:IsRegionDirective(this_line)
 | 
						|
    return cindent(lnum)
 | 
						|
  else
 | 
						|
    return cindent(a:lnum)
 | 
						|
  endif
 | 
						|
endfunction
 | 
						|
 | 
						|
let b:undo_indent = 'setlocal indentexpr<'
 | 
						|
 | 
						|
let &cpoptions = s:save_cpo
 | 
						|
unlet s:save_cpo
 | 
						|
 | 
						|
" vim:et:sw=2:sts=2
 |