Exemplo n.º 1
0
        internal SymbolDisplayPart CreatePart(SymbolDisplayPartKind kind, ISymbol symbol, string text)
        {
            text = (text == null) ? "?" :
                   (_escapeKeywordIdentifiers && IsEscapable(kind)) ? EscapeIdentifier(text) : text;

            return new SymbolDisplayPart(kind, symbol, text);
        }
Exemplo n.º 2
0
        /// <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;
        }
Exemplo n.º 3
0
 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));
 }
Exemplo n.º 6
0
 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);
 }
Exemplo n.º 10
0
 internal static bool IsValid(this SymbolDisplayPartKind value)
 {
     return((value >= SymbolDisplayPartKind.AliasName && value <= SymbolDisplayPartKind.RecordStructName) ||
            (value >= InternalSymbolDisplayPartKind.Arity && value <= InternalSymbolDisplayPartKind.Other));
 }
Exemplo n.º 11
0
        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));
 }
Exemplo n.º 17
0
        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);
 }
Exemplo n.º 19
0
        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);
            }
        }
Exemplo n.º 20
0
 private SymbolDisplayPart Part(SymbolDisplayPartKind kind, string text)
 => Part(kind, null, text);
Exemplo n.º 21
0
 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);
 }
Exemplo n.º 23
0
 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;
     }
 }