Giter Site home page Giter Site logo

sphinx-contrib / doxylink Goto Github PK

View Code? Open in Web Editor NEW
14.0 14.0 17.0 305 KB

A Sphinx extension to link to external Doxygen API documentation.

License: BSD 2-Clause "Simplified" License

Python 100.00%
api-documentation cpp documentation doxygen python sphinx-doc

doxylink's People

Contributors

belvedere-trading-user avatar bollenn avatar bryanwweber avatar dependabot[bot] avatar duncanmmacleod avatar elcojacobs avatar jaspercraeghs avatar maetveis avatar mb-emag avatar milliams avatar solidwallofcode avatar steinheselmans avatar twodrops avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

doxylink's Issues

Unhandled `= {}` syntax for default argument

Not sure if this is where it's handled, but it seems that a default argument like SomeType foo = {} in a function declaration is not recognized correctly by doxylink. This is the diagnostic message I get:

Skipping function ndn::Interest::Interest(const Name &name={}, time::milliseconds lifetime=DEFAULT_INTEREST_LIFETIME). Error reported from parser was: Expected ')', found '='  (at char 17), (line:1, col:18)

Cannot differentiate between overloaded functions in a single file

If we have a C++ header like:

int my_func();
namespace my_namespace {
    int my_func();
}

then Doxygen will put a reference to both of them at the top level of the file compound in the tag file. There will be a further reference to my_namespace::my_func as well but the two at the file-level are ambuigous.

It looks like:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<tagfile>
  <compound kind="file">
    <name>my_lib.h</name>
    <path>/home/matt/projects/doxylink/examples/</path>
    <filename>my__lib_8h</filename>
    <namespace>my_namespace</namespace>
    <member kind="function">
      <type>int</type>
      <name>my_func</name>
      <anchorfile>my__lib_8h.html</anchorfile>
      <anchor>abe47619a51650fe04900f35b66ee6153</anchor>
      <arglist>()</arglist>
    </member>
    <member kind="function">
      <type>int</type>
      <name>my_func</name>
      <anchorfile>namespacemy__namespace.html</anchorfile>
      <anchor>afcbfcd04ac02688687cb6984bf850d25</anchor>
      <arglist>()</arglist>
    </member>
  </compound>
  <compound kind="namespace">
    <name>my_namespace</name>
    <filename>namespacemy__namespace.html</filename>
    <member kind="function">
      <type>int</type>
      <name>my_func</name>
      <anchorfile>namespacemy__namespace.html</anchorfile>
      <anchor>afcbfcd04ac02688687cb6984bf850d25</anchor>
      <arglist>()</arglist>
    </member>
  </compound>
</tagfile>

Two options:

  1. Scan the file compound for any items which match any in any namespaces and remove them from the file
  2. Use the Doxygen XML output as this does not suffer from the same problem (see issue #8)

Incompatibility with Sphinx 2.0.1

Sphinx changed the API in 2.0.0 majorly and it all seems that this affects the doxylink plugin as well.

When trying to build same thing with builds on older sphinxes (doc build) I get the error:

# Sphinx version: 2.0.1
# Python version: 3.5.3 (CPython)
# Docutils version: 0.14
# Jinja2 version: 2.10.1
# Last messages:

# Loaded extensions:
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/sphinx/cmd/build.py", line 283, in build_main
    args.tags, args.verbosity, args.jobs, args.keep_going)
  File "/usr/local/lib/python3.5/dist-packages/sphinx/application.py", line 260, in __init__
    self._init_builder()
  File "/usr/local/lib/python3.5/dist-packages/sphinx/application.py", line 321, in _init_builder
    self.emit('builder-inited')
  File "/usr/local/lib/python3.5/dist-packages/sphinx/application.py", line 440, in emit
    return self.events.emit(event, self, *args)
  File "/usr/local/lib/python3.5/dist-packages/sphinx/events.py", line 76, in emit
    results.append(callback(*args))
  File "/usr/local/lib/python3.5/dist-packages/sphinxcontrib/doxylink/doxylink.py", line 277, in setup_doxylink_roles
    app.add_role(name, create_role(app, tag_filename, rootdir))
  File "/usr/local/lib/python3.5/dist-packages/sphinxcontrib/doxylink/doxylink.py", line 209, in create_role
    app.info(bold('Checking tag file cache for %s: ' % cache_name), nonl=True)
