#UI_ENHANCEMENT by cg
class: SmallSense::CriticsWindow
changed: #generateHTMLForRule:on:
avoid generating multiple rule-descriptions
for the same rule.
--- a/SmallSense__CriticsWindow.st Wed May 04 21:49:01 2016 +0200
+++ b/SmallSense__CriticsWindow.st Thu May 05 17:11:24 2016 +0200
@@ -365,43 +365,81 @@
!CriticsWindow methodsFor:'change & update'!
generateHTMLForRule: rule on: stream
- | fixes |
-
- rule isComposite ifTrue:[
- rule flatten
- do:[:each | self generateHTMLForRule: each on: stream. ]
- separatedBy:[ stream nextPutLine: '<hr>' ].
- ^ self.
- ].
-
- stream
- nextPutAll: rule name;
- nextPutAll:'<P>';
- nextPutLine: rule rationale.
+ | flattenedRules collectedFixes putCollectedFixes
+ previousRuleClass |
+
+ rule isComposite ifTrue:[
+ flattenedRules := OrderedCollection new.
+ rule flatten do:[:each | flattenedRules add:each].
+
+ "/ often, multiple instances of the same rule match in a line.
+ "/ avoid, generating long lists, which all look the same.
+ "/ so first, sort them by name.
+ flattenedRules sort:[:a :b | a name < b name].
+ "/ then in the code below, skip over repeated descriptions
+ ] ifFalse:[
+ flattenedRules := { rule }.
+ ].
- "/ Generate fixes...
- rule fixes: fixer.
- fixes := fixer fixesForRule: rule.
- fixes isEmptyOrNil ifTrue:[ ^ self ].
+ putCollectedFixes :=
+ [
+ collectedFixes notEmptyOrNil ifTrue:[
+ stream nextPutAll: '<p>'.
+ collectedFixes size > 1 ifTrue:[
+ stream nextPutAll: '<br>'.
+ stream nextPutLine: 'Possible fixes:'.
+ ].
+ stream nextPutLine:'<ul indent="0">'.
+ collectedFixes withIndexDo:[:fix :index|
+ stream
+ nextPutAll:'<li><a action="doit: linkActionPerformer doQuickFix:';
+ nextPutAll: index printString;
+ nextPutAll:'">';
+ nextPutAll: fix label;
+ nextPutAll:'</a></li>'.
+ ].
+ stream nextPutLine:'</ul>'.
+ ].
+ ].
+
+ previousRuleClass := nil.
+ collectedFixes := OrderedCollection new.
- stream nextPutAll: '<p>'.
- fixes size > 1 ifTrue:[
- stream nextPutAll: '<br>'.
- stream nextPutLine: 'Possible fixes:'.
+ flattenedRules
+ do:[:eachRule |
+ |fixes|
+
+ eachRule class == previousRuleClass ifFalse:[
+ collectedFixes notEmpty ifTrue:[
+ putCollectedFixes value.
+ collectedFixes := OrderedCollection new
+ ].
+ previousRuleClass notNil ifTrue:[
+ stream nextPutLine: '<hr>'
+ ].
+ stream
+ "/ nextPutAll:'<I>',eachRule class name,':</I><BR>';
+ nextPutAll:'<B>',eachRule name,'</B>';
+ nextPutAll:'<P>';
+ nextPutLine: eachRule rationale.
+ ].
+
+ "/ Generate fixes...
+ eachRule fixes: fixer.
+ fixes := fixer fixesForRule: eachRule.
+ fixes notEmptyOrNil ifTrue:[
+ collectedFixes addAll:fixes.
+ ].
+ previousRuleClass := eachRule class.
+ ].
+
+ collectedFixes notEmpty ifTrue:[
+ putCollectedFixes value.
].
- stream nextPutLine:'<ul indent="0">'.
- fixes withIndexDo:[:fix :index|
- stream
- nextPutAll:'<li><a action="doit: linkActionPerformer doQuickFix:';
- nextPutAll: index printString;
- nextPutAll:'">';
- nextPutAll: fix label;
- nextPutAll:'</a></li>'.
- ].
- stream nextPutLine:'</ul>'.
"Created: / 15-12-2014 / 16:49:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 15-12-2014 / 18:17:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 1-5-2016 Claus Gittinger"
!
update:something with:aParameter from:changedObject