##// END OF EJS Templates
Added new main wrapper to meson build desc...
Added new main wrapper to meson build desc Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r2:451739a45362
r1481:8650293c5c31
Show More
IPSIS_S04_METHOD.tcl
152 lines | 4.7 KiB | application/x-tcl | TclLexer
#!/usr/bin/tclsh
# Naming conventions for methods
set methodRegex [getParameter "method-regex" {^[a-z][A-Za-z1-9]*$}]
proc createMachine {machineName initState} {
set machine [dict create name $machineName state $initState identifier "" bracesCounter 0 bracketCounter 0 angleBracketCounter 0]
return $machine
}
proc isClassMacro {value} {
set classMacroRegexp [getParameter "classmacro-regex" {}]
set classMacros {
"Q_OBJECT"
}
set isClassMacroByRegexp 0
if {[string length $classMacroRegexp] != 0} {
set isClassMacroByRegexp [regexp $classMacroRegexp $value]
}
return [expr ([lsearch $classMacros $value] != -1) || $isClassMacroByRegexp]
}
proc isCppType {type value} {
set cppTypes {
"bool"
"char"
"int"
"float"
"double"
"void"
"wchart"
"identifier"
}
set valueIsClassMacro 0
if {$type == "identifier"} {
set valueIsClassMacro [isClassMacro $value]
}
return [expr ([lsearch $cppTypes $type] != -1) && !$valueIsClassMacro]
}
set tokenFilter {
namespace
class
struct
leftbrace
rightbrace
leftparen
rightparen
less
greater
semicolon
identifier
colon_colon
assign
pp_define
bool
char
int
float
double
void
wchart
}
foreach fileName [getSourceFileNames] {
set machines [list]
# Check the functions at the root of the file
lappend machines [createMachine "method" "root"]
set lastIdentifier ""
set lastIdentifier2 ""
set prev1 ""
set prev2 ""
foreach token [getTokens $fileName 1 0 -1 -1 $tokenFilter] {
set type [lindex $token 3]
set line [lindex $token 1]
# Retrieve identifier value
if {$type == "identifier"} {
set lastIdentifier2 $lastIdentifier
set lastIdentifier [lindex $token 0]
}
# Start a method state machine when coming accross a namespace or a
# class/struct
if {$type == "namespace" || $type == "class" || $type == "struct"} {
lappend machines [createMachine "method" "beforeLeftBrace"]
}
set machinesToKeep [list]
foreach m $machines {
set keepMachine 1
dict with m {
# Method
if {$name == "method"} {
if {$state == "beforeLeftBrace"} {
if {$type == "leftbrace"} {
set state "root"
} elseif {$type == "semicolon"} {
set keepMachine 0
}
} elseif {$state == "root"} {
if {[isCppType $prev2 $lastIdentifier2] && $prev1 == "identifier" && $type == "leftparen"} {
if {![regexp $methodRegex $lastIdentifier]} {
report $fileName $line "The method names should match the following regex: $methodRegex (found: $lastIdentifier)"
}
} elseif {$type == "leftbrace"} {
set state "consumeBraces"
incr bracesCounter
} elseif {$type == "less"} {
set state "consumeAngleBracket"
incr angleBracketCounter
} elseif {$type == "rightbrace"} {
# End of the state machine
set keepMachine 0
}
} elseif {$state == "consumeBraces"} {
if {$type == "leftbrace"} {
incr bracesCounter
} elseif {$type == "rightbrace"} {
incr bracesCounter -1
if {$bracesCounter == 0} {
set state "root"
}
}
} elseif {$state == "consumeAngleBracket"} {
if {$type == "less"} {
incr angleBracketCounter
} elseif {$type == "greater"} {
incr angleBracketCounter -1
if {$angleBracketCounter == 0} {
set state "root"
}
}
}
}
}
if {$keepMachine} {
lappend machinesToKeep $m
}
}
set machines $machinesToKeep
set prev2 $prev1
set prev1 $type
}
}