[lazarus] Notes about Export Proc

Mattias Gaertner nc-gaertnma at netcologne.de
Wed Oct 15 17:15:55 EDT 2003


On Wed, 15 Oct 2003 23:26:38 +0200
Mattias Gaertner <nc-gaertnma at netcologne.de> wrote:

> Hi all,
> 
> I have implemented the first refactoring tool for lazarus: 
> Edit -> Export Proc.

Although Export Proc would also be a good name, I ment Extract Procedure.

 
> Abstract:
> Export Proc takes some selected pascal statements and creates a new
> procedure/method from this code.
> This tool is useful to split big procedures or to easily create a new
> procedure from some code.
> 
> 
> Basic example:
> 
> procedure DoSomething;
> begin
>   CallSomething;
> end;
> 
> Select the line "CallSomething;" and do Extract Proc. A dialog popup ups
> and you can select the type and name of the procedure to create. For
> example: procedure, "NewProc". Result:
> 
> procedure NewProc;
> begin
>   CallSomething;
> end;
> 
> procedure DoSomething;
> begin
>   NewProc;
> end;
> 
> You can see, that the new procedure "NewProc" was created with the
> selection as body and the old code was replaced by a call.
> 
> 
> Local Variables and Parameters:
> 
> "Extract Proc" scans for used variables and automatically creates the
> parameter list and local variables. Example:
> 
> procedure TForm1.DoSomething(var Erni, Bert: integer);
> var
>   i: Integer; // Comment
> begin
>   Erni:=Erni+Bert;
>   for i:=Erni to 5 do begin
> 
>   end;
> end;
> 
> Select the for loop and create a new Procedure "NewProc". The local
> variable i is only used in the selection, so it will be moved to the new
> procedure. Erni is also used in the remaining code, so it will become a
> parameter. Result:
> 
> procedure NewProc(const Erni: integer);
> var
>   i: Integer; // Comment
> begin
>   for i:=Erni to 5 do begin
> 
>   end;
> end;
> 
> procedure TForm1.DoSomething(var Erni, Bert: integer);
> begin
>   Erni:=Erni+Bert;
>   NewProc(Erni);
> end;
> 
> You can see "i" was moved to the new procedure (Note: including its
> comment) and Erni .
> 
> 
> Limitations:
> Pascal is a very powerful language, so don't expect it will work with
> every code. Current limits/ToDos:
> - check if selection bounds on statement bounds
> - heuristic for parameter specifiers 'var'. 
>   At the moment all parameters are "const". 
>   If you need "var", you have to edit it manually.
> - "with" statements
>  
> I think, even with these limits, the tool will be useful.

 
Mattias






More information about the Lazarus mailing list