##// END OF EJS Templates
Changes way to retrieve unit
Changes way to retrieve unit

File last commit:

r2:451739a45362
r792:c2af6c15676c
Show More
IPSIS_S01.tcl
60 lines | 2.6 KiB | application/x-tcl | TclLexer
#!/usr/bin/tclsh
# At most one class per header file
foreach fileName [getSourceFileNames] {
if {[regexp {(?:\\|/)?([^\\/]+?)\.h$} $fileName matchedExpr expectedClassName]} {
set state "waitingForClass"
set alreadyOneClass 0
set firstClassName ""
set bracesCounter 0
set lastIdentifier ""
foreach token [getTokens $fileName 1 0 -1 -1 {class identifier leftbrace rightbrace colon semicolon}] {
set type [lindex $token 3]
if {$type == "identifier"} {
set lastIdentifier [lindex $token 0]
}
if {$state == "waitingForClass" && $type == "class"} {
set state "waitingForBeginingOfClass"
} elseif {$state == "waitingForBeginingOfClass"} {
if {$type == "semicolon"} {
set state "waitingForClass"
} elseif {$type == "leftbrace" || $type == "colon"} {
# Check if this is the first class
if {$alreadyOneClass} {
set line [lindex $token 1]
report $fileName $line "At most one public class can be defined in a header file. (class $lastIdentifier found but class $firstClassName already defined)"
} else {
set alreadyOneClass 1
set firstClassName $lastIdentifier
# Check that the class has the same name than the file
if {$lastIdentifier != $expectedClassName} {
set line [lindex $token 1]
report $fileName $line "The public class should have the same name than the header file. (class $lastIdentifier found but class $expectedClassName expected)"
}
}
if {$type == "leftbrace"} {
set state "waitingForEndOfClass"
} else {
set state "waitingForLeftBrace"
}
}
} elseif {$state == "waitingForLeftBrace" && $type == "leftbrace"} {
set state "waitingForEndOfClass"
} elseif {$state == "waitingForEndOfClass"} {
if {$type == "leftbrace"} {
incr bracesCounter
} elseif {$type == "rightbrace"} {
if {$bracesCounter > 0} {
incr bracesCounter -1
} else {
set state "waitingForClass"
}
}
}
}
}
}