(bug 38492) let doxygen document variables
authorAntoine Musso <hashar@free.fr>
Wed, 1 Aug 2012 16:23:56 +0000 (18:23 +0200)
committerAntoine Musso <hashar@free.fr>
Wed, 1 Aug 2012 18:44:40 +0000 (20:44 +0200)
We are using '@var' to document our variables and class properties,
which is unfortunately not working since '@var' is really meant to
document a function or method.

The way to fix it is to use an input filter that will rewrite our PHP
source code to pretends variables are typed. Aka something like:

 /**
  * A title object
  * @var Title
  */
 var $title;

Will be made:

 /**
  * A title object
  * @var Title
  */
 Title $title;

That is incorrect PHP code but it is properly recognized by Doxygen.

This patch as a side effect, all variables and properties will end up
being documented in addition of type hinting.

Use a hack authored by Goran Rakic at:
http://stackoverflow.com/a/8472180/276152

Change-Id: I4ead1bd1feace44496b45ed8c55f5e52c59e7694

maintenance/Doxyfile
maintenance/mwdoc-filter.php [new file with mode: 0644]

index aeb2e9d..e0868bf 100644 (file)
@@ -182,7 +182,7 @@ EXAMPLE_PATH           =
 EXAMPLE_PATTERNS       = *
 EXAMPLE_RECURSIVE      = NO
 IMAGE_PATH             =
-INPUT_FILTER           =
+INPUT_FILTER           = "php mwdoc-filter.php"
 FILTER_PATTERNS        =
 FILTER_SOURCE_FILES    = NO
 FILTER_SOURCE_PATTERNS =
diff --git a/maintenance/mwdoc-filter.php b/maintenance/mwdoc-filter.php
new file mode 100644 (file)
index 0000000..75290f4
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+# Original source code by Goran Rakic
+# http://blog.goranrakic.com/
+# http://stackoverflow.com/questions/4325224
+
+# Should be filled in doxygen INPUT_FILTER as "php mwdoc-filter.php"
+
+$source = file_get_contents( $argv[1] );
+$regexp = '#\@var\s+([^\s]+)([^/]+)/\s+(var|public|protected|private)\s+(\$[^\s;=]+)#';
+$replac = '${2} */ ${3} ${1} ${4}';
+$source = preg_replace($regexp, $replac, $source);
+
+echo $source;