<div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000;text-align: left" dir="ltr">
Hi there :-)<div><br></div><div>-0.5 for the output beautification</div><div>+1 for the rest</div><div><br></div><div>If you would like to add commas to the text, please also put one before the "and": <span style="font-size: 10pt"><a href="https://www.grammarly.com/blog/what-is-the-oxford-comma-and-why-do-people-care-so-much-about-it/" style="font-size: 10pt">https://www.grammarly.com/blog/what-is-the-oxford-comma-and-why-do-people-care-so-much-about-it/</a></span></div><div><br></div><div>In general, I don't think that adding more characters to the annotation bar is a good idea since its space is restricted so much already. Also, maybe a simpler representation would promote do-it scripting? :-) Such as through #splitBy:, which becomes more complicated with "," and "and".</div><div><br></div><div>Best,</div><div>Marcel</div><div class="mb_sig"></div>
<blockquote class="history_container" type="cite" style="border-left-style: solid;border-width: 1px;margin-top: 20px;margin-left: 0px;padding-left: 10px;min-width: 500px">
<p style="color: #AAAAAA; margin-top: 10px;">Am 01.11.2020 14:58:58 schrieb commits@source.squeak.org <commits@source.squeak.org>:</p><div style="font-family:Arial,Helvetica,sans-serif">Christoph Thiede uploaded a new version of Tools to project The Inbox:
<br>http://source.squeak.org/inbox/Tools-ct.1015.mcz
<br>
<br>==================== Summary ====================
<br>
<br>Name: Tools-ct.1015
<br>Author: ct
<br>Time: 1 November 2020, 3:58:41.62325 pm
<br>UUID: 0f1723d1-90c5-ca4e-88ad-56f6800b2b17
<br>Ancestors: Tools-tpr.1014
<br>
<br>Beautify CodeHolder >> #annotationForSelector:ofClass: implementation and output. Remove dangling separator character and add multilingual support.
<br>
<br>Example - before:
<br> mt 2/13/2020 13:49 · running · 2 implementors · in change sets: Morphic-pre.1466 Morphic-mt.1507 Morphic-mt.1607 Morphic-cmm.1617 Morphic-mt.1622 ·
<br>Example - after:
<br> mt 2/13/2020 13:49 · running · 2 implementors · in change sets: Morphic-pre.1466, Morphic-mt.1507, Morphic-mt.1607, Morphic-cmm.1617 and Morphic-mt.1622
<br>
<br>=============== Diff against Tools-tpr.1014 ===============
<br>
<br>Item was changed:
<br> ----- Method: CodeHolder>>annotationForSelector:ofClass: (in category 'annotation') -----
<br> annotationForSelector: aSelector ofClass: aClass
<br> "Provide a line of content for an annotation pane, representing
<br> information about the given selector and class"
<br> | separator aStream requestList |
<br> aSelector == #Comment
<br> ifTrue: [^ self annotationForClassCommentFor: aClass].
<br> aSelector == #Definition
<br> ifTrue: [^ self annotationForClassDefinitionFor: aClass].
<br> aSelector == #Hierarchy
<br> ifTrue: [^ self annotationForHierarchyFor: aClass].
<br> aStream := (String new: 512) writeStream.
<br> requestList := self annotationRequests.
<br>+ separator := self annotationSeparator.
<br>- separator := requestList size > 1
<br>- ifTrue: [self annotationSeparator]
<br>- ifFalse: [''].
<br> requestList
<br> do: [:aRequest | | aString sendersCount aComment aCategory implementorsCount aList stamp authorInitials |
<br> aRequest == #firstComment
<br> ifTrue: [aComment := aClass firstCommentAt: aSelector.
<br> aComment isEmptyOrNil
<br>+ ifFalse: [aStream nextPutAll: aComment]].
<br>- ifFalse: [aStream nextPutAll: aComment , separator]].
<br> aRequest == #masterComment
<br> ifTrue: [aComment := aClass supermostPrecodeCommentFor: aSelector.
<br> aComment isEmptyOrNil
<br>+ ifFalse: [aStream nextPutAll: aComment]].
<br>- ifFalse: [aStream nextPutAll: aComment , separator]].
<br> aRequest == #documentation
<br> ifTrue: [aComment := aClass precodeCommentOrInheritedCommentFor: aSelector.
<br> aComment isEmptyOrNil
<br>+ ifFalse: [aStream nextPutAll: aComment]].
<br>- ifFalse: [aStream nextPutAll: aComment , separator]].
<br> aRequest == #timeStamp
<br> ifTrue: [stamp := self timeStamp.
<br> aStream
<br>+ nextPutAll: (stamp ifEmpty: ['no timeStamp' translated])].
<br>- nextPutAll: (stamp size > 0
<br>- ifTrue: [stamp , separator]
<br>- ifFalse: ['no timeStamp' , separator])].
<br> aRequest == #author
<br> ifTrue: [authorInitials := self timeStamp
<br> findTokens ifEmpty: [''] ifNotEmpty: [:tokens | tokens first].
<br> aStream
<br> nextPutAll: (SystemNavigation authorsInverted
<br> at: authorInitials
<br> ifPresent: [:fullNames | fullNames anyOne]
<br> ifAbsent: ['unknown author']), separator].
<br> aRequest == #messageCategory
<br> ifTrue: [aCategory := aClass organization categoryOfElement: aSelector.
<br> aCategory
<br> ifNotNil: ["woud be nil for a method no longer present,
<br> e.g. in a recent-submissions browser"
<br>+ aStream nextPutAll: aCategory]].
<br>- aStream nextPutAll: aCategory , separator]].
<br> aRequest == #sendersCount
<br> ifTrue: [sendersCount := (self systemNavigation allCallsOn: aSelector) size.
<br> sendersCount := sendersCount = 1
<br>+ ifTrue: ['1 sender' translated]
<br>+ ifFalse: ['{1} senders' translated format: {sendersCount}].
<br>+ aStream nextPutAll: sendersCount].
<br>- ifTrue: ['1 sender']
<br>- ifFalse: [sendersCount printString , ' senders'].
<br>- aStream nextPutAll: sendersCount , separator].
<br> aRequest == #implementorsCount
<br> ifTrue: [implementorsCount := self systemNavigation numberOfImplementorsOf: aSelector.
<br> implementorsCount := implementorsCount = 1
<br>+ ifTrue: ['1 implementor' translated]
<br>+ ifFalse: ['{1} implementors' translated format: {implementorsCount}].
<br>+ aStream nextPutAll: implementorsCount].
<br>- ifTrue: ['1 implementor']
<br>- ifFalse: [implementorsCount printString , ' implementors'].
<br>- aStream nextPutAll: implementorsCount , separator].
<br> aRequest == #priorVersionsCount
<br> ifTrue: [self
<br> addPriorVersionsCountForSelector: aSelector
<br> ofClass: aClass
<br> to: aStream].
<br> aRequest == #priorTimeStamp
<br> ifTrue: [stamp := VersionsBrowser
<br> timeStampFor: aSelector
<br> class: aClass
<br> reverseOrdinal: 2.
<br> stamp
<br>+ ifNotNil: [aStream nextPutAll: 'prior time stamp: ' translated , stamp]].
<br>- ifNotNil: [aStream nextPutAll: 'prior time stamp: ' , stamp , separator]].
<br> aRequest == #recentChangeSet
<br> ifTrue: [aString := ChangesOrganizer mostRecentChangeSetWithChangeForClass: aClass selector: aSelector.
<br>+ aStream nextPutAll: aString].
<br>- aString size > 0
<br>- ifTrue: [aStream nextPutAll: aString , separator]].
<br> aRequest == #allChangeSets
<br> ifTrue: [aList := ChangesOrganizer allChangeSetsWithClass: aClass selector: aSelector.
<br>+ aList
<br>+ ifNotEmpty: [aList size = 1
<br>+ ifTrue: [aStream nextPutAll: 'only in change set ' translated]
<br>+ ifFalse: [aStream nextPutAll: 'in change sets: ' translated].
<br>+ aStream nextPutAll: (aList collect:
<br>+ [:changeSet | changeSet name]) asCommaStringAnd]
<br>+ ifEmpty: [aStream nextPutAll: 'in no change set' translated]]]
<br>+ separatedBy: [
<br>+ aStream nextPutAll: separator].
<br>- aList size > 0
<br>- ifTrue: [aList size = 1
<br>- ifTrue: [aStream nextPutAll: 'only in change set ']
<br>- ifFalse: [aStream nextPutAll: 'in change sets: '].
<br>- aList
<br>- do: [:aChangeSet | aStream nextPutAll: aChangeSet name , ' ']]
<br>- ifFalse: [aStream nextPutAll: 'in no change set'].
<br>- aStream nextPutAll: separator]].
<br> ^ aStream contents!
<br>
<br><br></div></blockquote></div>