docblox: your source matters @ #pfc11

37
DocBlox Your source matters

Upload: mike-van-riel

Post on 15-Jan-2015

1.949 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: DocBlox: your source matters @ #pfc11

DocBloxYour source matters

Page 2: DocBlox: your source matters @ #pfc11

Mike van RielLead Developer of DocBlox

Technical Lead Developer for Unet B.V.Active with PHP since 2002

Page 3: DocBlox: your source matters @ #pfc11

What is DocBlox?➔ Documentation Generation Application (DGA) for PHP

➔ Inspired by phpDocumentor and JavaDoc

➔ Generates documentation from your source code

➔ Uses the structure and comments of your source code

Page 4: DocBlox: your source matters @ #pfc11
Page 5: DocBlox: your source matters @ #pfc11

Why DocBlox?➔ Support for PHP 5.3+ features

➔ Performance, improved with up to 80%

➔ Memory usage, large projects use 100MB instead of gigabytes

➔ Active project, every month new features

● Bug fixes even more frequent➔ QA Tool for in-source documentation

Page 6: DocBlox: your source matters @ #pfc11

Feature DocBlox phpDocumentor Doxygen

PHP 5.3+ Support

Can cope with large projects

Search

Incremental Parsing

Doctrine Annotations

XML output

Class inheritance diagram

PDF

DocBook

Linking to external documentation

Markup of descriptions using Markdown

Latex support

Parse directly from phar

Secret feature

Page 7: DocBlox: your source matters @ #pfc11

Who uses DocBlox?

Page 8: DocBlox: your source matters @ #pfc11

Who uses DocBlox?

You?You?

Page 9: DocBlox: your source matters @ #pfc11

InstallationInstallation via PEAR

$ pear channel-discover pear.docblox-project.org$ pear channel-discover pear.michelf.com$ pear install docblox/DocBlox-beta

Manual installationSee http://docs.docblox-project.org/Installation.html#manual-installation

Page 10: DocBlox: your source matters @ #pfc11

Running docblox

$ docblox -d [FOLDER] -f [FILE] -t [DESTINATION]

$ docblox parse -d [FOLDER] -f [FILE] -t [STAGING]$ docblox transform -s [STAGING]/structure.xml -t [DESTINATION]

OR

Page 11: DocBlox: your source matters @ #pfc11

Running docblox: Incremental parsing

$ docblox parse -d [FOLDER] -f [FILE] -t [STAGING]$ docblox transform -s [STAGING]/structure.xml -t [DESTINATION]

➔ Structure file is written to a staging location

➔ Every parsing run DocBlox will know if a file has changed

● If so, re-parse● If not, re-use

➔ Advantages:

● Parsing speed is increased● Structure file is not distributed along with rest of documentation

Page 12: DocBlox: your source matters @ #pfc11

Running docblox: Incremental parsing

$ docblox parse -d [FOLDER] -f [FILE] -t [STAGING]$ docblox transform -s [STAGING]/structure.xml -t [DESTINATION]

➔ Structure file is written to a staging location

➔ Every parsing run DocBlox will know if a file has changed

● If so, re-parse● If not, re-use

➔ Advantages:

● Parsing speed is increased● Structure file is not distributed along with rest of documentation

Page 13: DocBlox: your source matters @ #pfc11

