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 = $_]]]]]]