<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p>Hi Marcel,</p>
<p><br>
</p>
<p>thanks for the feedback! I'm currently continuing the refactoring of this method anyway, so this version can be moved to the treated inbox of course.</p>
<p><br>
</p>
<p>Yes, I think #asCommaStringAnd should be fixed (even though the oxford comma appears not to be the universal truth because, in certain scenarios, it can also add ambiguity - see <a href="https://en.wikipedia.org/wiki/Serial_comma#Creating_ambiguity" class="OWAAutoLink" id="LPlnk777483" previewremoved="true">https://en.wikipedia.org/wiki/Serial_comma#Creating_ambiguity</a>,
 but it is being widely accepted). Will upload a patch right now. :-)</p>
<p><br>
</p>
<p>> <span>In general, I don't think that adding more characters to the annotation bar is a good idea</span></p>
<p><span><br>
</span></p>
<p><span>Fair points. Will return to the single comma-separation in the next upload.</span></p>
<p><span><br>
</span></p>
<p><span>Please note that the "and" was not the only part of the output beautification. I also removed the trailing separator character. :-)</span></p>
<p><span><br>
</span></p>
<p>Best,</p>
<p>Christoph</p>
<div id="Signature">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<div name="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:; margin:0">
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von Taeumel, Marcel<br>
<b>Gesendet:</b> Donnerstag, 11. März 2021 09:04:08<br>
<b>An:</b> squeak-dev<br>
<b>Betreff:</b> Re: [squeak-dev] The Inbox: Tools-ct.1015.mcz</font>
<div> </div>
</div>
<div>
<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>
</div>
</body>
</html>