Skip to content

Commit e7ffc19

Browse files
committed
feat: add function in namespace snippet
1 parent 1702d0f commit e7ffc19

File tree

3 files changed

+87
-0
lines changed

3 files changed

+87
-0
lines changed

docs/snippets/functions.md

+36
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,39 @@ indent_level: 4
3131
::: doxy.animal.function
3232
name: mEin
3333
indent_level: 4
34+
35+
## `::: doxy.<project>.namespace.function`
36+
37+
This tag generates full function documentation.
38+
39+
| Parameter | Description | Required |
40+
|-----------|---------------------------|----------|
41+
| `name` | The name of the function. | Yes |
42+
43+
44+
=== "Tag usage"
45+
```yaml
46+
::: doxy.animal.namespace.function
47+
namespace: example
48+
name: void some_namespace_function(Animal* animal)
49+
```
50+
=== "Tag result"
51+
::: doxy.animal.namespace.function
52+
namespace: example
53+
name: void some_namespace_function(Animal* animal)
54+
indent_level: 4
55+
56+
57+
## `::: doxy.<project>.function` error message
58+
59+
=== "Tag usage"
60+
```yaml
61+
::: doxy.animal.namespace.function
62+
namespace: example
63+
name: void no_function()
64+
```
65+
=== "Tag result"
66+
::: doxy.animal.function
67+
namespace: example
68+
name: void no_function()
69+
indent_level: 4

mkdoxy/finder.py

+27
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ def doxyClass(self, project, className: str):
2525
return self.listToNames(classes)
2626
return None
2727

28+
def doxyNamespace(self, project, namespace: str):
29+
namespaces = recursive_find(self.doxygen[project].root.children, Kind.NAMESPACE)
30+
if namespaces:
31+
for findNamespace in namespaces:
32+
if findNamespace.name_long == namespace:
33+
return findNamespace
34+
return self.listToNames(namespaces)
35+
return None
36+
2837
def doxyClassMethod(self, project, className: str, methodName: str):
2938
findClass = self.doxyClass(project, className)
3039
if findClass:
@@ -43,6 +52,24 @@ def doxyClassMethod(self, project, className: str, methodName: str):
4352
return None
4453
return None
4554

55+
def doxyNamespaceFunction(self, project, namespace: str, functionName: str):
56+
findNamespace = self.doxyNamespace(project, namespace)
57+
if findNamespace:
58+
if isinstance(findNamespace, list):
59+
for member in findNamespace:
60+
if self._normalize(functionName) in self._normalize(member):
61+
return member
62+
return findNamespace
63+
else:
64+
members = recursive_find(findNamespace.children, Kind.FUNCTION)
65+
if members:
66+
for member in members:
67+
if self._normalize(functionName) in self._normalize(member.name_params):
68+
return member
69+
return self.listToNames(members)
70+
return None
71+
return None
72+
4673
def doxyFunction(self, project, functionName: str):
4774
functions = recursive_find_with_parent(self.doxygen[project].files.children, [Kind.FUNCTION], [Kind.FILE])
4875
if functions:

mkdoxy/generatorSnippets.py

+24
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ def __init__(
4242
self.doxy_arguments = {
4343
"code": self.doxyCode,
4444
"function": self.doxyFunction,
45+
"namespace.function": self.doxyNamespaceFunction,
4546
"class": self.doxyClass,
4647
"class.method": self.doxyClassMethod,
4748
"class.list": self.doxyClassList,
@@ -370,6 +371,29 @@ def doxyNamespaceList(self, snippet, project: str, config):
370371
self._setLinkPrefixNodes(nodes, self.pageUrlPrefix + project + "/")
371372
return self.generatorBase[project].namespaces(nodes, config)
372373

374+
def doxyNamespaceFunction(self, snippet, project: str, config):
375+
errorMsg = self.checkConfig(snippet, project, config, ["namespace", "name"])
376+
if errorMsg:
377+
return errorMsg
378+
379+
node = self.finder.doxyNamespaceFunction(project, config.get("namespace"), config.get("name"))
380+
if node is None:
381+
return self.doxyNodeIsNone(project, config, snippet)
382+
383+
if isinstance(node, Node):
384+
self._setLinkPrefixNode(node, self.pageUrlPrefix + project + "/")
385+
return self.generatorBase[project].function(node, config)
386+
return self.doxyError(
387+
project,
388+
config,
389+
"Incorrect namespace function configuration",
390+
f"Did not find Class with name: `{config.get('name')}` and method: `{config.get('method')}`",
391+
"Available classes and methods:",
392+
"\n".join(node),
393+
"yaml",
394+
snippet,
395+
)
396+
373397
def doxyFileList(self, snippet, project: str, config):
374398
errorMsg = self.checkConfig(snippet, project, config, [])
375399
if errorMsg:

0 commit comments

Comments
 (0)