Parse implementation comments
Use the --implementation-comments
command-line option to parse the implementation section of a unit in addition to the interface section. This way you can place the documentation comments inside the implementation section, keeping the interface section shorter.
Example
Documentation inside the implementation (using the --implementation-comments=join
option):
unit Foo;
interface
type
TCl = class
// This method should do something.
function Bar(const Par1, Par2: string): Boolean;
// This method should do something extended.
function BarEx(const Par1, Par2: string): Boolean;
end;
implementation
{ This method should do something.
@param Par1 - parameter #1
@param Par2 - parameter #2
@return Success flag
@raises Exception on error
}
function TCl.Bar(const Par1, Par2: string): Boolean;
begin
...
end;
{ This method should do something extended.
@param Par1 - parameter #1
@param Par2 - parameter #2
@return Success flag
@raises Exception on error
}
function TCl.BarEx(const Par1, Par2: string): Boolean;
begin
...
end;
end.
This way the interface section is clean (but it still has short descriptions), and the full documentation is inside the unit implementation. Developer can see a documentation near the implementation of the method.
It is equivalent to the following documentation inside the interface (without using --implementation-comments=…
):
unit Foo;
interface
type
TCl = class
{ This method should do something
@param Par1 - parameter #1
@param Par2 - parameter #2
@return Success flag
@raises Exception on error
}
function Bar(const Par1, Par2: string): Boolean;
{ This method should do something extended
@param Par1 - parameter #1
@param Par2 - parameter #2
@return Success flag
@raises Exception on error
}
function BarEx(const Par1, Par2: string): Boolean;
end;
implementation
function TCl.Bar(const Par1, Par2: string): Boolean;
begin
...
end;
function TCl.BarEx(const Par1, Par2: string): Boolean;
begin
...
end;
end.
Possible arguments (how to merge information)
The --implementation-comments
option has 4 possible arguments, that determine how the information is merged:
|
(Default) Do not read implementation comments. |
|
Read both interface and implementation comments. Use whichever comment is non-empty. If they are both non-empty, use the interface comment. |
|
Read both interface and implementation comments, and concatenate them. The concatenation
process is smart: if the interface comment is precisely repeated at the implementation comment (like |
|
Just like "prefer interface", but if both comments are non-empty, use the implementation comment. |
Sample
Having this unit
unit Foo;
interface
// This method should do something
function Bar(const Par: string): Boolean;
implementation
{ This method should do something and return a flag
@param Par - parameter
@return Success flag
}
function Bar(const Par: string): Boolean;
begin
...
end;
end.
the resulting descriptions will be
-
Using
--implementation-comments=prefer-interface
:
This method should do something
-
Using
--implementation-comments=join
This method should do something and return a flag
@param Par - parameter
@return Success flag
-
Using
--implementation-comments=prefer-implementation
(same result as with--implementation-comments=join
in this case):
This method should do something and return a flag
@param Par - parameter
@return Success flag
Notes
-
Regardless of the
--implementation-comments
option, only the items present in the interface section of a unit are visible in the final documentation. In other words, using--implementation-comments
is only a way to "enhance" the documentation of items from the interface section. It doesn’t make the internal unit identifiers visible in the documentation. -
Just like with the interface section: To successfully parse the implementation section, make sure that PasDoc is aware of the conditional symbols that are defined. See the conditional compilation documentation, in particular section there Make sure the resulting code is valid .