]> git.rmz.io Git - dotfiles.git/commitdiff
vim: indent/cmake update file to support modern CMake
authorSamir Benmendil <me@rmz.io>
Sun, 14 May 2017 19:59:47 +0000 (20:59 +0100)
committerSamir Benmendil <me@rmz.io>
Sun, 14 May 2017 19:59:47 +0000 (20:59 +0100)
vim/indent/cmake.vim

index 854e3cbf28d89c1b8232a33f50fdf2da1226797c..691ca913a79e4f354cf3e354803a64a65f655d75 100644 (file)
@@ -44,25 +44,31 @@ fun! CMakeGetIndent(lnum)
   let or = '\|'
   " Regular expressions used by line indentation function.
   let cmake_regex_comment = '#.*'
-  let cmake_regex_identifier = '[A-Za-z][A-Za-z0-9_]*'
+  let cmake_regex_identifier = '[A-Za-z0-9_]\+'
   let cmake_regex_quoted = '"\([^"\\]\|\\.\)*"'
-  let cmake_regex_arguments = '\(' . cmake_regex_quoted .
-                    \       or . '\$(' . cmake_regex_identifier . ')' .
-                    \       or . '[^()\\#"]' . or . '\\.' . '\)*'
+  let cmake_regex_argument = '\(' . cmake_regex_quoted .
+                    \          or . cmake_regex_identifier .
+                    \          or . '\${' . cmake_regex_identifier . '}' .
+                    \        '\)'
+  let cmake_regex_arguments = '\(' . cmake_regex_argument .
+                    \         '\(\s*' . cmake_regex_argument . '\s*\)*' .
+                    \         '\)'
 
   let cmake_indent_comment_line = '^\s*' . cmake_regex_comment
   let cmake_indent_blank_regex = '^\s*$'
   let cmake_indent_open_regex = '^\s*' . cmake_regex_identifier .
-                    \           '\s*(' . cmake_regex_arguments .
+                    \           '\s*(\(' . cmake_regex_arguments . '\)\?' .
                     \           '\(' . cmake_regex_comment . '\)\?$'
 
-  let cmake_indent_close_regex = '^' . cmake_regex_arguments .
-                    \            ')\s*' .
+  let cmake_indent_close_regex = '^\s*' . cmake_regex_arguments .
+                    \            '\s*)\s*' .
+                    \            '\(' . cmake_regex_comment . '\)\?$'
+  let b:cmake_indent = cmake_indent_close_regex
+  let cmake_indent_close_regex_no_arg = '^\s*)\s*' .
                     \            '\(' . cmake_regex_comment . '\)\?$'
 
   let cmake_indent_begin_regex = '^\s*\(IF\|MACRO\|FOREACH\|ELSE\|ELSEIF\|WHILE\|FUNCTION\)\s*('
-  let cmake_indent_end_regex = '^\s*\(ENDIF\|ENDFOREACH\|ENDMACRO\|ELSE\|ELSEIF\|ENDWHILE\|ENDFUNCTION\)\s*(' .
-              \ or . ')\s*$'
+  let cmake_indent_end_regex = '^\s*\(ENDIF\|ENDFOREACH\|ENDMACRO\|ELSE\|ELSEIF\|ENDWHILE\|ENDFUNCTION\)\s*('
 
   " Add
   if previous_line =~? cmake_indent_comment_line " Handle comments
@@ -80,6 +86,9 @@ fun! CMakeGetIndent(lnum)
   if this_line =~? cmake_indent_end_regex
     let ind = ind - &sw
   endif
+  if this_line =~? cmake_indent_close_regex_no_arg
+    let ind = ind - &sw
+  endif
   if previous_line =~? cmake_indent_close_regex
     let ind = ind - &sw
   endif