提交 803b5a60 编写于 作者: L lorcanmooney 提交者: Sam Harwell

Cleanup and remove redundancy

上级 557a3ffe
...@@ -967,7 +967,7 @@ public static XmlEmptyElementSyntax XmlNullKeywordElement() ...@@ -967,7 +967,7 @@ public static XmlEmptyElementSyntax XmlNullKeywordElement()
private static XmlEmptyElementSyntax XmlKeywordElement(string keyword) private static XmlEmptyElementSyntax XmlKeywordElement(string keyword)
{ {
return XmlEmptyElement(DocumentationCommentXmlNames.SeeElementName).AddAttributes( return XmlEmptyElement(DocumentationCommentXmlNames.SeeElementName).AddAttributes(
XmlTextAttribute(DocumentationCommentXmlNames.KeywordElementName, keyword)); XmlTextAttribute(DocumentationCommentXmlNames.LangwordAttributeName, keyword));
} }
/// <summary> /// <summary>
......
...@@ -12,34 +12,38 @@ internal static class DocumentationCommentXmlNames ...@@ -12,34 +12,38 @@ internal static class DocumentationCommentXmlNames
public const string CElementName = "c"; public const string CElementName = "c";
public const string CodeElementName = "code"; public const string CodeElementName = "code";
public const string CompletionListElementName = "completionlist"; public const string CompletionListElementName = "completionlist";
public const string DescriptionElementName = "description";
public const string ExampleElementName = "example"; public const string ExampleElementName = "example";
public const string ExceptionElementName = "exception"; public const string ExceptionElementName = "exception";
public const string IncludeElementName = "include"; public const string IncludeElementName = "include";
public const string ItemElementName = "item";
public const string ListElementName = "list"; public const string ListElementName = "list";
public const string ListHeaderElementName = "listheader";
public const string ParaElementName = "para"; public const string ParaElementName = "para";
public const string ParameterElementName = "param"; public const string ParameterElementName = "param";
public const string ParameterReferenceElementName = "paramref"; public const string ParameterReferenceElementName = "paramref";
public const string PermissionElementName = "permission"; public const string PermissionElementName = "permission";
public const string PlaceholderElementName = "placeholder";
public const string PreliminaryElementName = "preliminary";
public const string RemarksElementName = "remarks"; public const string RemarksElementName = "remarks";
public const string ReturnsElementName = "returns"; public const string ReturnsElementName = "returns";
public const string SeeElementName = "see"; public const string SeeElementName = "see";
public const string SeeAlsoElementName = "seealso"; public const string SeeAlsoElementName = "seealso";
public const string SummaryElementName = "summary"; public const string SummaryElementName = "summary";
public const string TermElementName = "term";
public const string ThreadSafetyElementName = "threadsafety";
public const string TypeParameterElementName = "typeparam"; public const string TypeParameterElementName = "typeparam";
public const string TypeParameterReferenceElementName = "typeparamref"; public const string TypeParameterReferenceElementName = "typeparamref";
public const string ValueElementName = "value"; public const string ValueElementName = "value";
public const string ThreadSafetyElementName = "threadsafety";
public const string PreliminaryElementName = "preliminary";
public const string KeywordElementName = "langword";
public const string PlaceholderElementName = "placeholder";
public const string CrefAttributeName = "cref"; public const string CrefAttributeName = "cref";
public const string NameAttributeName = "name";
public const string FileAttributeName = "file"; public const string FileAttributeName = "file";
public const string InstanceAttributeName = "instance";
public const string LangwordAttributeName = "langword";
public const string NameAttributeName = "name";
public const string PathAttributeName = "path"; public const string PathAttributeName = "path";
public const string TypeAttributeName = "type";
public const string StaticAttributeName = "static"; public const string StaticAttributeName = "static";
public const string InstanceAttributeName = "instance"; public const string TypeAttributeName = "type";
public static bool ElementEquals(string name1, string name2, bool fromVb = false) public static bool ElementEquals(string name1, string name2, bool fromVb = false)
{ {
......
...@@ -748,7 +748,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic ...@@ -748,7 +748,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
XmlAttribute( XmlAttribute(
XmlName( XmlName(
Nothing, Nothing,
XmlTextLiteralToken(DocumentationCommentXmlNames.KeywordElementName, DocumentationCommentXmlNames.KeywordElementName)), XmlTextLiteralToken(DocumentationCommentXmlNames.LangwordAttributeName, DocumentationCommentXmlNames.LangwordAttributeName)),
XmlString( XmlString(
Token(SyntaxKind.DoubleQuoteToken), Token(SyntaxKind.DoubleQuoteToken),
SyntaxTokenList.Create(XmlTextLiteralToken(keyword, keyword)), SyntaxTokenList.Create(XmlTextLiteralToken(keyword, keyword)),
......
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
namespace Microsoft.CodeAnalysis.CSharp.Completion.Providers namespace Microsoft.CodeAnalysis.CSharp.Completion.Providers
{ {
using static DocumentationCommentXmlNames;
internal partial class XmlDocCommentCompletionProvider : AbstractDocCommentCompletionProvider<DocumentationCommentTriviaSyntax> internal partial class XmlDocCommentCompletionProvider : AbstractDocCommentCompletionProvider<DocumentationCommentTriviaSyntax>
{ {
internal override bool IsInsertionTrigger(SourceText text, int characterPosition, OptionSet options) internal override bool IsInsertionTrigger(SourceText text, int characterPosition, OptionSet options)
...@@ -88,10 +90,10 @@ internal override bool IsInsertionTrigger(SourceText text, int characterPosition ...@@ -88,10 +90,10 @@ internal override bool IsInsertionTrigger(SourceText text, int characterPosition
if (token.Parent.Parent.Kind() == SyntaxKind.XmlElement || if (token.Parent.Parent.Kind() == SyntaxKind.XmlElement ||
token.Parent.Parent.IsParentKind(SyntaxKind.XmlElement)) token.Parent.Parent.IsParentKind(SyntaxKind.XmlElement))
{ {
items.AddRange(GetNestedTags(declaredSymbol)); items.AddRange(GetNestedItems(declaredSymbol));
} }
if (token.Parent.Parent.Kind() == SyntaxKind.XmlElement && ((XmlElementSyntax)token.Parent.Parent).StartTag.Name.LocalName.ValueText == ListTagName) if (token.Parent.Parent.Kind() == SyntaxKind.XmlElement && ((XmlElementSyntax)token.Parent.Parent).StartTag.Name.LocalName.ValueText == ListElementName)
{ {
items.AddRange(GetListItems()); items.AddRange(GetListItems());
} }
...@@ -99,13 +101,13 @@ internal override bool IsInsertionTrigger(SourceText text, int characterPosition ...@@ -99,13 +101,13 @@ internal override bool IsInsertionTrigger(SourceText text, int characterPosition
if (token.Parent.IsParentKind(SyntaxKind.XmlEmptyElement) && token.Parent.Parent.IsParentKind(SyntaxKind.XmlElement)) if (token.Parent.IsParentKind(SyntaxKind.XmlEmptyElement) && token.Parent.Parent.IsParentKind(SyntaxKind.XmlElement))
{ {
var element = (XmlElementSyntax)token.Parent.Parent.Parent; var element = (XmlElementSyntax)token.Parent.Parent.Parent;
if (element.StartTag.Name.LocalName.ValueText == ListTagName) if (element.StartTag.Name.LocalName.ValueText == ListElementName)
{ {
items.AddRange(GetListItems()); items.AddRange(GetListItems());
} }
} }
if (token.Parent.Parent.Kind() == SyntaxKind.XmlElement && ((XmlElementSyntax)token.Parent.Parent).StartTag.Name.LocalName.ValueText == ListHeaderTagName) if (token.Parent.Parent.Kind() == SyntaxKind.XmlElement && ((XmlElementSyntax)token.Parent.Parent).StartTag.Name.LocalName.ValueText == ListHeaderElementName)
{ {
items.AddRange(GetListHeaderItems()); items.AddRange(GetListHeaderItems());
} }
...@@ -123,12 +125,12 @@ internal override bool IsInsertionTrigger(SourceText text, int characterPosition ...@@ -123,12 +125,12 @@ internal override bool IsInsertionTrigger(SourceText text, int characterPosition
{ {
var startTag = (XmlElementStartTagSyntax)token.Parent; var startTag = (XmlElementStartTagSyntax)token.Parent;
if (token == startTag.GreaterThanToken && startTag.Name.LocalName.ValueText == ListTagName) if (token == startTag.GreaterThanToken && startTag.Name.LocalName.ValueText == ListElementName)
{ {
items.AddRange(GetListItems()); items.AddRange(GetListItems());
} }
if (token == startTag.GreaterThanToken && startTag.Name.LocalName.ValueText == ListHeaderTagName) if (token == startTag.GreaterThanToken && startTag.Name.LocalName.ValueText == ListHeaderElementName)
{ {
items.AddRange(GetListHeaderItems()); items.AddRange(GetListHeaderItems());
} }
...@@ -144,16 +146,16 @@ private bool IsAttributeNameContext(SyntaxToken token, int position, out string ...@@ -144,16 +146,16 @@ private bool IsAttributeNameContext(SyntaxToken token, int position, out string
if (token.IsKind(SyntaxKind.XmlTextLiteralToken) && string.IsNullOrWhiteSpace(token.Text)) if (token.IsKind(SyntaxKind.XmlTextLiteralToken) && string.IsNullOrWhiteSpace(token.Text))
{ {
// Unlike VB, the C# lexer has a preference for leading trivia so, in the following text... // Unlike VB, the C# lexer has a preference for leading trivia. In the following example...
// //
// <exception $$ // /// <exception $$
// //
// ...the trailing whitespace will not be attached as trivia to any node. Instead it will // ...the trailing whitespace will not be attached as trivia to any node. Instead it will
// be treated as an independent XmlTextLiteralToken, so we skip backwards by one token. // be treated as an independent XmlTextLiteralToken, so skip backwards by one token.
token = token.GetPreviousToken(); token = token.GetPreviousToken();
} }
// Handle the <elem$$ case by going back one token (some of the subsequent checks need to account for this) // Handle the <elem$$ case by going back one token (the subsequent checks need to account for this)
token = token.GetPreviousTokenIfTouchingWord(position); token = token.GetPreviousTokenIfTouchingWord(position);
SyntaxList<XmlAttributeSyntax> attributes = default(SyntaxList<XmlAttributeSyntax>); SyntaxList<XmlAttributeSyntax> attributes = default(SyntaxList<XmlAttributeSyntax>);
...@@ -179,9 +181,7 @@ private bool IsAttributeNameContext(SyntaxToken token, int position, out string ...@@ -179,9 +181,7 @@ private bool IsAttributeNameContext(SyntaxToken token, int position, out string
} }
} }
attributeNames = attributes.Select(attribute => GetAttributeName(attribute)) attributeNames = attributes.Select(GetAttributeName).ToSet();
.ToSet();
return elementName != null; return elementName != null;
} }
...@@ -192,26 +192,20 @@ private string GetElementNameAndAttributes(SyntaxNode node, out SyntaxList<XmlAt ...@@ -192,26 +192,20 @@ private string GetElementNameAndAttributes(SyntaxNode node, out SyntaxList<XmlAt
switch (node.Kind()) switch (node.Kind())
{ {
case SyntaxKind.XmlEmptyElement: case SyntaxKind.XmlEmptyElement:
{
var emptyElementSyntax = (XmlEmptyElementSyntax)node; var emptyElementSyntax = (XmlEmptyElementSyntax)node;
nameSyntax = emptyElementSyntax.Name; nameSyntax = emptyElementSyntax.Name;
attributes = emptyElementSyntax.Attributes; attributes = emptyElementSyntax.Attributes;
break; break;
}
case SyntaxKind.XmlElement: case SyntaxKind.XmlElement:
{
node = ((XmlElementSyntax)node).StartTag; node = ((XmlElementSyntax)node).StartTag;
goto case SyntaxKind.XmlElementStartTag; goto case SyntaxKind.XmlElementStartTag;
}
case SyntaxKind.XmlElementStartTag: case SyntaxKind.XmlElementStartTag:
{
var startTagSyntax = (XmlElementStartTagSyntax)node; var startTagSyntax = (XmlElementStartTagSyntax)node;
nameSyntax = startTagSyntax.Name; nameSyntax = startTagSyntax.Name;
attributes = startTagSyntax.Attributes; attributes = startTagSyntax.Attributes;
break; break;
}
default: default:
nameSyntax = null; nameSyntax = null;
...@@ -276,7 +270,7 @@ private bool IsAttributeValueContext(SyntaxToken token, out string tagName, out ...@@ -276,7 +270,7 @@ private bool IsAttributeValueContext(SyntaxToken token, out string tagName, out
protected override IEnumerable<string> GetKeywordNames() protected override IEnumerable<string> GetKeywordNames()
{ {
return SyntaxFacts.GetKeywordKinds().Select(keyword => SyntaxFacts.GetText(keyword)); return SyntaxFacts.GetKeywordKinds().Select(SyntaxFacts.GetText);
} }
protected override IEnumerable<string> GetExistingTopLevelElementNames(DocumentationCommentTriviaSyntax syntax) protected override IEnumerable<string> GetExistingTopLevelElementNames(DocumentationCommentTriviaSyntax syntax)
......
...@@ -6,6 +6,7 @@ Imports Microsoft.CodeAnalysis.Completion.Providers ...@@ -6,6 +6,7 @@ Imports Microsoft.CodeAnalysis.Completion.Providers
Imports Microsoft.CodeAnalysis.Options Imports Microsoft.CodeAnalysis.Options
Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Roslyn.Utilities.DocumentationCommentXmlNames
Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
Partial Friend Class XmlDocCommentCompletionProvider Partial Friend Class XmlDocCommentCompletionProvider
...@@ -101,23 +102,23 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers ...@@ -101,23 +102,23 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
Dim grandParent = parentElement.Parent Dim grandParent = parentElement.Parent
If grandParent.IsKind(SyntaxKind.XmlElement) Then If grandParent.IsKind(SyntaxKind.XmlElement) Then
items.AddRange(GetNestedTags(symbol)) items.AddRange(GetNestedItems(symbol))
If GetStartTagName(grandParent) = ListTagName Then If GetStartTagName(grandParent) = ListElementName Then
items.AddRange(GetListItems()) items.AddRange(GetListItems())
End If End If
If GetStartTagName(grandParent) = ListHeaderTagName Then If GetStartTagName(grandParent) = ListHeaderElementName Then
items.AddRange(GetListHeaderItems()) items.AddRange(GetListHeaderItems())
End If End If
ElseIf token.Parent.IsKind(SyntaxKind.XmlText) AndAlso token.Parent.Parent.IsKind(SyntaxKind.XmlElement) Then ElseIf token.Parent.IsKind(SyntaxKind.XmlText) AndAlso token.Parent.Parent.IsKind(SyntaxKind.XmlElement) Then
items.AddRange(GetNestedTags(symbol)) items.AddRange(GetNestedItems(symbol))
If GetStartTagName(token.Parent.Parent) = ListTagName Then If GetStartTagName(token.Parent.Parent) = ListElementName Then
items.AddRange(GetListItems()) items.AddRange(GetListItems())
End If End If
If GetStartTagName(token.Parent.Parent) = ListHeaderTagName Then If GetStartTagName(token.Parent.Parent) = ListHeaderElementName Then
items.AddRange(GetListHeaderItems()) items.AddRange(GetListHeaderItems())
End If End If
ElseIf grandParent.IsKind(SyntaxKind.DocumentationCommentTrivia) Then ElseIf grandParent.IsKind(SyntaxKind.DocumentationCommentTrivia) Then
...@@ -128,11 +129,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers ...@@ -128,11 +129,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
If token.Parent.IsKind(SyntaxKind.XmlElementStartTag, SyntaxKind.XmlName) Then If token.Parent.IsKind(SyntaxKind.XmlElementStartTag, SyntaxKind.XmlName) Then
If parentElement.IsParentKind(SyntaxKind.XmlElement) Then If parentElement.IsParentKind(SyntaxKind.XmlElement) Then
If GetStartTagName(parentElement.Parent) = ListTagName Then If GetStartTagName(parentElement.Parent) = ListElementName Then
items.AddRange(GetListItems()) items.AddRange(GetListItems())
End If End If
If GetStartTagName(parentElement.Parent) = ListHeaderTagName Then If GetStartTagName(parentElement.Parent) = ListHeaderElementName Then
items.AddRange(GetListHeaderItems()) items.AddRange(GetListHeaderItems())
End If End If
End If End If
...@@ -229,7 +230,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers ...@@ -229,7 +230,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
End Sub End Sub
Protected Overrides Function GetKeywordNames() As IEnumerable(Of String) Protected Overrides Function GetKeywordNames() As IEnumerable(Of String)
Return SyntaxFacts.GetKeywordKinds().Select(Function(keyword) SyntaxFacts.GetText(keyword)) Return SyntaxFacts.GetKeywordKinds().Select(AddressOf SyntaxFacts.GetText)
End Function End Function
Protected Overrides Function GetExistingTopLevelElementNames(parentTrivia As DocumentationCommentTriviaSyntax) As IEnumerable(Of String) Protected Overrides Function GetExistingTopLevelElementNames(parentTrivia As DocumentationCommentTriviaSyntax) As IEnumerable(Of String)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册