internal SymbolDisplayPart CreatePart(SymbolDisplayPartKind kind, ISymbol symbol, string text) { text = (text == null) ? "?" : (_escapeKeywordIdentifiers && IsEscapable(kind)) ? EscapeIdentifier(text) : text; return new SymbolDisplayPart(kind, symbol, text); }
/// <summary> /// Construct a non-formattable <see cref="SymbolDisplayPart"/> (i.e. with a fixed string value). /// </summary> /// <param name="kind">The kind of the display part.</param> /// <param name="symbol">An optional associated symbol.</param> /// <param name="text">The fixed string value of the part.</param> public SymbolDisplayPart(SymbolDisplayPartKind kind, ISymbol symbol, string text) { if (!kind.IsValid()) { throw new ArgumentOutOfRangeException("kind"); } if (text == null) { throw new ArgumentNullException("text"); } _kind = kind; _text = text; _symbol = symbol; }
private static bool IsEscapable(SymbolDisplayPartKind kind) { switch (kind) { case SymbolDisplayPartKind.AliasName: case SymbolDisplayPartKind.ClassName: case SymbolDisplayPartKind.StructName: case SymbolDisplayPartKind.InterfaceName: case SymbolDisplayPartKind.EnumName: case SymbolDisplayPartKind.DelegateName: case SymbolDisplayPartKind.TypeParameterName: case SymbolDisplayPartKind.MethodName: case SymbolDisplayPartKind.PropertyName: case SymbolDisplayPartKind.FieldName: case SymbolDisplayPartKind.LocalName: case SymbolDisplayPartKind.NamespaceName: case SymbolDisplayPartKind.ParameterName: return true; default: return false; } }
private SymbolDisplayPart Part(SymbolDisplayPartKind kind, ISymbol symbol, string text) { return(new SymbolDisplayPart(kind, symbol, text)); }
private SymbolDisplayPart Part(SymbolDisplayPartKind kind, string text) { return(Part(kind, null, text)); }
private static IEnumerable <SymbolDisplayPart> Part(SymbolDisplayPartKind kind, string text) => Part(kind, null, text);
private static SymbolDisplayPart Part(SymbolDisplayPartKind kind, ISymbol?symbol, string text) => new(kind, symbol, text);
private IEnumerable<SymbolDisplayPart> Part(SymbolDisplayPartKind kind, ISymbol symbol, string text) { yield return new SymbolDisplayPart(kind, symbol, text); }
private SymbolDisplayPart Part(SymbolDisplayPartKind kind, ISymbol symbol, string text) { return new SymbolDisplayPart(kind, symbol, text); }
internal static bool IsValid(this SymbolDisplayPartKind value) { return((value >= SymbolDisplayPartKind.AliasName && value <= SymbolDisplayPartKind.RecordStructName) || (value >= InternalSymbolDisplayPartKind.Arity && value <= InternalSymbolDisplayPartKind.Other)); }
public static string GetTag(SymbolDisplayPartKind kind) { switch (kind) { case SymbolDisplayPartKind.AliasName: return(TextTags.Alias); case SymbolDisplayPartKind.AssemblyName: return(TextTags.Assembly); case SymbolDisplayPartKind.ClassName: return(TextTags.Class); case SymbolDisplayPartKind.DelegateName: return(TextTags.Delegate); case SymbolDisplayPartKind.EnumName: return(TextTags.Enum); case SymbolDisplayPartKind.ErrorTypeName: return(TextTags.ErrorType); case SymbolDisplayPartKind.EventName: return(TextTags.Event); case SymbolDisplayPartKind.FieldName: return(TextTags.Field); case SymbolDisplayPartKind.InterfaceName: return(TextTags.Interface); case SymbolDisplayPartKind.Keyword: return(TextTags.Keyword); case SymbolDisplayPartKind.LabelName: return(TextTags.Label); case SymbolDisplayPartKind.LineBreak: return(TextTags.LineBreak); case SymbolDisplayPartKind.NumericLiteral: return(TextTags.NumericLiteral); case SymbolDisplayPartKind.StringLiteral: return(TextTags.StringLiteral); case SymbolDisplayPartKind.LocalName: return(TextTags.Local); case SymbolDisplayPartKind.MethodName: return(TextTags.Method); case SymbolDisplayPartKind.ModuleName: return(TextTags.Module); case SymbolDisplayPartKind.NamespaceName: return(TextTags.Namespace); case SymbolDisplayPartKind.Operator: return(TextTags.Operator); case SymbolDisplayPartKind.ParameterName: return(TextTags.Parameter); case SymbolDisplayPartKind.PropertyName: return(TextTags.Property); case SymbolDisplayPartKind.Punctuation: return(TextTags.Punctuation); case SymbolDisplayPartKind.Space: return(TextTags.Space); case SymbolDisplayPartKind.StructName: return(TextTags.Struct); case SymbolDisplayPartKind.AnonymousTypeIndicator: return(TextTags.AnonymousTypeIndicator); case SymbolDisplayPartKind.Text: return(TextTags.Text); case SymbolDisplayPartKind.TypeParameterName: return(TextTags.TypeParameter); case SymbolDisplayPartKind.RangeVariableName: return(TextTags.RangeVariable); case SymbolDisplayPartKind.EnumMemberName: return(TextTags.EnumMember); case SymbolDisplayPartKind.ExtensionMethodName: return(TextTags.ExtensionMethod); case SymbolDisplayPartKind.ConstantName: return(TextTags.Constant); default: return(string.Empty); } }
internal static IEnumerable <SymbolDisplayPart> CrefToSymbolDisplayParts( string crefValue, int position, SemanticModel semanticModel, SymbolDisplayFormat format = null, SymbolDisplayPartKind kind = SymbolDisplayPartKind.Text) { // first try to parse the symbol if (semanticModel != null) { var symbol = DocumentationCommentId.GetFirstSymbolForDeclarationId(crefValue, semanticModel.Compilation); if (symbol != null) { format ??= SymbolDisplayFormat.MinimallyQualifiedFormat; if (symbol.IsConstructor()) { format = format.WithMemberOptions(SymbolDisplayMemberOptions.IncludeParameters | SymbolDisplayMemberOptions.IncludeExplicitInterface); } return(symbol.ToMinimalDisplayParts(semanticModel, position, format)); } } // if any of that fails fall back to just displaying the raw text return(SpecializedCollections.SingletonEnumerable( new SymbolDisplayPart(kind, symbol: null, text: TrimCrefPrefix(crefValue)))); }
private static void AppendTextFromAttribute(FormatterState state, XElement element, XAttribute attribute, string attributeNameToParse, SymbolDisplayPartKind kind) { var attributeName = attribute.Name.LocalName; if (attributeNameToParse == attributeName) { state.AppendParts( CrefToSymbolDisplayParts(attribute.Value, state.Position, state.SemanticModel, state.Format, kind).ToTaggedText()); } else { var displayKind = attributeName == DocumentationCommentXmlNames.LangwordAttributeName ? TextTags.Keyword : TextTags.Text; state.AppendParts(SpecializedCollections.SingletonEnumerable(new TaggedText(displayKind, attribute.Value))); } }
public static string GetTag(SymbolDisplayPartKind kind) => kind switch {
private IEnumerable <SymbolDisplayPart> Part(SymbolDisplayPartKind kind, ISymbol symbol, string text) { yield return(new SymbolDisplayPart(kind, symbol, text)); }
private IEnumerable <SymbolDisplayPart> Part(SymbolDisplayPartKind kind, string text) { return(Part(kind, null, text)); }
internal TextBlock Format(TextBlock block, ImmutableArray <SymbolDisplayPart> parts, int argIndex) { const SymbolDisplayPartKind ExtensionName = (SymbolDisplayPartKind)29; foreach (var part in parts) { switch (part.Kind) { case SymbolDisplayPartKind.AliasName: //todo resolve alias type goto default; case SymbolDisplayPartKind.ClassName: if (part.Symbol.Kind == SymbolKind.Method) { block.AddSymbol(part.Symbol, true, Method); } else if ((part.Symbol as INamedTypeSymbol).IsAnonymousType) { block.Append("?", Class); } else { block.AddSymbol(part.Symbol, argIndex == Int32.MinValue, Class); } break; case SymbolDisplayPartKind.EnumName: block.AddSymbol(part.Symbol, argIndex == Int32.MinValue, Enum); break; case SymbolDisplayPartKind.InterfaceName: block.AddSymbol(part.Symbol, argIndex == Int32.MinValue, Interface); break; case SymbolDisplayPartKind.MethodName: block.AddSymbol(part.Symbol, argIndex != Int32.MinValue, Method); break; case SymbolDisplayPartKind.ParameterName: var p = part.Symbol as IParameterSymbol; if (p.Ordinal == argIndex || p.IsParams && argIndex > p.Ordinal) { block.Append(p.Name, true, true, Parameter); } else { block.Append(p.Name, false, false, Parameter); } break; case SymbolDisplayPartKind.StructName: if (part.Symbol.Kind == SymbolKind.Method) { block.AddSymbol(part.Symbol, true, Method); } else { block.AddSymbol(part.Symbol, argIndex == Int32.MinValue, Struct); } break; case SymbolDisplayPartKind.DelegateName: block.AddSymbol(part.Symbol, argIndex == Int32.MinValue, Delegate); break; case SymbolDisplayPartKind.StringLiteral: block.Append(part.ToString(), false, false, Text); break; case SymbolDisplayPartKind.Keyword: block.Append(part.ToString(), false, false, Keyword); break; case SymbolDisplayPartKind.NamespaceName: block.Append(part.Symbol.Name, Namespace); break; case SymbolDisplayPartKind.TypeParameterName: block.Append(part.Symbol.Name, argIndex == Int32.MinValue, false, TypeParameter); break; case SymbolDisplayPartKind.FieldName: block.AddSymbol(part.Symbol, argIndex == Int32.MinValue, Field); break; case SymbolDisplayPartKind.PropertyName: block.Append(part.Symbol.Name, Property); break; case SymbolDisplayPartKind.EventName: block.Append(part.Symbol.Name, Delegate); break; case ExtensionName: block.AddSymbol(part.Symbol, true, Method); break; default: block.Append(part.ToString()); break; } } return(block); }
private SymbolDisplayPart Part(SymbolDisplayPartKind kind, string text) { return Part(kind, null, text); }
public static string ToClassificationTypeName(this SymbolDisplayPartKind kind) { switch (kind) { case SymbolDisplayPartKind.ErrorTypeName: case SymbolDisplayPartKind.RangeVariableName: case SymbolDisplayPartKind.AssemblyName: case SymbolDisplayPartKind.AliasName: return(ClassificationTypeNames.Identifier); case SymbolDisplayPartKind.ClassName: return(ClassificationTypeNames.ClassName); case SymbolDisplayPartKind.DelegateName: return(ClassificationTypeNames.DelegateName); case SymbolDisplayPartKind.EnumName: return(ClassificationTypeNames.EnumName); case SymbolDisplayPartKind.EventName: return(ClassificationTypeNames.EventName); case SymbolDisplayPartKind.FieldName: return(ClassificationTypeNames.FieldName); case SymbolDisplayPartKind.InterfaceName: return(ClassificationTypeNames.InterfaceName); case SymbolDisplayPartKind.Keyword: return(ClassificationTypeNames.Keyword); case SymbolDisplayPartKind.LabelName: return(ClassificationTypeNames.LabelName); case SymbolDisplayPartKind.LineBreak: case SymbolDisplayPartKind.Space: return(ClassificationTypeNames.WhiteSpace); case SymbolDisplayPartKind.NumericLiteral: return(ClassificationTypeNames.NumericLiteral); case SymbolDisplayPartKind.StringLiteral: return(ClassificationTypeNames.StringLiteral); case SymbolDisplayPartKind.LocalName: return(ClassificationTypeNames.LocalName); case SymbolDisplayPartKind.MethodName: return(ClassificationTypeNames.MethodName); case SymbolDisplayPartKind.ModuleName: return(ClassificationTypeNames.ModuleName); case SymbolDisplayPartKind.NamespaceName: return(ClassificationTypeNames.NamespaceName); case SymbolDisplayPartKind.Operator: return(ClassificationTypeNames.Operator); case SymbolDisplayPartKind.ParameterName: return(ClassificationTypeNames.ParameterName); case SymbolDisplayPartKind.PropertyName: return(ClassificationTypeNames.PropertyName); case SymbolDisplayPartKind.Punctuation: return(ClassificationTypeNames.Punctuation); case SymbolDisplayPartKind.StructName: return(ClassificationTypeNames.StructName); case SymbolDisplayPartKind.AnonymousTypeIndicator: case SymbolDisplayPartKind.Text: return(ClassificationTypeNames.Text); case SymbolDisplayPartKind.TypeParameterName: return(ClassificationTypeNames.TypeParameterName); default: return(string.Empty); } }
private SymbolDisplayPart Part(SymbolDisplayPartKind kind, string text) => Part(kind, null, text);
private SymbolDisplayPart Part(SymbolDisplayPartKind kind, ISymbol symbol, string text) => new SymbolDisplayPart(kind, symbol, text);
private IEnumerable<SymbolDisplayPart> Part(SymbolDisplayPartKind kind, string text) { return Part(kind, null, text); }
public static string GetTag(SymbolDisplayPartKind kind) { switch (kind) { case SymbolDisplayPartKind.AliasName: return TextTags.Alias; case SymbolDisplayPartKind.AssemblyName: return TextTags.Assembly; case SymbolDisplayPartKind.ClassName: return TextTags.Class; case SymbolDisplayPartKind.DelegateName: return TextTags.Delegate; case SymbolDisplayPartKind.EnumName: return TextTags.Enum; case SymbolDisplayPartKind.ErrorTypeName: return TextTags.ErrorType; case SymbolDisplayPartKind.EventName: return TextTags.Event; case SymbolDisplayPartKind.FieldName: return TextTags.Field; case SymbolDisplayPartKind.InterfaceName: return TextTags.Interface; case SymbolDisplayPartKind.Keyword: return TextTags.Keyword; case SymbolDisplayPartKind.LabelName: return TextTags.Label; case SymbolDisplayPartKind.LineBreak: return TextTags.LineBreak; case SymbolDisplayPartKind.NumericLiteral: return TextTags.NumericLiteral; case SymbolDisplayPartKind.StringLiteral: return TextTags.StringLiteral; case SymbolDisplayPartKind.LocalName: return TextTags.Local; case SymbolDisplayPartKind.MethodName: return TextTags.Method; case SymbolDisplayPartKind.ModuleName: return TextTags.Module; case SymbolDisplayPartKind.NamespaceName: return TextTags.Namespace; case SymbolDisplayPartKind.Operator: return TextTags.Operator; case SymbolDisplayPartKind.ParameterName: return TextTags.Parameter; case SymbolDisplayPartKind.PropertyName: return TextTags.Property; case SymbolDisplayPartKind.Punctuation: return TextTags.Punctuation; case SymbolDisplayPartKind.Space: return TextTags.Space; case SymbolDisplayPartKind.StructName: return TextTags.Struct; case SymbolDisplayPartKind.AnonymousTypeIndicator: return TextTags.AnonymousTypeIndicator; case SymbolDisplayPartKind.Text: return TextTags.Text; case SymbolDisplayPartKind.TypeParameterName: return TextTags.TypeParameter; case SymbolDisplayPartKind.RangeVariableName: return TextTags.RangeVariable; default: return string.Empty; } }