Difference between revisions of "Cody"

From Free Pascal wiki
Jump to navigationJump to search
Line 18: Line 18:
 
*Key name: ''Show used .ppu files ...'' (in the IDE under options Editor / Key mapping)
 
*Key name: ''Show used .ppu files ...'' (in the IDE under options Editor / Key mapping)
  
This dialog gives some stats about all used ppu/o files of the project.  
+
This dialog gives some stats about all used ppu/o files of the project.
 +
 
 +
'''Note:''' The codetools will try to parse all used ppu files. The codetools use its own ppu parser instead of the one of the compiler. The advantage is that it can read many different versions of ppu, the drawback is that might not be able to read the newest version. Cody uses as fallback the sources.
  
 
==Units==
 
==Units==

Revision as of 13:37, 23 May 2011

"Cody" is a Lazarus design time package extending the IDE with some advanced code tools for power users. It is located in the Lazarus sources components/codetools/ide/cody.lpk since Lazarus 0.9.31.

Overview

Cody adds the following items to the IDE:

PPU files of project

  • Menu item: Project / Show ppu files of project
  • Requires: A compiled project
  • Key name: Show used .ppu files ... (in the IDE under options Editor / Key mapping)

This dialog gives some stats about all used ppu/o files of the project.

Note: The codetools will try to parse all used ppu files. The codetools use its own ppu parser instead of the one of the compiler. The advantage is that it can read many different versions of ppu, the drawback is that might not be able to read the newest version. Cody uses as fallback the sources.

Units

The first page Units shows which unit uses what and where it is used. Note: If a ppu file can not be parsed the source will be parsed instead.

Cody ppu files2.png

You can sort by double clicking on the column header.

  • General
    • Source: the full file name of the unit source file
    • PPU: the full file name of the unit ppu file.
  • Uses: This lists all units used by the unit.
  • Used by: This lists all units that uses the current unit directly.
  • Uses path: This gives one path from the project main source to the unit. This is not necessarily the shortest path.

Linked Files

The second page Linked Files shows what files, libraries and frameworks are used by the project and what unit links them in.

Cody ppu linked files1.png

  • Hint: Double click on an unit to jump to the unit on the page Units.
  • Note: If a ppu file can not be parsed, there is no fallback. There will be no information about the linked files for this unit.

Insert file at cursor

  • Requires: a file in the source editor
  • Menu item: Source Editor / popup / Source / Insert file at cursor ...
  • Shortcut name: Insert file at cursor (in the IDE under options Editor / Key mapping)

This opens a file dialog. Select a file, which will be inserted at the current source editor position. If some text was selected, it will be replaced.

Add call inherited

  • Requires: cursor in a method implementation
  • Menu item: Source Editor / popup / Source / Add call inherited
  • Shortcut name: Add call inherited (in the IDE under options Editor / Key mapping)

This adds a call to the inherited method with all parameters. For example:

<Delphi> type

 TMyClass = class(TComponent)
 public
   constructor Create(AOwner: TComponent); override;
 end;

constructor TMyClass.Create(AOwner: TComponent); begin

 |

end; </Delphi>

This will add inherited Create(AOwner);:

<Delphi> constructor TMyClass.Create(AOwner: TComponent); begin

 inherited Create(AOwner);

end; </Delphi>

If the method is a function and the current line is empty it will prepend a Result:=.

<Delphi> function TMyClass.ExecuteAction(Action: TBasicAction): Boolean; begin

 Result:=inherited ExecuteAction(Action);

end; </Delphi>

Add Assign method

  • Requires: cursor in a class
  • Menu item: Source Editor / popup / Refactor / Add Assign method ...
  • Shortcut name: Add Assign method (in the IDE under options Editor / Key mapping)

If you are using Object Pascal, then you often need to copy an object and so you will probably often write an Assign method. This tool generates the method automatically for you and gives you a dialog to quickly select the members to copy. Here is an example of a produced method code:

<Delphi> type

 TMyClass = class(TComponent)
 private
   FMyInt: integer;
 public
   procedure Assign(Source: TPersistent); override;
   property MyInt: integer read FMyInt write FMyInt;
 end;

procedure TMyClass.Assign(Source: TPersistent); var

 aSource: TMyClass;

begin

 if Source is TMyClass then
 begin
   aSource:=TMyClass(Source);
   MyInt:=aSource.MyInt;
 end else
   inherited Assign(Source);

end; </Delphi>

Cody add assign method1.png

  • Method name: type in the name of the new method. It is automatically checked if there is already such a method or if an ancestor has inherited one.
  • Parameter name: the parameter name is taken from the inherited method, otherwise Source.
  • Parameter type: the parameter type is taken from the inherited method, otherwise TObject. If this type is different than the current class an if-then-else block is added.
  • If there is an inherited method:
    • Check 'Override' to override it. This appends the override method modifier.
    • Check 'Call inherited' to add a line 'inherited'.
    • Check 'Call inherited only if wrong class' to call the inherited method only in the else part. This is needed for all direct descendants of TPersistent.
  • Select members to assign:
    • This lists all variables and all properties that are assignable (readable and writable).
    • It also shows if a variable is written by a property.
    • You can select/unselect by clicking on a member.

Remove With block

This tool removes a With and inserts the with expression in front of each identifier needing it.

  • Requires: cursor on a With expression (e.g. the variable between the keywords With and Do)
  • Menu item: Source Editor / popup / Refactoring / Remove With block
  • Shortcut name: Remove With block (in the IDE under options Editor / Key mapping)

For example:

<Delphi> with Button1 do begin

 Name:='Button1';
 Caption:='Ok';

end; </Delphi>

becomes:

<Delphi> Button1.Name:='Button1'; Button1.Caption:='Ok'; </Delphi>

Declare Variable

This tool is an interactive version of Variable Declaration Completion.

  • Requires: cursor on an undeclared identifier in a statement.
  • Menu item: Source Editor / popup / Refactoring / Declare Variable
  • Shortcut name: Declare Variable (in the IDE under options Editor / Key mapping)

For example:

<Delphi> procedure DoSomething; begin

 i:=3;

end; </Delphi>

Place the cursor on the i and invoke the dialog. Select "local variable" and click Ok. The result is

<Delphi> procedure DoSomething; var

 i: Integer;

begin

 i:=3;

end; </Delphi>


See also