1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/dist/tools/vera++/scripts/rules/T015.tcl
2020-02-14 14:17:16 +01:00

50 lines
1.8 KiB
Tcl
Executable File

#!/usr/bin/tclsh
# HTML links in comments and string literals should be correct
set urlRe {<[[:space:]]*[^>]*[[:space:]]+(?:HREF|SRC)[[:space:]]*=[[:space:]]*\"([^\"]*)\"}
foreach file [getSourceFileNames] {
foreach token [getTokens $file 1 0 -1 -1 {ccomment cppcomment stringlit}] {
set tokenValue [lindex $token 0]
if {[regexp -nocase $urlRe $tokenValue dummy link] == 1} {
if {[string index $link 0] == "\#" ||
[string first "mailto:" $link] == 0 ||
[string first "http:" $link] == 0 ||
[string first "https:" $link] == 0 ||
[string first "ftp:" $link] == 0 ||
[string first "news:" $link] == 0 ||
[string first "javascript:" $link] == 0} {
continue
}
set lineNumber [lindex $token 1]
if {[string first "file:" $link] == 0} {
report $file $lineNumber "URL links to files are not allowed"
continue
}
if {[regexp {[ \<\>\'\{\}\|\\\^\[\]]} $link] == 1} {
report $file $lineNumber "URL link contains illegal character(s)"
continue
}
set plainLink $link
set pos [string first "\#" $link]
if {$pos != -1} {
set plainLink [string range $link 0 [expr $pos - 1]]
}
if {[string first "\#" $link [expr $pos + 1]] != -1} {
report $file $lineNumber "URL link contains invalid bookmark"
}
set completeLink [file join [file dirname $file] $plainLink]
if {[file isfile $completeLink] == 0} {
report $file $lineNumber "URL points to non-existing file"
}
}
}
}