in src/dotnet/APIView/APIView/Languages/CodeFileBuilder.cs [671:735]
private CodeFileToken MapToken(ISymbol definedSymbol, SymbolDisplayPart symbolDisplayPart)
{
CodeFileTokenKind kind;
switch (symbolDisplayPart.Kind)
{
case SymbolDisplayPartKind.TypeParameterName:
case SymbolDisplayPartKind.AliasName:
case SymbolDisplayPartKind.AssemblyName:
case SymbolDisplayPartKind.ClassName:
case SymbolDisplayPartKind.DelegateName:
case SymbolDisplayPartKind.EnumName:
case SymbolDisplayPartKind.ErrorTypeName:
case SymbolDisplayPartKind.InterfaceName:
case SymbolDisplayPartKind.StructName:
kind = CodeFileTokenKind.TypeName;
break;
case SymbolDisplayPartKind.Keyword:
kind = CodeFileTokenKind.Keyword;
break;
case SymbolDisplayPartKind.LineBreak:
kind = CodeFileTokenKind.Newline;
break;
case SymbolDisplayPartKind.StringLiteral:
kind = CodeFileTokenKind.StringLiteral;
break;
case SymbolDisplayPartKind.Punctuation:
kind = CodeFileTokenKind.Punctuation;
break;
case SymbolDisplayPartKind.Space:
kind = CodeFileTokenKind.Whitespace;
break;
case SymbolDisplayPartKind.PropertyName:
case SymbolDisplayPartKind.EventName:
case SymbolDisplayPartKind.FieldName:
case SymbolDisplayPartKind.MethodName:
case SymbolDisplayPartKind.Operator:
case SymbolDisplayPartKind.EnumMemberName:
case SymbolDisplayPartKind.ExtensionMethodName:
case SymbolDisplayPartKind.ConstantName:
kind = CodeFileTokenKind.MemberName;
break;
default:
kind = CodeFileTokenKind.Text;
break;
}
string navigateToId = null;
var symbol = symbolDisplayPart.Symbol;
if (symbol is INamedTypeSymbol &&
(definedSymbol == null || !SymbolEqualityComparer.Default.Equals(definedSymbol, symbol)) &&
SymbolEqualityComparer.Default.Equals(_assembly, symbol.ContainingAssembly))
{
navigateToId = symbol.GetId();
}
return new CodeFileToken()
{
DefinitionId = (definedSymbol != null && SymbolEqualityComparer.Default.Equals(definedSymbol, symbol)) ? definedSymbol.GetId() : null,
NavigateToId = navigateToId,
Value = symbolDisplayPart.ToString(),
Kind = kind
};
}