vimeo / psalm

A static analysis tool for finding errors in PHP applications
https://psalm.dev
MIT License
5.54k stars 660 forks source link

UnhandledMatchCondition #10160

Open DanieldelSer opened 1 year ago

DanieldelSer commented 1 year ago

In a very long enum with a render function psalm it gives an error, UnhandledMatchCondition - This match expression is not exhaustive - consider values. It is checked and all the values declared in the enum are also in the render function.

enum CountryCodeEnum: string
{
    case AD = 'ad';
    case AE = 'ae';
    case AF = 'af';
    case AG = 'ag';
    case AI = 'ai';
    case AL = 'al';
    case AM = 'am';
    case AN = 'an';
    case AO = 'ao';
    case AQ = 'aq';
    case AR = 'ar';
    case AS = 'as';
    case AT = 'at';
    case AU = 'au';
    case AW = 'aw';
    case AX = 'ax';
    case AZ = 'az';
    case BA = 'ba';
    case BB = 'bb';
    case BD = 'bd';
    case BE = 'be';
    case BF = 'bf';
    case BG = 'bg';
    case BH = 'bh';
    case BI = 'bi';
    case BJ = 'bj';
    case BL = 'bl';
    case BM = 'bm';
    case BN = 'bn';
    case BO = 'bo';
    case BQ = 'bq';
    case BR = 'br';
    case BS = 'bs';
    case BT = 'bt';
    case BV = 'bv';
    case BW = 'bw';
    case BY = 'by';
    case BZ = 'bz';
    case CA = 'ca';
    case CC = 'cc';
    case CD = 'cd';
    case CF = 'cf';
    case CG = 'cg';
    case CH = 'ch';
    case CI = 'ci';
    case CK = 'ck';
    case CL = 'cl';
    case CM = 'cm';
    case CN = 'cn';
    case CO = 'co';
    case CR = 'cr';
    case CS = 'cs';
    case CU = 'cu';
    case CV = 'cv';
    case CW = 'cw';
    case CX = 'cx';
    case CY = 'cy';
    case CZ = 'cz';
    case DE = 'de';
    case DJ = 'dj';
    case DK = 'dk';
    case DM = 'dm';
    case DO = 'do';
    case DZ = 'dz';
    case EC = 'ec';
    case EE = 'ee';
    case EG = 'eg';
    case EH = 'eh';
    case ER = 'er';
    case ES = 'es';
    case ET = 'et';
    case FI = 'fi';
    case FJ = 'fj';
    case FK = 'fk';
    case FM = 'fm';
    case FO = 'fo';
    case FR = 'fr';
    case GA = 'ga';
    case GB = 'gb';
    case GD = 'gd';
    case GE = 'ge';
    case GF = 'gf';
    case GG = 'gg';
    case GH = 'gh';
    case GI = 'gi';
    case GL = 'gl';
    case GM = 'gm';
    case GN = 'gn';
    case GP = 'gp';
    case GQ = 'gq';
    case GR = 'gr';
    case GS = 'gs';
    case GT = 'gt';
    case GU = 'gu';
    case GW = 'gw';
    case GY = 'gy';
    case HK = 'hk';
    case HM = 'hm';
    case HN = 'hn';
    case HR = 'hr';
    case HT = 'ht';
    case HU = 'hu';
    case ID = 'id';
    case IE = 'ie';
    case IL = 'il';
    case IM = 'im';
    case IN = 'in';
    case IO = 'io';
    case IQ = 'iq';
    case IR = 'ir';
    case IS = 'is';
    case IT = 'it';
    case JE = 'je';
    case JM = 'jm';
    case JO = 'jo';
    case JP = 'jp';
    case KE = 'ke';
    case KG = 'kg';
    case KH = 'kh';
    case KI = 'ki';
    case KM = 'km';
    case KN = 'kn';
    case KP = 'kp';
    case KR = 'kr';
    case KW = 'kw';
    case KY = 'ky';
    case KZ = 'kz';
    case LA = 'la';
    case LB = 'lb';
    case LC = 'lc';
    case LI = 'li';
    case LK = 'lk';
    case LR = 'lr';
    case LS = 'ls';
    case LT = 'lt';
    case LU = 'lu';
    case LV = 'lv';
    case LY = 'ly';
    case MA = 'ma';
    case MC = 'mc';
    case MD = 'md';
    case ME = 'me';
    case MF = 'mf';
    case MG = 'mg';
    case MH = 'mh';
    case MK = 'mk';
    case ML = 'ml';
    case MM = 'mm';
    case MN = 'mn';
    case MO = 'mo';
    case MP = 'mp';
    case MQ = 'mq';
    case MR = 'mr';
    case MS = 'ms';
    case MT = 'mt';
    case MU = 'mu';
    case MV = 'mv';
    case MW = 'mw';
    case MX = 'mx';
    case MY = 'my';
    case MZ = 'mz';
    case NA = 'na';
    case NC = 'nc';
    case NE = 'ne';
    case NF = 'nf';
    case NG = 'ng';
    case NI = 'ni';
    case NL = 'nl';
    case NO = 'no';
    case NP = 'np';
    case NR = 'nr';
    case NU = 'nu';
    case NZ = 'nz';
    case OM = 'om';
    case PA = 'pa';
    case PE = 'pe';
    case PF = 'pf';
    case PG = 'pg';
    case PH = 'ph';
    case PK = 'pk';
    case PL = 'pl';
    case PM = 'pm';
    case PN = 'pn';
    case PR = 'pr';
    case PS = 'ps';
    case PT = 'pt';
    case PW = 'pw';
    case PY = 'py';
    case QA = 'qa';
    case RE = 're';
    case RO = 'ro';
    case RS = 'rs';
    case RU = 'ru';
    case RW = 'rw';
    case SA = 'sa';
    case SB = 'sb';
    case SC = 'sc';
    case SD = 'sd';
    case SE = 'se';
    case SG = 'sg';
    case SH = 'sh';
    case SI = 'si';
    case SJ = 'sj';
    case SK = 'sk';
    case SL = 'sl';
    case SM = 'sm';
    case SN = 'sn';
    case SO = 'so';
    case SR = 'sr';
    case SS = 'ss';
    case ST = 'st';
    case SV = 'sv';
    case SX = 'sx';
    case SY = 'sy';
    case SZ = 'sz';
    case TC = 'tc';
    case TD = 'td';
    case TF = 'tf';
    case TG = 'tg';
    case TH = 'th';
    case TJ = 'tj';
    case TK = 'tk';
    case TL = 'tl';
    case TM = 'tm';
    case TN = 'tn';
    case TO = 'to';
    case TR = 'tr';
    case TT = 'tt';
    case TV = 'tv';
    case TW = 'tw';
    case TZ = 'tz';
    case UA = 'ua';
    case UG = 'ug';
    case UM = 'um';
    case US = 'us';
    case UY = 'uy';
    case UZ = 'uz';
    case VA = 'va';
    case VC = 'vc';
    case VE = 've';
    case VG = 'vg';
    case VI = 'vi';
    case VN = 'vn';
    case VU = 'vu';
    case WF = 'wf';
    case WS = 'ws';
    case XK = 'xk';
    case YE = 'ye';
    case YT = 'yt';
    case ZA = 'za';
    case ZM = 'zm';
    case ZW = 'zw';

