Hi,

due to the absence of a namespace solution we today often prefix classes with 
one, two or three letters.
You all know prefixes like "Zn", "Zdc", "GLM", "Tx", "WA", ... to avoid 
conflicting names.

I would like to have a "::" separator within the class name to better 
distinguish 
the class name from the prefix and increase readability at the same time. 
SmalltalkMT
had this solution in alignment with C++ and I really liked working with it.
So much that I would like to see it in Pharo too - maybe also as a base for 
future Namespace
additions.

So I modified the #isValidGlobalName in Pharo 6.0 like mentioned below to allow 
and support 
the :: notation for classes. After that I can create classes like:

  Seaside::Component
  Core::Boolean
  Model::Person
  GLM::BrickListModel
  Tx::FontAttribute

so far without any problem. 

Do you think 
 - there will be places where this conflicts or creates hazzles (tools, 
metacello, ...)
 - if it would be a good idea to add this to the default image?

Thanks for feedback.

Thx
T.

--------------------------------------------------------------------------------------------------
isValidGlobalName

        self ifEmpty: [ ^ false ].
        
        "reserverd default names"
        self = 'NameOfSubclass' ifTrue: [ ^ false ].
        self = 'TNameOfTrait' ifTrue: [ ^ false ].

        (self occurrencesOf: $:) = 2 ifTrue: [ 
                        ^(self splitOn: '::') allSatisfy: [: part | part 
isValidGlobalName ]
        ].

        ^ Character supportsNonASCII    
                ifTrue: [ 
                        (self first isLetter 
                                and: [self first isUppercase]) 
                                and: [ self allSatisfy: [:character | 
                                                character isAlphaNumeric or: [ 
character = $_ ]]]]              
                ifFalse: [ 
                        (self first between: $A and: $Z) and: [  
                                self allSatisfy: [:character |
                                        (character between: $a and: $z) or: [
                                        (character between: $A and: $Z) or: [ 
                                        (character between: $0 and: $9) or: [
                                        character = $_]]]]]]

Reply via email to