private SymbolComparer(SymbolDisplayFormat format, bool systemNamespaceFirst, bool includeNamespaces, SymbolDisplayAdditionalMemberOptions additionalOptions) { Format = format; SystemNamespaceFirst = systemNamespaceFirst; IncludeNamespaces = includeNamespaces; AdditionalOptions = additionalOptions; }
public static SymbolComparer Create( bool systemNamespaceFirst = true, bool includeNamespaces = true, SymbolDisplayAdditionalMemberOptions additionalOptions = SymbolDisplayAdditionalMemberOptions.None) { return(new SymbolComparer( TypeSymbolDisplayFormats.GetFormat(includeNamespaces: false), systemNamespaceFirst: systemNamespaceFirst, includeNamespaces: includeNamespaces, additionalOptions: additionalOptions)); }
public static IEnumerable <ISymbol> Sort( this IEnumerable <ISymbol> items, SymbolDisplayFormat format, bool systemNamespaceFirst, bool includeContainingNamespace = true, SymbolDisplayAdditionalMemberOptions additionalOptions = SymbolDisplayAdditionalMemberOptions.None) { return(Sort( items: items, selector: f => f, format: format, systemNamespaceFirst: systemNamespaceFirst, includeContainingNamespace: includeContainingNamespace, additionalOptions: additionalOptions)); }
public static IEnumerable <T> Sort <T>( this IEnumerable <T> items, Func <T, ISymbol> selector, SymbolDisplayFormat format, bool systemNamespaceFirst, bool includeContainingNamespace = true, SymbolDisplayAdditionalMemberOptions additionalOptions = SymbolDisplayAdditionalMemberOptions.None) { if (includeContainingNamespace) { return(items .OrderBy(f => selector(f).ContainingNamespace, NamespaceSymbolComparer.GetInstance(systemNamespaceFirst)) .ThenBy(f => selector(f).ToDisplayString(format, additionalOptions))); } else { return(items .OrderBy(f => selector(f).ToDisplayString(format, additionalOptions))); } }
public static ImmutableArray <SymbolDisplayPart> ToDisplayParts(this ISymbol symbol, SymbolDisplayFormat format, SymbolDisplayAdditionalMemberOptions additionalOptions) { if (additionalOptions == SymbolDisplayAdditionalMemberOptions.None) { return(symbol.ToDisplayParts(format)); } ImmutableArray <SymbolDisplayPart> parts = symbol.ToDisplayParts(format); int length = parts.Length; for (int i = 0; i < length; i++) { SymbolDisplayPart part = parts[i]; switch (part.Kind) { case SymbolDisplayPartKind.Keyword: { switch (part.ToString()) { case "this": { if ((additionalOptions & SymbolDisplayAdditionalMemberOptions.UseItemPropertyName) != 0 && (symbol as IPropertySymbol)?.IsIndexer == true) { parts = parts.Replace(part, SymbolDisplayPartFactory.PropertyName("Item", part.Symbol)); } break; } case "operator": { if ((additionalOptions & SymbolDisplayAdditionalMemberOptions.UseOperatorName) != 0 && symbol is IMethodSymbol methodSymbol && methodSymbol.MethodKind == MethodKind.UserDefinedOperator) { string name = methodSymbol.Name; Debug.Assert(name.StartsWith("op_", StringComparison.Ordinal), name); if (name.StartsWith("op_", StringComparison.Ordinal) && i < length - 2 && parts[i + 1].IsSpace() && parts[i + 2].Kind == SymbolDisplayPartKind.MethodName) { parts = parts.Replace(parts[i + 2], SymbolDisplayPartFactory.MethodName(name.Substring(3), parts[i + 2].Symbol)); parts = parts.RemoveRange(i, 2); length -= 2; } } break; } case "implicit": case "explicit": { if ((additionalOptions & SymbolDisplayAdditionalMemberOptions.UseOperatorName) != 0 && symbol is IMethodSymbol methodSymbol && methodSymbol.MethodKind == MethodKind.Conversion) { string name = methodSymbol.Name; Debug.Assert(name.StartsWith("op_", StringComparison.Ordinal), name); if (name.StartsWith("op_", StringComparison.Ordinal) && i < length - 2 && parts[i + 1].IsSpace() && parts[i + 2].IsKeyword("operator")) { List <SymbolDisplayPart> list = parts.ToList(); list[i + 2] = SymbolDisplayPartFactory.MethodName(name.Substring(3), list[i + 4].Symbol); list.RemoveRange(i, 2); length -= 2; if (i == length - 3 && list[i + 1].IsSpace() && list[i + 2].IsName()) { list.RemoveRange(i + 1, 2); length -= 2; } else if (i < length - 5 && list[i + 1].IsSpace() && list[i + 2].IsName() && list[i + 3].IsPunctuation() && list[i + 4].IsName() && list[i + 5].IsPunctuation()) { list.Insert(i + 5, list[i + 2]); list.Insert(i + 5, SymbolDisplayPartFactory.Text(" to ")); list.RemoveRange(i + 1, 2); length -= 5; } parts = list.ToImmutableArray(); } } break; } } break; } } } return(parts); }
public static string ToDisplayString(this ISymbol symbol, SymbolDisplayFormat format, SymbolDisplayAdditionalMemberOptions additionalOptions) { return(symbol.ToDisplayParts(format, additionalOptions).ToDisplayString()); }