コード例 #1
0
        protected override object CreateFancyDescription()
        {
            var ambience = new CSharpAmbience();

            ambience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.ShowDeclaringType;
            string header        = ambience.ConvertSymbol(Entity);
            var    documentation = XmlDocumentationElement.Get(Entity);

            ambience.ConversionFlags = ConversionFlags.ShowTypeParameterList;
            var b = new CSharpDocumentationBuilder(ambience);

            b.AddCodeBlock(header, keepLargeMargin: true);
            if (documentation != null)
            {
                foreach (var child in documentation.Children)
                {
                    b.AddDocumentationElement(child);
                }
            }

            var flowDocument = b.CreateFlowDocument();

            flowDocument.PagePadding = new Thickness(0); // default is NOT Thickness(0), but Thickness(Auto), which adds unnecessary space

            return(new FlowDocumentScrollViewer {
                Document = flowDocument,
                VerticalScrollBarVisibility = ScrollBarVisibility.Auto
            });
        }
コード例 #2
0
        public static FlowDocument CreateTooltip(IEntity entity, bool useFullyQualifiedMemberNames = true)
        {
            var ambience = AmbienceService.GetCurrentAmbience();

            ambience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.ShowDeclaringType;
            if (useFullyQualifiedMemberNames)
            {
                ambience.ConversionFlags |= ConversionFlags.UseFullyQualifiedEntityNames;
            }
            string header        = ambience.ConvertSymbol(entity);
            var    documentation = XmlDocumentationElement.Get(entity);

            ambience.ConversionFlags = ConversionFlags.ShowTypeParameterList;
            DocumentationUIBuilder b = new DocumentationUIBuilder(ambience);

            b.AddCodeBlock(header, keepLargeMargin: true);
            if (documentation != null)
            {
                foreach (var child in documentation.Children)
                {
                    b.AddDocumentationElement(child);
                }
            }
            return(b.CreateFlowDocument());
        }
