--- a/DoWhatIMeanSupport.st Wed Jul 24 15:49:10 2013 +0200
+++ b/DoWhatIMeanSupport.st Wed Jul 24 21:33:04 2013 +0200
@@ -2866,7 +2866,7 @@
newParts nSelParts oldLen newLen selectorParts
findBest parentNode selectorInBest selector2InBest2
parser selectorsSentInCode split
- varName rbTypes rbType|
+ varName rbTypes rbType tryParent parentIsKeywordMessage|
RefactoryTyper notNil ifTrue:[
"/ refactory package also provides a (very limited) typer;
@@ -2929,28 +2929,38 @@
parentNode := node parent.
+ parentIsKeywordMessage :=
+ (parentNode notNil
+ and:[ parentNode isMessage
+ and:[ parentNode selector isKeywordSelector]]).
+
+ tryParent := false.
"/ if its a unary message AND the parent is a keyword node, look for parent completion too.
- (node selector isUnarySelector
- and:[ parentNode notNil
- and:[ parentNode isMessage
- and:[ (selector2 := parentNode selector) isKeywordSelector ]]]) ifTrue:[
- "/ srchClass2 := self lookupClassForMessage:parentNode inClass:classOrNil.
- selector2 := selector2,selector.
- bestSelectors2 := findBest value:parentNode value:selector2.
+ (node selector isUnarySelector and:[ parentIsKeywordMessage ]) ifTrue:[
+ tryParent := true.
] ifFalse:[
"/ also, if nothing was found
(bestSelectors isEmpty
and:[ parentNode notNil
and:[ parentNode isMessage ]]) ifTrue:[
"/ srchClass2 := self lookupClassForMessage:parentNode inClass:classOrNil.
+ "/ selector2 := parentNode selector.
"/ selector2 := selector2,selector.
bestSelectors := findBest value:parentNode value:selector.
]
- ].
-
+ ].
+ tryParent ifTrue:[
+ selector2 := parentNode selector,selector.
+ bestSelectors2 := findBest value:parentNode value:selector2.
+ ].
bestSelectors := (bestSelectorsFromRB ? #()) , bestSelectors.
+ "/ if the parent is a keyword selector, the child cannot
+ parentIsKeywordMessage ifTrue:[
+ bestSelectors := bestSelectors reject:[:sel | sel isKeywordSelector]
+ ].
+
bestSelectors2 isEmptyOrNil ifTrue:[
allBest := bestSelectors.
] ifFalse:[
@@ -3045,6 +3055,7 @@
best ~= selector ifTrue:[
numArgs := best numArgs.
+
(bestSelectors2 notEmptyOrNil and:[bestSelectors2 includes:best]) ifTrue:[
selectorParts := parentNode selectorParts , node selectorParts.
] ifFalse:[
@@ -3089,9 +3100,13 @@
start := oldPartialToken start.
stop := oldPartialToken stop.
- (best endsWith:$:) ifTrue:[
- (codeView characterAtCharacterPosition:stop+1) == $: ifFalse:[
+ (best isKeywordSelector) ifTrue:[
+ (oldPartialToken value endsWith:$:) ifTrue:[
newPart := newPart , ':'
+ ] ifFalse:[
+ (codeView characterAtCharacterPosition:stop+1) == $: ifFalse:[
+ newPart := newPart , ':'
+ ]
]
] ifFalse:[
(codeView characterAtCharacterPosition:stop) == $: ifTrue:[
@@ -3110,12 +3125,15 @@
codeView replaceFromCharacterPosition:start to:stop with:newPart.
- oldLen := stop - start + 1.
- newLen := newPart size.
-
"/ codeView selectFromCharacterPosition:start+oldLen to:start+newLen-1.
- newCursorPosition := stop + (newLen-oldLen).
+ newCursorPosition isNil ifTrue:[
+ oldLen := stop - start + 1.
+ newLen := newPart size.
+
+ newCursorPosition := stop + (newLen-oldLen)
+ ].
].
+
codeView cursorToCharacterPosition:newCursorPosition.
codeView cursorRight. "/ avoid going to the next line !!
((best endsWith:':') and:[numArgs == 1]) ifTrue:[
@@ -3489,10 +3507,10 @@
!DoWhatIMeanSupport class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.109 2013-07-24 10:41:24 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.110 2013-07-24 19:33:04 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.109 2013-07-24 10:41:24 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.110 2013-07-24 19:33:04 cg Exp $'
! !