[svn] r7194: nemerle/trunk/misc/nemerle.indent.vim

pitkali svnadmin at nemerle.org
Tue Jan 2 19:20:51 CET 2007


Log:
Corrected while loop condition (added appropriate parens) to fix
neverending loop condition and thus bug 686.


Author: pitkali
Date: Tue Jan  2 19:20:49 2007
New Revision: 7194

Modified:
   nemerle/trunk/misc/nemerle.indent.vim

Modified: nemerle/trunk/misc/nemerle.indent.vim
==============================================================================
--- nemerle/trunk/misc/nemerle.indent.vim	(original)
+++ nemerle/trunk/misc/nemerle.indent.vim	Tue Jan  2 19:20:49 2007
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	Nemerle
-" Maintainer:	Piotr Kalinowski <pitkali at interia.pl>
-" Last Change:	2005 May 03
+" Maintainer:	Piotr Kalinowski <pitkali at gmail.com>
+" Last Change:	2007 Jan 02
 
 " Instructions:
 " Put this file under ~/.vim/indent/nemerle.vim and ensure the following lines are
@@ -20,7 +20,7 @@
 let b:did_indent = 1
 
 setlocal cinkeys-=:
-setlocal indentkeys& indentkeys-=: indentkeys+=<Bar>,0=requires,0=ensures,0=invariant
+setlocal indentkeys& indentkeys-=: indentkeys+=<Bar>,0=requires,0=ensures,0=invariant,0=syntax
 setlocal indentexpr=GetNemerleIndent()
 
 " Define function only once.
@@ -83,8 +83,8 @@
 	return ind + &sw
     endif
 
-    " Design by contract macros
-    if cur_line =~ '^\s*\(requires\>\|ensures\>\|invariant\>\)'
+    " Design by contract macros and syntax extension
+    if cur_line =~ '^\s*\(requires\>\|ensures\>\|invariant\>\|syntax\>\)'
 	return ind
     endif
 
@@ -131,14 +131,14 @@
 
     " Now matching. Here we need to follow operation of cindent to know what
     " to fix. Basically, we need to get previous non-continuation line.
-    if prev_line =~ '\(;\|}\)\s*\(\s*\|//.*\|/\*.*\*/\s*\)$' 
+    if prev_line =~ '\(;\|}\)\s*\(\s*\|//.*\|/\*.*\*/\s*\)$' || prev_line =~ '^\s*|'
 	" now we know that Current line is non-continuation
 	let prev = GetPrevious(prev - 1)
 	let depth = 1
 	if prev_line =~ '}\s*$'
 	    let depth = 2
 	endif
-	while prev > 0 && getline(prev) !~ '\(;\|{\|}\)\s*\(\s*\|//.*\|/\*.*\*/\s*\)$' || depth > 1
+	while prev > 0 && (getline(prev) !~ '\(;\|{\|}\)\s*\(\s*\|//.*\|/\*.*\*/\s*\)$' || depth > 1)
 	    if getline(prev) =~ '}'
 		let depth = depth + 1
 	    endif
@@ -151,7 +151,7 @@
 	let prev_nonc = getline(prev)
 
 	" if previous is a match pattern
-	if prev_nonc =~ '^\s*|'
+	if prev_nonc =~ '^\s*|' && theIndent == indent (prev)
 	    return theIndent + &sw
 	endif
     endif



More information about the svn mailing list