Running docblox: Options$ docblox –-help-h [--help] Show this help message-q [--quiet] Silences the output and logging-c [--config] [STRING] Configuration filename OR "none", when this option is omitted DocBlox tries to load the docblox.xml or docblox.dist.xml from the current working directory-f [--filename] STRING Comma-separated list of files to parse. The wildcards ? and * are supported-d [--directory] STRING Comma-separated list of directories to (recursively) parse.-t [--target] [STRING] Path where to store the generated output (optional, defaults to "output")-e [--extensions] [STRING] Optional comma-separated list of extensions to parse, defaults to php, php3 and phtml-i [--ignore] [STRING] Comma-separated list of file(s) and directories that will be ignored. Wildcards * and ? are supported-m [--markers] [STRING] Comma-separated list of markers/tags to filter, (optional, defaults to: "TODO,FIXME")-v [--verbose] Provides additional information during parsing, usually only needed for debugging purposes--title [STRING] Sets the title for this project; default is the DocBlox logo--template [STRING] Sets the template to use when generating the output--force Forces a full build of the documentation, does not increment existing documentation--validate Validates every processed file using PHP Lint, costs a lot of performance--parseprivate Whether to parse DocBlocks tagged with @internal--visibility [STRING] Specifies the parse visibility that should be displayed in the documentation (comma seperated e.g. "public,protected")--defaultpackagename [STRING] name to use for the default package. If not specified, uses "default"

Page 14: DocBlox: your source matters @ #pfc11

Configuration➔ Stored as XML➔ docblox.dist.xml or docblox.xml

<?xml version="1.0" encoding="UTF-8" ?><docblox> <parser> <default-package-name>DocBlox</default-package-name> <target>data/output</target> </parser> <transformer> <target>data/output</target> </transformer> <files> <directory>.</directory> <ignore>tests/*</ignore> </files></docblox>

Page 15: DocBlox: your source matters @ #pfc11

Writing Docblocks➔ Docblocks are used to tag elements with meta-data

➔ Specific type of comment: /** … */

➔ Three parts:

● Short description, one liner● Long description, a complete description of the

element● Tags, annotations which provide additional

information

Page 16: DocBlox: your source matters @ #pfc11

Docblocks - II/** * This is a short description. * * This is a long description, which may span * multiple lines and contain {@inline} tags and * can be *styled* with `Markdown`. * * @param string $a This is the first variable. * @param \Exception $b This is the second variable. * @param array $c This is the third variable. * * @return void */function myFunction($a, \Exception $b, array $c){}

Page 17: DocBlox: your source matters @ #pfc11

Supported elements➔ Files

➔ Namespaces

➔ Includes & requires

➔ Classes

➔ Traits (not yet, is coming)

➔ Functions, methods and closures

➔ Properties

➔ Constants, global and class

Page 18: DocBlox: your source matters @ #pfc11

Supported tags➔ @abstract

➔ @access

➔ @api

➔ @author

➔ @category

➔ @copyright

➔ @deprecated

➔ @example

➔ @final

➔ @filesource

➔ @global

➔ @ignore

➔ @internal

➔ @license

➔ @link

➔ @method

➔ @name

➔ @package

➔ @param

➔ @property

➔ @return

➔ @see

➔ @since

➔ @static

➔ @staticvar

➔ @subpackage

➔ @throws / @throw

➔ @todo

➔ @tutorial

➔ @uses / @usedby

➔ @var

➔ @version

Page 19: DocBlox: your source matters @ #pfc11

Inheritance➔ Docblocks inherit by default (if not overridden)

● Short description● Long description

– Can be augmented using {@inheritdoc}● Specific tags

Page 20: DocBlox: your source matters @ #pfc11

Inheritance - Classes➔ Methods➔ Properties➔ Tags

● @package● @subpackage

– if @package is the same as parent

● @version● @copyright● @author

Page 21: DocBlox: your source matters @ #pfc11

Inheritance - METHODS➔ Tags

● @param● @return● @throw / @throws● @version● @copyright● @author

Page 22: DocBlox: your source matters @ #pfc11

Inheritance - Properties➔ Tags

● @var● @version● @copyright● @author

Page 23: DocBlox: your source matters @ #pfc11

Inheritance - Exampleclass Parent { /** * Short description. * * @api * @param int $a First param. * @param string $b Second param. */ function doIt($a, $b) { .. }}

class Child extends Parent {

function doIt($a, $b) { .. }}

DocBlox adds this for you.Note the missing @api tag

/** * Short description. * * @param int $a First param. * @param string $b Second param. */

Page 24: DocBlox: your source matters @ #pfc11