AttributeError: 'Sphinx' object has no attribute 'info'

Can anyone give it a glimpse and propose a fix?

Argument types with keywords in them fail to be parsed correctly

If a C++ function is defined like:

evolve(const structure::QuantumSystem &);

then when parsed by Doxylink it will see it as

evolve(const ure::QuantumSystem &);

since it's matching against struct and removing the string from the match.

Instead, the parser should only match those on whitespace boundaries.

Bug: Kind of incomplete parser warning message on a not too complicated function

Hello!

I see the following warnings in the doxylink output:

Skipping function guard_for_pilot::makeDefaultComfortParameters() noexcept. Error reported from parser was: , found ')'  (at char 1), (line:1, col:2)
Skipping function guard_for_pilot::makeDefaultCommonParameters() noexcept. Error reported from parser was: , found ')'  (at char 1), (line:1, col:2)
...

The code it tries to import looks like this:

namespace guard_for_pilot
{

static hwp::g4p::GuardForPilotParameters const s_default_parameters{};

static ComfortParameters makeDefaultComfortParameters() noexcept
{
    // implementation removed
}

static CommonParameters makeDefaultCommonParameters() noexcept
{
    // implementation removed
}

}

The doxygen (1.9.7) XML section looks like this:

  <compound kind="file">
    <name>general_reaction_parameters.test.cpp</name>
    <path>common/runnables/general_reaction/test/</path>
    <filename>general__reaction__parameters_8test_8cpp.html</filename>
    <includes id="general__reaction__parameters_8test_8hpp" name="general_reaction_parameters.test.hpp" local="yes" imported="no">general_reaction_parameters.test.hpp</includes>
    <class kind="class">guard_for_pilot::GeneralReactionParametersIntegrationTest</class>
    <namespace>guard_for_pilot</namespace>
    <member kind="function" static="yes">
      <type>static ComfortParameters</type>
      <name>makeDefaultComfortParameters</name>
      <anchorfile>namespaceguard__for__pilot.html</anchorfile>
      <anchor>ad25ce9aa91c54a73428027ea94c54ab9</anchor>
      <arglist>() noexcept</arglist>
    </member>
    <member kind="function" static="yes">
      <type>static CommonParameters</type>
      <name>makeDefaultCommonParameters</name>
      <anchorfile>namespaceguard__for__pilot.html</anchorfile>
      <anchor>af526415a16950d4550bea8093b06c4e6</anchor>
      <arglist>() noexcept</arglist>
    </member>

Is this a doxygen or doyxlink error?
Is it maybe caused by the "noexcept" keyword?

No links created for preprocessor macros

[Copied from BitBucket]

Preprocessor macros documented using Doxygen can not be linked using doxylink. For instance, this code:

/*! \file */
/// A simple macro
#define MACRO(x) foo(x)

will generate an entry in the Doxygen tag file but the tag entry will not be available for use in reStructuredText documentation:

The :project:`MACRO` is simple.

does not link to the documentation.

The problem appears to be in doxylink.py at line 148:

if arglist_text and member_kind != 'variable' and member_kind != 'typedef' and member_kind != 'enumeration':

Changing this line to:

if arglist_text and member_kind != 'variable' and member_kind != 'typedef' and member_kind != 'enumeration' and member_kind != 'define':

gets things working for me.

Apparent bug in linking a template specialization thourgh an alias

I'm using doxylink version 1.12.2, and there seems to be a bug when linking to a template specialization of a class through an alias.

Namely, from the example in the documentation, this works fine for me:

:polyvox:`PolyVox::Array\<0,ElementType>`

However, this fails:

:polyvox:`Array <PolyVox::Array<0,ElementType>>`

Documentation of Config paths is confusing

