Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus / 2003-10

Notes about Export Proc

3 messages · 2 people ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Mattias Gaertner
to Mattias Gaertner: I have implemented the first refactoring tool for lazarus: Edit -> Export Proc. Abstract:…
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.

Show quoted text 81 lines
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

Reply by email

Mattias Gaertner

Hi all,

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

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

Reply by email