IPSIS_F13.tcl
73 lines
| 3.0 KiB
| application/x-tcl
|
TclLexer
r2 | #!/usr/bin/tclsh | |||
# namespace names should be recalled at the end of the namespace | ||||
# namespace mynamespace { | ||||
# } // mynamespace | ||||
proc createNamespaceDict {} { | ||||
return [dict create state "waitingForIdentifier" identifier "" bracesCounter 0] | ||||
} | ||||
foreach fileName [getSourceFileNames] { | ||||
set namespaces [list] | ||||
foreach token [getTokens $fileName 1 0 -1 -1 {namespace identifier leftbrace rightbrace semicolon cppcomment}] { | ||||
set type [lindex $token 3] | ||||
set namespacesToKeep [list] | ||||
foreach n $namespaces { | ||||
set keepNamespace 1 | ||||
dict with n { | ||||
if {$state == "waitingForIdentifier" && $type == "identifier"} { | ||||
set state "waitingForLeftBrace" | ||||
set identifier [lindex $token 0] | ||||
} elseif {$state == "waitingForLeftBrace"} { | ||||
if {$type == "semicolon"} { | ||||
# Wasn't a namespace, remove the dict | ||||
set keepNamespace 0 | ||||
} elseif {$type == "leftbrace"} { | ||||
set bracesCounter 0 | ||||
set state "waitingForRightBrace" | ||||
} | ||||
} elseif {$state == "waitingForRightBrace"} { | ||||
if {$type == "leftbrace"} { | ||||
incr bracesCounter | ||||
} elseif {$type == "rightbrace"} { | ||||
if {$bracesCounter > 0} { | ||||
incr bracesCounter -1 | ||||
} else { | ||||
set state "waitingForComment" | ||||
} | ||||
} | ||||
} elseif {$state == "waitingForComment"} { | ||||
if {$type == "cppcomment"} { | ||||
set commentValue [lindex $token 0] | ||||
# Check that the comment report the namespace name | ||||
if {![regexp "\\m$identifier\\M" $commentValue]} { | ||||
set line [lindex $token 1] | ||||
set commentValue [string trim $commentValue] | ||||
report $fileName $line "The namespace $identifier should have been recalled in the comment here (// $identifier). Comment found: $commentValue" | ||||
} | ||||
} else { | ||||
# There should have been a comment here | ||||
set line [lindex $token 1] | ||||
report $fileName $line "The namespace $identifier should have been recalled in a comment here (// $identifier)" | ||||
} | ||||
# Namespace processed, remove it from the list | ||||
set keepNamespace 0 | ||||
} | ||||
} | ||||
if {$keepNamespace} { | ||||
lappend namespacesToKeep $n | ||||
} | ||||
} | ||||
set namespaces $namespacesToKeep | ||||
# If the token is a namespace keyword, add a namespace dict for the next | ||||
# foreach | ||||
if {$type == "namespace"} { | ||||
lappend namespaces [createNamespaceDict] | ||||
} | ||||
} | ||||
} | ||||