mike42 / doxyphp2sphinx

API Documentation generator for PHP priojects which use Sphinx.
BSD 2-Clause "Simplified" License
2 stars 2 forks source link

AttributeError: 'NoneType' object has no attribute 'text' #2

Open brotkrueml opened 4 years ago

brotkrueml commented 4 years ago

When calling doxyphp2sphinx I got this stack trace on a class:

Processing class Brotkrueml::*********Client::Client::RestClient
 refid is classBrotkrueml_1_1*********Client_1_1Client_1_1RestClient
 Class title will be 'RestClient'
 Class path will be  './api/client/restclient.rst'
 methods:
   __construct (ClientConfiguration $configuration)
Traceback (most recent call last):
 File "/home/chris/.local/bin/doxyphp2sphinx", line 11, in <module>
   sys.exit(Cli.run())
 File "/home/chris/.local/lib/python2.7/site-packages/doxyphp2sphinx/cli.py", line 28, in run
   generator.render_namespace_by_name(tree, root_namespace)
 File "/home/chris/.local/lib/python2.7/site-packages/doxyphp2sphinx/rstgenerator.py", line 29, in render_namespace_by_name
   self.render_namespace_by_ref_id(child.attrib['refid'], this_namespace_name)
 File "/home/chris/.local/lib/python2.7/site-packages/doxyphp2sphinx/rstgenerator.py", line 79, in render_namespace_by_ref_id
   self.render_namespace_by_ref_id(ns_id, ns_name)
 File "/home/chris/.local/lib/python2.7/site-packages/doxyphp2sphinx/rstgenerator.py", line 74, in     render_namespace_by_ref_id
   self.render_class_by_ref_id(cl_id, cl_name)
 File "/home/chris/.local/lib/python2.7/site-packages/doxyphp2sphinx/rstgenerator.py", line 343, in render_class_by_ref_id
   class_rst = self.class_xml_to_rst(compounddef, title)
 File "/home/chris/.local/lib/python2.7/site-packages/doxyphp2sphinx/rstgenerator.py", line 158, in class_xml_to_rst
   rst += self.method_xml_to_rst(method, 'method')
 File "/home/chris/.local/lib/python2.7/site-packages/doxyphp2sphinx/rstgenerator.py", line 178, in method_xml_to_rst
   argname_type = argname.find('parametertype').text
AttributeError: 'NoneType' object has no attribute 'text'

class: github.com/brotkrueml/jobrouter-client/blob/master/src/Client/RestClient.php

XML: pastebin.com/AGY6J7pF

mike42 commented 4 years ago

I was able to replicate this locally by cloning your repo, then generating XML documention for it with Doxygen.

This is definitely a bug. It is tripping up on this method in RestClient.php:

    /**
     * Creates a RestClient instance, already authenticated against the JobRouter system
     *
     * @param ClientConfiguration $configuration The configuration
     *
     * @throws AuthenticationException
     * @throws HttpException
     */
    public function __construct(ClientConfiguration $configuration)
    {
        $this->configuration = $configuration;
        $this->psr17factory = new Psr17Factory();

        $client = new Curl($this->psr17factory);
        $this->browser = new Browser($client, $this->psr17factory);
        $this->browser->addMiddleware(new UserAgentMiddleware($this->configuration->getUserAgentAddition()));
        $this->authorisationMiddleware = new AuthorisationMiddleware();
        $this->browser->addMiddleware($this->authorisationMiddleware);

        $this->authenticate();
    }

The parameter list appears like this in the XML:

<parameterlist kind="param">
  <parameteritem>
    <parameternamelist>
      <parametertype>ClientConfiguration</parametertype>
      <parametername>$configuration</parametername>
    </parameternamelist>
    <parameterdescription>
      <para>The configuration</para>
    </parameterdescription>
  </parameteritem>
</parameterlist>
<parameterlist kind="exception">
  <parameteritem>
    <parameternamelist>
      <parametername>AuthenticationException</parametername>
    </parameternamelist>
    <parameterdescription>
      <para/>
    </parameterdescription>
  </parameteritem>
  <parameteritem>
    <parameternamelist>
      <parametername>HttpException</parametername>
    </parameternamelist>
    <parameterdescription>
      <para/>
    </parameterdescription>
  </parameteritem>
</parameterlist>

However this code does not distinguish between the exception and param lists, and assumes (incorrectly) that they will contain the same fields.

I could work around this issue with a small code change, but it then fails in other places instead. More investigation is required.

hxtree commented 3 years ago

+1 happening here https://github.com/ouxsoft/LivingMarkup . Will have to comment out the EXCLUDE_SYMBOLS to see.