ReStructuredText and Sphinx bridge to Doxygen

Overview

Breathe

Packagers: PGP signing key changes for Breathe >= v4.23.0. https://github.com/michaeljones/breathe/issues/591

This is an extension to reStructuredText and Sphinx to be able to read and render the Doxygen xml output.

Download

Breathe is available from github and PyPI, the Python Package Index. It can be installed with:

pip install breathe

Documentation

The documentation is available here. Thank you to the people running Read the Docs for such an excellent service.

The source for the documentation is in the documentation folder if you want to built it and read it locally.

Note

Breathe does not always get the attention it deserves but I am keen to keep it moving forward. If you report an issue, please keep reminding me about it until it is fixed. I should be better at this but in silence I tend to move to other things so keep reminding me.

Testing

The testsuite can be run with:

make dev-test

The documentation also does a good effort of covering the available functionality with different examples. To build the documentation, run:

make

This will run doxygen over the example code and then run the Breathe documentation. View the results at:

documentation/build/html/index.html

Further to this if you want to compare the current documentation output against a previous state in order to check for regressions there is a compare script in the documentation folder. It takes two arguments which are two commit references that you'd like to compare. This means that all your changes have to be committed first. Also the script does not resolve state dependent references like HEAD so provide concrete commit references like sha1s or branch names. A typical example is to compare your current branch output to master:

# Make sure all your changes are committed first
cd documentation
./compare master my-branch

This will do a checkout and build at each commit and then run meld against the resulting directories so you can see the differences introduced by your branch.

Requirements

Development is currently done with:

  • Python 3.5
  • Docutils 0.12
  • Sphinx 2.3.1
  • Doxygen 1.8.4

Doxygen 1.5.1 seems to produce xml with repeated sections which causes Breathe some confusion. Not sure when this was resolved but it might be best to go for the latest possible.

Mailing List Archives

The archive for the Google groups list can be found here.

The previous mailing list was on librelist.com and the archives are available here.

Please post new questions as GitHub issues.

Examples

Examples of Breathe used by other projects:

If you have an example you would like listed here, please make a github issue with the details.

Alternatives

Breathe is not the only solution to this problem. These are the alternatives that we know about. We are very happy to list others if you'd like to provide a link in a GitHub issue.

Release

Command for releasing source bundle & wheel to PyPI:

python setup.py sdist bdist_wheel upload

Credits

Breathe is currently maintained by vermeeren and was formerly maintained by michaeljones & vitaut, contributors include:

Thanks to:

  • Dimitri van Heesch for Doxygen.
  • Georg Brandl for Sphinx.
  • David Goodger for Docutils and reStructuredText.

Change Log