The documentaions text about the relative paths to Sphinx output path is incorrect. The first paramaeter, the tag file, paths is releative shinx build command.
The keys of this dictionary must be lower-case. The prefix can be an absolute path or a path relative to [Sphinx' output directory](https://www.sphinx-doc.org/en/master/extdev/appapi.html#sphinx.application.Sphinx.outdir).

Add support for groups of functions

Currently it is impossible to have functions grouped together with compound type = group because parse_tag_file() will only inspect compounds with type namespace, class, struct, or file.

A tag file can have functions with a parent compound of type group, this enhancement should add group to the filter.

Q: is doxylink able to link in a latex environment, example?

Did anyone ever try to use doxylink in a latex environment in order to generate a PDF from RST documentation? If so, what should be the minimal doxyfile and sphinx configuration? Maybe the example in this project can be extended for latex output?

I tried enabling GENERATE_LATEX in my doxyfile, that generates a bunch of tex and pdf-files, amongst with the tag file which doxylink uses to lookup the links. The links that doxylink generates are links to html files.

Doxylink cache is not always written

The doxylink cache which gets saved in the app.env object only gets written to disk if there was some other source file which also happened to change. This means that the cache is almost always out of date and gets recreated.

Feature request: Add warning type for doxylink issues or make it configurable

Doxylink currently prints out a line for each problem it finds, but the output cannot be controlled in any way.

Please either make the output generate a sphinx warning that can be deactivated (e.g. doxylink.skip) or add a config option to control whether these skip notifications shall be generated.

Ideally, I'd like to see them when building with -v, but not in a normal build.

Bug: Extension error on double definition

When running sphinx-build (5.3) with sphinxcontrib.doxylink (1.12.2) added on a doxygen XML generated with doxygen 1.9.7, I get the following errors in the build.

Example 1: the same local definition, but different

Extension error (sphinxcontrib.doxylink.doxylink):
Handler <function setup_doxylink_roles at 0x7f57602343a0> for event 'builder-inited' threw an exception (exception: Cannot add override to non-function 'msr::g_stopWatch')

I can't post the full example because the project is huge (and proprietary), so maybe could you give a few hints for which things to look out first?

The symbol that sphinx complains about is a global variable in two files:

// file: msr_rsp_runnable.cpp
namespace msr
{
extern msr::CStopWatch g_stopWatch;
}

second cpp file:

// file: msr_sfm_runnable.cpp
namespace msr
{
msr::CStopWatch g_stopWatch(12000);
} // namespace msr

The doxygen.tag file contains the symbol 4 times:

  <compound kind="file">
    <name>msr_rsp_runnable.cpp</name>
    <path>msr/msr_rsp/src/</path>
    <filename>msr__rsp__runnable_8cpp.html</filename>
    <namespace>msr</namespace>
    <member kind="variable">
      <type>msr::CStopWatch</type>
      <name>g_stopWatch</name>
      <anchorfile>namespacemsr.html</anchorfile>
      <anchor>a8dd8d700e0974fec9a7f7e38c55d1642</anchor>
      <arglist></arglist>
    </member>
  </compound>
  <compound kind="file">
    <name>msr_sfm_runnable.cpp</name>
    <path>msr/msr_sfm/src/</path>
    <filename>msr__sfm__runnable_8cpp.html</filename>
    <namespace>msr</namespace>
    <member kind="function">
      <type>msr::CStopWatch</type>
      <name>g_stopWatch</name>
      <anchorfile>namespacemsr.html</anchorfile>
      <anchor>af171e57ba75ecc541531fc57d7452bc5</anchor>
      <arglist>(12000)</arglist>
    </member>
  <compound kind="namespace">
    <name>msr</name>
    <filename>namespacemsr.html</filename>
    <member kind="function">
      <type>msr::CStopWatch</type>
      <name>g_stopWatch</name>
      <anchorfile>namespacemsr.html</anchorfile>
      <anchor>af171e57ba75ecc541531fc57d7452bc5</anchor>
      <arglist>(12000)</arglist>
    </member>
    <member kind="variable">
      <type>msr::CStopWatch</type>
      <name>g_stopWatch</name>
      <anchorfile>namespacemsr.html</anchorfile>
      <anchor>a8dd8d700e0974fec9a7f7e38c55d1642</anchor>
      <arglist></arglist>
    </member>
    <!-- ... -->
  </compound>

I think it is a problem of doxygen that it adds the variable with initalizer value as a function. Anyhow, would it be possible to catch this gently?

Example 2: Overriding #define

The same problem occurs in other kinds of "double definition by doxygen" situations, like:

// NEON_2_SSE.h
_NEON2SSESTORAGE uint8x8_t vadd_u8(uint8x8_t a, uint8x8_t b); // VADD.I8 d0,d0,d0
#define vadd_u8 vadd_s8

Doxygen XML:

  <compound kind="file">
    <name>NEON_2_SSE.h</name>
    <member kind="define">
      <type>#define</type>
      <name>vadd_u8</name>
      <anchorfile>NEON__2__SSE_8h.html</anchorfile>
      <anchor>a8744a9ca1aa66ab5e9cf9bc706a318c1</anchor>
      <arglist></arglist>
    </member>
    <member kind="function" static="yes">
      <type>static uint8x8_t</type>
      <name>vadd_u8</name>
      <anchorfile>NEON__2__SSE_8h.html</anchorfile>
      <anchor>a13f1019c21aa0d41088901b549d40570</anchor>
      <arglist>(uint8x8_t a, uint8x8_t b)</arglist>
    </member>

Doxylink error:

Extension error (sphinxcontrib.doxylink.doxylink):
Handler <function setup_doxylink_roles at 0x7f7b9b5ba3a0> for event 'builder-inited' threw an exception (exception: Cannot add override to non-function 'cfc_NEON_2_SSE.hpp::vadd_u8')

None of that code is nice, but I'd argue that this code exists and C/C++ builds it, so it should not lead to a crash of sphinxcontrib.doxylink.

Example 3: SFINAE

Here, I have totally valid C++ SFINAE template code that causes the dreaded error again:

Extension error (sphinxcontrib.doxylink.doxylink):
Handler <function setup_doxylink_roles at 0x7f22564e33a0> for event 'builder-inited' threw an exception (exception: Cannot add override to non-function 'loft2_int::exporter::has_method::test')

The C++ code (header file):

#include <type_traits>

namespace loft2_int
{
namespace exporter
{

// The template has_method<T> exports a boolean constant
// value that is true iff T provides int T::getDetectionID() const
template <typename ObjectType>
struct has_method
{
    // SFINAE: ensure correct signature via function pointer
    template <typename InternalObjectType>
    static std::true_type test(int (InternalObjectType::*)() const)
    {
        return std::true_type();
    }

    // SFINAE: ensure that method exists
    template <typename InternalObjectType>
    static decltype(test(&InternalObjectType::getDetectionID))
    test(decltype(&InternalObjectType::getDetectionID), void*)
    {
        // method exists, now check for correct signature
        using Return_type = decltype(test(&InternalObjectType::getDetectionID));
        return Return_type();
    }

    // SFINAE: otherwise return false type
    template <typename InternalObjectType>
    static std::false_type test(...)
    {
        return std::false_type();
    }

    // This will be either std::true_type or std::false_type
    using ResultType = decltype(test<ObjectType>(nullptr, nullptr));

    // make value accessible from outside
    static constexpr bool value = ResultType::value;
};

Doxygen gets the last one wrong:

  <compound kind="struct">
    <name>loft2_int::exporter::has_method</name>
    <filename>structloft2__int_1_1exporter_1_1has__method.html</filename>
    <templarg>typename ObjectType</templarg>
    <!-- ... -->
    <member kind="function" static="yes">
      <type>static std::true_type</type>
      <name>test</name>
      <anchorfile>structloft2__int_1_1exporter_1_1has__method.html</anchorfile>
      <anchor>aa271aedf2af8565e5c7fb5190032809e</anchor>
      <arglist>(int(InternalObjectType::*)() const)</arglist>
    </member>
    <member kind="function" static="yes">
      <type>static std::false_type</type>
      <name>test</name>
      <anchorfile>structloft2__int_1_1exporter_1_1has__method.html</anchorfile>
      <anchor>a604f0c99be193a6e7d9d455174c528c4</anchor>
      <arglist>(...)</arglist>
    </member>
    <member kind="variable" static="yes">
      <type>static decltype(test(&amp;InternalObjectType::getDetectionID))</type>
      <name>test</name>
      <anchorfile>structloft2__int_1_1exporter_1_1has__method.html</anchorfile>
      <anchor>a4553d86d6a8ba6c1045e0e65a34ff915</anchor>
      <arglist>(decltype(&amp;InternalObjectType::getDetectionID), void *)</arglist>
    </member>

AttributeError: 'module' object has no attribute 'parse' in 1.4

Hi,

Version 1.4 was just uploaded to pip yesterday and PCL's CI started failing with the following exception thrown (see below). I was able to verify the same in my local dev environment .
Our CI runs Ubuntu 14.04 and my local environment 16.04.

Edit: I just noticed you set up Travis for python 3.x. Was support for python 2.7 dropped in 1.4? If that's the case this might not be a bug per se.

building [mo]: all of 0 po files
building [html]: all source files
updating environment: 98 added, 0 changed, 0 removed
reading sources... [  2%] alignment_prerejective                                                                                               
Exception occurred:
  File "/home/sergio/.local/lib/python2.7/site-packages/sphinxcontrib/doxylink/doxylink.py", line 432, in find_doxygen_link
    if os.path.isabs(rootdir) or urllib.parse.urlparse(rootdir).scheme:
AttributeError: 'module' object has no attribute 'parse'
The full traceback has been saved in /tmp/sphinx-err-esXIV6.log, if you want to report the issue to the developers.

Here's the full produced log with the stack trace.

# Sphinx version: 1.6.5
# Python version: 2.7.12 (CPython)
# Docutils version: 0.14 
# Jinja2 version: 2.10
# Last messages:
#   loading pickled environment...
#   not yet created
#   Checking tag file cache for pcl.tag:
#   No cache at all, rebuilding...
#   building [mo]: all of 0 po files
#   building [html]: all source files
#   updating environment:
#   98 added, 0 changed, 0 removed
#   reading sources... [  1%] adding_custom_ptype
#   reading sources... [  2%] alignment_prerejective
# Loaded extensions:
#   alabaster (0.7.10) from /home/sergio/.local/lib/python2.7/site-packages/alabaster/__init__.pyc
#   sphinxcontrib.doxylink.doxylink (unknown version) from /home/sergio/.local/lib/python2.7/site-packages/sphinxcontrib/doxylink/doxylink.py
#   sphinx.ext.imgmath (1.6.5) from /home/sergio/.local/lib/python2.7/site-packages/sphinx/ext/imgmath.pyc
Traceback (most recent call last):
  File "/home/sergio/.local/lib/python2.7/site-packages/sphinx/cmdline.py", line 306, in main
    app.build(opts.force_all, filenames)
  File "/home/sergio/.local/lib/python2.7/site-packages/sphinx/application.py", line 333, in build
    self.builder.build_all()
  File "/home/sergio/.local/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 288, in build_all
    self.build(None, summary='all source files', method='all')
  File "/home/sergio/.local/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 344, in build
    updated_docnames = set(self.env.update(self.config, self.srcdir, self.doctreedir))
  File "/home/sergio/.local/lib/python2.7/site-packages/sphinx/environment/__init__.py", line 584, in update
    self._read_serial(docnames, self.app)
  File "/home/sergio/.local/lib/python2.7/site-packages/sphinx/environment/__init__.py", line 603, in _read_serial
    self.read_doc(docname, app)
  File "/home/sergio/.local/lib/python2.7/site-packages/sphinx/environment/__init__.py", line 726, in read_doc
    pub.publish()
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/core.py", line 217, in publish
    self.settings)
  File "/home/sergio/.local/lib/python2.7/site-packages/sphinx/io.py", line 74, in read
    self.parse()
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/readers/__init__.py", line 78, in parse
    self.parser.parse(self.input, document)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/__init__.py", line 191, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 171, in run
    input_source=document['source'])
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/statemachine.py", line 239, in run
    context, state, transitions)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/statemachine.py", line 460, in check_line
    return method(match, context, next_state)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 2753, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 395, in new_subsection
    node=section_node, match_titles=True)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 282, in nested_parse
    node=node, match_titles=match_titles)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/statemachine.py", line 239, in run
    context, state, transitions)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/statemachine.py", line 460, in check_line
    return method(match, context, next_state)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 2688, in blank
    context, self.state_machine.abs_line_number() - 1)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 418, in paragraph
    textnodes, messages = self.inline_text(text, lineno)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 427, in inline_text
    return self.inliner.parse(text, lineno, self.memo, self.parent)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 645, in parse
    lineno)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 787, in interpreted_or_phrase_ref
    lineno)
  File "/home/sergio/.local/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 871, in interpreted
    nodes, messages2 = role_fn(role, rawsource, text, lineno, self)
  File "/home/sergio/.local/lib/python2.7/site-packages/sphinxcontrib/doxylink/doxylink.py", line 432, in find_doxygen_link
    if os.path.isabs(rootdir) or urllib.parse.urlparse(rootdir).scheme:
