void WriteTypeName(TypeSpec typeSpec)
        {
            if (WriteLanguageKeywords && typeSpec.Name.Namespace == "System")
            {
                switch (typeSpec.Name.Name)
                {
                case "Void":
                case "SByte":
                case "Byte":
                case "Double":
                case "Decimal":
                case "Char":
                case "String":
                case "Object":
                    writer.WriteKeyword(typeSpec.Name.Name.ToLowerInvariant());
                    return;

                case "Boolean":
                    writer.WriteKeyword("bool");
                    return;

                case "Int16":
                    writer.WriteKeyword("short");
                    return;

                case "UInt16":
                    writer.WriteKeyword("ushort");
                    return;

                case "Int32":
                    writer.WriteKeyword("int");
                    return;

                case "UInt32":
                    writer.WriteKeyword("uint");
                    return;

                case "Int64":
                    writer.WriteKeyword("long");
                    return;

                case "UInt64":
                    writer.WriteKeyword("ulong");
                    return;

                case "Single":
                    writer.WriteKeyword("float");
                    return;

                case "nint":
                    writer.WriteKeyword("nint");
                    return;

                case "nuint":
                    writer.WriteKeyword("nuint");
                    return;

                case "nfloat":
                    writer.WriteKeyword("nfloat");
                    return;
                }
            }

            if (typeSpec.Name.Namespace != null)
            {
                writer.WriteNamespace(typeSpec.Name.Namespace + ".");
            }

            int typeNamesConsumed = 0;
            int typeArgIndex      = 0;

            foreach (var name in typeSpec.AllNames)
            {
                if (!name.Name.StartsWith("🐵", StringComparison.Ordinal))
                {
                    if (typeNamesConsumed++ > 0)
                    {
                        writer.Write('.');
                    }

                    writer.WriteTypeName(name.Name);
                }

                if (name.TypeArgumentCount > 0)
                {
                    writer.Write('<');
                    for (var i = 0; i < name.TypeArgumentCount; i++, typeArgIndex++)
                    {
                        if (i > 0)
                        {
                            writer.Write(',');
                            writer.Write(' ');
                        }

                        VisitTypeSpec(typeSpec.TypeArguments [typeArgIndex]);
                    }
                    writer.Write('>');
                }
            }
        }