You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sphinx-autoapi/autoapi/dotnet.py

122 lines
2.9 KiB
Python

from collections import defaultdict
from .base import AutoAPIBase
from .settings import env
class DotNetBase(AutoAPIBase):
language = 'dotnet'
def __init__(self, obj):
super(DotNetBase, self).__init__(obj)
# Always exist
self.id = obj['id']
self.type = obj['type']
# Use name or id
try:
self.name = obj['qualifiedName']['CSharp']
except:
self.name = self.id
self.short_name = self.name.split('.')[-1]
self.namespace = self.name.split('.')[0]
# Optional
self.summary = obj.get('summary', '')
# Syntax example and parameter list
syntax = obj.get('syntax', None)
self.example = ''
if syntax is not None:
# Code example
try:
self.example = syntax['content']['CSharp']
except KeyError:
pass
self.parameters = []
for param in syntax.get('parameters', []):
if 'id' in param:
self.parameters.append({
'name': param.get('id'),
'type': param.get('type', {}).get('id', None),
'desc': param.get('description', '')
})
self.children = obj.get('items', [])
if self.children:
self.item_map = defaultdict(list)
self.sort()
@property
def ref_type(self):
return self.type.lower().replace('class', 'cls').replace('interface', 'iface').replace('delegate', 'del')
def to_ref_type(self, _type):
return _type.lower().replace('class', 'cls').replace('interface', 'iface').replace('delegate', 'del')
def sort(self):
from .utils import classify
for item in self.children:
if 'type' not in item:
print "Missing Type: %s" % item
continue
classified = classify(item, 'dotnet')
self.item_map[item['type']].append(classified)
class DotNetNamespace(DotNetBase):
type = 'namespace'
class DotNetMethod(DotNetBase):
type = 'method'
class DotNetProperty(DotNetBase):
type = 'property'
class DotNetEnum(DotNetBase):
type = 'enum'
class DotNetStruct(DotNetBase):
type = 'struct'
class DotNetConstructor(DotNetBase):
type = 'constructor'
class DotNetInterface(DotNetBase):
type = 'interface'
class DotNetDelegate(DotNetBase):
type = 'delegate'
class DotNetClass(DotNetBase):
type = 'class'
class DotNetField(DotNetBase):
type = 'field'
class DotNetEvent(DotNetBase):
type = 'event'
class VirtualNamespace(AutoAPIBase):
language = 'dotnet'
type = 'namespace'
def __init__(self, name, objs):
self.name = self.short_name = name
self.children = []
self.type = 'namespace'
for obj in objs:
self.children.append(obj.obj)