AttributeError: 'module' object has no attribute 'parse'

Let me know if you need additional information.

Cheers

Support remote tag files that don't return a last-modified header

I'm trying to use sphinxcontrib-doxylink with a remote tag file for which the host server doesn't include a Last-Modified header in the HTTP response. Is it a reasonable patch to this module to use the Expires header* as a backup in these cases?

*I originally thought Date would make more sense, but Expires would project a new tag file into the future enough that repeated execution will effectively use the cached version for as long as the Cache-Control header tells it to.

Am happy to propose a patch in a PR if one would be welcome.

using app.info() which is deprecated

I get this warning:

python3.6/dist-packages/sphinx/application.py:402: RemovedInSphinx20Warning: app.info() is now deprecated. Use sphinx.util.logging instead.
  RemovedInSphinx20Warning)

It gets printed right after some doxy-link warnings.

A grep on python libraries:

$ cd /usr/local/lib/python3.6/dist-packages
$ grep -r "app.info" .
./sphinxcontrib/doxylink/doxylink.py:        app.info(bold('Checking tag file cache for %s: ' % cache_name), nonl=True)
./sphinxcontrib/doxylink/doxylink.py:            app.info('No cache at all, rebuilding...')
./sphinxcontrib/doxylink/doxylink.py:            app.info('Sub cache is missing, rebuilding...')
./sphinxcontrib/doxylink/doxylink.py:            app.info('Sub-cache is out of date, rebuilding...')
./sphinxcontrib/doxylink/doxylink.py:            app.info('Sub-cache schema version doesn\'t match, rebuilding...')
./sphinxcontrib/doxylink/doxylink.py:            app.info('Sub-cache is up-to-date')
./sphinx/parsers.py:        self.info = app.info
Binary file ./sphinx/__pycache__/application.cpython-36.pyc matches
./sphinx/application.py:        warnings.warn('app.info() is now deprecated. Use sphinx.util.logging instead.',
./sphinx/builders/__init__.py:        self.info = app.info        # type: Callable

So this repo needs an update for newer sphinx versions.

gMock functions skipped because of parser errors

We're using gMock in our testing setup, which seems to cause some trouble with Doxylink.

Code (implemented according to the gMock guidelines):

class ServicesMock : public IServices
{
  public:
    MOCK_METHOD(boolean, isEmpty, (), (const, override));
}

Log:

Skipping function ServicesMock::MOCK_METHOD(boolean, isEmpty,(),(const, override)). Error reported from parser was: Expected ')', found ','  (at char 27), (line:1, col:28)

Is there a workaround for this?

`noexcept` functions

The parser seems to have trouble dealing with a trailing noexcept specifier on function declarations.

Skipping function ndn::Block::reset() noexcept. Error reported from parser was: Expected {{{'bool' ^ 'short' ^ 'int' ^ 'long' ^ 'signed' ^ 'unsigned' ^ 'char' ^ 'float' ^ 'double'}}... ^ Combine:({W:(0-:A-Z_a-z) [nested <> expression [W:(0-:A-Z_a-z)]]})}, found ')'  (at char 1), (line:1, col:2)

And here combined with const.

Skipping function ndn::Transport::isConnected() const noexcept. Error reported from parser was: Expected {{{'bool' ^ 'short' ^ 'int' ^ 'long' ^ 'signed' ^ 'unsigned' ^ 'char' ^ 'float' ^ 'double'}}... ^ Combine:({W:(0-:A-Z_a-z) [nested <> expression [W:(0-:A-Z_a-z)]]})}, found ')'  (at char 1), (line:1, col:2)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.