Inheritance - @inheritdocclass Parent { /** * Short description. * * This is my long description. * * @param int $a First param. * @param string $b Second param. */ function doIt($a, $b) { .. }}

class Child extends Parent {

function doIt($a, $b) { .. }}

/** * Short description. * * This method adds another bit of functionality * {@inheritdoc} * * @param int $a First param. * @param string $b Second param. */

Page 25: DocBlox: your source matters @ #pfc11

Inheritance - @inheritdocclass Parent { /** * Short description. * * This is my long description. * * @param int $a First param. * @param string $b Second param. */ function doIt($a, $b) { .. }}

class Child extends Parent {

function doIt($a, $b) { .. }}

/** * Short description. * * This method adds another bit of functionality * This is my long description. * * @param int $a First param. * @param string $b Second param. */

DocBlox adds this for you.

Page 26: DocBlox: your source matters @ #pfc11

References➔ From Docblocks you can refer to other parts of

the documentation using● @uses● @see● @link and {@link .. }● @example

* @uses \My\Namespace\Class::function()

* @see \My\Namespace\Class::$property

* @link http://my.domain link text

* @example gist:123456

Page 27: DocBlox: your source matters @ #pfc11

BONUS: Templates➔ Templates are a sequence of data

transformations➔ Can contain other templates➔ May reside anywhere; even in your own project

● which is recommended for custom templates

➔ A transformation invokes a Writer

Page 28: DocBlox: your source matters @ #pfc11

BONUS: Templates➔ Skeleton can be generated using the following

command:

$ docblox theme:generate -t [PATH] -n [NAME]

Page 29: DocBlox: your source matters @ #pfc11

BONUS: THEMES➔ Are a collection of `views` ➔ Can be transformed to a specific output➔ Templates can cherry pick from different

themes➔ Themes can 'use' eachother

Page 30: DocBlox: your source matters @ #pfc11

Secret Feature

Page 31: DocBlox: your source matters @ #pfc11

Plugins➔ Starting with 0.15 DocBlox will support plugins➔ Core functionality will be captured in a plugin

(eat your own dog food)➔ An easy pluggable event-based system➔ Able to manipulate many functions in DocBlox

Page 32: DocBlox: your source matters @ #pfc11

Plugins: invoking➔ Add to configuration file as `plugins/plugin`

element➔ DocBlox Core plugin is assumed when nothing

is defined➔ Define path and class prefix for autoloading➔ Can have options, added in configuration file

Page 33: DocBlox: your source matters @ #pfc11

Plugins: Configuration<?xml version="1.0" encoding="UTF-8" ?><docblox>... <plugins> <plugin path="/my/path/to/plugin_folder" class_prefix="My_Plugin"> <option name="my_option"> value </option> </plugin> </plugins>...</docblox>

Page 34: DocBlox: your source matters @ #pfc11

Plugins - Exampleclass DocBlox_Plugin_Core_Listener extends DocBlox_Plugin_Abstract

{

/** * Apply a set of behaviours to the given structure. * * @docblox-event transformer.pre-transform * * @param sfEvent $data * * @return void */ public function applyBehaviours(sfEvent $data) { … }}

Page 35: DocBlox: your source matters @ #pfc11

Plugins - Hooks➔ No XSL hooks to start with

➔ Limited set to start with:● system.log, default logger● system.debug, logging of debug messages● parser.log, logging of parser errors● transformer.transform.pre, adding behaviour● transformer.transform.post, post processing of output● reflection.docblock-extraction.post, validating docblock● reflection.docblock.tag.export, transform tag to specialized form

Page 36: DocBlox: your source matters @ #pfc11

Questions?

Page 37: DocBlox: your source matters @ #pfc11

What is SCRUM?

Mike van [email protected]@mvrielhttp://blog.naenius.com

Links● http://www.docblox-project.org● http://github.com/mvriel/docblox

37 / 37

http://joind.in/3661

http://blog.naenius.com