Assuming that you've loaded: * Monticello * the SqueakMap version of Refactory (Refactory-md.3.8.12) * my latest RB improvements (http://bike-nomad.com/squeak/Refactory-nk.3830.mcd)
you can try out some interesting tricks with the FinderTool and the new RewriteTool:
For instance:
* to find sends to globals that they don't understand (I have a Lint rule for this, but...) (this could also be done in the search pattern, as in the second example):
search for: `{:node :context | node isVariable and: [ Smalltalk includesKey: node name asSymbol ] } `@message: `@args
and use this condition: | what | what := Smalltalk at: aNode receiver name asSymbol. what notNil and: [ what ~~ Preferences and: [ (what respondsTo: aNode selector) not ]]
* to find references to all globals that aren't classes, search for:
`{:node :context | | what | node isVariable and: [ (what := Smalltalk at: node name ifAbsent: []) notNil and: [ what isBehavior not ] ] }
* to replace all menu constructors that use #labels:lines:selections: to use #addTranslatedList: instead (changing three parameters into one):
search for: `@Expression labels: `#labels lines: `#lines selections: `#selections
replace with: `@Expression addTranslatedList: `{:a | | labels lines selections list | labels := (a valueForPatternVariableNode: '`#labels') value findTokens: Character cr. lines := (a valueForPatternVariableNode: '`#lines') value. selections := (a valueForPatternVariableNode: '`#selections') value. list := labels with: selections collect: [ :l :s | { l. s. } ]. list := Array streamContents: [ :strm | list withIndexDo: [ :l :i | strm nextPut: l. (lines includes: i) ifTrue: [ strm nextPut: '-' ]]]. RBParser parseExpression: list storeString }
Enjoy,
Thanks Ned.
The rewrite tool was always one of my favorite tools when I did Smalltalk for a living. I've been Squeaking for a long time (1.18), but I haven't kept current on the development tools since 3.x.
This was the impetus that I needed to try things out.
I am passing on the (small) hurdles I had to cross to get this working, in case there are other newbish folks out who want to see some cool refactoring stuff.
a 3.8 gamma image (I got 3.8g 6548). Load code updates (I moved to 6590). Open SqueakMap to get Monticello (I got 219 because 223 gave me a debugger on load). Took me a minute to figure out that the SqueakMap version of Refactory was called the Refactoring Browser for 3.8. Learned how to load a Monticello file distribution.
But then everything worked.
very cool!
--David Mitchell
P.S. -- It was nice to good doc for MC (on wiresong.ca) that answered my questions. Chris Muller had shown me MC a few months ago, but I didn't get how to use it (as I was blinded by some other cool things he was showing me).
Ned Konz wrote:
Assuming that you've loaded:
- Monticello
- the SqueakMap version of Refactory (Refactory-md.3.8.12)
- my latest RB improvements
(http://bike-nomad.com/squeak/Refactory-nk.3830.mcd)
you can try out some interesting tricks with the FinderTool and the new RewriteTool:
For instance:
- to find sends to globals that they don't understand (I have a Lint rule for
this, but...) (this could also be done in the search pattern, as in the second example):
search for: `{:node :context | node isVariable and: [ Smalltalk includesKey: node name asSymbol ] } `@message: `@args
and use this condition: | what | what := Smalltalk at: aNode receiver name asSymbol. what notNil and: [ what ~~ Preferences and: [ (what respondsTo: aNode selector) not ]]
- to find references to all globals that aren't classes, search for:
`{:node :context | | what | node isVariable and: [ (what := Smalltalk at: node name ifAbsent: []) notNil and: [ what isBehavior not ] ] }
- to replace all menu constructors that use #labels:lines:selections: to use
#addTranslatedList: instead (changing three parameters into one):
search for: `@Expression labels: `#labels lines: `#lines selections: `#selections
replace with: `@Expression addTranslatedList: `{:a | | labels lines selections list | labels := (a valueForPatternVariableNode: '`#labels') value findTokens: Character cr. lines := (a valueForPatternVariableNode: '`#lines') value. selections := (a valueForPatternVariableNode: '`#selections') value. list := labels with: selections collect: [ :l :s | { l. s. } ]. list := Array streamContents: [ :strm | list withIndexDo: [ :l :i | strm nextPut: l. (lines includes: i) ifTrue: [ strm nextPut: '-' ]]]. RBParser parseExpression: list storeString }
Enjoy,
On Sat, 26 Feb 2005 23:00:07 -0600, David Mitchell dmitchell4@kc.rr.com wrote:
a 3.8 gamma image (I got 3.8g 6548). Load code updates (I moved to 6590). Open SqueakMap to get Monticello (I got 219 because 223 gave me a debugger on load).
Can anyone reproduce this? I think it might just be that SqueakSource was temporarily down (note to Göran: SM should have a nice error message for that).
Avi
squeak-dev@lists.squeakfoundation.org