def METHOD_NAME(self, value, path, **kwargs):
    """Check Ref"""
    matches = []
    cfn = kwargs.get("cfn")
    if "Fn::If" in path:
        self.logger.debug(
            "Not able to guarentee that the default value hasn't been conditioned out"
        )
        return matches
    if path[0] == "Resources" and "Condition" in cfn.template.get(path[0], {}).get(
        path[1]
    ):
        self.logger.debug(
            "Not able to guarentee that the default value "
            "hasn't been conditioned out"
        )
        return matches
    allowed_value_specs = kwargs.get("value_specs", {}).get("AllowedValues", {})
    if allowed_value_specs:
        description = f"Valid values are {json.dumps(allowed_value_specs)}"
        if value in cfn.template.get("Parameters", {}):
            param = cfn.template.get("Parameters").get(value, {})
            parameter_values = param.get("AllowedValues")
            default_value = param.get("Default")
            parameter_type = param.get("Type")
            if isinstance(parameter_type, str):
                if (
                    (not parameter_type.startswith("List<"))
                    and (
                        not parameter_type.startswith("AWS::SSM::Parameter::Value<")
                    )
                    and parameter_type not in ["CommaDelimitedList", "List<String>"]
                ):
                    # Check Allowed Values
                    if parameter_values:
                        for index, allowed_value in enumerate(parameter_values):
                            if str(allowed_value) not in allowed_value_specs:
                                param_path = [
                                    "Parameters",
                                    value,
                                    "AllowedValues",
                                    index,
                                ]
                                message = "You must specify a valid allowed value for {0} ({1}). {2}"
                                matches.append(
                                    RuleMatch(
                                        param_path,
                                        message.format(
                                            value, allowed_value, description
                                        ),
                                    )
                                )
                    if default_value:
                        # Check Default, only if no allowed Values are specified in the parameter (that's covered by E2015)
                        if str(default_value) not in allowed_value_specs:
                            param_path = ["Parameters", value, "Default"]
                            message = "You must specify a valid Default value for {0} ({1}). {2}"
                            matches.append(
                                RuleMatch(
                                    param_path,
                                    message.format(
                                        value, default_value, description
                                    ),
                                )
                            )
    return matches