[squeak-dev] The Trunk: ToolBuilder-Kernel-mt.129.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Aug 2 07:42:26 UTC 2019


Marcel Taeumel uploaded a new version of ToolBuilder-Kernel to project The Trunk:
http://source.squeak.org/trunk/ToolBuilder-Kernel-mt.129.mcz

==================== Summary ====================

Name: ToolBuilder-Kernel-mt.129
Author: mt
Time: 2 August 2019, 9:42:26.409893 am
UUID: 599e842a-df92-144c-9a4e-a2ad7d0a5664
Ancestors: ToolBuilder-Kernel-ul.128

Complements System-mt.1077.

=============== Diff against ToolBuilder-Kernel-ul.128 ===============

Item was changed:
  ----- Method: UIManager>>classOrTraitFrom:pattern:label: (in category 'system introspecting') -----
  classOrTraitFrom: environment pattern: pattern label: label
- 	"Given a pattern and an environment, try to find a class or trait using several strategies:
- 		- EXACT: If there is a class or trait whose name exactly given by pattern, return it.
- 		- UPPER: If the pattern is upper-case only, find camel-case letters with that sequence.
- 		- WILD: Try the pattern as-is for regular wild-card search.
- 		- FEATURE: Split patterns at feature boundaries and insert wild cards between.
- 		- FUZZY: Split patterns at feature boundaries BUT treat each feature as a full class name.
- 	If there is only one class or trait in the given environment whose name matches pattern, return it. Otherwise, put up a menu offering the names of all classes that match pattern, and return the class chosen, else nil if nothing chosen.
  	
+ 	^ ((SystemNavigation for: environment) allClassesAndTraitsMatching: pattern)
+ 		ifEmpty: [nil]
+ 		ifNotEmpty: [:results |
+ 			results size = 1
+ 				ifTrue: [results first]
+ 				ifFalse: [self
+ 							chooseFrom: (results collect: [:each | each name])
+ 							values: results
+ 							title: label]]!
- 	!!!! In any case, separator characters in the pattern are ignored."
- 	
- 	| toMatch potentialNames names selectedIndex |
- 	
- 	"If there's a class or trait named as pattern, then return it."
- 	(environment classOrTraitNamed: pattern) ifNotNil: [:classOrTrait | ^ classOrTrait].
- 
- 	"Validate pattern."	
- 	toMatch := pattern copyWithoutAll: Character separators.
- 	toMatch := toMatch asLowercase copyWithout: $..
- 	toMatch ifEmpty: [ ^nil ].
- 
- 	"Fetch search space."
- 	names := OrderedCollection new.
- 	potentialNames := environment classAndTraitNames.
- 
- 	"Try uppercase-only patterns for patterns such as 'WKD' to find 'WeakIdentityKeyDictionary' etc."
- 	(pattern allSatisfy: [:char | char isUppercase]) ifTrue: [
- 		| patternSize |
- 		patternSize := pattern size.
- 		potentialNames do: [ :eachName | 
- 			| lookupIndex characterIndex |
- 			lookupIndex := 0.
- 			characterIndex := 1.
- 			[ (lookupIndex := eachName
- 					indexOf: (pattern at: characterIndex)
- 					startingAt: lookupIndex + 1) > 0
- 				and: [ (characterIndex := characterIndex + 1) <= patternSize ] ] whileTrue.
- 			lookupIndex > 0 ifTrue: [ names add: eachName ] ] ].
- 	
- 	"Try wildcard search for patterns such as 'Weak*Dict*' to find 'WeakIdentityKeyDictionary' etc."
- 	names ifEmpty: [
- 		potentialNames do: [ :each | (toMatch match: each) ifTrue: [ names add: each ] ].
- 		"Try feature-based search for patterns such as 'WeakDict' to find 'WeakIdentityKeyDictionary' etc."
- 		names ifEmpty: [
- 			"1) Insert wildcards between features and at the end."
- 			toMatch := ((pattern copyWithoutAll: '.*#') findFeatures joinSeparatedBy: '*'), '*'.
- 			potentialNames do: [ :each | (toMatch match: each) ifTrue: [ names add: each ] ].
- 			names ifEmpty: [	
- 				"2) Insert wildcards before, between, and after features."
- 				toMatch := '*', toMatch.
- 				potentialNames do: [ :each | (toMatch match: each) ifTrue: [ names add: each ] ] ] ] ].
- 	
- 	"Try some fuzzy matching."
- 	pattern suggestedTypeNames do: [ :each |
- 		(potentialNames includes: each) ifTrue: [ names add: each ] ].
- 	
- 	"Still no match?"
- 	names ifEmpty: [ ^nil ].
- 
- 	"Let the user select if there's more than one possible match. This may give surprising results."	
- 	selectedIndex := names size = 1
- 		ifTrue: [ 1 ]
- 		ifFalse: [ self chooseFrom: names title: label ].
- 	selectedIndex = 0 ifTrue: [ ^nil ].
- 	^environment at: (names at: selectedIndex) asSymbol!



More information about the Squeak-dev mailing list