reports/Builder__LintReport.st
changeset 254 9272fef1d474
parent 233 8ea8b3692704
child 267 9f55d8893118
--- a/reports/Builder__LintReport.st	Mon Dec 15 12:35:36 2014 +0100
+++ b/reports/Builder__LintReport.st	Mon Dec 15 12:35:41 2014 +0100
@@ -55,20 +55,20 @@
 
 !LintReport methodsFor:'generating'!
 
-generateClass: aClass
-        | sourceInfo sourceName |
-        sourceInfo := ReportSourceInfo forClass: aClass.
-        sourceName := self encodeFilename: (self sourceFilenameFor: aClass).
+generateClass:class inPackage:package 
+    | sourceInfo  sourceName |
 
-        format writeFile: sourceName with: [
-            self generateClass: aClass source: sourceInfo.
-            self generateClass: aClass class source: sourceInfo.
+    sourceInfo := ReportSourceInfo forClass:class inPackage:package.
+    sourceName := self 
+            encodeFilename:(self sourceFilenameForClass:class package:package).
+    format writeFile:sourceName
+        with:[
+            self generateClass:class source:sourceInfo inPackage: package.
+            self generateClass:class class source:sourceInfo inPackage: package.
         ].
+    format writeSource:sourceInfo to:sourceName
 
-        format writeSource: sourceInfo contents to: sourceName
-
-    "Created: / 06-10-2011 / 23:54:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 29-07-2013 / 14:47:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 15-12-2014 / 10:46:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 generateClass: aClass selector: aSelector source: sourceInfo
@@ -82,40 +82,112 @@
     "Modified: / 01-03-2013 / 18:10:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-generateClass: aClass source: sourceInfo 
-
+generateClass: aClass selector: aSelector source: sourceInfo inPackage: package
         | matching |
-        (environment definesClass: aClass) ifTrue: [
-                matching := rules select: [ :rule |
-                        (self isClassEnvironment: rule result)
-                                and: [ rule result includesClass: aClass ] ].
-                self generateViolations: matching class: aClass selector: nil  source: sourceInfo].
-        (environment selectorsForClass: aClass) asSortedCollection
-                do: [ :selector | self generateClass: aClass selector: selector source: sourceInfo]
+        matching := rules select: [ :each | 
+                (self isSelectorEnvironment: each result)
+                        and: [ each result includesSelector: aSelector in: aClass ] ].
+        self generateViolations: matching class: aClass selector: aSelector source: sourceInfo
+
+    "Created: / 15-12-2014 / 11:04:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+generateClass: aClass source: sourceInfo inPackage: package 
+
+    | matching |
+    (environment definesClass: aClass) ifTrue: [
+        matching := rules select: [ :rule | (self isClassEnvironment: rule result) and: [ rule result includesClass: aClass ] ].
+        self generateViolations: matching class: aClass source: sourceInfo
+    ].
+    (environment selectorsForClass: aClass) asSortedCollection do: [ :selector | 
+        self generateClass: aClass selector: selector source: sourceInfo inPackage: package
+    ]
+
+    "Created: / 15-12-2014 / 11:05:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+generateClassesInPackage:package 
+    (ProjectDefinition searchForClassesWithProject:package) do:[:cls | 
+        self generateClass:cls inPackage:package
+    ].
 
-    "Created: / 07-10-2011 / 10:29:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 01-03-2013 / 18:11:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 15-12-2014 / 10:52:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+generateExtensionsInPackage:package 
+    | sourceInfo  sourceName |
+
+    sourceInfo := ReportSourceInfo forExtensionsInPackage:package.
+    sourceName := self 
+            encodeFilename:(self sourceFilenameForExtensionsInPackage:package).
+    format writeFile:sourceName
+        with:[
+            (ProjectDefinition searchForExtensionsWithProject:package) do:[:method | 
+                self 
+                    generateClass:method mclass
+                    selector:method selector
+                    source:sourceInfo
+                    inPackage: package.
+            ].
+        ].
+    format writeSource:sourceInfo to:sourceName
+
+    "Created: / 15-12-2014 / 10:50:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+generatePackage: package
+    self generateClassesInPackage:package.  
+    self generateExtensionsInPackage:package.
+
+    "Created: / 15-12-2014 / 10:42:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 generateViolations: aCollection class: aClass selector: aSelector source: sourceInfo
     | method offset  |
 
+    (AbstractSourceCodeManager isVersionMethodSelector: aSelector) ifTrue:[ ^ self ].
+    (AbstractSourceCodeManager isExtensionsVersionMethodSelector: aSelector) ifTrue:[ ^ self ].
+
+
     method := aClass compiledMethodAt: aSelector.
     offset := sourceInfo offsetOfMethod: method.
     aCollection do: [ :rule |
-        | interval start stop |
-    
-        interval := (rule result selectionIntervalFor: method source) isNil ifTrue: [ 1 to: method source size ].
-        start := sourceInfo lineAndColumnOfOffset: offset + interval first - 1.
-        stop  := sourceInfo lineAndColumnOfOffset: offset + interval last - 1.
+        | tree |
+
+        tree := RBParser parseMethod: method source.
+        rule result selectionIntervalsForSource: method source tree: tree in: method mclass do:[:intervalOrNil | 
+            | interval start stop |
+
+            interval := interval isNil ifTrue: [ 1 to: method source size ].
+            start := sourceInfo lineAndColumnOfOffset: offset + interval first - 1.
+            stop  := sourceInfo lineAndColumnOfOffset: offset + interval last - 1.
+
+            format writeViolation: rule
+                       class: aClass selector: aSelector
+                   startLine: start x column: start y
+                    stopLine: stop x  column: stop  y.
+        ]
+    ]
+
+    "Created: / 01-03-2013 / 18:05:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-12-2014 / 11:32:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+generateViolations: aCollection class: aClass source: sourceInfo
+    | method offset start stop |
+
+    start := sourceInfo lineAndColumnOfOffset: 1.
+    stop  := sourceInfo lineAndColumnOfOffset: SmallInteger maxVal.
+    aCollection do: [ :rule |
+        | interval  |
 
         format writeViolation: rule
-                   class: aClass selector: aSelector
+                   class: aClass selector: nil
                startLine: start x column: start y
                 stopLine: stop x  column: stop  y.
     ]
 
-    "Created: / 01-03-2013 / 18:05:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 15-12-2014 / 11:13:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !LintReport methodsFor:'initialization'!
@@ -128,17 +200,16 @@
     "Created: / 04-08-2011 / 14:40:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-setupForPackages: packages
-
-    packages isEmpty ifTrue:[^self].
+setupForPackages: pkgs
+    pkgs isEmpty ifTrue:[^self].
     environment := PackageEnvironment 
                     onEnvironment: BrowserEnvironment new
-                    packageNames: packages.
+                    packageNames: pkgs.
     name isNil ifTrue:[
-        packages size > 1 ifTrue:[
-            name :=  packages size printString , ' packages'.
+        pkgs size > 1 ifTrue:[
+            name :=  pkgs size printString , ' packages'.
         ] ifFalse:[
-            name :=  packages anElement
+            name :=  pkgs anElement
         ]
     ].
 
@@ -150,6 +221,7 @@
     "
 
     "Created: / 04-08-2011 / 14:40:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-12-2014 / 10:52:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !LintReport methodsFor:'private'!
@@ -166,26 +238,46 @@
 		repeat
 !
 
-sourceFilenameFor: aClass
-
-    | fn cls |
+sourceFilenameForClass:class package: package 
+    | fn  cls |
 
-    cls := aClass theNonMetaclass.
-    fn := cls package asString replaceAll:$: with:$_;replaceAll:$/ with:$_.
-    fn := fn , '_' , (cls asString copyReplaceAll:$: with: $_), '.' , cls programmingLanguage sourceFileSuffix.
-    
-    ^self encodeFilename: fn.
+    cls := class theNonMetaclass.
+    fn := package copy
+            replaceAll:$: with:$_;
+            replaceAll:$/ with:$_;
+            yourself.
+    fn := fn , '_' , (cls asString copyReplaceAll:$: with:$_) , '.' 
+            , cls programmingLanguage sourceFileSuffix.
+    ^ self encodeFilename:fn.
 
     "
         Builder::LintReportFormat::CheckStyle basicNew
             sourceFilenameFor: Class
 
         Builder::LintReportFormat::CheckStyle basicNew
-            sourceFilenameFor: Builder::LintReportFormat
-    "
+            sourceFilenameFor: Builder::LintReportFormat"
+
+    "Created: / 15-12-2014 / 10:46:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+sourceFilenameForExtensionsInPackage: package 
+    | fn |
 
-    "Created: / 07-10-2011 / 09:06:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 01-03-2013 / 18:00:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    fn := package copy
+            replaceAll:$: with:$_;
+            replaceAll:$/ with:$_;
+            yourself.
+    fn := fn , '_' , 'extensions.st'.
+    ^ self encodeFilename:fn.
+
+    "
+        Builder::LintReportFormat::CheckStyle basicNew
+            sourceFilenameFor: Class
+
+        Builder::LintReportFormat::CheckStyle basicNew
+            sourceFilenameFor: Builder::LintReportFormat"
+
+    "Created: / 15-12-2014 / 10:50:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !LintReport methodsFor:'running'!
@@ -199,26 +291,25 @@
         SmalllintChecker 
             runRule: (RBCompositeLintRule rules: rules)
             onEnvironment: environment.
-
-        (environment classes asSortedCollection: [ :a :b | a name <= b name ])
-            do: [ :class | self generateClass: class].
+        environment packageNames do:[:packageName | 
+            self generatePackage: packageName  
+        ].
     ] ensure:[
         Class tryLocalSourceFirst: wasTryLocalSources 
     ]
 
-    "Modified: / 23-01-2012 / 09:04:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-12-2014 / 11:06:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 setUp
 
     super setUp.
     rules isNil ifTrue:[
-        rules := (RBCompositeLintRule rulesFor: RBBasicLintRule)
-                 reject: [ :each | each class name endsWith: 'SpellingRule' ]
+        rules := RBBuiltinRuleSet rulesetBuiltinDefault flatten   
     ].
 
     "Created: / 04-08-2011 / 14:35:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 28-02-2013 / 23:18:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-12-2014 / 11:35:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 setupRulesFrom: filename