comparison 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
comparison
equal deleted inserted replaced
53:fe7e3524e571 54:0edaba9986ba
1 #!/usr/bin/tclsh
2 # control structures should have complete curly-braced block of code
3
4 foreach fileName [getSourceFileNames] {
5
6 set state "start"
7 set prev ""
8 set pp_pragma_line -1
9 foreach token [getTokens $fileName 1 0 -1 -1 {for if while do else leftparen rightparen leftbrace rightbrace semicolon pp_pragma}] {
10 set type [lindex $token 3]
11 set line [lindex $token 1]
12
13 if {$state == "control"} {
14 if {$type == "leftparen"} {
15 incr parenCount
16 } elseif {$type == "rightparen"} {
17 incr parenCount -1
18 if {$parenCount == 0} {
19 set state "expectedblock"
20 }
21 }
22
23 } elseif {$state == "expectedblock"} {
24 if {$prev == "else" && $type == "if" } {
25 # skip
26 } elseif {$type != "leftbrace"} {
27 set line [lindex $token 1]
28 report $fileName $line "full block {} expected in the control structure"
29 }
30 set state "block"
31 }
32
33 if {$type == "pp_pragma"} {
34 set pp_pragma_line $line
35 } elseif {$pp_pragma_line != $line} {
36 if {$type == "for" || $type == "if"} {
37 set parenCount 0
38 set state "control"
39 } elseif {$type == "do" || $type == "else"} {
40 set state "expectedblock"
41 } elseif {$type == "while" && $prev != "rightbrace"} {
42 set parenCount 0
43 set state "control"
44 }
45 }
46 set prev $type
47 }
48 }