Last week, I mentioned putting the Refactoring Browser up in the Open Repository for more fluid development. It started at 404. Now it's up to 409. What's happened so far?
Well, a bug known as AR 49126 is now fixed. Said bug occured when the RBParser tried to consume <tags> in methods that contained literals with > characters in them. We could have just fixed it by being a little more savvy of strings and symbols as it searched for the next %gt;. But the syntax of the tags is understood and structured. So instead, we're now properly parsing the tags with the mechanisms provided by the RBParser. Furthermore we have a first class model of RBTagNodes. This means we can make much better queries about tag data in methods. Such as "is it a primitive method?" The old way was circuituous at best. It brings up an interesting question. Should the "selector" of a tag be included in operations such as method renames? Or safe removes? My feeling is yes. If you have an argument otherwise, I'd be interested in hearing that. Also, with them as proper objects, we can include them in formatting operations! So they're now including in formatting passes. It uses the same rules it would on real selector/argument sets encountered in code.
Speaking of Formatters... the RBFormatter is gone. RBConfigurableFormatter is all that remains. The basic settings for the ConfigurableFormatter produce about the same affect as the unconfigurable RBFormatter, so if you're not using the Configurable one, you probably won't notice. And if you were one of those that responded you did, you have nothing to fear.
Which leads us to mention other stuff that's been removed. The tests have had various VisualAge style configurations removed from them. And so has the code. Things like empty statements, optimized nodes, etc. The RBParser/Scanner becomes that much more tractible. Parser/Scanner is not the easiest thing to grok IMO, yet it pleases me how approachable the implementation is. A tribute to the original architects.
In addition to VisualAge parsing particulars, 5 menu options were removed from various menus. I'll leave it to you to find them and scream at me about them if you desperately need them. The RB's heritage comes from a world where it was providing a number of features to multiple environments. So sometimes, we ended up with menu actions which the VW tools have more appropriate support for.
I'll give you a hint on some of them though. ReferenceFinder is gone. And so are its tests, thankfully. The tests were really very good, but they took a long time to run. ReferenceFinder is as much as 10x slower than the VW builtin ReferencePathCollector. Furthermore, the ReferenceFinder liked to find all the paths back to Root. Whereas the ReferencePathCollector finds paths back to variable bindings. It's interesting seeing a path which tells you something is being kept alive because of some connection to something like Object.DependentsFields. It's not really interesting to see that traced back to the Root namespace.
Can't just remove stuff. An addition is the abilty to make method comments look like proper english sentences. This is an irony for me. I get really excited about people formatting their code and being consistent. With method comments though, I'm really lax. This was pointed out to me. Not one to change my ways, when I can get the computer to do it for me, we added an option on the Formatter called MethodCommentsAsProperSentences. If you have something like:
someMethod
"all your comment are sentence to us"
^42
and you format it with this option on, it will now be:
someMethod
"All your comment are sentence to us."
^42
Yes, if you have "self initialize" or "self whatever" it's smart enough to leave that alone. We aim to please.
Something I've looked at is integrating both the effect of KeepScrollPositionOnSave and AsYouLikeIt functionality. They didn't make this cut though, due to trivial hangups.
And finally, I know I promised to put Splash up on the Open Repository too. What little there is, I'd like to work. And with the coordinate changes that went into Pollock, I have some work to do. Which is doable. Except, I'm using the new Mac OSX Aqua VMs. And so far, mouse events while buttons are held down are being filtered out (crossing my fingers that this is one of the things they fixed with the latest build), so that really complicates things, since what we have done relies pretty much completely on being able to drag things around. So no, I haven't forgot.