[squeak-dev] The Trunk: Compiler-nice.427.mcz

David T. Lewis lewis at mail.msen.com
Fri May 8 22:52:30 UTC 2020


Oui, mais je suis délecté de vos contributions.

Dave


On Fri, May 08, 2020 at 07:09:57PM +0200, Nicolas Cellier wrote:
> Bah, it's impossible for me to have an English sentence right at first shot.
> I let a delection typo.
> Surely a form of negative selection...
> I hope you'll be delected, a frenchism for delighted
> https://www.wordreference.com/fren/delecter
> 
> Le ven. 8 mai 2020 ?? 19:00, <commits at source.squeak.org> a ??crit :
> 
> > Nicolas Cellier uploaded a new version of Compiler to project The Trunk:
> > http://source.squeak.org/trunk/Compiler-nice.427.mcz
> >
> > ==================== Summary ====================
> >
> > Name: Compiler-nice.427
> > Author: nice
> > Time: 8 May 2020, 6:59:54.689381 pm
> > UUID: e2c7d4b2-b79d-4d02-a576-872003ec88ed
> > Ancestors: Compiler-ct.426
> >
> > Avoid sending select/deselect to the editor in case of interactive
> > correction.
> >
> > These are st80 specific, forcing Morphic to have stubs, and are considered
> > too intrusive: we should better let such responsibility to the editor,
> > that's its own business.
> >
> > The send of #select was un-necessary anyway, because selectFrom:to: will
> > send #selectAndScroll, which will send #select.
> >
> > However, deselect was still required for st80, so replace the sequence
> > deselect; selectInvisiblyFrom:to: with a single message
> > #selectIntervalInvisibly: which is provided by ST80-nice.254 and
> > Morphic-nice.1657.
> >
> > Why is this needed? As explained in the st80 commit, we want to restore
> > the (eventually slightly modified) user selection once the corrections are
> > performed.
> >
> > We must do that at each correction, so as to correctly track addition or
> > delection of characters (the selection interval might need to grow or
> > shrink accordingly).
> >
> > But we do not want to make the user selection visible instantly, otherwise
> > the selection will go back to user selection and forth to next zone of
> > interactive correction repeatedly creating an annoying flashing effect.
> >
> > Care to let future reader know about it with a comment, there's nothing
> > that obvious which could make the comment superfluous!
> >
> > =============== Diff against Compiler-ct.426 ===============
> >
> > Item was changed:
> >   ----- Method: Parser>>ambiguousSelector:inRange: (in category 'error
> > correction') -----
> >   ambiguousSelector: aString inRange: anInterval
> > +       | correctedSelector userSelection intervalWithOffset |
> > -       | correctedSelector userSelection offset intervalWithOffset |
> >
> >         self interactive ifFalse: [
> >                 "In non interactive mode, compile with backward
> > comapatibility: $- is part of literal argument"
> >                 Transcript cr; store: encoder classEncoding;
> > nextPutAll:#'>>';store: encoder selector; show: ' would send ' , token ,
> > '-'.
> >                 ^super ambiguousSelector: aString inRange: anInterval].
> >
> >         "handle the text selection"
> >         userSelection := cue requestor selectionInterval.
> >         intervalWithOffset := anInterval first + requestorOffset to:
> > anInterval last + requestorOffset.
> >         cue requestor selectFrom: intervalWithOffset first to:
> > intervalWithOffset last.
> > -       cue requestor select.
> >
> >         "Build the menu with alternatives"
> >         correctedSelector := AmbiguousSelector
> >                         signalName: aString
> >                         inRange: intervalWithOffset.
> >         correctedSelector ifNil: [^self fail].
> >
> > +       "Restore the user selection state, but do not display selection yet
> > +        This will avoid flashing effect when chaining multiple
> > corrections."
> > +       cue requestor selectIntervalInvisibly: userSelection.
> > +
> >         "Execute the selected action"
> > +       self substituteWord: correctedSelector wordInterval:
> > intervalWithOffset offset: 0.
> > -       offset := self substituteWord: correctedSelector wordInterval:
> > intervalWithOffset offset: 0.
> > -       cue requestor deselect.
> > -       cue requestor selectInvisiblyFrom: userSelection first to:
> > userSelection last + offset.
> >         token := (correctedSelector readStream upTo: Character space)
> > asSymbol!
> >
> > Item was changed:
> >   ----- Method:
> > Parser>>correctSelector:wordIntervals:exprInterval:ifAbort: (in category
> > 'error correction') -----
> >   correctSelector: proposedKeyword wordIntervals: spots exprInterval:
> > expInt ifAbort: abortAction
> >         "Correct the proposedKeyword to some selector symbol, correcting
> > the original text if such action is indicated.  abortAction is invoked if
> > the proposedKeyword couldn't be converted into a valid selector.  Spots is
> > an ordered collection of intervals within the test stream of the for each
> > of the keyword parts."
> >
> >         | correctSelector userSelection |
> >         "If we can't ask the user, assume that the keyword will be defined
> > later"
> >         self interactive ifFalse: [^proposedKeyword asSymbol].
> >
> >         userSelection := cue requestor selectionInterval.
> >         cue requestor selectFrom: spots first first to: spots last last.
> > -       cue requestor select.
> >
> >         correctSelector := UnknownSelector name: proposedKeyword.
> >         correctSelector ifNil: [^abortAction value].
> >
> > +       "Restore the user selection state, but do not display selection yet
> > +        This will avoid flashing effect when chaining multiple
> > corrections."
> > +       cue requestor selectIntervalInvisibly: userSelection.
> > -       cue requestor deselect.
> > -       cue requestor selectInvisiblyFrom: userSelection first to:
> > userSelection last.
> >
> >         self substituteSelector: correctSelector keywords wordIntervals:
> > spots.
> >         ^(proposedKeyword last ~~ $:
> >            and: [correctSelector last == $:])
> >                 ifTrue: [abortAction value]
> >                 ifFalse: [correctSelector]!
> >
> > Item was changed:
> >   ----- Method: Parser>>correctVariable:interval: (in category 'error
> > correction') -----
> >   correctVariable: proposedVariable interval: spot
> >         "Correct the proposedVariable to a known variable, or declare it
> > as a new
> >         variable if such action is requested.  We support declaring
> > lowercase
> >         variables as temps or inst-vars, and uppercase variables as
> > Globals or
> >         ClassVars, depending on whether the context is nil
> > (class=UndefinedObject).
> >         Spot is the interval within the test stream of the variable.
> >         rr 3/4/2004 10:26 : adds the option to define a new class. "
> >
> >         "Check if this is an i-var, that has been corrected already (ugly)"
> >
> >         "Display the pop-up menu"
> >
> >         | binding userSelection action |
> >         (encoder classEncoding instVarNames includes: proposedVariable)
> > ifTrue:
> >                 [^InstanceVariableNode new
> >                         name: proposedVariable
> >                         index: (encoder classEncoding allInstVarNames
> > indexOf: proposedVariable)].
> >
> >         "First check to see if the requestor knows anything about the
> > variable"
> >         (binding := cue requestor ifNotNil: [:object | object bindingOf:
> > proposedVariable])
> >                 ifNotNil: [^encoder global: binding name:
> > proposedVariable].
> >
> >         "If we can't ask the user for correction, make it undeclared"
> >         self interactive ifFalse: [^encoder undeclared: proposedVariable].
> >
> >         userSelection := cue requestor selectionInterval.
> >         cue requestor selectFrom: spot first to: spot last.
> > -       cue requestor select.
> >
> >         "Build the menu with alternatives"
> >         action := UndeclaredVariable
> >                                 signalFor: self
> >                                 name: proposedVariable
> >                                 inRange: spot.
> >         action ifNil: [^self fail].
> >
> > +       "Restore the user selection state, but do not display selection yet
> > +        This will avoid flashing effect when chaining multiple
> > corrections."
> > +       cue requestor selectIntervalInvisibly: userSelection.
> > +
> >         "Execute the selected action"
> > -       cue requestor deselect.
> > -       cue requestor selectInvisiblyFrom: userSelection first to:
> > userSelection last.
> >         ^action value!
> >
> > Item was changed:
> >   ----- Method: Parser>>queryUndefined (in category 'error correction')
> > -----
> >   queryUndefined
> >         | varStart varName |
> >         varName := parseNode key.
> >         varStart := self endOfLastToken + requestorOffset - varName size +
> > 1.
> > +       cue requestor selectFrom: varStart to: varStart + varName size - 1.
> > -       cue requestor selectFrom: varStart to: varStart + varName size -
> > 1; select.
> >         (UndefinedVariable name: varName) ifFalse: [^ self fail]!
> >
> > Item was changed:
> >   ----- Method: Parser>>substituteSelector:wordIntervals: (in category
> > 'error correction') -----
> >   substituteSelector: selectorParts wordIntervals: spots
> > +       "Substitute the correctSelector into the (presumed interactive)
> > receiver."
> > -       "Substitute the correctSelector into the (presuamed interactive)
> > receiver."
> >         | offset |
> >         offset := 0.
> >         selectorParts with: spots do:
> >                 [ :word :interval |
> >                 offset := self substituteWord: word wordInterval: interval
> > offset: offset ]
> >   !
> >
> >
> >

> 



More information about the Squeak-dev mailing list