<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<div id="divtagdefaultwrapper" 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;" dir="ltr">
<p>Hi all,</p>
<p><br>
</p>
<p>geez, I seem to have opened a can of worms with that change to the package browser. In the past, it was just a normal browser that splits up the system category into two parts. Now, I have -- yet inconsistently -- switched it to use the actual package artifacts.
 However, these package artifacts do not match the system categories-classes structure completely:</p>
<p><br>
</p>
<p></p>
<ul style="margin-bottom: 0px; margin-top: 0px;">
<li>A package may have system categories that do not have the package name as their prefixes. E.g., for package MyPackage, valid system categories include not only MyPackage-Core, but also MyPackage, MyPackageTests, and OurPackage.</li><li>A package may have extension methods that belong to extension classes that are not defined by the package itself.</li></ul>
<p></p>
<div id="divtagdefaultwrapper" 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;" dir="ltr">
<br>
</div>
So the question is, how should the package browser deal with these artifacts?</div>
<div id="divtagdefaultwrapper" 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;" dir="ltr">
<br>
</div>
<div id="divtagdefaultwrapper" style="" dir="ltr">
<ul style="margin-bottom: 0px; margin-top: 0px;">
<li style="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; font-size: 12pt;">
Should it rather mimic the <span>MCSnapshotBrowser as much as possible, including a display for extension methods?</span></li><li style="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; font-size: 12pt;">
<span>Or should it stick with the idea of a traditional browser, do not display extension methods, and</span>
<ul style="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; font-size: 12pt;">
<li><span>just show matching system categories?</span></li><li><span>or also show the system categories for all other classes contained in the package?</span></li></ul>
</li><li style="">Or should we better revert the recent change and stick with a "package browser" that is actually a "hierarchical system category browser"?</li><li style="">Or yet something else?</li></ul>
<div><br>
</div>
<div>If it helps, we can also add a "browse package snapshot" item to the package menu of browsers (similar to what Squit's commit dialog's #<span>browseOriginalEdition:</span> offers). This would bring up what I think Tobias was asking for:</div>
<div><br>
</div>
<div><span>(MCSnapshotBrowser forSnapshot: Morph packageInfo mcPackage snapshot) showLabelled: 'Snapshot of package'.</span><br>
</div>
<div><span><br>
</span></div>
<div><span><img size="45162" contenttype="image/png" id="img965165" style="max-width: 99.9%; user-select: none;" contextid="img655609" tabindex="0" src="cid:75ccafeb-262b-4858-abe3-bf42ac4b5b4a"><br>
</span></div>
<div><span><br>
</span></div>
<div><span>So, looking forward to your opinions and arguments!</span></div>
<div><span><br>
</span></div>
<div><span>Best,</span></div>
<div><span>Christoph</span></div>
<br>
<div style="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; font-size: 12pt;">
<div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von Tobias Pape <Das.Linux@gmx.de><br>
<b>Gesendet:</b> Montag, 12. September 2022 23:24 Uhr<br>
<b>An:</b> The general-purpose Squeak developers list<br>
<b>Betreff:</b> Re: [squeak-dev] The Trunk: Tools-ct.1173.mcz</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText"><br>
<br>
> On 12. Sep 2022, at 22:14, Thiede, Christoph <Christoph.Thiede@student.hpi.uni-potsdam.de> wrote:<br>
> <br>
> Hi Tobias, Hi Karl,<br>
> <br>
> > > I noticed a few packages are empty:<br>
> > > Etoys, MonticelloForTraits, MonticelloMocks, ST80Tools, SUnitsTools, WebClient-HTTP, XML-Explorer<br>
> > <br>
> > Yeah, these only carry extension methods…<br>
> <br>
> Yes. EToys is interesting, though, as it reveals that PackagePaneBrowser>>#systemCategoryList still uses an insufficient substring mechanism. I will revise that in the next few days. Sorry for the inconvenience.<br>
> <br>
> > …which you can _currently_ only find out via the monticello browser. :(<br>
> <br>
> There is "browse extensions" in the browsers' class list/package menu. :-)<br>
<br>
Which is _different_ from the way the monticello browser displays it…<br>
<br>
:D<br>
<br>
> <br>
> <pastedImage.png><br>
> <br>
> Best,<br>
> Christoph<br>
> Von: Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von Tobias Pape <Das.Linux@gmx.de><br>
> Gesendet: Montag, 12. September 2022 21:58:27<br>
> An: The general-purpose Squeak developers list<br>
> Betreff: Re: [squeak-dev] The Trunk: Tools-ct.1173.mcz<br>
>  <br>
> Hi<br>
> <br>
> <br>
> > On 12. Sep 2022, at 21:41, karl ramberg <karlramberg@gmail.com> wrote:<br>
> > <br>
> > <br>
> > I noticed a few packages are empty:<br>
> > Etoys, MonticelloForTraits, MonticelloMocks, ST80Tools, SUnitsTools, WebClient-HTTP, XML-Explorer<br>
> <br>
> Yeah, these only carry extension methods…<br>
> <br>
> …which you can _currently_ only find out via the monticello browser. :(<br>
> <br>
> Best regards<br>
>         -Tobias<br>
> <br>
> > <br>
> > Best,<br>
> > Karl<br>
> > <br>
> > On Mon, Sep 12, 2022 at 7:12 PM <commits@source.squeak.org> wrote:<br>
> > Christoph Thiede uploaded a new version of Tools to project The Trunk:<br>
> > <a href="http://source.squeak.org/trunk/Tools-ct.1173.mcz" id="LPlnk206214" previewremoved="true">
http://source.squeak.org/trunk/Tools-ct.1173.mcz</a><br>
> > <br>
> > ==================== Summary ====================<br>
> > <br>
> > Name: Tools-ct.1173<br>
> > Author: ct<br>
> > Time: 8 September 2022, 3:05:12.665836 pm<br>
> > UUID: f0fe2b64-b27c-6d4b-9670-d920d0580baf<br>
> > Ancestors: Tools-ct.1171<br>
> > <br>
> > Fixes package pane browser to actually use the package organizer instead of parsing the system category list. Resolves
<a href="https://github.com/squeak-smalltalk/squeak-object-memory/issues/28" id="LPlnk45486" previewremoved="true">
https://github.com/squeak-smalltalk/squeak-object-memory/issues/28</a>.<br>
> > <br>
> > =============== Diff against Tools-ct.1171 ===============<br>
> > <br>
> > Item was changed:<br>
> >   Browser subclass: #PackagePaneBrowser<br>
> > +       instanceVariableNames: 'packageOrganizer package packageListIndex packageList'<br>
> > -       instanceVariableNames: 'package packageListIndex packageList'<br>
> >         classVariableNames: ''<br>
> >         poolDictionaries: ''<br>
> >         category: 'Tools-Browser'!<br>
> > <br>
> > + !PackagePaneBrowser commentStamp: 'ct 9/8/2022 15:05' prior: 0!<br>
> > + A package browser represents a hierarchical query path through an organization of class and method information.   It nests classes into a two-level hierarchy that consists of the package (e.g., Kernel, FFI-Kernel) and the system category (e.g., Exception,
 Exceptions-Kernel; Support, empty).<br>
> > - !PackagePaneBrowser commentStamp: '<historical>' prior: 0!<br>
> > - A package browser represents a hierarchical query path through an organization of class and method information.   It parses class categories into a two-level hierarchy on the first '-' character, giving "packages" (e.g.,  Magnitude, Collections, Graphics,
 etc.), and "categories" (e.g., Magnitude-General and Magnitude-Number).<br>
> > <br>
> >   Instance Variables:<br>
> > +       packageOrganizer        <PackageOrganizer> the organizer of packages in the current environment<br>
> >         package  <Symbol> the "category header," e.g., #Magnitudes or #Collections<br>
> >         packageListIndex <Integer> The index in the package list<br>
> > +       packageList  <OrderedCollection of String> the list of package names!<br>
> > -       packageList  <OrderedCollection of String> the list of package names<br>
> > - !<br>
> > <br>
> > Item was added:<br>
> > + ----- Method: PackagePaneBrowser>>initialize (in category 'initialize-release') -----<br>
> > + initialize<br>
> > + <br>
> > +       super initialize.<br>
> > +       <br>
> > +       self packageOrganizer: self environment packageOrganizer.!<br>
> > <br>
> > Item was changed:<br>
> >   ----- Method: PackagePaneBrowser>>packageList (in category 'package list') -----<br>
> >   packageList<br>
> > -       "Answer a list of the packages in the current system organization."<br>
> > <br>
> > +       ^ self packageOrganizer packageNames sorted!<br>
> > -       | str stream |<br>
> > -       str := Set new: 100.<br>
> > -       stream := WriteStream on: (Array new: 100).<br>
> > -       systemOrganizer categories do:<br>
> > -               [ :categ | | cats | <br>
> > -               cats := categ asString copyUpTo: $-.<br>
> > -               (str includes: cats) ifFalse: <br>
> > -                       [str add: cats.<br>
> > -                       stream nextPut: cats]].<br>
> > -       ^stream contents!<br>
> > <br>
> > Item was added:<br>
> > + ----- Method: PackagePaneBrowser>>packageOrganizer (in category 'accessing') -----<br>
> > + packageOrganizer<br>
> > + <br>
> > +       ^ packageOrganizer!<br>
> > <br>
> > Item was added:<br>
> > + ----- Method: PackagePaneBrowser>>packageOrganizer: (in category 'initialize-release') -----<br>
> > + packageOrganizer: aPackageOrganizer<br>
> > + <br>
> > +       packageOrganizer := aPackageOrganizer.<br>
> > +       <br>
> > +       self systemOrganizer: self systemOrganizer. "reset selections"!<br>
> > <br>
> > Item was added:<br>
> > + ----- Method: PackagePaneBrowser>>selectEnvironment: (in category 'accessing') -----<br>
> > + selectEnvironment: anEnvironment<br>
> > + <br>
> > +       super selectEnvironment: anEnvironment.<br>
> > +       self packageOrganizer: anEnvironment packages.!<br>
> > <br>
> > <br>
> > <br>
> <br>
> <br>
> <br>
> <pastedImage.png><br>
<br>
<br>
<br>
</div>
</span></font></div>
</div>
</div>
</body>
</html>