From 9612dae69461b93f0ead8cdb527626e74ba000d7 Mon Sep 17 00:00:00 2001 From: Anthony Johnson Date: Fri, 24 Apr 2015 18:32:16 -0700 Subject: [PATCH] Add better reference and obj id handling for generics --- autoapi/domains/dotnet.py | 36 +++++++++++++++++++----- autoapi/templates/dotnet/base_detail.rst | 4 +-- autoapi/templates/dotnet/base_embed.rst | 2 ++ autoapi/templates/dotnet/base_list.rst | 10 +++---- 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/autoapi/domains/dotnet.py b/autoapi/domains/dotnet.py index 7f2f635..731233d 100644 --- a/autoapi/domains/dotnet.py +++ b/autoapi/domains/dotnet.py @@ -90,7 +90,7 @@ class DotNetDomain(AutoAPIDomain): self.top_level_objects[obj.name] = obj if type(obj) == DotNetNamespace: self.namespaces[obj.name] = obj - self.objects[obj.name] = obj + self.objects[obj.id] = obj def organize_objects(self): '''Organize objects and namespaces''' @@ -242,6 +242,11 @@ class DotNetBase(AutoAPIBase): except KeyError: return self.id + @property + def short_name(self): + '''Shorten name property''' + return self.name.split('.')[-1] + @property def edit_link(self): try: @@ -255,7 +260,6 @@ class DotNetBase(AutoAPIBase): import traceback; traceback.print_exc(); return '' - @property def source(self): return self.obj.get('source') @@ -264,11 +268,6 @@ class DotNetBase(AutoAPIBase): def path(self): return self.source['path'] - @property - def short_name(self): - '''Shorten name property''' - return self.name.split('.')[-1] - @property def namespace(self): pieces = self.id.split('.')[:-1] @@ -289,6 +288,29 @@ class DotNetBase(AutoAPIBase): def ref_directive(self): return self.type + @property + def ref_name(self): + '''Return object name suitable for use in references + + Escapes several known strings that cause problems, including the + following reference syntax:: + + :dotnet:cls:`Foo.Bar` + + As the `` notation is also special syntax in references, indicating + the reference to Foo.Bar should be named T. + + See: http://sphinx-doc.org/domains.html#role-cpp:any + ''' + return (self.name + .replace('<', '\<') + .replace('`', '\`')) + + @property + def ref_short_name(self): + '''Same as above, return the truncated name instead''' + return self.ref_name.split('.')[-1] + class DotNetNamespace(DotNetBase): type = 'namespace' diff --git a/autoapi/templates/dotnet/base_detail.rst b/autoapi/templates/dotnet/base_detail.rst index 199327e..34e9c67 100644 --- a/autoapi/templates/dotnet/base_detail.rst +++ b/autoapi/templates/dotnet/base_detail.rst @@ -27,9 +27,9 @@ Inheritance Hierarchy --------------------- {%- for item in obj.inheritance %} -* :dn:{{ item.ref_directive }}:`{{ item.id }}` +* :dn:{{ item.ref_directive }}:`{{ item.ref_name }}` {%- endfor %} -* :dn:{{ obj.ref_directive }}:`{{ obj.id}}` +* :dn:{{ obj.ref_directive }}:`{{ obj.ref_name }}` {%- endif %} {% endblock %} diff --git a/autoapi/templates/dotnet/base_embed.rst b/autoapi/templates/dotnet/base_embed.rst index c596315..0fd70af 100644 --- a/autoapi/templates/dotnet/base_embed.rst +++ b/autoapi/templates/dotnet/base_embed.rst @@ -17,6 +17,8 @@ :rtype: {{ obj.returns.id }} {%- endif %} + {%- if obj.example %} .. code-block:: csharp {{ obj.example }} + {%- endif %} diff --git a/autoapi/templates/dotnet/base_list.rst b/autoapi/templates/dotnet/base_list.rst index badbaa2..953388e 100644 --- a/autoapi/templates/dotnet/base_list.rst +++ b/autoapi/templates/dotnet/base_list.rst @@ -1,7 +1,7 @@ {% block title %} -{{ obj.id }} {{ obj.type.title() }} -{{ "=" * (obj.id|length + obj.type|length + 1) }} +{{ obj.name }} {{ obj.type.title() }} +{{ "=" * (obj.name|length + obj.type|length + 1) }} {% endblock %} @@ -15,7 +15,7 @@ {% for item in obj.children|sort %} {% if item.type != 'namespace' %} - /autoapi/{{ item.id.split('.')|join('/') }}/index + /autoapi/{{ item.name.split('.')|join('/') }}/index {% endif %} {%- endfor %} @@ -34,7 +34,7 @@ {%- for obj_item in obj.item_map.get(item_type, []) %} {% macro render() %}{{ obj_item.summary }}{% endmacro %} - {{ obj_item.type }} :dn:{{ obj_item.ref_directive }}:`{{ obj_item.short_name }}` + {{ obj_item.type }} :dn:{{ obj_item.ref_directive }}:`{{ obj_item.ref_short_name }}` {{ render()|indent(8) }} {%- endfor %} @@ -47,4 +47,4 @@ {%- endfor %} -{% endblock %} \ No newline at end of file +{% endblock %}