Search code examples
pharo

How to make a Package with subgroups in Pharo 9


In Pharo 9, how do I create a package that has a hierarchy of sub-packages like in "Announcements-Core" where there is an expanding and collapsing arrow?

Pharo 9 package Announcements-Core showing hierarchy

I thought that it might be based on the names of the packages but when I tried with the following messages to create two classes they just show up as separate packages. What I want is for there to be a package "T-base" that has sub packages "type1" and "type2"?

Object subclass: #T1 instanceVariableNames: '' classVariableNames: '' package: 'T-base-type1'
Object subclass: #T2 instanceVariableNames: '' classVariableNames: '' package: 'T-base-type2'

Solution

  • To add to Leandro's answer, to do this in smalltalk code you can do this:

    t1 := Object subclass: #T1 
                 instanceVariableNames: '' 
                 classVariableNames: '' 
                 package: 'T-base-type1'.
    
    t2 := Object subclass: #T2 
                 instanceVariableNames: '' 
                 classVariableNames: '' 
                 package: 'T-base-type2'.
    
    t1 class package addClassDefinition: t1 toClassTag: #type1.
    t2 class package addClassDefinition: t2 toClassTag: #type2.
    

    t1 class package gives you the RPackage instance and you can then add the class to a tag. I also found that you need to have the final part of the package name (eg. type1) be the same as the tag name, otherwise there is an error that the class is "uncategorized".

    There is another way as well: You can create the class without the final part of the package name and then send the category: message to the class to add it on

    t1 := Object subclass: #T1 
                 instanceVariableNames: '' 
                 classVariableNames: '' 
                 package: 'T-base'.
    
    t1 category: 'T-base-type1'.