class: DoWhatIMeanSupport
authorClaus Gittinger <cg@exept.de>
Wed, 09 Oct 2013 18:15:38 +0200
changeset 4433 8deabc9f374f
parent 4432 4b132f377d09
child 4434 b15ce7d47dd8
class: DoWhatIMeanSupport changed: #classOfNode: #codeCompletionForVariable:into: better weight for class variables
DoWhatIMeanSupport.st
--- a/DoWhatIMeanSupport.st	Wed Oct 09 12:12:11 2013 +0200
+++ b/DoWhatIMeanSupport.st	Wed Oct 09 18:15:38 2013 +0200
@@ -1743,6 +1743,10 @@
         "/ some hardwired knowlegde here
         receiverClass := self classOfNode:nodeReceiver.
         receiverClass notNil ifTrue:[
+            nodeSelector == #class ifTrue:[
+                ^ receiverClass class
+            ].
+
             receiverClass isBehavior ifTrue:[
                 mthd := receiverClass lookupMethodFor:nodeSelector.
                 receiverClass isMeta ifTrue:[
@@ -2896,14 +2900,14 @@
             classOrNil notNil ifTrue:[
                 "/ private classes
                 addWithFactorBlock value:(nonMetaClass privateClasses collect:[:cls | cls nameWithoutPrefix])
-                                   value:(1.75 * globalFactor).
+                                   value:(2.75 * globalFactor).
 
                 "/ class variables
                 names := nonMetaClass classVarNames.
                 responders := names select:[:classVar | (nonMetaClass classVarAt:classVar) respondsTo:selectorOfMessageToNode].
                 nonResponders := names reject:[:classVar | (nonMetaClass classVarAt:classVar) respondsTo:selectorOfMessageToNode].
 
-                addWithFactorBlock value:responders value:(1.5 * globalFactor).
+                addWithFactorBlock value:responders value:(3.0 * globalFactor).
                 addWithFactorBlock value:nonResponders value:(0.5 * 1.5 * globalFactor).
 
                 "/ superclass var names
@@ -2912,7 +2916,7 @@
                     responders := names select:[:classVar | (superClass classVarAt:classVar) respondsTo:selectorOfMessageToNode].
                     nonResponders := names reject:[:classVar | (superClass classVarAt:classVar) respondsTo:selectorOfMessageToNode].
 
-                    addWithFactorBlock value:responders value:(1 * globalFactor).
+                    addWithFactorBlock value:responders value:(2.75 * globalFactor).
                     addWithFactorBlock value:nonResponders value:(0.5 * 1 * globalFactor).
                 ].
 
@@ -2934,6 +2938,7 @@
                             [:nm | 
                                 (nm includes:$:) and:[ (Smalltalk at:nm) isBehavior not]
                             ].
+            names := names reject:[:nm | nm startsWith:'Undeclared:::' ].
 
             names := names select:[:nm | nm isUppercaseFirst ] as:OrderedCollection.
             responders := names select:[:glblVar | |c| c := Smalltalk at:glblVar. c isBehavior not or:[c isLoaded and:[c respondsTo:selectorOfMessageToNode]]].
@@ -2959,18 +2964,26 @@
             classOrNil notNil ifTrue:[
                 "/ private classes
                 addWithFactorBlock value:(nonMetaClass privateClasses collect:[:cls | cls nameWithoutPrefix])
-                                   value:(1.75 * globalFactor).
+                                   value:(2.75 * globalFactor).
 
                 "/ class variables
-                addWithFactorBlock value:nonMetaClass classVarNames value:(2.0 * globalFactor).
+                addWithFactorBlock value:nonMetaClass classVarNames value:(3.0 * globalFactor).
                 classOrNil superclass notNil ifTrue:[
-                    addWithFactorBlock value:nonMetaClass superclass allClassVarNames value:(2.0 * globalFactor).
+                    addWithFactorBlock value:nonMetaClass superclass allClassVarNames value:(2.5 * globalFactor).
                 ].
 
                 "/ namespace vars
+                classOrNil topNameSpace ~~ Smalltalk ifTrue:[
+                    names := classOrNil topNameSpace keys.
+                    names := names reject:[:nm | nm includes:$:].
+                    names := names select:[:nm | nm isUppercaseFirst ].
+                    addWithFactorBlock value:names value:(2.5 * globalFactor).
+                ].
+                "/ namespace vars
                 classOrNil nameSpace ~~ Smalltalk ifTrue:[
                     names := classOrNil nameSpace isNameSpace ifTrue:[classOrNil nameSpace keys] ifFalse:[classOrNil nameSpace privateClasses collect:[:c | c nameWithoutPrefix]].
                     names := names select:[:nm | nm isUppercaseFirst ].
+                    names := names reject:[:nm | nm includes:$:].
                     addWithFactorBlock value:names value:(2.5 * globalFactor).
                 ].
 
@@ -2987,6 +3000,9 @@
             "/ globals
             names := Smalltalk keys.
             names := names select:[:nm | nm isUppercaseFirst ].
+            names := names reject:[:nm | nm startsWith:'Undeclared:::' ].
+            names := names reject:[:nm | (nm includes:$:) and:[ (nm includesString:'::') not]].
+
             "/ only consider all globals, if the first char of the completed name is uppercase;
             "/ otherwise, only consider names with a caseInsensitve prefix match
             nm first isUppercase ifTrue:[
@@ -2995,13 +3011,6 @@
                 names := names select:[:globalName | globalName asLowercase startsWith: nm].
             ].
             addWithFactorBlock value:names value:(1.5 * globalFactor).
-            "/ namespace vars
-            classOrNil topNameSpace ~~ Smalltalk ifTrue:[
-                names := classOrNil topNameSpace keys.
-                names := names reject:[:nm | nm includes:$:].
-                names := names select:[:nm | nm isUppercaseFirst ].
-                addWithFactorBlock value:names value:(2.5 * globalFactor).
-            ].
         ].
 
         "/ pseudos - assuming that thisContext is seldom used.
@@ -3053,13 +3062,22 @@
         ].
     ].
     allTheBest size > 15 ifTrue:[
-        "/ remove all those which are below some threshold
-        0.4 to:0.8 by:0.1 do:[:delta |
+        "/ remove all those which are below some threshold or are a prefix
+        0.4 to:0.9 by:0.1 do:[:delta |
             "/ if still too many, remove more and more
             allTheBest size > 15 ifTrue:[
                 allTheBest := allDistances select:[:entry | (entry key startsWith:nm) or:[ entry value >= (bestAssoc value * delta) ]].
             ]
         ].
+        allTheBest size > 15 ifTrue:[
+            "/ remove all those which are below some threshold
+            0.4 to:0.9 by:0.1 do:[:delta |
+                "/ if still too many, remove more and more
+                allTheBest size > 15 ifTrue:[
+                    allTheBest := allDistances select:[:entry | entry value >= (bestAssoc value * delta) ].
+                ]
+            ].
+        ].
     ].
     suggestions := allTheBest collect:[:assoc | assoc key].
 
@@ -4529,10 +4547,10 @@
 !DoWhatIMeanSupport class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.180 2013-10-08 15:20:10 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.181 2013-10-09 16:15:38 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.180 2013-10-08 15:20:10 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.181 2013-10-09 16:15:38 cg Exp $'
 ! !