[squeak-dev] The Trunk: Compiler-nice.427.mcz
Nicolas Cellier
nicolas.cellier.aka.nice at gmail.com
Fri May 8 22:47:40 UTC 2020
Le ven. 8 mai 2020 à 22:07, Nicolas Cellier <
nicolas.cellier.aka.nice at gmail.com> a écrit :
> Yes, I'm fixing Tests-ct.429 now.
> How could we rewrite (text allRangesOfRegexMatches: '(?<=\^ )goo') first
> without importing Regex-Core-ct.56?
>
Nevermind, I imported that too.
I'm not a regex expert, but lookahead/behind are good changes/additions.
>
> Le ven. 8 mai 2020 à 21:17, Thiede, Christoph <
> Christoph.Thiede at student.hpi.uni-potsdam.de> a écrit :
>
>> Hi Nicolas,
>>
>>
>> thank you for merging my commits! But why did you reject the
>> #selectFrom:to:during: if you like it? Also, #testUndefinedVariable from Tests-ct.429
>> still fails (all the tests need to be adjusted to your Compiler changes,
>> but you can even reproduce the second example manually). And yes, adding
>> some comments sounds like a good idea :-)
>>
>>
>> I rejected it before I saw your changes. Now it's back :)
> Best,
>>
>> Christoph
>>
>>
>> ------------------------------
>> *Von:* Squeak-dev <squeak-dev-bounces at lists.squeakfoundation.org> im
>> Auftrag von Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com>
>> *Gesendet:* Freitag, 8. Mai 2020 20:59:57
>> *An:* The general-purpose Squeak developers list
>> *Betreff:* Re: [squeak-dev] The Trunk: Compiler-nice.427.mcz
>>
>> Hi Christoph,
>> yes, I see that now, you were on the same track a bit sooner.
>> I did not want to correct anything, just simplify the accumulated cruft
>> that prevents me finding a bug, so we came on the same track by 2 different
>> paths.
>> It's funny, I first considered introducing exactly that
>> selectFrom:to:during: but on the editor side, which was not a so great idea
>> and made me renounce for a simpler change. I still like it at Parser side,
>> it could help factoring some more code (and explanation about why we need
>> to select invisibly).
>>
>> Le ven. 8 mai 2020 à 19:12, Thiede, Christoph <
>> Christoph.Thiede at student.hpi.uni-potsdam.de> a écrit :
>>
>>> Hi Nicolas,
>>>
>>>
>>> I did not yet study your full commit, but this introduces a conflict
>>> with Compiler-ct.423 from the Inbox. See also Morphic-ct.1640 and Tests-ct.429,
>>> both still in the Inbox. Would be nice if someone could review them before
>>> the merge conflicts get even worse. :-)
>>>
>>>
>>> Best,
>>>
>>> Christoph
>>> ------------------------------
>>> *Von:* Squeak-dev <squeak-dev-bounces at lists.squeakfoundation.org> im
>>> Auftrag von commits at source.squeak.org <commits at source.squeak.org>
>>> *Gesendet:* Freitag, 8. Mai 2020 18:59:56
>>> *An:* squeak-dev at lists.squeakfoundation.org;
>>> packages at lists.squeakfoundation.org
>>> *Betreff:* [squeak-dev] The Trunk: Compiler-nice.427.mcz
>>>
>>> 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 ]
>>> !
>>>
>>>
>>>
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200509/39e2dc75/attachment-0001.html>
More information about the Squeak-dev
mailing list
|