Inspired by Keepachangelog.com.

  • Unreleased - Breathe v4.27.0
    • Add various specifiers to functions and variables. #628
    • Add multiply inherited class for PHP objects. #630
  • 2021-01-21 - Breathe v4.26.1
    • Fix doxygenfile causing duplicate IDs for unspecified sections. #622
    • Fixes for doxygenfunction (friend keyword, friend class, arg checks). #623
  • 2021-01-08 - Breathe v4.26.0
    • Add test for ellipsis ('...') in args. #610
    • Sphinx 3.4.x compatibility. #617
    • Adapt friendclass to Doxygen 1.9. #618
  • 2020-12-16 - Breathe v4.25.1
    • Addendum to #606, for functions with '...'. #609
  • 2020-12-15 - Breathe v4.25.0
    • Add support for parblock parsing and rendering. #603
    • Allow lookup in doxygenfunction without writing param names. #606
  • 2020-12-01 - Breathe v4.24.1
    • Fix anchors on pages generated by Doxygen >= 1.8.17. #602
  • 2020-11-15 - Breathe v4.24.0
    • Update CI for Sphinx 3.3.x and fix test mock. #597
    • Add support for xrefitem based page generation (doxygenpage). #596
  • 2020-10-20 - Breathe v4.23.0
    • Add initial xrefsect support. #589
  • 2020-09-26 - Breathe v4.22.1
    • Fix anonymous struct/union usage in C domain. #585
  • 2020-09-19 - Breathe v4.22.0
    • Fix Read the Docs build (again). #576
    • New boolean breathe_show_enumvalue_initializer option specifying whether value of enumvalue should be displayed. #581
  • 2020-09-10 - Breathe v4.21.0
    • Fix Read the Docs build. #567
    • Document doxygenclass template specialisation spacing. #570
    • Update upper Sphinx release to <3.4. #571
    • Reuse breathe.__version__ in setup.py. #572
    • Document :inner: for the doxygengroup section. #573
    • Add support for verbatim inline elements. #560
    • Fix wrong refid when Doxygen SEPARATE_MEMBER_PAGES is YES. #566
  • 2020-08-19 - Breathe v4.20.0
    • Allow Sphinx 3.2. #561
    • Update CI scripts with new Sphinx versions. #552
    • Add support for C# using sphinx-csharp. #550
    • Doc, fix typo, :source: -> :project:. #551
    • Add support for innergroup. #556
    • Avoid duplicate doxygen targets when debug tracing. #563
    • Remove Travis badge from README file. #564
  • 2020-06-17 - Breathe v4.19.2
    • Fix crash when visiting typedef. #547
  • 2020-06-08 - Breathe v4.19.1
    • Mark package as compatible with Sphinx 3.1.
  • 2020-06-07 - Breathe v4.19.0
    • Refactoring. #528
    • Make debug config variables available in conf.py. #533
    • Fix warning formatting for function lookup. #535
    • Correctly reverse nested namespaces in get_qualification. #540
  • 2020-05-10 - Breathe v4.18.1
    • Fix friend class rendering and allow friend struct. #522
    • Add extern examples to doc and remove variable hack. #526
    • Render function candidates without using Sphinx directives. #524
  • 2020-05-02 - Breathe v4.18.0
    • Support tiles in verbatim blocks. #517
  • 2020-05-01 - Breathe v4.17.0
    • Scoped rendering, better integration with Sphinx, misc fixes. #512
  • 2020-04-19 - Breathe v4.16.0
    • Strictly depend on Sphinx's minor version. #498
    • Simplifications and fixes, use more of modern Sphinx natively. #503
    • Add section option to the doxygen(auto)file directive. #501
    • Fix link generation when enum is inside a group (enum FQDN). #508
    • Fix creation of LaTeX math formulas. #506
    • Improve documentation for doxygen(auto)file section option. #509
  • 2020-04-07 - Breathe v4.15.0
    • Add license file to distribution. #492
    • Update for Sphinx 3. #491
  • 2020-04-07 - Breathe v4.14.2
    • Add GitHub actions. #474
    • Fixes to use Sphinx 2.4.4. #486
    • Add nose to python development requirements. #484.
    • Switch to pytest from nose. #487
  • 2020-02-02 - Breathe v4.14.1
    • Use sphinx core instead of mathbase ext. #469
    • Fix test failure for Sphinx >= 2.2.2. #472
    • Update travis to Sphinx 2.3.1. #471
  • 2019-11-26 - Breathe v4.14.0
    • Add events attribute to MockApp. #452
    • Add bit field support for C/C++. #454
    • Add alias and variable template support. #461
  • 2019-08-01 - Breathe v4.13.1
    • Fix for template method pointer parameter issue. #449
  • 2019-04-23 - Breathe v4.13.0.post0
    • Drop support for python 2, require Sphinx >= 2.0. #432
  • 2019-04-21 - Breathe v4.13.0
    • Adapt to upcoming Sphinx 2.0. #411
    • Add support for rendering parameter direction information. #428
  • 2019-03-15 - Breathe v4.12.0
    • Adapt to Sphinx 1.8. #410
    • Let Sphinx handle more things. #412
    • Use standard windows EOL for batch file. #417
    • Fix flake8 F632 warnings. #418
    • Update dep versions in readme, setup, requirements. #419
    • Add option to render function parameters after the description. #421
    • Remove spurious "typedef" in type declaration when using "using". #424
  • 2018-12-11 - Breathe v4.11.1
    • Sphinxrenderer: handle typeless parameters gracefully. #404
  • 2018-10-31 - Breathe v4.11.0
    • Fix typo in quickstart. #393
    • Add support for QtSignals. #401
  • 2018-08-07 - Breathe v4.10.0
    • Explicitly use Sphinx 1.7.5 for CI and dev. #385
    • Print filename when printing ParserException. #390
  • 2018-06-03 - Breathe v4.9.1
    • Don't append separator for paragraph type. #382
  • 2018-06-01 - Breathe v4.9.0
    • Render newlines as separate paragraphs. #380
  • 2018-05-26 - Breathe v4.8.0
    • Add quiet option to apidoc. #375
    • Add PHP domain. #351
    • Keep templates on adjacent lines. #300
    • Show reference qualification for methods. #332
    • Adapt tests/CI to newest Sphinx version. #377
    • More robust name regex in renderer. #370
    • Show base classes using Sphinx's cpp domain. #295
    • Fix domain detection when rendering groups. #365
    • Return parallel_{read,write}_safe true for Sphinx's -j. #376
  • 2017-10-09 - Breathe v4.7.3
    • Support for enums in the cpp domain.
    • Handle case where compoundref does not have a refid value associated.
  • 2017-08-15 - Breathe v4.7.2
    • Fix issue with packaging on Python 2.7 with wheels.
  • 2017-08-13 - Breathe v4.7.1
    • Fixed bug regarding code snippets inside Doxygen comments.
  • 2017-08-09 - Breathe v4.7.0
    • New outtypes option to prevent documenting namespace and files
    • New boolean breathe_show_define_initializer option specifying whether value of macros should be displayed.
    • New boolean breathe_use_project_refids option controlling whether the refids generated by breathe for doxygen elements contain the project name or not.
    • Fixed
      • Support for Sphinx 1.6
  • 2017-02-25 - Breathe v4.6.0
    • Support for the Interface directive
    • Display the contents of defines
  • 2017-02-12 - Breathe v4.5.0
    • Improve handling of c typedefs
    • Support new desc_signature_line node
    • Add --project flag to breathe-apidoc helper
    • Dropped testing for Python 3.3 and added 3.6
  • 2016-11-13 - Breathe v4.4.0
    • Improve single line parameter documentation rendering
  • 2016-11-05 - Breathe v4.3.1
    • Version bump package confusion with wheel release
  • 2016-11-05 - Breathe v4.3.0
    • Rewritten rendering approach to use the visitor pattern
    • Dropped support for 2.6 & added testing for 3.5
    • Fixed
      • Issue with running breathe-apidoc for the first time.
      • Improved handling of qualifiers, eg. const & volatile.
      • Supports functions in structs
      • Supports auto-doxygen code path on Windows
  • 2016-03-19 - Breathe v4.2.0
    • Added
      • Output links to a class' parents & children.
      • Support for Sphinx's needs_extensions config option.
      • breathe-apidoc script for generating ReStructuredText stub files with Breathe directives from doxygen xml files.
    • Fixed
      • Handling default values in parameter declarations
      • Output order not being reproducible due to iteration over Set.
      • Handling of multiple pointers and references
      • SEVERE: Duplicate ID warnings when using function overloads.
      • Use project name for link references when using default project. So we use the project name instead of 'project0'.
  • 2015-08-27 - Breathe v4.1.0
    • Added
      • breathe_doxygen_config_options config variable which allows for adding more config lines to the doxygen file used for the auto-directives.
    • Fixed
      • Display of array & array reference parameters for functions.
      • Handling of links to classes with template arguments.
      • Handling of unnamed enums in C.
      • Naming of template parameter section.
      • Finding functions that are within groups.
      • Rendering of 'typename' and 'class' keywords for templates.
  • 2015-04-02 - Breathe v4.0.0
    • Significant work on the code base with miminal reStructureText interface changes. To be documented.
  • 2014-11-09 - Breathe v3.2.0
    • Nothing Added, Deprecated or Removed
    • Fixed
      • Changed docutils/Sphinx node usage to fix latex/pdf output.
      • When checking for path separators check for both / and \ regardless of the platform.
      • KeyError when using auto directives without specifying the :project: option even though the default project config setting was set.
      • Use of doxygenfunction no longer inappropriately triggers the duplicate target check and fails to output link targets.
      • Support for inline urls in the doxygen comments.
      • Support for array notation in function parameters.
      • Reduced intention by changing section-defs to use container & rubric nodes rather than desc nodes with signatures & content. Now headings like 'Public Functions' appear inline with their subject matter.
  • 2014-09-07 - Breathe v3.1.0
    • Nothing Deprecated or Removed
    • Added
      • The doxygenclass directive can now reference template specialisations by specifying the specialisation in the argument name.
    • Fixed
      • Displaying function parameters for Qt slots output. Previously they were missing even though Qt Slots are essentially just functions.
      • Displaying headings from doxygen comments as emphasized text.
      • Crash when generating warning about being unable to find a define, variable, enum, typedef or union.
      • Only output the definition name for a function parameter if the declartion name is not available. Previously, where they were both available we were getting two names next to each other for no good reason.
  • 2014-08-04 - Breathe v3.0.0
    • Improve output of const, volatile, virtual and pure-virtual keywords.
    • Fix css class output for HTML so that object types rather than names are output as the css classes. eg. 'function' instead of 'myFunction'.
    • Fix issue with Breathe getting confused over functions appearing in header and implementation files.
    • Improve matching for overloaded functions when using doxygenfunction directive. Also, provide a list of potential matches when no match is found.
    • Improved :members: implementation to handle inner classes properly.
    • Updated doxygenstruct to share the doxygenclass implementation path which grants it the options from doxygenclass directive.
    • Added :outline: option support to doxygengroup & doxygennamespace directives.
    • Added doxygennamespace directive.
    • Added :undoc-members: option to doxygenclass & doxygengroup directives.
    • Breaking change: Removed :sections: option for doxygenclass & doxygengroup directives and replaced it with :members:, :protected-members: and :private-members:, and changed breathe_default_sections config variable to breathe_default_members. This is designed to more closely match the Sphinx autodoc functionality and interface.
  • 2014-06-15 - Breathe v2.0.0
    • Add compare script for checking changes to documentation caused by changes in the implementation.
    • Switched to https reference for MathJax Javascript.
    • Breaking change: Change autodoxygen* directives to require explicitly declared source files in the conf.py rather than attempting to detect them from the directive arguments.
    • Switch documentation hosting to ReadTheDocs.org.
    • Breaking change: Switch to assuming all relative paths are relative to the directory holding the conf.py file. Previously, it would assume they were relative to the user's current working directory. This breaks projects which use separate build & source directories.
    • Add doxygenunion directive.
    • Add doxygengroup directive.
    • Add support for lists in the output. They were previously ignored.
    • Updated implementation to use the docutils nodes that Sphinx does where possible.
  • Breathe v1.2.0
    • Change log not recorded.
