DocBlox: your source matters @ #pfc11

2,352 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,352
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
13
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

DocBlox: your source matters @ #pfc11

  1. 1. DocBloxYour source matters
  2. 2. Mike van Riel Lead Developer of DocBloxTechnical Lead Developer for Unet B.V. Active with PHP since 2002
  3. 3. 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
  4. 4. 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
  5. 5. Feature DocBlox phpDocumentor DoxygenPHP 5.3+ SupportCan cope with large projectsSearchIncremental ParsingDoctrine AnnotationsXML outputClass inheritance diagramPDFDocBookLinking to external documentationMarkup of descriptions using MarkdownLatex supportParse directly from pharSecret feature
  6. 6. Who uses DocBlox?
  7. 7. Who uses DocBlox? You?
  8. 8. InstallationInstallation via PEAR $ pear channel-discover pear.docblox-project.org $ pear channel-discover pear.michelf.com $ pear install docblox/DocBlox-betaManual installation See http://docs.docblox-project.org/Installation.html#manual-installation
  9. 9. Running docblox$ docblox -d [FOLDER] -f [FILE] -t [DESTINATION]OR$ docblox parse -d [FOLDER] -f [FILE] -t [STAGING]$ docblox transform -s [STAGING]/structure.xml -t [DESTINATION]
  10. 10. 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
  11. 11. 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
  12. 12. 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"
  13. 13. 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>
  14. 14. 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
  15. 15. 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){}
  16. 16. Supported elements➔ Files➔ Namespaces➔ Includes & requires➔ Classes➔ Traits (not yet, is coming)➔ Functions, methods and closures➔ Properties➔ Constants, global and class
  17. 17. Supported tags➔ @abstract ➔ @ignore ➔ @since➔ @access ➔ @internal ➔ @static➔ @api ➔ @license ➔ @staticvar➔ @author ➔ @link ➔ @subpackage➔ @category ➔ @method ➔ @throws / @throw➔ @copyright ➔ @name ➔ @todo➔ @deprecated ➔ @package ➔ @tutorial➔ @example ➔ @param➔ @final ➔ @property ➔ @uses / @usedby➔ @filesource ➔ @return ➔ @var➔ @global ➔ @see ➔ @version
  18. 18. Inheritance➔ Docblocks inherit by default (if not overridden) ● Short description ● Long description – Can be augmented using {@inheritdoc} ● Specific tags
  19. 19. Inheritance - Classes➔ Methods➔ Properties➔ Tags ● @package ● @subpackage – if @package is the same as parent ● @version ● @copyright ● @author
  20. 20. Inheritance - METHODS➔ Tags ● @param ● @return ● @throw / @throws ● @version ● @copyright ● @author
  21. 21. Inheritance - Properties➔ Tags ● @var ● @version ● @copyright ● @author
  22. 22. Inheritance - Exampleclass Parent { /** * Short description. * * @api * @param int $a First param. * @param string $b Second param. */ function doIt($a, $b) { .. }}class Child extends Parent { /** * Short description. * DocBlox adds this for you. * @param int $a First param. Note the missing @api tag * @param string $b Second param. */ function doIt($a, $b) { .. }}
  23. 23. 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 { /** * Short description. * * This method adds another bit of functionality * {@inheritdoc} * * @param int $a First param. * @param string $b Second param. */ function doIt($a, $b) { .. }}
  24. 24. 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 { /** * 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. */ function doIt($a, $b) { .. }}
  25. 25. References➔ From Docblocks you can refer to other parts of the documentation using ● @uses * @uses MyNamespaceClass::function() ● @see * @see MyNamespaceClass::$property ● @link and {@link .. } * @link http://my.domain link text ● @example * @example gist:123456
  26. 26. 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
  27. 27. BONUS: Templates➔ Skeleton can be generated using the following command:$ docblox theme:generate -t [PATH] -n [NAME]
  28. 28. 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
  29. 29. Secret Feature
  30. 30. 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
  31. 31. 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
  32. 32. 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>
  33. 33. 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) { … }}
  34. 34. 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
  35. 35. Questions?
  36. 36. Mike van Riel mike.vanriel@naenius.com @mvriel http://blog.naenius.com http://joind.in/3661 Links ● http://www.docblox-project.org ● http://github.com/mvriel/docblox37 / 37 What is SCRUM?

×