Refactor DotNet Domain, and clean up tests.

pull/9/head
Eric Holscher 9 years ago
parent 0c1bcece23
commit 59add63ae4

@ -1,5 +1,6 @@
import os
from collections import defaultdict
import yaml
from sphinx.util.osutil import ensuredir
@ -20,8 +21,37 @@ class DotNetDomain(AutoAPIDomain):
top_namespaces = {}
def read_file(self, path, **kwargs):
'''Read file input into memory, returning deserialized objects
:param path: Path of file to read
'''
# TODO support JSON here
# TODO sphinx way of reporting errors in logs?
try:
with open(path, 'r') as handle:
parsed_data = yaml.safe_load(handle)
return parsed_data
except IOError:
self.app.warn('Error reading file: {0}'.format(path))
except TypeError:
self.app.warn('Error reading file: {0}'.format(path))
return None
# Subclassed to iterate over items
def map(self):
'''Trigger find of serialized sources and build objects'''
for path, data in self.paths.items():
for item in data['items']:
for obj in self.create_class(item):
self.add_object(obj)
self.organize_objects()
def create_class(self, data):
'''Return instance of class based on Roslyn type property
'''
Return instance of class based on Roslyn type property
Data keys handled here:
@ -34,24 +64,17 @@ class DotNetDomain(AutoAPIDomain):
:param data: dictionary data from Roslyn output artifact
'''
obj_map = dict(
(cls.type, cls) for cls
in [
DotNetNamespace, DotNetClass, DotNetEnum, DotNetStruct,
DotNetInterface, DotNetDelegate, DotNetProperty, DotNetMethod,
DotNetConstructor, DotNetField, DotNetEvent
])
in ALL_CLASSES
)
try:
cls = obj_map[data['type'].lower()]
except KeyError:
self.app.warn('Unknown type: %s' % data)
else:
obj = cls(data)
# TODO what is MADE?
if data.get('id', None) in MADE:
self.app.warn("Object already added: %s" % data.get('id'))
MADE.add(data['id'])
obj = cls(data, jinja_env=self.jinja_env)
# Append child objects
# TODO this should recurse in the case we're getting back more
@ -63,20 +86,6 @@ class DotNetDomain(AutoAPIDomain):
yield obj
def get_objects(self, pattern):
'''Trigger find of serialized sources and build objects'''
for path in self.find_files(pattern):
data_objects = self.read_file(path)
if type(data_objects) == dict:
data_objects = data_objects['items']
try:
for data in data_objects:
for obj in self.create_class(data):
self.add_object(obj)
except:
import traceback
traceback.print_exc()
def add_object(self, obj):
'''Add object to local and app environment storage
@ -127,52 +136,33 @@ class DotNetDomain(AutoAPIDomain):
if len(ns.children) == 0:
del self.namespaces[key]
def full(self):
print "Reading"
self.get_objects(self.get_config('autoapi_file_pattern'))
self.organize_objects()
print "Writing"
self.generate_output()
self.write_indexes()
# def output_rst(self, root, source_suffix):
# for obj in self.top_level_objects.values():
def generate_output(self):
for obj in self.top_level_objects.values():
# if not obj:
# continue
if not obj:
continue
# rst = obj.render()
# if not rst:
# continue
# # Detail
# try:
# filename = obj.name.split('(')[0]
# except IndexError:
# filename = obj.name
# detail_dir = os.path.join(root, *filename.split('.'))
# ensuredir(detail_dir)
# # TODO: Better way to determine suffix?
# path = os.path.join(detail_dir, '%s%s' % ('index', source_suffix))
# with open(path, 'w+') as detail_file:
# detail_file.write(rst.encode('utf-8'))
rst = obj.render()
# Detail
try:
filename = obj.name.split('(')[0]
except IndexError:
filename = obj.name
detail_dir = os.path.join(self.get_config('autoapi_root'),
*filename.split('.'))
ensuredir(detail_dir)
# TODO: Better way to determine suffix?
path = os.path.join(detail_dir, '%s%s' % ('index', self.get_config('source_suffix')[0]))
if rst:
with open(path, 'w+') as detail_file:
detail_file.write(rst.encode('utf-8'))
# for namespace, obj in self.namespaces.items():
# path = os.path.join(self.get_config('autoapi_root'), '%s%s' % (namespace, self.get_config('source_suffix')[0]))
# ensuredir(self.get_config('autoapi_root'))
# with open(path, 'w+') as index_file:
# namespace_rst = obj.render()
# if namespace_rst:
# index_file.write(namespace_rst)
def write_indexes(self):
# Write Index
top_level_index = os.path.join(self.get_config('autoapi_root'),
'index.rst')
with open(top_level_index, 'w+') as top_level_file:
content = self.jinja_env.get_template('index.rst')
top_level_file.write(content.render(pages=self.namespaces.values()))
# # Write Indexes
# top_level_index = os.path.join(root, 'index.rst')
# with open(top_level_index, 'w+') as top_level_file:
# content = self.jinja_env.get_template('index.rst')
# top_level_file.write(content.render(pages=self.namespaces.values()))
class DotNetBase(AutoAPIBase):
@ -182,8 +172,9 @@ class DotNetBase(AutoAPIBase):
language = 'dotnet'
top_level_object = False
def __init__(self, obj):
super(DotNetBase, self).__init__(obj)
def __init__(self, obj, **kwargs):
super(DotNetBase, self).__init__(obj, **kwargs)
# Always exist
self.id = obj['id']
@ -252,9 +243,10 @@ class DotNetBase(AutoAPIBase):
return '{repo}/blob/master/{path}'.format(
repo=repo,
path=path,
)
)
except:
import traceback; traceback.print_exc();
import traceback
traceback.print_exc()
return ''
@property
@ -379,3 +371,9 @@ class DotNetField(DotNetBase):
class DotNetEvent(DotNetBase):
type = 'event'
plural = 'events'
ALL_CLASSES = [
DotNetNamespace, DotNetClass, DotNetEnum, DotNetStruct,
DotNetInterface, DotNetDelegate, DotNetProperty, DotNetMethod,
DotNetConstructor, DotNetField, DotNetEvent
]

