[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