private ReviewToken? MapToken()

in tools/apiview/parsers/csharp-api-parser/CSharpAPIParser/TreeToken/CodeFileBuilder.cs [695:758]


        private ReviewToken? MapToken(ISymbol definedSymbol, SymbolDisplayPart symbolDisplayPart, SymbolDisplayPart previousSymbolDisplayPart, ReviewToken? previousToken)
        {
            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();
            }

            var tokenValue = symbolDisplayPart.ToString();

            ReviewToken? token = null;

            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:
                    token = ReviewToken.CreateTypeNameToken(tokenValue, false);
                    break;
                case SymbolDisplayPartKind.Keyword:
                    token = ReviewToken.CreateKeywordToken(tokenValue, false);
                    break;
                case SymbolDisplayPartKind.StringLiteral:
                    token = ReviewToken.CreateStringLiteralToken(tokenValue, false);
                    break;
                case SymbolDisplayPartKind.Punctuation:
                    token = ReviewToken.CreatePunctuationToken(tokenValue, false);
                    break;
                case SymbolDisplayPartKind.Space:
                    if (previousToken != null)
                    {
                        previousToken.HasSuffixSpace = true;
                    }
                    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:
                    token = ReviewToken.CreateMemberNameToken(tokenValue, false);
                    break;
                default:
                    token = ReviewToken.CreateTextToken(tokenValue, hasSuffixSpace: false);
                    break;
            }
            if (token != null && !String.IsNullOrWhiteSpace(navigateToId))
            {
                token.NavigateToId = navigateToId!;
            }
            return token;
        }