コード例 #3
0
        public void CDATAInDocumentation()
        {
            Init(@"using System;
/// <summary>before<![CDATA[<xml/>]]>after</summary>
class Test { }
");
            var element = XmlDocumentationElement.Get(typeDefinition);

            Assert.AreEqual(1, element.Children.Count());
            Assert.AreEqual("summary", element.Children[0].Name);
            Assert.AreEqual("before<xml/>after", element.Children[0].TextContent);
        }
コード例 #4
0
        protected override CodeAction GetAction(RefactoringContext context, ThrowStatement node)
        {
            var entity = node.GetParent <EntityDeclaration> ();

            if (entity == null)
            {
                return(null);
            }
            var rr = context.Resolve(entity) as MemberResolveResult;

            if (rr == null || rr.IsError)
            {
                return(null);
            }
            var expr = context.Resolve(node.Expression);

            if (expr == null || expr.IsError || expr.Type.GetDefinition() == null)
            {
                return(null);
            }

            var docElement = XmlDocumentationElement.Get(rr.Member);

            if (docElement == null || docElement.Children.Count == 0)
            {
                return(null);
            }
            foreach (var de in docElement.Children)
            {
                if (de.Name == "exception")
                {
                    if (de.ReferencedEntity == expr.Type)
                    {
                        return(null);
                    }
                }
            }

            return(new CodeAction(
                       context.TranslateString("Add exception to xml documentation"),
                       script => {
                var startText = string.Format(" <exception cref=\"{0}\">", expr.Type.GetDefinition().GetIdString());
                var comment = new Comment(startText + "</exception>", CommentType.Documentation);
                script.InsertBefore(
                    SearchInsertionNode(entity.FirstChild) ?? entity,
                    comment
                    );
                script.Select(script.GetSegment(comment).Offset + ("///" + startText).Length, 0);
            },
                       node
                       ));
        }
コード例 #5
0
        FlowDocumentScrollViewer GenerateHeader()
        {
            var ambience = new CSharpAmbience();

            ambience.ConversionFlags = ConversionFlags.StandardConversionFlags;
            var stringBuilder = new StringBuilder();
            var formatter     = new ParameterHighlightingOutputFormatter(stringBuilder, highlightedParameterIndex);

            ambience.ConvertSymbol(Method, formatter, FormattingOptionsFactory.CreateSharpDevelop());

            var documentation = XmlDocumentationElement.Get(Method);

            ambience.ConversionFlags = ConversionFlags.ShowTypeParameterList;

            var    b             = new CSharpDocumentationBuilder(ambience);
            string parameterName = null;

            if (Method.Parameters.Count > highlightedParameterIndex)
            {
                parameterName = Method.Parameters[highlightedParameterIndex].Name;
            }
            b.AddSignatureBlock(stringBuilder.ToString(), formatter.parameterStartOffset, formatter.parameterLength, parameterName);

            var b2 = new CSharpDocumentationBuilder(ambience);

            b2.ParameterName     = parameterName;
            b2.ShowAllParameters = false;

            if (documentation != null)
            {
                foreach (var child in documentation.Children)
                {
                    b2.AddDocumentationElement(child);
                }
            }

            content = new FlowDocumentScrollViewer {
                Document = b2.CreateFlowDocument(),
                VerticalScrollBarVisibility = ScrollBarVisibility.Auto
            };

            var flowDocument = b.CreateFlowDocument();

            flowDocument.PagePadding = new Thickness(0); // default is NOT Thickness(0), but Thickness(Auto), which adds unnecessary space

            return(new FlowDocumentScrollViewer {
                Document = flowDocument,
                VerticalScrollBarVisibility = ScrollBarVisibility.Auto
            });
        }
コード例 #6
0
        void GenerateHeader()
        {
            CSharpAmbience ambience = new CSharpAmbience();

            ambience.ConversionFlags = ConversionFlags.StandardConversionFlags;
            var         stringBuilder = new StringBuilder();
            TokenWriter formatter     = new ParameterHighlightingOutputFormatter(stringBuilder, highlightedParameterIndex);

            ambience.ConvertSymbol(Method, formatter, FormattingOptionsFactory.CreateSharpDevelop());
            var documentation = XmlDocumentationElement.Get(Method);

            ambience.ConversionFlags = ConversionFlags.ShowTypeParameterList;

            var inlineBuilder = new HighlightedInlineBuilder(stringBuilder.ToString());

            header.Inlines.Clear();
            header.Inlines.AddRange(inlineBuilder.CreateRuns());
        }
コード例 #7
0
        public void InheritedDocumentation()
        {
            Init(@"using System;
class Derived : Base {
	/// <summary>Overridden summary</summary><inheritdoc/>
	public override void Method();
}
class Base {
	/// <summary>Base summary</summary><remarks>Base remarks</remarks>
	public virtual void Method();
}
");
            var element = XmlDocumentationElement.Get(typeDefinition.Methods.Single(m => m.Name == "Method"));

            Assert.AreEqual(2, element.Children.Count());
            Assert.AreEqual("summary", element.Children[0].Name);
            Assert.AreEqual("remarks", element.Children[1].Name);
            Assert.AreEqual("Overridden summary", element.Children[0].TextContent);
            Assert.AreEqual("Base remarks", element.Children[1].TextContent);
        }
コード例 #8
0
        public SDLanguageItemCollection <SDDocumentation> ParseDocumentation(IEntity entity)
        {
            var docDic = new SDLanguageItemCollection <SDDocumentation>();

            try
            {
                if (entity != null)
                {
                    var xmlDoc = XmlDocumentationElement.Get(entity);

                    if (xmlDoc != null)
                    {
                        foreach (XmlDocumentationElement child in xmlDoc.Children)
                        {
                            if (CultureInfo.GetCultures(CultureTypes.NeutralCultures).Any(c => c.TwoLetterISOLanguageName == child.Name.ToLower()) || child.Name.ToLower() == "default")
                            {
                                // TODO
                                //_sdRepository.AddDocumentationLanguage(child.Name.ToLower());
                                var languageDoc = ParseDocumentation(child.Children);
                                docDic.Add(child.Name.ToLower(), languageDoc);
                            }
                        }

                        //Es wurde keine Sprachunterstützung in der Doku genutzt.
                        //Deswegen wird die Doku einfach als "default" geladen.
                        if (docDic.Count == 0)
                        {
                            var defaultDoc = ParseDocumentation(xmlDoc.Children);
                            docDic.Add("default", defaultDoc);
                        }
                    }
                }
            }
            catch (NullReferenceException ex)
            {
                Trace.TraceError(ex.ToString());
            }

            return(docDic);
        }