@ -0,0 +1,195 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS = -v -v
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " applehelp to make an Apple Help Book"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"
clean:
rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SphinxAutoAPI.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SphinxAutoAPI.qhc"
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@echo
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
@echo "N.B. You won't be able to view it unless you put it in" \
"~/Library/Documentation/Help or install it in your application" \
"bundle."
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/SphinxAutoAPI"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SphinxAutoAPI"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
coverage:
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
@echo "Testing of coverage in the sources finished, look at the " \
"results in $(BUILDDIR)/coverage/python.txt."
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
livehtml:
sphinx-autobuild -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
templates_path = ['_templates']
source_suffix = '.rst'
master_doc = 'index'
project = u'dotnetexample'
copyright = u'2015, rtfd'
author = u'rtfd'
version = '0.1'
release = '0.1'
language = None
exclude_patterns = ['_build']
pygments_style = 'sphinx'
todo_include_todos = False
html_theme = 'alabaster'
html_static_path = ['_static']
htmlhelp_basename = 'dotnetexampledoc'
extensions = ['autoapi.extension', 'sphinxcontrib.dotnetdomain']
autoapi_type = 'dotnet'
autoapi_dir = 'example'
autoapi_file_pattern = '*.yml'

@ -0,0 +1,372 @@
items:
- uid: Microsoft.CodeAnalysis.AdhocWorkspace
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: AdhocWorkspace
fullName: Microsoft.CodeAnalysis.AdhocWorkspace
type: Class
source:
remote: &o0
branch: master
repo: https://github.com/chenkennt/roslyn.git
description: v1.0-12-gef085ea
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 16
summary: >-
A workspace that allows full manipulation of projects and documents,
but does not persist changes.
syntax:
content:
CSharp: public sealed class AdhocWorkspace
inheritance:
- id: System.Object
name: System.Object
isExternal: true
- id: Microsoft.CodeAnalysis.Workspace
name: Workspace
href: Microsoft.CodeAnalysis.Workspace.yml
id: Microsoft.CodeAnalysis.AdhocWorkspace
children:
- Microsoft.CodeAnalysis.AdhocWorkspace.#ctor(Microsoft.CodeAnalysis.Host.HostServices,System.String)
- Microsoft.CodeAnalysis.AdhocWorkspace.#ctor
- Microsoft.CodeAnalysis.AdhocWorkspace.CanApplyChange(Microsoft.CodeAnalysis.ApplyChangesKind)
- Microsoft.CodeAnalysis.AdhocWorkspace.CanOpenDocuments
- Microsoft.CodeAnalysis.AdhocWorkspace.ClearSolution
- Microsoft.CodeAnalysis.AdhocWorkspace.AddSolution(Microsoft.CodeAnalysis.SolutionInfo)
- Microsoft.CodeAnalysis.AdhocWorkspace.AddProject(System.String,System.String)
- Microsoft.CodeAnalysis.AdhocWorkspace.AddProject(Microsoft.CodeAnalysis.ProjectInfo)
- Microsoft.CodeAnalysis.AdhocWorkspace.AddProjects(System.Collections.Generic.IEnumerable{Microsoft.CodeAnalysis.ProjectInfo})
- Microsoft.CodeAnalysis.AdhocWorkspace.AddDocument(Microsoft.CodeAnalysis.ProjectId,System.String,Microsoft.CodeAnalysis.Text.SourceText)
- Microsoft.CodeAnalysis.AdhocWorkspace.AddDocument(Microsoft.CodeAnalysis.DocumentInfo)
- Microsoft.CodeAnalysis.AdhocWorkspace.OpenDocument(Microsoft.CodeAnalysis.DocumentId,System.Boolean)
- Microsoft.CodeAnalysis.AdhocWorkspace.CloseDocument(Microsoft.CodeAnalysis.DocumentId)
- Microsoft.CodeAnalysis.AdhocWorkspace.OpenAdditionalDocument(Microsoft.CodeAnalysis.DocumentId,System.Boolean)
- Microsoft.CodeAnalysis.AdhocWorkspace.CloseAdditionalDocument(Microsoft.CodeAnalysis.DocumentId)
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.#ctor(Microsoft.CodeAnalysis.Host.HostServices,System.String)
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: AdhocWorkspace(HostServices, string)
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.AdhocWorkspace(Microsoft.CodeAnalysis.Host.HostServices, string)
type: Constructor
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 18
syntax:
content:
CSharp: 'public AdhocWorkspace(HostServices host, string workspaceKind = "Custom"): base (host, workspaceKind)'
parameters:
- id: host
type:
id: Microsoft.CodeAnalysis.Host.HostServices
name: HostServices
href: Microsoft.CodeAnalysis.Host.HostServices.yml
- id: workspaceKind
type:
id: System.String
name: System.String
isExternal: true
id: Microsoft.CodeAnalysis.AdhocWorkspace.#ctor(Microsoft.CodeAnalysis.Host.HostServices,System.String)
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.#ctor
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: AdhocWorkspace()
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.AdhocWorkspace()
type: Constructor
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 23
syntax:
content:
CSharp: 'public AdhocWorkspace(): this (Host.Mef.MefHostServices.DefaultHost)'
parameters: []
id: Microsoft.CodeAnalysis.AdhocWorkspace.#ctor
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.CanApplyChange(Microsoft.CodeAnalysis.ApplyChangesKind)
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: CanApplyChange(ApplyChangesKind)
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.CanApplyChange(Microsoft.CodeAnalysis.ApplyChangesKind)
type: Method
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 28
syntax:
content:
CSharp: public override bool CanApplyChange(ApplyChangesKind feature)
parameters:
- id: feature
type:
id: Microsoft.CodeAnalysis.ApplyChangesKind
name: ApplyChangesKind
href: Microsoft.CodeAnalysis.ApplyChangesKind.yml
return:
id: Boolean
id: Microsoft.CodeAnalysis.AdhocWorkspace.CanApplyChange(Microsoft.CodeAnalysis.ApplyChangesKind)
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.CanOpenDocuments
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: CanOpenDocuments
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.CanOpenDocuments
type: Property
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 34
syntax:
content:
CSharp: public override bool CanOpenDocuments { get; }
parameters:
- id: CanOpenDocuments
type:
id: System.Boolean
name: System.Boolean
isExternal: true
id: Microsoft.CodeAnalysis.AdhocWorkspace.CanOpenDocuments
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.ClearSolution
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: ClearSolution()
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.ClearSolution()
type: Method
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 46
summary: Clears all projects and documents from the workspace.
syntax:
content:
CSharp: public new void ClearSolution()
parameters: []
id: Microsoft.CodeAnalysis.AdhocWorkspace.ClearSolution
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.AddSolution(Microsoft.CodeAnalysis.SolutionInfo)
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: AddSolution(SolutionInfo)
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.AddSolution(Microsoft.CodeAnalysis.SolutionInfo)
type: Method
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 54
summary: Adds an entire solution to the workspace, replacing any existing solution.
syntax:
content:
CSharp: public Solution AddSolution(SolutionInfo solutionInfo)
parameters:
- id: solutionInfo
type:
id: Microsoft.CodeAnalysis.SolutionInfo
name: SolutionInfo
href: Microsoft.CodeAnalysis.SolutionInfo.yml
return:
id: Solution
id: Microsoft.CodeAnalysis.AdhocWorkspace.AddSolution(Microsoft.CodeAnalysis.SolutionInfo)
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.AddProject(System.String,System.String)
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: AddProject(string, string)
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.AddProject(string, string)
type: Method
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 69
summary: Adds a project to the workspace. All previous projects remain intact.
syntax:
content:
CSharp: public Project AddProject(string name, string language)
parameters:
- id: name
type:
id: System.String
name: System.String
isExternal: true
- id: language
type:
id: System.String
name: System.String
isExternal: true
return:
id: Project
id: Microsoft.CodeAnalysis.AdhocWorkspace.AddProject(System.String,System.String)
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.AddProject(Microsoft.CodeAnalysis.ProjectInfo)
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: AddProject(ProjectInfo)
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.AddProject(Microsoft.CodeAnalysis.ProjectInfo)
type: Method
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 78
summary: Adds a project to the workspace. All previous projects remain intact.
syntax:
content:
CSharp: public Project AddProject(ProjectInfo projectInfo)
parameters:
- id: projectInfo
type:
id: Microsoft.CodeAnalysis.ProjectInfo
name: ProjectInfo
href: Microsoft.CodeAnalysis.ProjectInfo.yml
return:
id: Project
id: Microsoft.CodeAnalysis.AdhocWorkspace.AddProject(Microsoft.CodeAnalysis.ProjectInfo)
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.AddProjects(System.Collections.Generic.IEnumerable{Microsoft.CodeAnalysis.ProjectInfo})
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: AddProjects(IEnumerable<ProjectInfo>)
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.AddProjects(System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.ProjectInfo>)
type: Method
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 94
summary: Adds multiple projects to the workspace at once. All existing projects remain intact.
syntax:
content:
CSharp: public void AddProjects(IEnumerable<ProjectInfo> projectInfos)
parameters:
- id: projectInfos
type:
id: System.Collections.Generic.IEnumerable{Microsoft.CodeAnalysis.ProjectInfo}
name: System.Collections.Generic.IEnumerable{Microsoft.CodeAnalysis.ProjectInfo}
isExternal: true
id: Microsoft.CodeAnalysis.AdhocWorkspace.AddProjects(System.Collections.Generic.IEnumerable{Microsoft.CodeAnalysis.ProjectInfo})
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.AddDocument(Microsoft.CodeAnalysis.ProjectId,System.String,Microsoft.CodeAnalysis.Text.SourceText)
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: AddDocument(ProjectId, string, SourceText)
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.AddDocument(Microsoft.CodeAnalysis.ProjectId, string, Microsoft.CodeAnalysis.Text.SourceText)
type: Method
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 110
summary: Adds a document to the workspace.
syntax:
content:
CSharp: public Document AddDocument(ProjectId projectId, string name, SourceText text)
parameters:
- id: projectId
type:
id: Microsoft.CodeAnalysis.ProjectId
name: ProjectId
href: Microsoft.CodeAnalysis.ProjectId.yml
- id: name
type:
id: System.String
name: System.String
isExternal: true
- id: text
type:
id: Microsoft.CodeAnalysis.Text.SourceText
name: SourceText
href: Microsoft.CodeAnalysis.Text.SourceText
return:
id: Document
id: Microsoft.CodeAnalysis.AdhocWorkspace.AddDocument(Microsoft.CodeAnalysis.ProjectId,System.String,Microsoft.CodeAnalysis.Text.SourceText)
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.AddDocument(Microsoft.CodeAnalysis.DocumentInfo)
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: AddDocument(DocumentInfo)
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.AddDocument(Microsoft.CodeAnalysis.DocumentInfo)
type: Method
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 136
summary: Adds a document to the workspace.
syntax:
content:
CSharp: public Document AddDocument(DocumentInfo documentInfo)
parameters:
- id: documentInfo
type:
id: Microsoft.CodeAnalysis.DocumentInfo
name: DocumentInfo
href: Microsoft.CodeAnalysis.DocumentInfo.yml
return:
id: Document
id: Microsoft.CodeAnalysis.AdhocWorkspace.AddDocument(Microsoft.CodeAnalysis.DocumentInfo)
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.OpenDocument(Microsoft.CodeAnalysis.DocumentId,System.Boolean)
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: OpenDocument(DocumentId, bool)
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.OpenDocument(Microsoft.CodeAnalysis.DocumentId, bool)
type: Method
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 151
summary: Puts the specified document into the open state.
syntax:
content:
CSharp: public override void OpenDocument(DocumentId documentId, bool activate = true)
parameters:
- id: documentId
type:
id: Microsoft.CodeAnalysis.DocumentId
name: DocumentId
href: Microsoft.CodeAnalysis.DocumentId.yml
- id: activate
type:
id: System.Boolean
name: System.Boolean
isExternal: true
id: Microsoft.CodeAnalysis.AdhocWorkspace.OpenDocument(Microsoft.CodeAnalysis.DocumentId,System.Boolean)
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.CloseDocument(Microsoft.CodeAnalysis.DocumentId)
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: CloseDocument(DocumentId)
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.CloseDocument(Microsoft.CodeAnalysis.DocumentId)
type: Method
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 164
summary: Puts the specified document into the closed state.
syntax:
content:
CSharp: public override void CloseDocument(DocumentId documentId)
parameters:
- id: documentId
type:
id: Microsoft.CodeAnalysis.DocumentId
name: DocumentId
href: Microsoft.CodeAnalysis.DocumentId.yml
id: Microsoft.CodeAnalysis.AdhocWorkspace.CloseDocument(Microsoft.CodeAnalysis.DocumentId)
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.OpenAdditionalDocument(Microsoft.CodeAnalysis.DocumentId,System.Boolean)
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: OpenAdditionalDocument(DocumentId, bool)
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.OpenAdditionalDocument(Microsoft.CodeAnalysis.DocumentId, bool)
type: Method
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 179
summary: Puts the specified additional document into the open state.
syntax:
content:
CSharp: public override void OpenAdditionalDocument(DocumentId documentId, bool activate = true)
parameters:
- id: documentId
type:
id: Microsoft.CodeAnalysis.DocumentId
name: DocumentId
href: Microsoft.CodeAnalysis.DocumentId.yml
- id: activate
type:
id: System.Boolean
name: System.Boolean
isExternal: true
id: Microsoft.CodeAnalysis.AdhocWorkspace.OpenAdditionalDocument(Microsoft.CodeAnalysis.DocumentId,System.Boolean)
- uid: Microsoft.CodeAnalysis.AdhocWorkspace.CloseAdditionalDocument(Microsoft.CodeAnalysis.DocumentId)
href: Microsoft.CodeAnalysis.AdhocWorkspace.yml
name: CloseAdditionalDocument(DocumentId)
fullName: Microsoft.CodeAnalysis.AdhocWorkspace.CloseAdditionalDocument(Microsoft.CodeAnalysis.DocumentId)
type: Method
source:
remote: *o0
path: src/Workspaces/Core/Portable/Workspace/AdhocWorkspace.cs
startLine: 192
summary: Puts the specified additional document into the closed state
syntax:
content:
CSharp: public override void CloseAdditionalDocument(DocumentId documentId)
parameters:
- id: documentId
type:
id: Microsoft.CodeAnalysis.DocumentId
name: DocumentId
href: Microsoft.CodeAnalysis.DocumentId.yml
id: Microsoft.CodeAnalysis.AdhocWorkspace.CloseAdditionalDocument(Microsoft.CodeAnalysis.DocumentId)