    public function render(): string
    {
        return match ($this) {
            CountryCodeEnum::AD => 'Andorra',
            CountryCodeEnum::AE => 'United Arab Emirates',
            CountryCodeEnum::AF => 'Afghanistan',
            CountryCodeEnum::AG => 'Antigua and Barbuda',
            CountryCodeEnum::AI => 'Anguilla',
            CountryCodeEnum::AL => 'Albania',
            CountryCodeEnum::AM => 'Armenia',
            CountryCodeEnum::AN => 'Netherlands Antilles',
            CountryCodeEnum::AO => 'Angola',
            CountryCodeEnum::AQ => 'Antarctica',
            CountryCodeEnum::AR => 'Argentina',
            CountryCodeEnum::AS => 'American Samoa',
            CountryCodeEnum::AT => 'Austria',
            CountryCodeEnum::AU => 'Australia',
            CountryCodeEnum::AW => 'Aruba',
            CountryCodeEnum::AX => 'Aland Islands',
            CountryCodeEnum::AZ => 'Azerbaijan',
            CountryCodeEnum::BA => 'Bosnia and Herzegovina',
            CountryCodeEnum::BB => 'Barbados',
            CountryCodeEnum::BD => 'Bangladesh',
            CountryCodeEnum::BE => 'Belgium',
            CountryCodeEnum::BF => 'Burkina Faso',
            CountryCodeEnum::BG => 'Bulgaria',
            CountryCodeEnum::BH => 'Bahrain',
            CountryCodeEnum::BI => 'Burundi',
            CountryCodeEnum::BJ => 'Benin',
            CountryCodeEnum::BL => 'Saint Barthelemy',
            CountryCodeEnum::BM => 'Bermuda',
            CountryCodeEnum::BN => 'Brunei Darussalam',
            CountryCodeEnum::BO => 'Bolivia',
            CountryCodeEnum::BQ => 'Bonaire, Sint Eustatius and Saba',
            CountryCodeEnum::BR => 'Brazil',
            CountryCodeEnum::BS => 'Bahamas',
            CountryCodeEnum::BT => 'Bhutan',
            CountryCodeEnum::BV => 'Bouvet Island',
            CountryCodeEnum::BW => 'Botswana',
            CountryCodeEnum::BY => 'Belarus',
            CountryCodeEnum::BZ => 'Belize',
            CountryCodeEnum::CA => 'Canada',
            CountryCodeEnum::CC => 'Cocos (Keeling) Islands',
            CountryCodeEnum::CD => 'Congo, Democratic Republic of the Congo',
            CountryCodeEnum::CF => 'Central African Republic',
            CountryCodeEnum::CG => 'Congo',
            CountryCodeEnum::CH => 'Switzerland',
            CountryCodeEnum::CI => 'Cote DIvoire',
            CountryCodeEnum::CK => 'Cook Islands',
            CountryCodeEnum::CL => 'Chile',
            CountryCodeEnum::CM => 'Cameroon',
            CountryCodeEnum::CN => 'China',
            CountryCodeEnum::CO => 'Colombia',
            CountryCodeEnum::CR => 'Costa Rica',
            CountryCodeEnum::CS => 'Serbia and Montenegro',
            CountryCodeEnum::CU => 'Cuba',
            CountryCodeEnum::CV => 'Cape Verde',
            CountryCodeEnum::CW => 'Curacao',
            CountryCodeEnum::CX => 'Christmas Island',
            CountryCodeEnum::CY => 'Cyprus',
            CountryCodeEnum::CZ => 'Czech Republic',
            CountryCodeEnum::DE => 'Germany',
            CountryCodeEnum::DJ => 'Djibouti',
            CountryCodeEnum::DK => 'Denmark',
            CountryCodeEnum::DM => 'Dominica',
            CountryCodeEnum::DO => 'Dominican Republic',
            CountryCodeEnum::DZ => 'Algeria',
            CountryCodeEnum::EC => 'Ecuador',
            CountryCodeEnum::EE => 'Estonia',
            CountryCodeEnum::EG => 'Egypt',
            CountryCodeEnum::EH => 'Western Sahara',
            CountryCodeEnum::ER => 'Eritrea',
            CountryCodeEnum::ES => 'Spain',
            CountryCodeEnum::ET => 'Ethiopia',
            CountryCodeEnum::FI => 'Finland',
            CountryCodeEnum::FJ => 'Fiji',
            CountryCodeEnum::FK => 'Falkland Islands (Malvinas)',
            CountryCodeEnum::FM => 'Micronesia, Federated States of',
            CountryCodeEnum::FO => 'Faroe Islands',
            CountryCodeEnum::FR => 'France',
            CountryCodeEnum::GA => 'Gabon',
            CountryCodeEnum::GB => 'United Kingdom',
            CountryCodeEnum::GD => 'Grenada',
            CountryCodeEnum::GE => 'Georgia',
            CountryCodeEnum::GF => 'French Guiana',
            CountryCodeEnum::GG => 'Guernsey',
            CountryCodeEnum::GH => 'Ghana',
            CountryCodeEnum::GI => 'Gibraltar',
            CountryCodeEnum::GL => 'Greenland',
            CountryCodeEnum::GM => 'Gambia',
            CountryCodeEnum::GN => 'Guinea',
            CountryCodeEnum::GP => 'Guadeloupe',
            CountryCodeEnum::GQ => 'Equatorial Guinea',
            CountryCodeEnum::GR => 'Greece',
            CountryCodeEnum::GS => 'South Georgia and the South Sandwich Islands',
            CountryCodeEnum::GT => 'Guatemala',
            CountryCodeEnum::GU => 'Guam',
            CountryCodeEnum::GW => 'Guinea-Bissau',
            CountryCodeEnum::GY => 'Guyana',
            CountryCodeEnum::HK => 'Hong Kong',
            CountryCodeEnum::HM => 'Heard Island and Mcdonald Islands',
            CountryCodeEnum::HN => 'Honduras',
            CountryCodeEnum::HR => 'Croatia',
            CountryCodeEnum::HT => 'Haiti',
            CountryCodeEnum::HU => 'Hungary',
            CountryCodeEnum::ID => 'Indonesia',
            CountryCodeEnum::IE => 'Ireland',
            CountryCodeEnum::IL => 'Israel',
            CountryCodeEnum::IM => 'Isle of Man',
            CountryCodeEnum::IN => 'India',
            CountryCodeEnum::IO => 'British Indian Ocean Territory',
            CountryCodeEnum::IQ => 'Iraq',
            CountryCodeEnum::IR => 'Iran, Islamic Republic of',
            CountryCodeEnum::IS => 'Iceland',
            CountryCodeEnum::IT => 'Italy',
            CountryCodeEnum::JE => 'Jersey',
            CountryCodeEnum::JM => 'Jamaica',
            CountryCodeEnum::JO => 'Jordan',
            CountryCodeEnum::JP => 'Japan',
            CountryCodeEnum::KE => 'Kenya',
            CountryCodeEnum::KG => 'Kyrgyzstan',
            CountryCodeEnum::KH => 'Cambodia',
            CountryCodeEnum::KI => 'Kiribati',
            CountryCodeEnum::KM => 'Comoros',
            CountryCodeEnum::KN => 'Saint Kitts and Nevis',
            CountryCodeEnum::KP => 'Korea, Democratic Peoples Republic of',
            CountryCodeEnum::KR => 'Korea, Republic of',
            CountryCodeEnum::KW => 'Kuwait',
            CountryCodeEnum::KY => 'Cayman Islands',
            CountryCodeEnum::KZ => 'Kazakhstan',
            CountryCodeEnum::LA => 'Lao Peoples Democratic Republic',
            CountryCodeEnum::LB => 'Lebanon',
            CountryCodeEnum::LC => 'Saint Lucia',
            CountryCodeEnum::LI => 'Liechtenstein',
            CountryCodeEnum::LK => 'Sri Lanka',
            CountryCodeEnum::LR => 'Liberia',
            CountryCodeEnum::LS => 'Lesotho',
            CountryCodeEnum::LT => 'Lithuania',
            CountryCodeEnum::LU => 'Luxembourg',
            CountryCodeEnum::LV => 'Latvia',
            CountryCodeEnum::LY => 'Libyan Arab Jamahiriya',
            CountryCodeEnum::MA => 'Morocco',
            CountryCodeEnum::MC => 'Monaco',
            CountryCodeEnum::MD => 'Moldova, Republic of',
            CountryCodeEnum::ME => 'Montenegro',
            CountryCodeEnum::MF => 'Saint Martin',
            CountryCodeEnum::MG => 'Madagascar',
            CountryCodeEnum::MH => 'Marshall Islands',
            CountryCodeEnum::MK => 'Macedonia, the Former Yugoslav Republic of',
            CountryCodeEnum::ML => 'Mali',
            CountryCodeEnum::MM => 'Myanmar',
            CountryCodeEnum::MN => 'Mongolia',
            CountryCodeEnum::MO => 'Macao',
            CountryCodeEnum::MP => 'Northern Mariana Islands',
            CountryCodeEnum::MQ => 'Martinique',
            CountryCodeEnum::MR => 'Mauritania',
            CountryCodeEnum::MS => 'Montserrat',
            CountryCodeEnum::MT => 'Malta',
            CountryCodeEnum::MU => 'Mauritius',
            CountryCodeEnum::MV => 'Maldives',
            CountryCodeEnum::MW => 'Malawi',
            CountryCodeEnum::MX => 'Mexico',
            CountryCodeEnum::MY => 'Malaysia',
            CountryCodeEnum::MZ => 'Mozambique',
            CountryCodeEnum::NA => 'Namibia',
            CountryCodeEnum::NC => 'New Caledonia',
            CountryCodeEnum::NE => 'Niger',
            CountryCodeEnum::NF => 'Norfolk Island',
            CountryCodeEnum::NG => 'Nigeria',
            CountryCodeEnum::NI => 'Nicaragua',
            CountryCodeEnum::NL => 'Netherlands',
            CountryCodeEnum::NO => 'Norway',
            CountryCodeEnum::NP => 'Nepal',
            CountryCodeEnum::NR => 'Nauru',
            CountryCodeEnum::NU => 'Niue',
            CountryCodeEnum::NZ => 'New Zealand',
            CountryCodeEnum::OM => 'Oman',
            CountryCodeEnum::PA => 'Panama',
            CountryCodeEnum::PE => 'Peru',
            CountryCodeEnum::PF => 'French Polynesia',
            CountryCodeEnum::PG => 'Papua New Guinea',
            CountryCodeEnum::PH => 'Philippines',
            CountryCodeEnum::PK => 'Pakistan',
            CountryCodeEnum::PL => 'Poland',
            CountryCodeEnum::PM => 'Saint Pierre and Miquelon',
            CountryCodeEnum::PN => 'Pitcairn',
            CountryCodeEnum::PR => 'Puerto Rico',
            CountryCodeEnum::PS => 'Palestinian Territory, Occupied',
            CountryCodeEnum::PT => 'Portugal',
            CountryCodeEnum::PW => 'Palau',
            CountryCodeEnum::PY => 'Paraguay',
            CountryCodeEnum::QA => 'Qatar',
            CountryCodeEnum::RE => 'Reunion',
            CountryCodeEnum::RO => 'Romania',
            CountryCodeEnum::RS => 'Serbia',
            CountryCodeEnum::RU => 'Russian Federation',
            CountryCodeEnum::RW => 'Rwanda',
            CountryCodeEnum::SA => 'Saudi Arabia',
            CountryCodeEnum::SB => 'Solomon Islands',
            CountryCodeEnum::SC => 'Seychelles',
            CountryCodeEnum::SD => 'Sudan',
            CountryCodeEnum::SE => 'Sweden',
            CountryCodeEnum::SG => 'Singapore',
            CountryCodeEnum::SH => 'Saint Helena',
            CountryCodeEnum::SI => 'Slovenia',
            CountryCodeEnum::SJ => 'Svalbard and Jan Mayen',
            CountryCodeEnum::SK => 'Slovakia',
            CountryCodeEnum::SL => 'Sierra Leone',
            CountryCodeEnum::SM => 'San Marino',
            CountryCodeEnum::SN => 'Senegal',
            CountryCodeEnum::SO => 'Somalia',
            CountryCodeEnum::SR => 'Suriname',
            CountryCodeEnum::SS => 'South Sudan',
            CountryCodeEnum::ST => 'Sao Tome and Principe',
            CountryCodeEnum::SV => 'El Salvador',
            CountryCodeEnum::SX => 'Sint Maarten',
            CountryCodeEnum::SY => 'Syrian Arab Republic',
            CountryCodeEnum::SZ => 'Swaziland',
            CountryCodeEnum::TC => 'Turks and Caicos Islands',
            CountryCodeEnum::TD => 'Chad',
            CountryCodeEnum::TF => 'French Southern Territories',
            CountryCodeEnum::TG => 'Togo',
            CountryCodeEnum::TH => 'Thailand',
            CountryCodeEnum::TJ => 'Tajikistan',
            CountryCodeEnum::TK => 'Tokelau',
            CountryCodeEnum::TL => 'Timor-Leste',
            CountryCodeEnum::TM => 'Turkmenistan',
            CountryCodeEnum::TN => 'Tunisia',
            CountryCodeEnum::TO => 'Tonga',
            CountryCodeEnum::TR => 'Turkey',
            CountryCodeEnum::TT => 'Trinidad and Tobago',
            CountryCodeEnum::TV => 'Tuvalu',
            CountryCodeEnum::TW => 'Taiwan, Province of China',
            CountryCodeEnum::TZ => 'Tanzania, United Republic of',
            CountryCodeEnum::UA => 'Ukraine',
            CountryCodeEnum::UG => 'Uganda',
            CountryCodeEnum::UM => 'United States Minor Outlying Islands',
            CountryCodeEnum::US => 'United States',
            CountryCodeEnum::UY => 'Uruguay',
            CountryCodeEnum::UZ => 'Uzbekistan',
            CountryCodeEnum::VA => 'Holy See (Vatican City State)',
            CountryCodeEnum::VC => 'Saint Vincent and the Grenadines',
            CountryCodeEnum::VE => 'Venezuela',
            CountryCodeEnum::VG => 'Virgin Islands, British',
            CountryCodeEnum::VI => 'Virgin Islands, U.s.',
            CountryCodeEnum::VN => 'Viet Nam',
            CountryCodeEnum::VU => 'Vanuatu',
            CountryCodeEnum::WF => 'Wallis and Futuna',
            CountryCodeEnum::WS => 'Samoa',
            CountryCodeEnum::XK => 'Kosovo',
            CountryCodeEnum::YE => 'Yemen',
            CountryCodeEnum::YT => 'Mayotte',
            CountryCodeEnum::ZA => 'South Africa',
            CountryCodeEnum::ZM => 'Zambia',
            CountryCodeEnum::ZW => 'Zimbabwe',
        };
    }
}
psalm-github-bot[bot] commented 1 year ago

Hey @DanieldelSer, can you reproduce the issue on https://psalm.dev ?

DanieldelSer commented 1 year ago

There is too much code, I can put a screenshot

image