From: Ned Konz Date: 2001-11-24T04:05:07+09:00 Subject: [ruby-talk:26245] Re: Refactoring tool for Ruby... On Friday 16 November 2001 06:04 am, Jimmy Thrasher wrote: > At 07:16 AM 11/16/2001 +0900, you wrote: > >Is [needing an IDE] really true? The core refactoring capability doesn't > > have to have anything to do with an IDE. It could easily be a libray > > which is capable of being used on the command line or from a ruby script. > > Hmm, maybe we have different ideas re: what a refactoring tool does > > I agree, except that it might be hard to API-ify it. Take a look at the Smalltalk Refactoring Browser; they have completely separated the refactoring from the IDE. Each refactoring is a separate class. And there is an adapter layer that provides an API for the metamodel: RBClass, RBMethod, etc. The parse tree matching and rewrite rules are also separate classes. Here are the Squeak categories and classes: Refactory-Change Objects AddClassChange AddClassVariableChange AddInstanceVariableChange AddMethodChange AddPoolVariableChange CompositeRefactoryChange InteractiveAddClassChange InteractiveAddMethodChange RefactoryChange RefactoryChangeManager RefactoryClassChange RefactoryVariableChange RemoveClassChange RemoveClassVariableChange RemoveInstanceVariableChange RemoveMethodChange RemovePoolVariableChange RenameClassChange RenameClassVariableChange RenameInstanceVariableChange RenameVariableChange Refactory-Support RBMethodName RefactoringError RefactoringWarning RefactoryTyper SqueakRB-Tests SentNotImplementedTestCase SqueakRB-UserInterface ChooserMorph ClassEnvironmentBrowser FinderTool MethodNameEditor RefactoringBrowser SelectorEnvironmentBrowser VariableEnvironmentBrowser Refactory-Parser RBAssignmentNode RBBlockNode RBCascadeNode RBFormatter RBLiteralNode RBMessageNode RBMethodNode RBOptimizedNode RBParser RBPatternMessageNode RBPatternMethodNode RBPatternVariableNode RBProgramNode RBReturnNode RBSequenceNode RBValueNode RBVariableNode Refactory-Scanner RBAssignmentToken RBBinarySelectorToken RBIdentifierToken RBKeywordToken RBLiteralToken RBOptimizedToken RBPatternBlockToken RBScanner RBSpecialCharacterToken RBToken RBValueToken Refactory-Conditions RBAbstractCondition RBCondition RBConjunctiveCondition RBNegationCondition Refactory-Browser ReferenceFinder Refactory-Model RBAbstractClass RBClass RBMetaclass RBMethod RBNamespace Refactory-Lint BasicLintRule BlockLintRule CompositeLintRule LintDialog LintRule ParseTreeEnvironment ParseTreeLintRule SmalllintChecker SmalllintContext SmalllintResultEditor TransformationRule Refactory-Refactorings AbstractClassVariableRefactoring AbstractInstanceVariableRefactoring AbstractVariablesRefactoring AddClassRefactoring AddClassVariableRefactoring AddInstanceVariableRefactoring AddMethodRefactoring AddParameterRefactoring ChangeMethodNameRefactoring ChildrenToSiblingsRefactoring ClassRefactoring CreateAccessorsForVariableRefactoring ExpandReferencedPoolsRefactoring ExtractMethodRefactoring ExtractMethodToComponentRefactoring ExtractToTemporaryRefactoring InlineAllSendersRefactoring InlineMethodFromComponentRefactoring InlineMethodRefactoring InlineParameterRefactoring InlineTemporaryRefactoring MethodRefactoring MoveMethodRefactoring MoveVariableDefinitionRefactoring ProtectInstanceVariableRefactoring PullUpClassVariableRefactoring PullUpInstanceVariableRefactoring PushDownClassVariableRefactoring PushDownInstanceVariableRefactoring PushDownMethodRefactoring PushUpMethodRefactoring ReceiverAndSelector Refactoring RefactoringManager RemoveClassRefactoring RemoveClassVariableRefactoring RemoveInstanceVariableRefactoring RemoveMethodRefactoring RemoveParameterRefactoring RenameClassRefactoring RenameClassVariableRefactoring RenameInstanceVariableRefactoring RenameMethodRefactoring RenameTemporaryRefactoring SplitClassRefactoring TemporaryToInstanceVariableRefactoring VariableRefactoring Refactory-Testing AbstractClassVariableTest AbstractInstanceVariableTest AddClassTest AddClassVariableTest AddInstanceVariableTest AddMethodTest AddParameterTest BrowserEnvironmentTest ChildrenToSiblingsTest CreateAccessorsForVariableTest ExtraParsingAndFormattingTests ExtractMethodTest ExtractMethodToComponentTest ExtractToTemporaryTest InlineAllMethodTest InlineMethodFromComponentTest InlineMethodTest InlineParameterTest InlineTemporaryTest MoveMethodTest MoveVariableDefinitionTest ParserTest ProtectInstanceVariableTest PullUpClassVariableTest PushDownClassVariableTest PushDownInstanceVariableTest PushDownMethodTest PushUpInstanceVariableTest PushUpMethodTest RBClassTest RBNamespaceTest RefactoringBrowserTest RefactoringTest ReferenceFinderTest RemoveClassTest RemoveClassVariableTest RemoveInstanceVariableTest RemoveMethodTest RemoveParameterTest RenameClassTest RenameClassVariableTest RenameInstanceVariableTest RenameMethodTest RenameTemporaryTest SmalllintTest TemporaryToInstanceVariableTest VariableEnvironmentTest VariableTypeTest Refactory-Environments AndEnvironment BrowserEnvironment BrowserEnvironmentWrapper CategoryEnvironment ClassEnvironment MultiEnvironment NotEnvironment ProtocolEnvironment SelectorEnvironment VariableEnvironment Refactory-Test data BasicLintRuleTest ClassToRename CompositeLintRuleTest FooLintRuleTest LintRuleTest RefactoryTestDataApp SubclassOfClassToRename TransformationRuleTest Refactory-ParseTree Matching ParseTreeRewriter ParseTreeSearcher RBBlockReplaceRule RBParseTreeRule RBPatternBlockNode RBProgramNodeVisitor RBReadBeforeWrittenTester RBReplaceRule RBSearchRule RBSmallDictionary RBStringReplaceRule SqueakRB-ParserExtensions RBArrayNode RBShortAssignmentToken -- Ned Konz currently: Stanwood, WA email: ned@bike-nomad.com homepage: http://bike-nomad.com