<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1786179665">
  <project timestamp="1786179665">
    <file name="/workspace/src/extensions/StopForumSpam/includes/AbuseFilterHookHandler.php">
      <class name="MediaWiki\Extension\StopForumSpam\AbuseFilterHookHandler" namespace="global">
        <metrics complexity="8" methods="4" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="14" coveredstatements="0" elements="18" coveredelements="0"/>
      </class>
      <line num="37" type="method" name="__construct" visibility="public" complexity="1" crap="2" count="0"/>
      <line num="38" type="stmt" count="0"/>
      <line num="49" type="method" name="onAbuseFilter_computeVariable" visibility="public" complexity="3" crap="12" count="0"/>
      <line num="52" type="stmt" count="0"/>
      <line num="53" type="stmt" count="0"/>
      <line num="54" type="stmt" count="0"/>
      <line num="55" type="stmt" count="0"/>
      <line num="57" type="stmt" count="0"/>
      <line num="60" type="stmt" count="0"/>
      <line num="63" type="stmt" count="0"/>
      <line num="74" type="method" name="onAbuseFilter_generateUserVars" visibility="public" complexity="2" crap="6" count="0"/>
      <line num="75" type="stmt" count="0"/>
      <line num="76" type="stmt" count="0"/>
      <line num="79" type="stmt" count="0"/>
      <line num="88" type="method" name="onAbuseFilter_builder" visibility="public" complexity="2" crap="6" count="0"/>
      <line num="89" type="stmt" count="0"/>
      <line num="91" type="stmt" count="0"/>
      <line num="94" type="stmt" count="0"/>
      <metrics loc="97" ncloc="55" classes="1" methods="4" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="14" coveredstatements="0" elements="18" coveredelements="0"/>
    </file>
    <file name="/workspace/src/extensions/StopForumSpam/includes/DenyListManager.php">
      <class name="MediaWiki\Extension\StopForumSpam\DenyListManager" namespace="global">
        <metrics complexity="51" methods="12" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="132" coveredstatements="56" elements="144" coveredelements="59"/>
      </class>
      <line num="52" type="method" name="__construct" visibility="public" complexity="2" crap="2" count="13"/>
      <line num="58" type="stmt" count="13"/>
      <line num="65" type="method" name="singleton" visibility="public" complexity="2" crap="6" count="0"/>
      <line num="66" type="stmt" count="0"/>
      <line num="67" type="stmt" count="0"/>
      <line num="69" type="stmt" count="0"/>
      <line num="70" type="stmt" count="0"/>
      <line num="71" type="stmt" count="0"/>
      <line num="72" type="stmt" count="0"/>
      <line num="74" type="stmt" count="0"/>
      <line num="77" type="stmt" count="0"/>
      <line num="86" type="method" name="isIpDenyListed" visibility="public" complexity="2" crap="2.15" count="13"/>
      <line num="87" type="stmt" count="13"/>
      <line num="88" type="stmt" count="0"/>
      <line num="91" type="stmt" count="13"/>
      <line num="99" type="method" name="getCachedIpDenyList" visibility="public" complexity="1" crap="2" count="0"/>
      <line num="100" type="stmt" count="0"/>
      <line num="108" type="method" name="purgeCachedIpDenyList" visibility="public" complexity="1" crap="2" count="0"/>
      <line num="109" type="stmt" count="0"/>
      <line num="111" type="stmt" count="0"/>
      <line num="120" type="method" name="getIpDenyList" visibility="public" complexity="7" crap="7" count="13"/>
      <line num="123" type="stmt" count="13"/>
      <line num="124" type="stmt" count="13"/>
      <line num="125" type="stmt" count="13"/>
      <line num="126" type="stmt" count="0"/>
      <line num="128" type="stmt" count="13"/>
      <line num="131" type="stmt" count="13"/>
      <line num="132" type="stmt" count="13"/>
      <line num="133" type="stmt" count="13"/>
      <line num="134" type="stmt" count="13"/>
      <line num="135" type="stmt" count="13"/>
      <line num="136" type="stmt" count="13"/>
      <line num="138" type="stmt" count="13"/>
      <line num="139" type="stmt" count="13"/>
      <line num="140" type="stmt" count="13"/>
      <line num="141" type="stmt" count="13"/>
      <line num="142" type="stmt" count="13"/>
      <line num="144" type="stmt" count="13"/>
      <line num="145" type="stmt" count="13"/>
      <line num="146" type="stmt" count="13"/>
      <line num="147" type="stmt" count="13"/>
      <line num="149" type="stmt" count="13"/>
      <line num="150" type="stmt" count="13"/>
      <line num="151" type="stmt" count="13"/>
      <line num="154" type="stmt" count="13"/>
      <line num="157" type="stmt" count="13"/>
      <line num="158" type="stmt" count="13"/>
      <line num="159" type="stmt" count="13"/>
      <line num="160" type="stmt" count="13"/>
      <line num="161" type="stmt" count="13"/>
      <line num="162" type="stmt" count="13"/>
      <line num="166" type="stmt" count="13"/>
      <line num="173" type="method" name="getIpDenyListSet" visibility="public" complexity="3" crap="3" count="13"/>
      <line num="174" type="stmt" count="13"/>
      <line num="175" type="stmt" count="13"/>
      <line num="178" type="stmt" count="13"/>
      <line num="185" type="method" name="getDenyListKey" visibility="private" complexity="1" crap="1" count="13"/>
      <line num="186" type="stmt" count="13"/>
      <line num="192" type="method" name="fetchFlatDenyListHexIps" visibility="private" complexity="3" crap="4.54" count="13"/>
      <line num="195" type="stmt" count="13"/>
      <line num="196" type="stmt" count="0"/>
      <line num="199" type="stmt" count="13"/>
      <line num="200" type="stmt" count="13"/>
      <line num="202" type="stmt" count="0"/>
      <line num="203" type="stmt" count="0"/>
      <line num="204" type="stmt" count="0"/>
      <line num="205" type="stmt" count="0"/>
      <line num="208" type="stmt" count="13"/>
      <line num="217" type="method" name="fetchFlatDenyListHexIpsLocal" visibility="private" complexity="9" crap="9.37" count="13"/>
      <line num="220" type="stmt" count="13"/>
      <line num="221" type="stmt" count="13"/>
      <line num="222" type="stmt" count="0"/>
      <line num="225" type="stmt" count="13"/>
      <line num="227" type="stmt" count="13"/>
      <line num="228" type="stmt" count="13"/>
      <line num="229" type="stmt" count="13"/>
      <line num="230" type="stmt" count="13"/>
      <line num="233" type="stmt" count="13"/>
      <line num="234" type="stmt" count="0"/>
      <line num="236" type="stmt" count="13"/>
      <line num="237" type="stmt" count="6"/>
      <line num="240" type="stmt" count="13"/>
      <line num="241" type="stmt" count="13"/>
      <line num="242" type="stmt" count="13"/>
      <line num="244" type="stmt" count="0"/>
      <line num="247" type="stmt" count="13"/>
      <line num="250" type="stmt" count="13"/>
      <line num="261" type="method" name="fetchFlatDenyListHexIpsRemote" visibility="private" complexity="17" crap="306" count="0"/>
      <line num="270" type="stmt" count="0"/>
      <line num="271" type="stmt" count="0"/>
      <line num="272" type="stmt" count="0"/>
      <line num="275" type="stmt" count="0"/>
      <line num="276" type="stmt" count="0"/>
      <line num="280" type="stmt" count="0"/>
      <line num="281" type="stmt" count="0"/>
      <line num="284" type="stmt" count="0"/>
      <line num="285" type="stmt" count="0"/>
      <line num="286" type="stmt" count="0"/>
      <line num="289" type="stmt" count="0"/>
      <line num="290" type="stmt" count="0"/>
      <line num="291" type="stmt" count="0"/>
      <line num="293" type="stmt" count="0"/>
      <line num="296" type="stmt" count="0"/>
      <line num="298" type="stmt" count="0"/>
      <line num="299" type="stmt" count="0"/>
      <line num="300" type="stmt" count="0"/>
      <line num="301" type="stmt" count="0"/>
      <line num="304" type="stmt" count="0"/>
      <line num="305" type="stmt" count="0"/>
      <line num="306" type="stmt" count="0"/>
      <line num="311" type="stmt" count="0"/>
      <line num="312" type="stmt" count="0"/>
      <line num="313" type="stmt" count="0"/>
      <line num="314" type="stmt" count="0"/>
      <line num="317" type="stmt" count="0"/>
      <line num="318" type="stmt" count="0"/>
      <line num="319" type="stmt" count="0"/>
      <line num="321" type="stmt" count="0"/>
      <line num="323" type="stmt" count="0"/>
      <line num="325" type="stmt" count="0"/>
      <line num="326" type="stmt" count="0"/>
      <line num="327" type="stmt" count="0"/>
      <line num="329" type="stmt" count="0"/>
      <line num="330" type="stmt" count="0"/>
      <line num="331" type="stmt" count="0"/>
      <line num="334" type="stmt" count="0"/>
      <line num="335" type="stmt" count="0"/>
      <line num="337" type="stmt" count="0"/>
      <line num="340" type="stmt" count="0"/>
      <line num="343" type="stmt" count="0"/>
      <line num="344" type="stmt" count="0"/>
      <line num="345" type="stmt" count="0"/>
      <line num="346" type="stmt" count="0"/>
      <line num="347" type="stmt" count="0"/>
      <line num="350" type="stmt" count="0"/>
      <line num="360" type="method" name="fetchRemoteFile" visibility="private" complexity="3" crap="12" count="0"/>
      <line num="361" type="stmt" count="0"/>
      <line num="363" type="stmt" count="0"/>
      <line num="364" type="stmt" count="0"/>
      <line num="365" type="stmt" count="0"/>
      <line num="368" type="stmt" count="0"/>
      <line num="369" type="stmt" count="0"/>
      <line num="370" type="stmt" count="0"/>
      <line num="373" type="stmt" count="0"/>
      <metrics loc="376" ncloc="280" classes="1" methods="12" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="132" coveredstatements="56" elements="144" coveredelements="59"/>
    </file>
    <file name="/workspace/src/extensions/StopForumSpam/includes/Hooks.php">
      <class name="MediaWiki\Extension\StopForumSpam\Hooks" namespace="global">
        <metrics complexity="25" methods="4" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="69" coveredstatements="0" elements="73" coveredelements="0"/>
      </class>
      <line num="39" type="method" name="__construct" visibility="public" complexity="1" crap="2" count="0"/>
      <line num="40" type="stmt" count="0"/>
      <line num="48" type="method" name="getIPFromUser" visibility="public" complexity="3" crap="12" count="0"/>
      <line num="49" type="stmt" count="0"/>
      <line num="50" type="stmt" count="0"/>
      <line num="51" type="stmt" count="0"/>
      <line num="53" type="stmt" count="0"/>
      <line num="55" type="stmt" count="0"/>
      <line num="59" type="stmt" count="0"/>
      <line num="71" type="method" name="onGetUserPermissionsErrorsExpensive" visibility="public" complexity="16" crap="272" count="0"/>
      <line num="72" type="stmt" count="0"/>
      <line num="74" type="stmt" count="0"/>
      <line num="76" type="stmt" count="0"/>
      <line num="77" type="stmt" count="0"/>
      <line num="79" type="stmt" count="0"/>
      <line num="81" type="stmt" count="0"/>
      <line num="84" type="stmt" count="0"/>
      <line num="85" type="stmt" count="0"/>
      <line num="86" type="stmt" count="0"/>
      <line num="89" type="stmt" count="0"/>
      <line num="90" type="stmt" count="0"/>
      <line num="94" type="stmt" count="0"/>
      <line num="95" type="stmt" count="0"/>
      <line num="99" type="stmt" count="0"/>
      <line num="100" type="stmt" count="0"/>
      <line num="103" type="stmt" count="0"/>
      <line num="104" type="stmt" count="0"/>
      <line num="106" type="stmt" count="0"/>
      <line num="107" type="stmt" count="0"/>
      <line num="110" type="stmt" count="0"/>
      <line num="111" type="stmt" count="0"/>
      <line num="114" type="stmt" count="0"/>
      <line num="115" type="stmt" count="0"/>
      <line num="116" type="stmt" count="0"/>
      <line num="117" type="stmt" count="0"/>
      <line num="118" type="stmt" count="0"/>
      <line num="119" type="stmt" count="0"/>
      <line num="120" type="stmt" count="0"/>
      <line num="121" type="stmt" count="0"/>
      <line num="122" type="stmt" count="0"/>
      <line num="123" type="stmt" count="0"/>
      <line num="124" type="stmt" count="0"/>
      <line num="126" type="stmt" count="0"/>
      <line num="128" type="stmt" count="0"/>
      <line num="130" type="stmt" count="0"/>
      <line num="134" type="stmt" count="0"/>
      <line num="135" type="stmt" count="0"/>
      <line num="136" type="stmt" count="0"/>
      <line num="137" type="stmt" count="0"/>
      <line num="138" type="stmt" count="0"/>
      <line num="139" type="stmt" count="0"/>
      <line num="140" type="stmt" count="0"/>
      <line num="141" type="stmt" count="0"/>
      <line num="142" type="stmt" count="0"/>
      <line num="143" type="stmt" count="0"/>
      <line num="144" type="stmt" count="0"/>
      <line num="145" type="stmt" count="0"/>
      <line num="148" type="stmt" count="0"/>
      <line num="149" type="stmt" count="0"/>
      <line num="153" type="stmt" count="0"/>
      <line num="154" type="stmt" count="0"/>
      <line num="162" type="method" name="onOtherBlockLogLink" visibility="public" complexity="5" crap="30" count="0"/>
      <line num="164" type="stmt" count="0"/>
      <line num="165" type="stmt" count="0"/>
      <line num="167" type="stmt" count="0"/>
      <line num="170" type="stmt" count="0"/>
      <line num="171" type="stmt" count="0"/>
      <line num="172" type="stmt" count="0"/>
      <line num="173" type="stmt" count="0"/>
      <line num="174" type="stmt" count="0"/>
      <line num="175" type="stmt" count="0"/>
      <line num="176" type="stmt" count="0"/>
      <line num="179" type="stmt" count="0"/>
      <metrics loc="182" ncloc="131" classes="1" methods="4" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="69" coveredstatements="0" elements="73" coveredelements="0"/>
    </file>
    <file name="/workspace/src/extensions/StopForumSpam/maintenance/updateDenyList.php">
      <class name="MediaWiki\Extension\StopForumSpam\Maintenance\UpdateDenyList" namespace="global">
        <metrics complexity="11" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
      </class>
      <line num="27" type="stmt" count="0"/>
      <line num="28" type="stmt" count="0"/>
      <line num="29" type="stmt" count="0"/>
      <line num="117" type="stmt" count="0"/>
      <line num="118" type="stmt" count="0"/>
      <metrics loc="119" ncloc="95" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="5" coveredstatements="0" elements="5" coveredelements="0"/>
    </file>
    <metrics files="4" loc="774" ncloc="561" classes="3" methods="20" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="220" coveredstatements="56" elements="240" coveredelements="59"/>
  </project>
</coverage>
