Suffix and group objects share some predicate slots that control whether a group or suffix should be available depending on some state. Only one of these slots can be used at the same time. It is undefined what happens if you use more than one.
ifEnable if predicate returns non-nil.
if-notEnable if predicate returns nil.
if-non-nilEnable if variable’s value is non-nil.
if-nilEnable if variable’s value is nil.
if-modeEnable if major-mode matches value.
if-not-modeEnable if major-mode does not match value.
if-derivedEnable if major-mode derives from value.
if-not-derivedEnable if major-mode does not derive from value.
One more slot is shared between group and suffix classes,
the slots documented above it is a predicate, but it is used for a
different purpose. The value has to be an integer between 1
level controls whether it should be available depending on
whether the user wants that or not. See Enabling and Disabling Suffixes.