@ -0,0 +1,13 @@
Welcome to .Net example's documentation!
========================================
.. toctree::
autoapi/index
Contents:
.. toctree::
:maxdepth: 2

@ -34,6 +34,7 @@ class DomainTests(unittest.TestCase):
def test_create_class(self):
'''Test .NET class instance creation helper'''
dom = dotnet.DotNetDomain(self.application)
def _create_class(data):
return list(dom.create_class(data))[0]
cls = _create_class({'id': 'Foo.Bar', 'type': 'Namespace'})
@ -61,6 +62,7 @@ class DomainTests(unittest.TestCase):
def test_create_class_with_children(self):
dom = dotnet.DotNetDomain(self.application)
def _create_class(data):
return list(dom.create_class(data))[0]
cls = _create_class({'id': 'Foo.Bar',
@ -76,7 +78,7 @@ class DomainTests(unittest.TestCase):
'''Test basic get objects'''
objs = []
def _mock_find(self, pattern):
def _mock_find(self, pattern, **kwargs):
return {'items': ['foo', 'bar']}
def _mock_read(self, path):
@ -84,9 +86,6 @@ class DomainTests(unittest.TestCase):
{'id': 'Foo.Bar2', 'name': 'Bar', 'type': 'property'}],
'id': 'Foo.Bar', 'type': 'Class', 'summary': path}
def _mock_add(self, obj):
objs.append(obj)
def _mock_config(self, key):
return 'foo'
@ -94,9 +93,10 @@ class DomainTests(unittest.TestCase):
patch('autoapi.domains.dotnet.DotNetDomain.find_files', _mock_find),
patch('autoapi.domains.dotnet.DotNetDomain.read_file', _mock_read),
patch('autoapi.domains.dotnet.DotNetDomain.get_config', _mock_config),
):
):
dom = dotnet.DotNetDomain(self.application)
dom.get_objects('*')
dom.load('', '', '')
dom.map()
objs = dom.objects
self.assertEqual(len(objs), 2)
self.assertEqual(objs['Foo.Bar'].id, 'Foo.Bar')

