--- 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