diff --git a/doc/fmt.css b/doc/fmt.css index 79e35455..8ba08c9b 100644 --- a/doc/fmt.css +++ b/doc/fmt.css @@ -1,3 +1,7 @@ .docblock { - margin-left: 24px; + border-left: .05rem solid var(--md-primary-fg-color); +} + +.docblock-desc { + margin-left: 1em; } diff --git a/include/fmt/base.h b/include/fmt/base.h index a14c9724..b7d96bb0 100644 --- a/include/fmt/base.h +++ b/include/fmt/base.h @@ -2905,8 +2905,8 @@ auto vformat_to(OutputIt&& out, string_view fmt, format_args args) * * **Example**: * - * auto out = std::vector(); - * fmt::format_to(std::back_inserter(out), "{}", 42); + * auto out = std::vector(); + * fmt::format_to(std::back_inserter(out), "{}", 42); */ template , diff --git a/support/mkdocstrings_handlers/cxx/__init__.py b/support/mkdocstrings_handlers/cxx/__init__.py index 5cc12f16..98e612fc 100644 --- a/support/mkdocstrings_handlers/cxx/__init__.py +++ b/support/mkdocstrings_handlers/cxx/__init__.py @@ -57,6 +57,17 @@ def get_template_params(node: et.Element) -> Optional[list[Definition]]: params.append(param) return params +def get_description(node: et.Element) -> list[et.Element]: + return node.findall('briefdescription/para') + \ + node.findall('detaileddescription/para') + +def clean_type(type: str) -> str: + type = type.replace('< ', '<').replace(' >', '>') + return type.replace(' &', '&').replace(' *', '*') + +def render_type(type: str) -> str: + return type.replace("<", "<") + def convert_param(param: et.Element) -> Definition: d = Definition(param.find('declname').text) type = param.find('type') @@ -66,9 +77,7 @@ def convert_param(param: et.Element) -> Definition: if ref.tail: type_str += ref.tail type_str += type.tail.strip() - type_str = type_str.replace('< ', '<').replace(' >', '>') - type_str = type_str.replace(' &', '&').replace(' *', '*') - d.type = type_str + d.type = clean_type(type_str) return d class CxxHandler(BaseHandler): @@ -145,7 +154,11 @@ class CxxHandler(BaseHandler): d.type = node.find('type').text d.template_params = get_template_params(node) d.params = params - d.desc = node.findall('detaileddescription/para') + d.trailing_return_type = None + if d.type == 'auto': + d.trailing_return_type = clean_type( + node.find('argsstring').text.split(' -> ')[1]) + d.desc = get_description(node) return d cls = self._doxyxml.findall(f"compounddef/innerclass[.='fmt::{name}']") if not cls: @@ -157,7 +170,7 @@ class CxxHandler(BaseHandler): d.type = node.get('kind') d.template_params = get_template_params(node) d.params = None - d.desc = node.findall('detaileddescription/para') + d.desc = get_description(node) return d def render(self, d: Definition, config: dict) -> str: @@ -171,8 +184,10 @@ class CxxHandler(BaseHandler): text += d.type + ' ' + d.name if d.params is not None: params = ', '.join( - [f'{p.type.replace("<", "<")} {p.name}' for p in d.params]) + [f'{render_type(p.type)} {p.name}' for p in d.params]) text += '(' + params + ')' + if d.trailing_return_type: + text += ' -> ' + render_type(d.trailing_return_type) text += ';' text += '\n' text += '
\n'