sphinx-contrib / doxylink Goto Github PK
View Code? Open in Web Editor NEWA Sphinx extension to link to external Doxygen API documentation.
License: BSD 2-Clause "Simplified" License
A Sphinx extension to link to external Doxygen API documentation.
License: BSD 2-Clause "Simplified" License
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)
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:
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?
Groups in Doxygen can be created with \defgroup
. Doxylink should allow linking directly to them.
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.
We should be able to grab the XML output from Doxygen and create Sphinx directives which included the documentation text. It should create version of the Sphinx domains.
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?
using doxylink 1.4 on python 3.5, with sphinx 1.6.5
Exception occurred:
File "/usr/local/lib/python3.5/dist-packages/sphinxcontrib/doxylink/doxylink.py", line 254, in find_url2
return return_from_mapping(no_templates_list.values()[0], normalised_arglist)
TypeError: 'dict_values' object does not support indexing
Use setuptools_scm to get version number from git tag. That way, it doesn't need to be edited manually in sphinxcontrib/doxylink/__init__.py
before creating a tag+release. See https://pypi.org/project/setuptools-scm/
[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.
If the tagfile location in the config looks like a web address, download it and use it.
This will allow us to use the built-in Sphinx search feature.
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>>`
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).
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.
Using doxylink with sphinx parallel build (sphinx-build -j auto
) raises parallel-build warning.
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.
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.
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.
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.
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?
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.
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(&InternalObjectType::getDetectionID))</type>
<name>test</name>
<anchorfile>structloft2__int_1_1exporter_1_1has__method.html</anchorfile>
<anchor>a4553d86d6a8ba6c1045e0e65a34ff915</anchor>
<arglist>(decltype(&InternalObjectType::getDetectionID), void *)</arglist>
</member>
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
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.
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.
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?
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)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.