@ -6,7 +6,7 @@ import unittest
__author__ = 'swenson'
class FullPythonTests(unittest.TestCase):
class LanguageIntegrationTests(unittest.TestCase):
def test_full_py(self):
os.chdir('tests/pyexample')
@ -22,9 +22,6 @@ class FullPythonTests(unittest.TestCase):
finally:
os.chdir('../..')
class FullJavaScriptTests(unittest.TestCase):
def test_full_js(self):
os.chdir('tests/jsexample')
try:
@ -39,44 +36,58 @@ class FullJavaScriptTests(unittest.TestCase):
finally:
os.chdir('../..')
def test_full_go(self):
os.chdir('tests/goexample')
try:
if os.path.exists('_build'):
shutil.rmtree('_build')
os.mkdir('_build')
sp.check_call('sphinx-build -b text -d _build/doctrees . _build/text', shell=True)
class FullTemplateTests(unittest.TestCase):
def test_template_override(self):
"""
Test that we are overriding the template properly.
with open('_build/text/autoapi/main/index.txt') as fin:
text = fin.read().strip()
self.assertIn(
'CopyFuncs produces a json-annotated array of Func objects',
text
)
finally:
os.chdir('../..')
This uses the ``template_overrides/python/function.rst`` template to override content.
"""
os.chdir('tests/templateexample')
def test_full_dotnet(self):
os.chdir('tests/dotnetexample')
try:
if os.path.exists('_build'):
shutil.rmtree('_build')
os.mkdir('_build')
sp.check_call('sphinx-build -b text -d _build/doctrees . _build/text', shell=True)
with open('_build/text/autoapi/example/index.txt') as fin:
with open('_build/text/autoapi/Microsoft/CodeAnalysis/AdhocWorkspace/index.txt') as fin:
text = fin.read().strip()
self.assertIn('This is a fuction template override!', text)
self.assertIn(
'A workspace that allows full manipulation of projects and documents',
text
)
finally:
os.chdir('../..')
class FullGoTests(unittest.TestCase):
class FeatureIntegrationTests(unittest.TestCase):
def test_full_js(self):
os.chdir('tests/goexample')
def test_template_override(self):
"""
Test that we are overriding the template properly.
This uses the ``template_overrides/python/function.rst`` template to override content.
"""
os.chdir('tests/templateexample')
try:
if os.path.exists('_build'):
shutil.rmtree('_build')
os.mkdir('_build')
sp.check_call('sphinx-build -b text -d _build/doctrees . _build/text', shell=True)
with open('_build/text/autoapi/main/index.txt') as fin:
with open('_build/text/autoapi/example/index.txt') as fin:
text = fin.read().strip()
self.assertIn(
'CopyFuncs produces a json-annotated array of Func objects',
text
)
self.assertIn('This is a fuction template override!', text)
finally:
os.chdir('../..')

Loading…
Cancel
Save