# HG changeset patch # User Claus Gittinger # Date 1366135741 -7200 # Node ID 49eafe2c5ae8f8d08f8196cb09cbaf0a679095cf # Parent 3c563253ddc1d67e762b3564220b118653706d41 class: MetricsReporter allow package-matchpatterns diff -r 3c563253ddc1 -r 49eafe2c5ae8 MetricsReporter.st --- a/MetricsReporter.st Thu Apr 04 19:37:02 2013 +0200 +++ b/MetricsReporter.st Tue Apr 16 20:09:01 2013 +0200 @@ -53,8 +53,35 @@ examples " [exBegin] + String streamContents:[:stream | + MetricsReporter + reportPackages:{ 'stx:libjavascript' } + format:#xml_metrics + on:stream. + ]. + [exEnd] + [exBegin] + String streamContents:[:stream | + MetricsReporter + reportPackages:{ 'stx:libbasic' } + format:#xml_metrics + on:stream. + ]. + [exEnd] + [exBegin] + String streamContents:[:stream | + MetricsReporter + reportPackages:{ 'stx:libbasic*' } + format:#xml_metrics + on:stream. + ]. + [exEnd] + [exBegin] 'metrics.xml' asFilename writingFileDo:[:stream | - MetricsReporter reportPackages:{ 'stx:libjavascript' } format:#xml_metrics on:stream. + MetricsReporter + reportPackages:{ 'stx:libjavascript' } + format:#xml_metrics + on:stream. ]. [exEnd] @@ -72,6 +99,7 @@ ]. [exEnd] + package metrics only: [exBegin] MetricsReporter new stream: Transcript; @@ -85,6 +113,44 @@ packageMetricNames: #( 'LOC' 'NOM' 'NOC'); reportXml_metrics. [exEnd] + [exBegin] + MetricsReporter new + stream: Transcript; + packages: + { + 'stx:libbasic' . + 'stx:libbasic2' . + 'stx:libbasic3' . + }; + classMetricNames: #(); + methodMetricNames: #(); + packageMetricNames: #( 'LOC' 'NOM' 'NOC'); + reportXml_metrics. + [exEnd] + [exBegin] + MetricsReporter new + stream: Transcript; + packages: + { + 'stx:libbasic*' . + }; + classMetricNames: #(); + methodMetricNames: #(); + packageMetricNames: #( 'LOC' 'NOM' 'NOC'); + reportXml_metrics. + [exEnd] + [exBegin] + MetricsReporter new + stream: Transcript; + packages: + { + 'stx:*' . + }; + classMetricNames: #(); + methodMetricNames: #(); + packageMetricNames: #( 'LOC' 'NOM' 'NOC'); + reportXml_metrics. + [exEnd] " ! @@ -187,11 +253,27 @@ ^ { metric class shortName . metric class descriptiveName . metric metricValue } ! -packageMetricValue:metricName for:aPackageID - |metric| +packageMetricValue:metricName for:aPackageIDOrPattern + |overAllInfo| + + aPackageIDOrPattern includesMatchCharacters ifTrue:[ + Smalltalk allProjectIDs do:[:eachPackageID | + |thisInfo| - metric := OOM::PackageMetrics type:metricName for:aPackageID. - ^ self metricInfoFor:metric + (eachPackageID matches:aPackageIDOrPattern) ifTrue:[ + thisInfo := self metricInfoFor:(OOM::PackageMetrics type:metricName for:eachPackageID). + overAllInfo isNil ifTrue:[ + overAllInfo := thisInfo + ] ifFalse:[ + "/ kludge: only works with accumulative metrics (i.e. not with averages etc.) + overAllInfo at:(overAllInfo size) put:(overAllInfo last + thisInfo last). + ]. + ]. + ]. + ^ overAllInfo + ] ifFalse:[ + ^ self metricInfoFor:(OOM::PackageMetrics type:metricName for:aPackageIDOrPattern). + ]. ! ! !MetricsReporter methodsFor:'reporting'! @@ -217,9 +299,9 @@ ]. ! -generatePackageMetricsFor:aPackage +generatePackageMetricsFor:aPackageIDOrPattern ^ self packageMetricNames collect:[:metricName | - self packageMetricValue:metricName for:aPackage. + self packageMetricValue:metricName for:aPackageIDOrPattern. ]. ! @@ -247,16 +329,24 @@ reportXml_metrics " - Smalltalk loadPackage:'exept:programming/oom'. + "/ need the exept-metrics package + (Smalltalk loadPackage:'exept:programming/oom') ifFalse:[ + self error:'cannot load oom package'. + ]. stream nextPutLine: ''; nextPutLine: ''. packages do:[:eachPackageID | - Smalltalk loadPackage:eachPackageID. + "/ if the package is a matchPattern, generate metrics for all loaded packages + "/ which match that pattern. + "/ Otherwise, make sure that this package is loaded and generate metrics for that + "/ one only. + eachPackageID includesMatchCharacters ifFalse:[ + Smalltalk loadPackage:eachPackageID. + ]. self reportXml_metricsForPackage:eachPackageID ]. - stream nextPutLine: ''. ! @@ -286,22 +376,35 @@ stream nextPutLine: ' '. ! -reportXml_metricsForPackage:aPackageID +reportXml_metricsForPackage:aPackageIDOrPattern + |genMetricsForClass| + + genMetricsForClass := + [:aClass | + Autoload autoloadFailedSignal handle:[:ex | + ] do:[ + aClass autoload. + self reportXml_metricsForClass:aClass + ] + ]. + stream nextPutLine: ' '. - stream nextPutLine: (' %1' bindWith:aPackageID). + stream nextPutLine: (' %1' bindWith:aPackageIDOrPattern). (self classMetricNames notEmptyOrNil or:[self methodMetricNames notEmptyOrNil]) ifTrue:[ - Smalltalk allClassesInPackage:aPackageID do:[:eachClass | - Autoload autoloadFailedSignal handle:[:ex | - ] do:[ - eachClass autoload. - self reportXml_metricsForClass:eachClass + aPackageIDOrPattern includesMatchCharacters ifTrue:[ + Smalltalk allClasses do:[:eachClass | + (eachClass package matches:aPackageIDOrPattern) iftrue:[ + genMetricsForClass value:eachClass + ]. ]. + ] ifFalse:[ + Smalltalk allClassesInPackage:aPackageIDOrPattern do:genMetricsForClass. ]. ]. - self reportXml_metricValues:(self generatePackageMetricsFor:aPackageID). + self reportXml_metricValues:(self generatePackageMetricsFor:aPackageIDOrPattern). stream nextPutLine: ' '. ! ! @@ -310,7 +413,7 @@ report:formatSymbol "currently supported formatSymbols: - xml_cobertura" + xml_metrics" |reportFormatSelector| @@ -329,9 +432,10 @@ !MetricsReporter class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/goodies/sunit/MetricsReporter.st,v 1.5 2012-11-07 21:21:56 cg Exp $' + ^ '$Header: /cvs/stx/stx/goodies/sunit/MetricsReporter.st,v 1.6 2013-04-16 18:09:01 cg Exp $' ! version_CVS - ^ '$Header: /cvs/stx/stx/goodies/sunit/MetricsReporter.st,v 1.5 2012-11-07 21:21:56 cg Exp $' + ^ '$Header: /cvs/stx/stx/goodies/sunit/MetricsReporter.st,v 1.6 2013-04-16 18:09:01 cg Exp $' ! ! +