mirror of
https://github.com/envmodules/modules.git
synced 2026-05-30 00:12:31 +08:00
Move linter output report in dedicated proc
Create displayLinterOutput procedure to handle the parsing and output of each linter messages. Current code handles specific output from Nagelfar linter and generic error report for other programs set as linter.
This commit is contained in:
@@ -1651,6 +1651,73 @@ proc displayConfig {val env_var {asked 0} {trans {}} {locked 0}} {
|
||||
return $val$defby
|
||||
}
|
||||
|
||||
# report linter output as error/warning messages
|
||||
proc displayLinterOutput {linter output} {
|
||||
switch -- $linter {
|
||||
nagelfar {
|
||||
# parsing linter output
|
||||
set report_list {}
|
||||
foreach line [split $output \n] {
|
||||
set firstword [string range $line 0 [string first { } $line]-1]
|
||||
switch -- $firstword {
|
||||
Checking - Parsing {}
|
||||
Line {
|
||||
# add message of previous line if any
|
||||
if {[info exists msg]} {
|
||||
lappend report_list $msg
|
||||
}
|
||||
|
||||
# extract information from message line
|
||||
set colidx [string first : $line]
|
||||
set linenum [string trimleft [string range $line 5\
|
||||
$colidx-1]]
|
||||
set severity [string index $line $colidx+2]
|
||||
switch -- $severity {
|
||||
W {
|
||||
set severity WARNING
|
||||
set sgrkey wa
|
||||
set raisecnt 0
|
||||
}
|
||||
E {
|
||||
set severity ERROR
|
||||
set sgrkey er
|
||||
set raisecnt 1
|
||||
}
|
||||
default {
|
||||
set severity NOTICE
|
||||
set sgrkey in
|
||||
set raisecnt 0
|
||||
}
|
||||
}
|
||||
set msg [string range $line $colidx+4 end]
|
||||
|
||||
# start recorded message properties
|
||||
lappend report_list $linenum $severity $sgrkey $raisecnt
|
||||
}
|
||||
default {
|
||||
# this line is continuing message started previously
|
||||
append msg \n[string trimleft $line]
|
||||
}
|
||||
}
|
||||
}
|
||||
# add message of last line if any
|
||||
if {[info exists msg]} {
|
||||
lappend report_list $msg
|
||||
unset msg
|
||||
}
|
||||
|
||||
# report messages
|
||||
foreach {linenum severity sgrkey raisecnt mesg} $report_list {
|
||||
reportError $mesg 0 "[format %-7s $severity] line $linenum"\
|
||||
$sgrkey $raisecnt
|
||||
}
|
||||
}
|
||||
default {
|
||||
reportError $output
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc reportMlUsage {} {
|
||||
reportVersion
|
||||
report {Usage: ml [options] [command] [args ...]
|
||||
|
||||
@@ -2549,6 +2549,9 @@ proc cmdModuleLint {args} {
|
||||
knerror {No Tcl linter program configured}
|
||||
}
|
||||
|
||||
# extract linter program name
|
||||
set linter [file rootname [file tail [lindex [getConf tcl_linter] 0]]]
|
||||
|
||||
foreach mod $args {
|
||||
lassign [getPathToModule $mod] modfile modname modnamevr
|
||||
# error message has already been produced if mod not found or forbidden
|
||||
@@ -2564,62 +2567,8 @@ proc cmdModuleLint {args} {
|
||||
knerror $errMsg
|
||||
}
|
||||
|
||||
# parsing linter output
|
||||
set report_list {}
|
||||
foreach line [split $out \n] {
|
||||
set firstword [string range $line 0 [string first { } $line]-1]
|
||||
switch -- $firstword {
|
||||
Checking - Parsing {}
|
||||
Line {
|
||||
# add message of previous line if any
|
||||
if {[info exists msg]} {
|
||||
lappend report_list $msg
|
||||
}
|
||||
|
||||
# extract information from message line
|
||||
set colidx [string first : $line]
|
||||
set linenum [string trimleft [string range $line 5\
|
||||
$colidx-1]]
|
||||
set severity [string index $line $colidx+2]
|
||||
switch -- $severity {
|
||||
W {
|
||||
set severity WARNING
|
||||
set sgrkey wa
|
||||
set raisecnt 0
|
||||
}
|
||||
E {
|
||||
set severity ERROR
|
||||
set sgrkey er
|
||||
set raisecnt 1
|
||||
}
|
||||
default {
|
||||
set severity NOTICE
|
||||
set sgrkey in
|
||||
set raisecnt 0
|
||||
}
|
||||
}
|
||||
set msg [string range $line $colidx+4 end]
|
||||
|
||||
# start recorded message properties
|
||||
lappend report_list $linenum $severity $sgrkey $raisecnt
|
||||
}
|
||||
default {
|
||||
# this line is continuing message started previously
|
||||
append msg \n[string trimleft $line]
|
||||
}
|
||||
}
|
||||
}
|
||||
# add message of last line if any
|
||||
if {[info exists msg]} {
|
||||
lappend report_list $msg
|
||||
unset msg
|
||||
}
|
||||
|
||||
# report messages
|
||||
foreach {linenum severity sgrkey raisecnt mesg} $report_list {
|
||||
reportError $mesg 0 "[format %-7s $severity] line $linenum"\
|
||||
$sgrkey $raisecnt
|
||||
}
|
||||
# report linting messages
|
||||
displayLinterOutput $linter $out
|
||||
|
||||
# report all lint messages for this modulefile
|
||||
reportMsgRecord "Linting [getModuleDesignation $msgrecid {} 2]"
|
||||
|
||||
Reference in New Issue
Block a user