← all checks
warning recommended declaration: //xsl:function usage: //@*

Unreachable function

A function called only from functions that are never reached can never run, even though its name appears in a call. The dead caller is often a function nothing calls (which unused-function reports), or a recursion cycle nothing enters, such as my:even and my:odd calling only each other. Delete the dead callers with what they alone call, or call them from a template or a global variable.

Incorrect:

<xsl:function name="my:even" as="xs:boolean">
  <xsl:param name="number" as="xs:integer"/>
  <xsl:sequence select="if ($number = 0) then true() else my:odd($number - 1)"/>
</xsl:function>
<xsl:function name="my:odd" as="xs:boolean">
  <xsl:param name="number" as="xs:integer"/>
  <xsl:sequence select="if ($number = 0) then false() else my:even($number - 1)"/>
</xsl:function>
<!-- neither my:even nor my:odd is ever called from a template -->

Correct:

<xsl:function name="my:even" as="xs:boolean">
  <xsl:param name="number" as="xs:integer"/>
  <xsl:sequence select="if ($number = 0) then true() else my:odd($number - 1)"/>
</xsl:function>
<xsl:function name="my:odd" as="xs:boolean">
  <xsl:param name="number" as="xs:integer"/>
  <xsl:sequence select="if ($number = 0) then false() else my:even($number - 1)"/>
</xsl:function>

<xsl:template match="/">
  <xsl:value-of select="my:even(count(//node()))"/>
</xsl:template>