diff vera/rules/T019.tcl @ 54:0edaba9986ba

CMake: add vera++, closes 602
author David Demelier <markand@malikania.fr>
date Fri, 16 Dec 2016 13:59:55 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vera/rules/T019.tcl	Fri Dec 16 13:59:55 2016 +0100
@@ -0,0 +1,48 @@
+#!/usr/bin/tclsh
+# control structures should have complete curly-braced block of code
+
+foreach fileName [getSourceFileNames] {
+
+    set state "start"
+    set prev ""
+    set pp_pragma_line -1
+    foreach token [getTokens $fileName 1 0 -1 -1 {for if while do else leftparen rightparen leftbrace rightbrace semicolon pp_pragma}] {
+        set type [lindex $token 3]
+        set line [lindex $token 1]
+
+        if {$state == "control"} {
+            if {$type == "leftparen"} {
+                incr parenCount				
+            } elseif {$type == "rightparen"} {
+                incr parenCount -1
+                if {$parenCount == 0} {
+                    set state "expectedblock"
+                }
+            }
+
+        } elseif {$state == "expectedblock"} {
+            if {$prev == "else" && $type == "if" } {
+              # skip
+            } elseif {$type != "leftbrace"} {
+                set line [lindex $token 1]
+                report $fileName $line "full block {} expected in the control structure"
+            }
+            set state "block"
+        }
+
+        if {$type == "pp_pragma"} {
+          set pp_pragma_line $line
+        } elseif {$pp_pragma_line != $line} {
+            if {$type == "for" || $type == "if"} {
+                set parenCount 0
+                set state "control"
+            } elseif {$type == "do" || $type == "else"} {
+                set state "expectedblock"
+            } elseif {$type == "while" && $prev != "rightbrace"} {
+                set parenCount 0
+                set state "control"
+            }
+        }
+        set prev $type
+    }
+}