Comments
  • [Proposal] switch to furo theme

    [Proposal] switch to furo theme

    Following the progress from the post-merging dialogue in #759

    • add logo for branding in favicon and nav menu title
    • remove all .. contents:: directives as they're redundant in the furo theme (ToC has an independent menu)
    • uniform some theme elements' colors (via custom CSS) to match the blue in breathe-doc.org
    • add the sphinx-copybutton extension. This popular ext from executablebooks automatically adds a "copy to clipboard" button to all code blocks (including those from C/C++ sources).
    opened by 2bndy5 46
  • documentation overhaul

    documentation overhaul

    Initially, this PR was meant to just fix all warnings/error in the docs builds, so we can catch bugs like #803 before release. In the process of resolving the warnings/errors, I had to resolve #811 by forcing both RTD and the docs CI workflow to use doxygen v1.9.3 (latest stable as of this writing).

    I recommend inspecting the docs build artifacts from this PR's CI run(s).

    Changes

    • upload the doxygen XML output as well as the built breathe docs as artifacts for the docs CI workflow

    • fix some errors present in the C++ test sources (at least those that weren't done on purpose). I also went through and suppressed any warnings emitted by doxygen for all the examples (tinyXML project is an absolute mess).

    • update mathjax_path in conf.py. It was broken since mathjax changed it distribution URL (I think for mathjax@v2)

    • fix some errors present in the rst sources (mostly the testing grounds).

      Most of these errors related to improper use of namespaced members without documenting the necessary namespace (see bottom of domains.rst as example).

      Others were simply duplicated IDs declared despite the use of .. cpp:namespace:: (probably not applicable to C only memebers). Thus, I had to inject some :no-link: options to a few directives' documentation.

    • enforce code block highlighting on all literal code snippets

    • finally, change the make html command to use sphinx-build -v -W -E which will make the CI fail if the docs encounter any new warnings or errors from future contributions.

      I had to remove the -n (sphinx's "nit-picky" mode) since all errors and warnings from that option are unavoidable (& usually ignored by RTD). With -n and -W options enabled, the docs' build will not/never pass.

    opened by 2bndy5 37
  • Autodoxygen source option not known

    Autodoxygen source option not known

    As of the current master v1.2 (b30dee9b4d83), I am now seeing a lof of breakage with the autodoxygenindex directive:

    /home/scopatz/pyne/docs/cppapi/rxname.rst:4: ERROR: Error in "autodoxygenindex" directive:
    unknown option: "source".
    

    I don't know when this snuck in, but now breathe doesn't work at all with automatic tools.

    opened by scopatz 32
  • Code blocks from doxygen are not highlighted correctly

    Code blocks from doxygen are not highlighted correctly

    Code blocks in doxygen are rendered as literal blocks without syntax highlighting. The reason is, that the doxygen XML output does not contain information about the used code domain.

    The example code

    bool myFunction(int parameter)
    {
        if (parameter > 0)
        {
            return false;
        }
    
        return true;
    }
    

    produces the following XML output

    <para><programlisting><codeline><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>myFunction(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>parameter)</highlight></codeline>
    <codeline><highlight class="normal">{</highlight></codeline>
    <codeline><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(parameter<sp/>&gt;<sp/>0)</highlight></codeline>
    <codeline><highlight class="normal"><sp/><sp/><sp/><sp/>{</highlight></codeline>
    <codeline><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
    <codeline><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
    <codeline><highlight class="normal"></highlight></codeline>
    <codeline><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
    <codeline><highlight class="normal">}</highlight></codeline>
    </programlisting></para>
    

    The problem could be probably solved by using embedded rst but at the price of not having links to documented items.

    bug code 
    opened by rweickelt 25
  • Project maintainence

    Project maintainence

    Hi everyone,

    I think it has come time that I admit to myself that I will not be returning to a more active role in this project. I am very proud of the little community here, very grateful to those who have contributed and hugely happy to see people posting, helping each other and seeking to improve Breathe.

    I apologise for my lack of activity. I have long felt that I can try to help out as much as I can but it is becoming harder and harder to step back in.

    It is great to see so many helping out. If there is anything I can do to help this project continue without my active involved please let me know in this thread.

    Kind regards, Michael

    discussion 
    opened by michaeljones 23
  • autodoc-like directive for doxygenindex

    autodoc-like directive for doxygenindex

    First off, let me thank you @michaeljones (and others) for such an awesome project. This really is occupies that rare space of being super useful, quite beautiful, and very functional.

    In any event, one thing that I noticed was missing from breathe was an autodoc-like directive. Specifically, there wasn't an automodule analogy. Since there didn't seem to be an issue related to adding this on the issue tracker I just went ahead and implemented it.

    The new directive may be used as follows:

    .. autodoxygenindex:: ../path/to/myfile.h
        :project: myproj
    

    This pull request only modifies the directives.py file and depends only on the standard library. This adds an AutoDoxygenIndexDirective class which subclasses from the DoxygenIndexDirective class. It adopts the strategy that the doxygen generated XML files are temporary. Thus the standard library tempfile module is used to create a new space for creating a cfg file, running doxygen, using breathe and sphinx to generate the actual documentation, and then finally cleaning up this temporary dir.

    I have found that it works quite nicely and saves me a lot of manual effort. In theory, other autodoxygenXXX directives for the various doxygen directives. These would be simple enough to base off of AutoDoxygenIndexDirective. However, the only other one I can think that would really make sense for this would be doxygenfile.

    As an added feature, the rst aliases are added automatically and so \rst and \endrst may be used in any autodoxygen'd file.

    I hope you like it! Thanks again for the great project.

    opened by scopatz 21
  • Linking to dot graphs

    Linking to dot graphs

    It would be really handy to have an option to the renderer that would link back to graphviz output from the HTML renderer of Doxygen. What I was thinking is an app-level option that takes in the path to the html output of Doxygen, and then an :image: option or some such available to classes (and the index directive too, I suppose), templated classes, etc that simply does an img link back to that location.

    The app-level option the user gives would simply be the precursor part of the URL that is generated for the img tag. Make sense?

    If I want to implement this, what steps should I take? I fumbled around for #44, and I never really figured out how to bolt options in to do it. Any pointers you can provide to help me bootstrap this would be appreciated. I'll take on the task once you help me get the ball rolling.

    enhancement code 
    opened by hobu 21
  • Add Sphinx-like apidoc script

    Add Sphinx-like apidoc script

    This will generate documentation with minimal indexing. Imagine something like doxygen. Based on sphinx-apidoc.

    Tests: Packaged on Arch Linux and runs correctly.

    Try and go for a review...

    opened by ishitatsuyuki 20
  • How do I organize larger APIs?

    How do I organize larger APIs?

    I've been able to generate a nice index of all of the classes and functions, but when I generate pure HTML doxygen documentation I am able to view the functions by group, module, namespaces, classes, and files. I went through the Breathe documentation and didn't see anything specific on how to do the same, or examples explaining how to organize things similarly to how python itself does it.

    More specifically, for example, I have multiple classes and free functions organized into two groups and I would like each to show up as their own item, possibly in the same way as a python module, on the table of contents.

    Is there any way to achieve this?

    opened by ahundt 20
  • Fix code block highlighting

    Fix code block highlighting

    resolves #123

    As per https://github.com/michaeljones/breathe/issues/123#issuecomment-963400609

    The highlight directive and highlight_language config option are still respected (in that order) when the doxygen \code cmd (or MD fenced blocks) do not specify the optional arg.

    @code{.py}
    # uses pygments' lexer for python
    @endcode
    
    @code
    // uses pygments defaults for language highlighting (kinda like an auto-detect)
    @endcode
    
    bug code 
    opened by 2bndy5 19
  • Can't link to nested classes/typedefs

    Can't link to nested classes/typedefs

    Links to nested classes created with :cpp:class: role don't seem to work. Same for typedefs defined in class scope (links to top-level typedefs work with https://github.com/michaeljones/breathe/pull/150).

    C++ code:

    /**
     Test class.
     */
    class C {
     public:
      /** Test typedef. */
      typedef int U;
    
      /** Nested class. */
      class V {};
    };
    

    RST code:

    Test
    ====
    
    .. doxygenclass:: C
       :members:
    
    Link to class :cpp:class:`C`.
    
    Link to class :cpp:class:`C::V`.
    
    Link to typedef :cpp:type:`C::U`.
    

    The resulting HTML contains a link to class C, but not to class C::V or typedef C::U.

    The complete example that reproduces the problem is also available here: https://github.com/vitaut/breathe-test/tree/32956f067f5870a0fc29808741af711e0383d029

    opened by vitaut 18
  • Add anchor for groups

    Add anchor for groups

    Looking at https://breathe.readthedocs.io/en/latest/groups.html I see an anchor # for the class with https://breathe.readthedocs.io/en/latest/groups.html#_CPPv4NUt9_ex_groups20UserDefinedGroupTestE but not for "Custom Group".

    opened by t-b 0
  • 4.34.0: pytest is failing in some units

    4.34.0: pytest is failing in some units

    I'm packaging your module as an rpm package so I'm using the typical PEP517 based build, install and test cycle used on building packages from non-root account.

    • python3 -sBm build -w --no-isolation
    • because I'm calling build with --no-isolation I'm using during all processes only locally installed modules
    • install .whl file in </install/prefix>
    • run pytest with PYTHONPATH pointing to sitearch and sitelib inside </install/prefix>

    Here is pytest output:

    + PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages
    + /usr/bin/pytest -ra
    =========================================================================== test session starts ============================================================================
    platform linux -- Python 3.8.15, pytest-7.2.0, pluggy-1.0.0
    rootdir: /home/tkloczko/rpmbuild/BUILD/breathe-4.34.0
    collected 21 items
    
    tests/test_renderer.py ..FFFFFFFFFFFFF...                                                                                                                            [ 85%]
    tests/test_utils.py ...                                                                                                                                              [100%]
    
    ================================================================================= FAILURES =================================================================================
    _____________________________________________________________________________ test_render_func _____________________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_func(app):
            member_def = WrappedMemberDef(
                kind="function",
                definition="void foo",
                type_="void",
                name="foo",
                argsstring="(int)",
                virt="non-virtual",
                param=[
                    WrappedParam(type_=WrappedLinkedText(content_=[WrappedMixedContainer(value="int")]))
                ],
            )
    >       signature = find_node(render(app, member_def), "desc_signature")
    
    tests/test_renderer.py:321:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2489: in dispatch_memberdef
        return self.visit_function(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:1981: in visit_function
        nodes = self.handle_declaration(node, declaration)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/cpp.py:7345: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7ac9951460>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    
    ___________________________________________________________________________ test_render_typedef ____________________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_typedef(app):
            member_def = WrappedMemberDef(
                kind="typedef", definition="typedef int foo", type_="int", name="foo"
            )
    >       signature = find_node(render(app, member_def), "desc_signature")
    
    tests/test_renderer.py:344:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2493: in dispatch_memberdef
        return self.visit_typedef(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2112: in visit_typedef
        return self.handle_declaration(node, declaration)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/cpp.py:7345: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7ac992c460>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    
    __________________________________________________________________________ test_render_c_typedef ___________________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_c_typedef(app):
            member_def = WrappedMemberDef(
                kind="typedef", definition="typedef unsigned int bar", type_="unsigned int", name="bar"
            )
    >       signature = find_node(render(app, member_def, domain="c"), "desc_signature")
    
    tests/test_renderer.py:352:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2493: in dispatch_memberdef
        return self.visit_typedef(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2112: in visit_typedef
        return self.handle_declaration(node, declaration)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/c.py:3250: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7aca033d00>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    
    ______________________________________________________________________ test_render_c_function_typedef ______________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_c_function_typedef(app):
            member_def = WrappedMemberDef(
                kind="typedef",
                definition="typedef void* (*voidFuncPtr)(float, int)",
                type_="void* (*",
                name="voidFuncPtr",
                argsstring=")(float, int)",
            )
    >       signature = find_node(render(app, member_def, domain="c"), "desc_signature")
    
    tests/test_renderer.py:364:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2493: in dispatch_memberdef
        return self.visit_typedef(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2112: in visit_typedef
        return self.handle_declaration(node, declaration)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/c.py:3250: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7ac9559670>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    
    _________________________________________________________________________ test_render_using_alias __________________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_using_alias(app):
            member_def = WrappedMemberDef(
                kind="typedef", definition="using foo = int", type_="int", name="foo"
            )
    >       signature = find_node(render(app, member_def), "desc_signature")
    
    tests/test_renderer.py:381:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2493: in dispatch_memberdef
        return self.visit_typedef(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2112: in visit_typedef
        return self.handle_declaration(node, declaration)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/cpp.py:7345: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7ac9092520>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    
    __________________________________________________________________________ test_render_const_func __________________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_const_func(app):
            member_def = WrappedMemberDef(
                kind="function",
                definition="void f",
                type_="void",
                name="f",
                argsstring="() const",
                virt="non-virtual",
                const="yes",
            )
    >       signature = find_node(render(app, member_def), "desc_signature")
    
    tests/test_renderer.py:395:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2489: in dispatch_memberdef
        return self.visit_function(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:1981: in visit_function
        nodes = self.handle_declaration(node, declaration)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/cpp.py:7345: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7ac90200d0>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    
    _________________________________________________________________________ test_render_lvalue_func __________________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_lvalue_func(app):
            member_def = WrappedMemberDef(
                kind="function",
                definition="void f",
                type_="void",
                name="f",
                argsstring="() &",
                virt="non-virtual",
                refqual="lvalue",
            )
    >       signature = find_node(render(app, member_def), "desc_signature")
    
    tests/test_renderer.py:409:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2489: in dispatch_memberdef
        return self.visit_function(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:1981: in visit_function
        nodes = self.handle_declaration(node, declaration)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/cpp.py:7345: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7ac95323d0>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    
    _________________________________________________________________________ test_render_rvalue_func __________________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_rvalue_func(app):
            member_def = WrappedMemberDef(
                kind="function",
                definition="void f",
                type_="void",
                name="f",
                argsstring="() &&",
                virt="non-virtual",
                refqual="rvalue",
            )
    >       signature = find_node(render(app, member_def), "desc_signature")
    
    tests/test_renderer.py:423:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2489: in dispatch_memberdef
        return self.visit_function(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:1981: in visit_function
        nodes = self.handle_declaration(node, declaration)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/cpp.py:7345: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7ac8947c70>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    
    ______________________________________________________________________ test_render_const_lvalue_func _______________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_const_lvalue_func(app):
            member_def = WrappedMemberDef(
                kind="function",
                definition="void f",
                type_="void",
                name="f",
                argsstring="() const &",
                virt="non-virtual",
                const="yes",
                refqual="lvalue",
            )
    >       signature = find_node(render(app, member_def), "desc_signature")
    
    tests/test_renderer.py:438:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2489: in dispatch_memberdef
        return self.visit_function(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:1981: in visit_function
        nodes = self.handle_declaration(node, declaration)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/cpp.py:7345: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7ac896f1f0>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    
    ______________________________________________________________________ test_render_const_rvalue_func _______________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_const_rvalue_func(app):
            member_def = WrappedMemberDef(
                kind="function",
                definition="void f",
                type_="void",
                name="f",
                argsstring="() const &&",
                virt="non-virtual",
                const="yes",
                refqual="rvalue",
            )
    >       signature = find_node(render(app, member_def), "desc_signature")
    
    tests/test_renderer.py:453:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2489: in dispatch_memberdef
        return self.visit_function(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:1981: in visit_function
        nodes = self.handle_declaration(node, declaration)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/cpp.py:7345: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7ac8a99a30>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    
    _____________________________________________________________________ test_render_variable_initializer _____________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_variable_initializer(app):
            member_def = WrappedMemberDef(
                kind="variable",
                definition="const int EOF",
                type_="const int",
                name="EOF",
                initializer=WrappedMixedContainer(value="= -1"),
            )
    >       signature = find_node(render(app, member_def), "desc_signature")
    
    tests/test_renderer.py:465:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2495: in dispatch_memberdef
        return self.visit_variable(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2175: in visit_variable
        return self.handle_declaration(node, declaration, options=options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/cpp.py:7345: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7ac8a17130>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    
    ______________________________________________________________________ test_render_define_initializer ______________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_define_initializer(app):
            member_def = WrappedMemberDef(
                kind="define",
                name="MAX_LENGTH",
                initializer=WrappedLinkedText(content_=[WrappedMixedContainer(value="100")]),
            )
            signature_w_initializer = find_node(
    >           render(app, member_def, show_define_initializer=True), "desc_signature"
            )
    
    tests/test_renderer.py:476:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2503: in dispatch_memberdef
        return self.visit_define(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2058: in visit_define
        return self.handle_declaration(node, declaration, declarator_callback=add_definition)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/c.py:3250: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7ac8bf0af0>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    
    ____________________________________________________________________ test_render_define_no_initializer _____________________________________________________________________
    
    app = <SphinxTestApp buildername='html'>
    
        def test_render_define_no_initializer(app):
            sphinx.addnodes.setup(app)
            member_def = WrappedMemberDef(kind="define", name="USE_MILK")
    >       signature = find_node(render(app, member_def), "desc_signature")
    
    tests/test_renderer.py:495:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    tests/test_renderer.py:306: in render
        return renderer.render(member_def)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2602: in render
        result = method(self, node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2503: in dispatch_memberdef
        return self.visit_define(node)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:2058: in visit_define
        return self.handle_declaration(node, declaration, declarator_callback=add_definition)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:667: in handle_declaration
        nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
    ../../BUILDROOT/python-breathe-4.34.0-4.fc35.x86_64/usr/lib/python3.8/site-packages/breathe/renderer/sphinxrenderer.py:619: in run_directive
        nodes = directive.run()
    /usr/lib/python3.8/site-packages/sphinx/domains/c.py:3250: in run
        return super().run()
    /usr/lib/python3.8/site-packages/sphinx/directives/__init__.py:263: in run
        nested_parse_with_titles(self.state, self.content, contentnode)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    state = <test_renderer.MockState object at 0x7f7ac8bd4eb0>, content = None, node = <desc_content: >
    
        def nested_parse_with_titles(state: Any, content: StringList, node: Node) -> str:
            """Version of state.nested_parse() that allows titles and does not require
            titles to have the same decoration as the calling document.
    
            This is useful when the parsed content comes from a completely different
            context, such as docstrings.
            """
            # hack around title style bookkeeping
    >       surrounding_title_styles = state.memo.title_styles
    E       AttributeError: 'MockState' object has no attribute 'memo'
    
    /usr/lib/python3.8/site-packages/sphinx/util/nodes.py:335: AttributeError
    ------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
    # testroot: root
    # builder: html
    # srcdir: /tmp/pytest-of-tkloczko/pytest-585/root
    # outdir: /tmp/pytest-of-tkloczko/pytest-585/root/_build/html
    # status:
    Running Sphinx v5.3.0
    
    # warning:
    WARNING: node class 'toctree' is already registered, its visitors will be overridden
    WARNING: node class 'desc' is already registered, its visitors will be overridden
    WARNING: node class 'desc_signature' is already registered, its visitors will be overridden
    WARNING: node class 'desc_signature_line' is already registered, its visitors will be overridden
    WARNING: node class 'desc_content' is already registered, its visitors will be overridden
    WARNING: node class 'desc_inline' is already registered, its visitors will be overridden
    WARNING: node class 'desc_name' is already registered, its visitors will be overridden
    WARNING: node class 'desc_addname' is already registered, its visitors will be overridden
    WARNING: node class 'desc_type' is already registered, its visitors will be overridden
    WARNING: node class 'desc_returns' is already registered, its visitors will be overridden
    WARNING: node class 'desc_parameterlist' is already registered, its visitors will be overridden
    WARNING: node class 'desc_parameter' is already registered, its visitors will be overridden
    WARNING: node class 'desc_optional' is already registered, its visitors will be overridden
    WARNING: node class 'desc_annotation' is already registered, its visitors will be overridden
    WARNING: node class 'desc_sig_space' is already registered, its visitors will be overridden
    WARNING: node class 'desc_sig_name' is already registered, its visitors will be overridden
    WARNING: node class 'desc_sig_operator' is already registered, its visitors will be overridden
    WARNING: node class 'desc_sig_punctuation' is already registered, its visitors will be overridden
    WARNING: node class 'desc_sig_keyword' is already registered, its visitors will be overridden
    WARNING: node class 'desc_sig_keyword_type' is already registered, its visitors will be overridden
    WARNING: node class 'desc_sig_literal_number' is already registered, its visitors will be overridden
    WARNING: node class 'desc_sig_literal_string' is already registered, its visitors will be overridden
    WARNING: node class 'desc_sig_literal_char' is already registered, its visitors will be overridden
    WARNING: node class 'versionmodified' is already registered, its visitors will be overridden
    WARNING: node class 'seealso' is already registered, its visitors will be overridden
    WARNING: node class 'productionlist' is already registered, its visitors will be overridden
    WARNING: node class 'production' is already registered, its visitors will be overridden
    WARNING: node class 'index' is already registered, its visitors will be overridden
    WARNING: node class 'centered' is already registered, its visitors will be overridden
    WARNING: node class 'acks' is already registered, its visitors will be overridden
    WARNING: node class 'hlist' is already registered, its visitors will be overridden
    WARNING: node class 'hlistcol' is already registered, its visitors will be overridden
    WARNING: node class 'compact_paragraph' is already registered, its visitors will be overridden
    WARNING: node class 'glossary' is already registered, its visitors will be overridden
    WARNING: node class 'only' is already registered, its visitors will be overridden
    WARNING: node class 'start_of_file' is already registered, its visitors will be overridden
    WARNING: node class 'highlightlang' is already registered, its visitors will be overridden
    WARNING: node class 'tabular_col_spec' is already registered, its visitors will be overridden
    WARNING: node class 'pending_xref' is already registered, its visitors will be overridden
    WARNING: node class 'number_reference' is already registered, its visitors will be overridden
    WARNING: node class 'download_reference' is already registered, its visitors will be overridden
    WARNING: node class 'literal_emphasis' is already registered, its visitors will be overridden
    WARNING: node class 'literal_strong' is already registered, its visitors will be overridden
    WARNING: node class 'manpage' is already registered, its visitors will be overridden
    
    ============================================================================= warnings summary =============================================================================
    tests/test_renderer.py: 17 warnings
      /home/tkloczko/rpmbuild/BUILD/breathe-4.34.0/tests/test_renderer.py:122: DeprecationWarning: The frontend.OptionParser class will be replaced by a subclass of argparse.ArgumentParser in Docutils 0.21 or later.
        settings = frontend.OptionParser(components=(parsers.rst.Parser,)).get_default_values()
    
    tests/test_renderer.py: 1156 warnings
      /usr/lib64/python3.8/optparse.py:1000: DeprecationWarning: The frontend.Option class will be removed in Docutils 0.21 or later.
        option = self.option_class(*args, **kwargs)
    
    -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
    ========================================================================= short test summary info ==========================================================================
    FAILED tests/test_renderer.py::test_render_func - AttributeError: 'MockState' object has no attribute 'memo'
    FAILED tests/test_renderer.py::test_render_typedef - AttributeError: 'MockState' object has no attribute 'memo'
    FAILED tests/test_renderer.py::test_render_c_typedef - AttributeError: 'MockState' object has no attribute 'memo'
    FAILED tests/test_renderer.py::test_render_c_function_typedef - AttributeError: 'MockState' object has no attribute 'memo'
    FAILED tests/test_renderer.py::test_render_using_alias - AttributeError: 'MockState' object has no attribute 'memo'
    FAILED tests/test_renderer.py::test_render_const_func - AttributeError: 'MockState' object has no attribute 'memo'
    FAILED tests/test_renderer.py::test_render_lvalue_func - AttributeError: 'MockState' object has no attribute 'memo'
    FAILED tests/test_renderer.py::test_render_rvalue_func - AttributeError: 'MockState' object has no attribute 'memo'
    FAILED tests/test_renderer.py::test_render_const_lvalue_func - AttributeError: 'MockState' object has no attribute 'memo'
    FAILED tests/test_renderer.py::test_render_const_rvalue_func - AttributeError: 'MockState' object has no attribute 'memo'
    FAILED tests/test_renderer.py::test_render_variable_initializer - AttributeError: 'MockState' object has no attribute 'memo'
    FAILED tests/test_renderer.py::test_render_define_initializer - AttributeError: 'MockState' object has no attribute 'memo'
    FAILED tests/test_renderer.py::test_render_define_no_initializer - AttributeError: 'MockState' object has no attribute 'memo'
    =============================================================== 13 failed, 8 passed, 1173 warnings in 5.53s ================================================================
    

    Here is list of installed modules in build env

    Package                       Version
    ----------------------------- -----------------
    alabaster                     0.7.12
    appdirs                       1.4.4
    asn1crypto                    1.5.1
    attrs                         22.1.0
    Babel                         2.11.0
    bcrypt                        3.2.2
    Brlapi                        0.8.3
    build                         0.9.0
    cffi                          1.15.1
    charset-normalizer            3.0.1
    contourpy                     1.0.6
    cryptography                  38.0.4
    cssselect                     1.1.0
    cycler                        0.11.0
    distro                        1.8.0
    dnspython                     2.2.1
    docutils                      0.19
    exceptiongroup                1.0.0
    extras                        1.0.0
    fixtures                      4.0.0
    fonttools                     4.38.0
    gpg                           1.17.1-unknown
    idna                          3.4
    imagesize                     1.4.1
    importlib-metadata            5.1.0
    iniconfig                     1.1.1
    Jinja2                        3.1.2
    kiwisolver                    1.4.4
    libcomps                      0.1.19
    louis                         3.23.0
    lxml                          4.9.1
    MarkupSafe                    2.1.1
    matplotlib                    3.6.2
    mypy                          0.990
    mypy-extensions               0.4.3
    numpy                         1.23.1
    olefile                       0.46
    packaging                     21.3
    pbr                           5.9.0
    pep517                        0.13.0
    Pillow                        9.3.0
    pip                           22.3.1
    pluggy                        1.0.0
    ply                           3.11
    pyasn1                        0.4.8
    pyasn1-modules                0.2.8
    pycparser                     2.21
    Pygments                      2.13.0
    PyGObject                     3.42.2
    pyparsing                     3.0.9
    pytest                        7.2.0
    python-dateutil               2.8.2
    pytz                          2022.4
    PyYAML                        6.0
    requests                      2.28.1
    rpm                           4.17.0
    scour                         0.38.2
    setuptools                    65.6.3
    six                           1.16.0
    snowballstemmer               2.2.0
    Sphinx                        5.3.0
    sphinxcontrib-applehelp       1.0.2.dev20221204
    sphinxcontrib-devhelp         1.0.2.dev20221204
    sphinxcontrib-htmlhelp        2.0.0
    sphinxcontrib-jsmath          1.0.1.dev20221204
    sphinxcontrib-qthelp          1.0.3.dev20221204
    sphinxcontrib-serializinghtml 1.1.5
    testtools                     2.5.0
    tomli                         2.0.1
    tpm2-pkcs11-tools             1.33.7
    tpm2-pytss                    1.1.0
    typing_extensions             4.4.0
    urllib3                       1.26.12
    wheel                         0.38.4
    zipp                          3.11.0
    
    opened by kloczek 3
  • Callee/Caller Graph

    Callee/Caller Graph

    Hi,

    As noted in documentation/source/dot_graphs.rst "Unfortunately, the call and caller graphs are not provided by Doxygen's XML output."

    Is it possible this statement is no longer valid? looking at the XML files, the reference element seems to contain a call graph.

    Is it possible to mark this issue as a feature request and/or provide guidance on the best way to implement it?

    Thanks!

    opened by drorgl 0
  • Overwrite breathe_default_members in directive

    Overwrite breathe_default_members in directive

    I have a project where breathe_default_members = [..., "undoc-members"] is set (and I need to keep it like that). However, at some place in the documentation, I'd like to add a.. doxygenstruct` which should not include undocumented members. Is there some way to overwrite the default setting for a single directive to achieve that?

    If not, I think this would be a nice feature to add (for comparison, autodoc has flags like :no-undoc-members: for this.

    opened by luator 0
  • Disambiguate fuctions with equal name

    Disambiguate fuctions with equal name

    I'm working on the documentation of a C++ project using doxygen, sphinx and breathe. My issue is based on the following piece of library code:

    template <std::invocable<> Func> constexpr bool throws(Func &&) { return false; } // 1
    template <typename Xcp, std::invocable<> Func> constexpr bool throws(Func &&) { return false; } // 2
    

    It's irrelevant what the code really does. Notice that the signatures of throws only differ in the first template argument (deduced for 1, explicitly required for 2).

    Both functions bring their own documentation that I'd like to include. Here is what I tried and how it failed:

    .. doxygenfunction:: throws(Func &&)
    
    => 
    
    doc/api.rst:29: WARNING: doxygenfunction: Unable to resolve function "throws" with arguments (Func&&) in doxygen xml output for project "foo" from directory: cmake-build-gcc/doxygen.
    Potential matches:
    - template<std::invocable<> Func> constexpr auto throws(Func &&func)
    - template<typename Xcp, std::invocable<> Func> constexpr auto throws(Func &&func)
    
    .. doxygenfunction:: template <typename Exception, std::invocable<>> throws(Func&&)
    
    => 
    
    doc/api.rst:29: WARNING: doxygenfunction: Cannot find function "template <typename Exception, std::invocable<>> throws" in doxygen xml output for project "foo" from directory: cmake-build-gcc/doxygen
    
    .. doxygenfunction:: throws<Xcp>(Func&&)
    
    =>
    
    doc/api.rst:29: WARNING: doxygenfunction: Cannot find function "throws<Xcp>" in doxygen xml output for project "foo" from directory: cmake-build-gcc/doxygen
    

    I also noticed, that doxygen/index.xml only includes these two lines:

    ❯ xmllint doxygen/index.xml | grep throws
        <member refid="Throws_8h_1af0a40e9568574aaa201f0d0fa3c38fb1" kind="function"><name>throws</name></member>
        <member refid="Throws_8h_1a584c21211ad1bdc22d8060fd4591ee39" kind="function"><name>throws</name></member>
    

    Is there still some way to refer to the documentation of either functions? Or is there another workaround (e.g. involving file and line-numbers)?

    opened by m8mble 0
Releases(v4.34.0)
  • v4.34.0(Jun 20, 2022)

    • Treat .unparsed as plain text. #806
    • Remove unneeded type: ignore annotations. #813
    • Fix internal NodeFinder visitor for when non-Docutils nodes are present in the content of a directive. #812
    • Rename lint workflow. #814
    • Type check pygments and limit docutils stub version. #819
    • Convert dot files' relative path to absolute. #821
    • CI, update Sphinx versions to test. #834
    • CI, update for Sphinx 5.0.1. #846
    • Fix inconsistency in example. #843
    • Fix C# enum rendering crash. #849
    • Drop Sphinx 3 support, add Sphinx 5 support. #850
    • CICD: Disable python 3.6 for Sphinx master tests. #853
    • Populate default include text-node's data field instead of raw-source. #828
    Source code(tar.gz)
    Source code(zip)
    breathe-4.34.0.tar.gz.sig(566 bytes)
  • v4.33.1(Feb 14, 2022)

  • v4.33.0(Feb 14, 2022)

    • Fix duplicate static in variable declarations. #794
    • Update CICD for Sphinx 4.4.0 series. #795
    • Pin version of black in CICD and reformat files. #792
    • Fix code block highlighting. #760
    • Refactoring, cleanup and typing improvements. #802
    • Doxygen dot graphs to Sphinx graphviz. #757
    • Support externally hosted images. #705
    • Address a peculiarity in Doxygen aliases in doc. #770
    • Add flag to doxygengroup, doxygennamespace to display only the description. #718
    • Add support for MD block quotes with attribution(s). #759
    Source code(tar.gz)
    Source code(zip)
    breathe-4.33.0.tar.gz.sig(566 bytes)
  • v4.32.0(Jan 30, 2022)

    • Added breathe_doxygen_aliases config variable. #729
    • Render \remark/\remarks and \see/\sa using Sphinx/Docutils admonition style nodes. #756
    • Render C++ scoped enums differently than unscoped enums, and with their underlying type. #753
    • Render \retval lists using dedicated field list when Sphinx >= 4.3 is used. #749
    • Make .. doxygenfunction handle function template specializations. #750
    • Properly handle field-lists and admonitions in the detailed description of classes and functions. #764
    • Add :confval:`breathe_show_include` to control whether #include lines are shown. Defaults to True. #725
    • Fix sys.path adjustment in doc config. #734
    • Fix sphinx renderer variable and function visitors for C#. #737
    • Fix sphinx renderer class visitor for C#. #738
    • Auto-format python code with black. #743
    • Extend flake8 and address some style issues. #745
    • Fix black formatting warning. #747
    • Update Sphinx and Python versions tested against. #765
    • Fix friend functions for older Doxygen versions. #769
    • Doxygen >= 1.9.2 supports C++20 concepts, add support for them. #779
    • Change the way directives are added to adhere to the interface, e.g., avoiding myst-parser to crash. #780
    • Improved list of included files (with cross-references for local includes). #763
    • Update flake8 and mypy related stuff. #781
    • Update readme with logo and sponsorship info. #784
    • Store version number in both setup.py and init.py. #789
    • CICD: lint: continue with other jobs if black fails. #791
    Source code(tar.gz)
    Source code(zip)
    breathe-4.32.0.tar.gz.sig(566 bytes)
  • v4.31.0(Sep 14, 2021)

    • Collapse multiple retvals into a single bullet list. #697
    • Fix mypy issues on CI. #731
    • Print usage message from 'compare' doc script. #727
    • Test against Sphinx 4.0.3, 4.1.2 and 4.1.x branch. #721
    • Fix duplicate static in function declarations. #717 #720
    • Directive refactoring. #698
    • Handle parsing errors. #711
    • Make doxygenfunction more robust when matching parameters. #722 #723
    • Separate, link and style the changelog. #735
    • Update changelog and readme ahead of release. #739
    • CICD: Track Sphinx 4.2.x development series. #741
    Source code(tar.gz)
    Source code(zip)
    breathe-4.31.0.tar.gz.sig(566 bytes)
  • v4.30.0(May 6, 2021)

  • v4.29.2(Apr 30, 2021)

  • v4.29.1(Apr 23, 2021)

  • v4.29.0(Apr 9, 2021)

Sphinx-performance - CLI tool to measure the build time of different, free configurable Sphinx-Projects

CLI tool to measure the build time of different, free configurable Sphinx-Projec

useblocks 11 Nov 25, 2022
Documentation generator for C++ based on Doxygen and mosra/m.css.

mosra/m.css is a Doxygen-based documentation generator that significantly improves on Doxygen's default output by controlling some of Doxygen's more unruly options, supplying it's own slick HTML+CSS generation and adding a fantastic live search feature.

Mark Gillard 109 Dec 7, 2022
Watch a Sphinx directory and rebuild the documentation when a change is detected. Also includes a livereload enabled web server.

sphinx-autobuild Rebuild Sphinx documentation on changes, with live-reload in the browser. Installation sphinx-autobuild is available on PyPI. It can

Executable Books 440 Jan 6, 2023
Main repository for the Sphinx documentation builder

Sphinx Sphinx is a tool that makes it easy to create intelligent and beautiful documentation for Python projects (or other documents consisting of mul

null 5.1k Jan 2, 2023
A curated list of awesome tools for Sphinx Python Documentation Generator

Awesome Sphinx (Python Documentation Generator) A curated list of awesome extra libraries, software and resources for Sphinx (Python Documentation Gen

Hyunjun Kim 831 Dec 27, 2022
Main repository for the Sphinx documentation builder

Sphinx Sphinx is a tool that makes it easy to create intelligent and beautiful documentation for Python projects (or other documents consisting of mul

null 5.1k Jan 4, 2023
Sphinx theme for readthedocs.org

Read the Docs Sphinx Theme This Sphinx theme was designed to provide a great reader experience for documentation users on both desktop and mobile devi

Read the Docs 4.3k Dec 31, 2022
Numpy's Sphinx extensions

numpydoc -- Numpy's Sphinx extensions This package provides the numpydoc Sphinx extension for handling docstrings formatted according to the NumPy doc

NumPy 234 Dec 26, 2022
Type hints support for the Sphinx autodoc extension

sphinx-autodoc-typehints This extension allows you to use Python 3 annotations for documenting acceptable argument types and return value types of fun

Alex Grönholm 462 Dec 29, 2022
sphinx builder that outputs markdown files.

sphinx-markdown-builder sphinx builder that outputs markdown files Please ★ this repo if you found it useful ★ ★ ★ If you want frontmatter support ple

Clay Risser 144 Jan 6, 2023
Sphinx Bootstrap Theme

Sphinx Bootstrap Theme This Sphinx theme integrates the Bootstrap CSS / JavaScript framework with various layout options, hierarchical menu navigation

Ryan Roemer 584 Nov 16, 2022
A powerful Sphinx changelog-generating extension.

What is Releases? Releases is a Python (2.7, 3.4+) compatible Sphinx (1.8+) extension designed to help you keep a source control friendly, merge frien

Jeff Forcier 166 Dec 29, 2022
📖 Generate markdown API documentation from Google-style Python docstring. The lazy alternative to Sphinx.

lazydocs Generate markdown API documentation for Google-style Python docstring. Getting Started • Features • Documentation • Support • Contribution •

Machine Learning Tooling 118 Dec 31, 2022
Seamlessly integrate pydantic models in your Sphinx documentation.

Seamlessly integrate pydantic models in your Sphinx documentation.

Franz Wöllert 71 Dec 26, 2022
Speed up Sphinx builds by selectively removing toctrees from some pages

Remove toctrees from Sphinx pages Improve your Sphinx build time by selectively removing TocTree objects from pages. This is useful if your documentat

Executable Books 8 Jan 4, 2023
python package sphinx template

python-package-sphinx-template python-package-sphinx-template

Soumil Nitin Shah 2 Dec 26, 2022
epub2sphinx is a tool to convert epub files to ReST for Sphinx

epub2sphinx epub2sphinx is a tool to convert epub files to ReST for Sphinx. It uses Pandoc for converting HTML data inside epub files into ReST. It cr

Nihaal 8 Dec 15, 2022
A `:github:` role for Sphinx

sphinx-github-role A github role for Sphinx. Usage Basic usage MyST: :caption: index.md See {github}`astrojuanlu/sphinx-github-role#1`. reStructuredT

Juan Luis Cano Rodríguez 4 Nov 22, 2022
This is a template (starter kit) for writing Maturity Work with Sphinx / LaTeX at Collège du Sud

sphinx-tm-template Ce dépôt est un template de base utilisable pour écrire ton travail de maturité dans le séminaire d'informatique du Collège du Sud.

null 6 Dec 22, 2022