diff --git a/tcl/report.tcl.in b/tcl/report.tcl.in index 00f84c9e..6dcdd4e3 100644 --- a/tcl/report.tcl.in +++ b/tcl/report.tcl.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 ...] diff --git a/tcl/subcmd.tcl.in b/tcl/subcmd.tcl.in index e6c46762..54371c9e 100644 --- a/tcl/subcmd.tcl.in +++ b/tcl/subcmd.tcl.in @@ -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]"