<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1790760152">
  <project timestamp="1790760152">
    <file name="/workspace/src/extensions/TorBlock/includes/ApiTorBlock.php">
      <class name="MediaWiki\Extension\TorBlock\ApiTorBlock" namespace="global">
        <metrics complexity="4" methods="3" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="20" coveredstatements="16" elements="23" coveredelements="18"/>
      </class>
      <line num="35" type="method" name="execute" visibility="public" complexity="2" crap="2" count="2"/>
      <line num="36" type="stmt" count="2"/>
      <line num="38" type="stmt" count="2"/>
      <line num="39" type="stmt" count="1"/>
      <line num="40" type="stmt" count="1"/>
      <line num="41" type="stmt" count="1"/>
      <line num="42" type="stmt" count="1"/>
      <line num="44" type="stmt" count="1"/>
      <line num="46" type="stmt" count="1"/>
      <line num="47" type="stmt" count="1"/>
      <line num="48" type="stmt" count="1"/>
      <line num="49" type="stmt" count="1"/>
      <line num="54" type="method" name="getAllowedParams" visibility="public" complexity="1" crap="1" count="2"/>
      <line num="55" type="stmt" count="2"/>
      <line num="56" type="stmt" count="2"/>
      <line num="57" type="stmt" count="2"/>
      <line num="58" type="stmt" count="2"/>
      <line num="59" type="stmt" count="2"/>
      <line num="63" type="method" name="getExamplesMessages" visibility="protected" complexity="1" crap="2" count="0"/>
      <line num="64" type="stmt" count="0"/>
      <line num="65" type="stmt" count="0"/>
      <line num="66" type="stmt" count="0"/>
      <line num="67" type="stmt" count="0"/>
      <metrics loc="70" ncloc="46" classes="1" methods="3" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="20" coveredstatements="16" elements="23" coveredelements="18"/>
    </file>
    <file name="/workspace/src/extensions/TorBlock/includes/Hooks.php">
      <class name="MediaWiki\Extension\TorBlock\Hooks" namespace="global">
        <metrics complexity="39" methods="13" coveredmethods="12" conditionals="0" coveredconditionals="0" statements="107" coveredstatements="106" elements="120" coveredelements="118"/>
      </class>
      <line num="72" type="method" name="registerExtension" visibility="public" complexity="1" crap="2" count="0"/>
      <line num="75" type="stmt" count="0"/>
      <line num="78" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="34"/>
      <line num="82" type="stmt" count="34"/>
      <line num="83" type="stmt" count="34"/>
      <line num="93" type="method" name="checkUserCan" visibility="private" complexity="7" crap="7" count="9"/>
      <line num="96" type="stmt" count="9"/>
      <line num="97" type="stmt" count="9"/>
      <line num="99" type="stmt" count="4"/>
      <line num="102" type="stmt" count="5"/>
      <line num="103" type="stmt" count="5"/>
      <line num="104" type="stmt" count="5"/>
      <line num="105" type="stmt" count="5"/>
      <line num="106" type="stmt" count="5"/>
      <line num="107" type="stmt" count="5"/>
      <line num="110" type="stmt" count="5"/>
      <line num="111" type="stmt" count="4"/>
      <line num="112" type="stmt" count="1"/>
      <line num="113" type="stmt" count="1"/>
      <line num="114" type="stmt" count="1"/>
      <line num="115" type="stmt" count="1"/>
      <line num="116" type="stmt" count="1"/>
      <line num="117" type="stmt" count="1"/>
      <line num="118" type="stmt" count="1"/>
      <line num="120" type="stmt" count="1"/>
      <line num="124" type="stmt" count="4"/>
      <line num="126" type="stmt" count="4"/>
      <line num="127" type="stmt" count="1"/>
      <line num="128" type="stmt" count="1"/>
      <line num="129" type="stmt" count="1"/>
      <line num="130" type="stmt" count="1"/>
      <line num="131" type="stmt" count="1"/>
      <line num="132" type="stmt" count="1"/>
      <line num="134" type="stmt" count="1"/>
      <line num="137" type="stmt" count="3"/>
      <line num="150" type="method" name="onGetUserPermissionsErrorsExpensive" visibility="public" complexity="2" crap="2" count="2"/>
      <line num="156" type="stmt" count="2"/>
      <line num="157" type="stmt" count="1"/>
      <line num="158" type="stmt" count="1"/>
      <line num="159" type="stmt" count="1"/>
      <line num="160" type="stmt" count="1"/>
      <line num="161" type="stmt" count="1"/>
      <line num="162" type="stmt" count="1"/>
      <line num="163" type="stmt" count="1"/>
      <line num="166" type="stmt" count="1"/>
      <line num="167" type="stmt" count="1"/>
      <line num="168" type="stmt" count="1"/>
      <line num="170" type="stmt" count="1"/>
      <line num="173" type="stmt" count="1"/>
      <line num="184" type="method" name="onUserCanSendEmail" visibility="public" complexity="2" crap="2" count="2"/>
      <line num="185" type="stmt" count="2"/>
      <line num="186" type="stmt" count="1"/>
      <line num="187" type="stmt" count="1"/>
      <line num="188" type="stmt" count="1"/>
      <line num="189" type="stmt" count="1"/>
      <line num="190" type="stmt" count="1"/>
      <line num="191" type="stmt" count="1"/>
      <line num="194" type="stmt" count="1"/>
      <line num="195" type="stmt" count="1"/>
      <line num="196" type="stmt" count="1"/>
      <line num="197" type="stmt" count="1"/>
      <line num="198" type="stmt" count="1"/>
      <line num="199" type="stmt" count="1"/>
      <line num="200" type="stmt" count="1"/>
      <line num="201" type="stmt" count="1"/>
      <line num="204" type="stmt" count="1"/>
      <line num="217" type="method" name="onGetUserBlock" visibility="public" complexity="7" crap="7" count="5"/>
      <line num="219" type="stmt" count="5"/>
      <line num="220" type="stmt" count="3"/>
      <line num="223" type="stmt" count="2"/>
      <line num="225" type="stmt" count="2"/>
      <line num="226" type="stmt" count="2"/>
      <line num="227" type="stmt" count="2"/>
      <line num="228" type="stmt" count="1"/>
      <line num="229" type="stmt" count="1"/>
      <line num="233" type="stmt" count="2"/>
      <line num="234" type="stmt" count="1"/>
      <line num="235" type="stmt" count="1"/>
      <line num="236" type="stmt" count="1"/>
      <line num="237" type="stmt" count="1"/>
      <line num="238" type="stmt" count="1"/>
      <line num="239" type="stmt" count="1"/>
      <line num="241" type="stmt" count="1"/>
      <line num="244" type="stmt" count="2"/>
      <line num="254" type="method" name="onAbortAutoblock" visibility="public" complexity="1" crap="1" count="2"/>
      <line num="255" type="stmt" count="2"/>
      <line num="266" type="method" name="onGetAutoPromoteGroups" visibility="public" complexity="5" crap="5" count="4"/>
      <line num="274" type="stmt" count="4"/>
      <line num="276" type="stmt" count="1"/>
      <line num="279" type="stmt" count="3"/>
      <line num="281" type="stmt" count="3"/>
      <line num="283" type="stmt" count="1"/>
      <line num="286" type="stmt" count="2"/>
      <line num="288" type="stmt" count="1"/>
      <line num="291" type="stmt" count="2"/>
      <line num="297" type="method" name="onUserRequirementsCondition" visibility="public" complexity="4" crap="4" count="5"/>
      <line num="304" type="stmt" count="5"/>
      <line num="306" type="stmt" count="4"/>
      <line num="307" type="stmt" count="4"/>
      <line num="309" type="stmt" count="2"/>
      <line num="310" type="stmt" count="2"/>
      <line num="312" type="stmt" count="2"/>
      <line num="322" type="method" name="onRecentChange_save" visibility="public" complexity="3" crap="3" count="3"/>
      <line num="325" type="stmt" count="3"/>
      <line num="326" type="stmt" count="1"/>
      <line num="328" type="stmt" count="3"/>
      <line num="338" type="method" name="onListDefinedTags" visibility="public" complexity="2" crap="2" count="4"/>
      <line num="341" type="stmt" count="4"/>
      <line num="342" type="stmt" count="2"/>
      <line num="344" type="stmt" count="4"/>
      <line num="352" type="method" name="onChangeTagsListActive" visibility="public" complexity="1" crap="1" count="2"/>
      <line num="353" type="stmt" count="2"/>
      <line num="363" type="method" name="onOtherBlockLogLink" visibility="public" complexity="3" crap="3" count="2"/>
      <line num="366" type="stmt" count="2"/>
      <line num="367" type="stmt" count="1"/>
      <line num="368" type="stmt" count="1"/>
      <line num="369" type="stmt" count="1"/>
      <line num="370" type="stmt" count="1"/>
      <line num="371" type="stmt" count="1"/>
      <line num="373" type="stmt" count="2"/>
      <metrics loc="376" ncloc="259" classes="1" methods="13" coveredmethods="12" conditionals="0" coveredconditionals="0" statements="107" coveredstatements="106" elements="120" coveredelements="118"/>
    </file>
    <file name="/workspace/src/extensions/TorBlock/includes/Hooks/HookRunner.php">
      <class name="MediaWiki\Extension\TorBlock\Hooks\HookRunner" namespace="global">
        <metrics complexity="2" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="5" coveredstatements="5" elements="7" coveredelements="7"/>
      </class>
      <line num="14" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="1"/>
      <line num="15" type="stmt" count="1"/>
      <line num="20" type="method" name="onTorBlockBlockedMsg" visibility="public" complexity="1" crap="1" count="1"/>
      <line num="21" type="stmt" count="1"/>
      <line num="22" type="stmt" count="1"/>
      <line num="23" type="stmt" count="1"/>
      <line num="24" type="stmt" count="1"/>
      <metrics loc="27" ncloc="20" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="5" coveredstatements="5" elements="7" coveredelements="7"/>
    </file>
    <file name="/workspace/src/extensions/TorBlock/includes/Hooks/TorBlockBlockedMsgHook.php">
      <metrics loc="19" ncloc="8" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
    </file>
    <file name="/workspace/src/extensions/TorBlock/includes/TorBlockAbuseFilterHooks.php">
      <class name="MediaWiki\Extension\TorBlock\TorBlockAbuseFilterHooks" namespace="global">
        <metrics complexity="2" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="4" elements="6" coveredelements="6"/>
      </class>
      <line num="37" type="method" name="onAbuseFilterAlterVariables" visibility="public" complexity="1" crap="1" count="2"/>
      <line num="38" type="stmt" count="2"/>
      <line num="39" type="stmt" count="2"/>
      <line num="45" type="method" name="onAbuseFilter_builder" visibility="public" complexity="1" crap="1" count="1"/>
      <line num="46" type="stmt" count="1"/>
      <line num="47" type="stmt" count="1"/>
      <metrics loc="50" ncloc="23" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="4" elements="6" coveredelements="6"/>
    </file>
    <file name="/workspace/src/extensions/TorBlock/includes/TorExitNodes.php">
      <class name="MediaWiki\Extension\TorBlock\TorExitNodes" namespace="global">
        <metrics complexity="28" methods="7" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="103" coveredstatements="85" elements="110" coveredelements="88"/>
      </class>
      <line num="47" type="method" name="getLogger" visibility="private" complexity="1" crap="1" count="6"/>
      <line num="48" type="stmt" count="6"/>
      <line num="57" type="method" name="isExitNode" visibility="public" complexity="2" crap="2" count="4"/>
      <line num="58" type="stmt" count="4"/>
      <line num="59" type="stmt" count="1"/>
      <line num="62" type="stmt" count="4"/>
      <line num="70" type="method" name="getExitNodes" visibility="public" complexity="2" crap="3.11" count="5"/>
      <line num="71" type="stmt" count="5"/>
      <line num="72" type="stmt" count="5"/>
      <line num="73" type="stmt" count="0"/>
      <line num="74" type="stmt" count="0"/>
      <line num="75" type="stmt" count="0"/>
      <line num="78" type="stmt" count="5"/>
      <line num="79" type="stmt" count="5"/>
      <line num="80" type="stmt" count="5"/>
      <line num="81" type="stmt" count="5"/>
      <line num="82" 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="87" type="stmt" count="0"/>
      <line num="88" type="stmt" count="0"/>
      <line num="89" type="stmt" count="0"/>
      <line num="90" type="stmt" count="0"/>
      <line num="92" type="stmt" count="0"/>
      <line num="94" type="stmt" count="0"/>
      <line num="95" type="stmt" count="0"/>
      <line num="96" type="stmt" count="0"/>
      <line num="97" type="stmt" count="5"/>
      <line num="98" type="stmt" count="5"/>
      <line num="108" type="method" name="loadExitNodes" visibility="public" complexity="1" crap="1" count="1"/>
      <line num="109" type="stmt" count="1"/>
      <line num="111" type="stmt" count="1"/>
      <line num="112" type="stmt" count="1"/>
      <line num="114" type="stmt" count="1"/>
      <line num="122" type="method" name="fetchExitNodes" visibility="private" complexity="4" crap="4.25" count="2"/>
      <line num="123" type="stmt" count="2"/>
      <line num="125" type="stmt" count="2"/>
      <line num="128" type="stmt" count="2"/>
      <line num="131" type="stmt" count="0"/>
      <line num="139" type="method" name="fetchExitNodesFromTorProject" visibility="private" complexity="7" crap="7" count="2"/>
      <line num="142" type="stmt" count="2"/>
      <line num="143" type="stmt" count="2"/>
      <line num="144" type="stmt" count="2"/>
      <line num="145" type="stmt" count="2"/>
      <line num="146" type="stmt" count="0"/>
      <line num="149" type="stmt" count="2"/>
      <line num="150" type="stmt" count="2"/>
      <line num="151" type="stmt" count="2"/>
      <line num="152" type="stmt" count="2"/>
      <line num="153" type="stmt" count="2"/>
      <line num="155" type="stmt" count="2"/>
      <line num="156" type="stmt" count="1"/>
      <line num="157" type="stmt" count="1"/>
      <line num="158" type="stmt" count="1"/>
      <line num="159" type="stmt" count="1"/>
      <line num="160" type="stmt" count="1"/>
      <line num="161" type="stmt" count="1"/>
      <line num="162" type="stmt" count="1"/>
      <line num="165" type="stmt" count="1"/>
      <line num="167" type="stmt" count="1"/>
      <line num="168" type="stmt" count="1"/>
      <line num="169" type="stmt" count="1"/>
      <line num="174" type="stmt" count="2"/>
      <line num="183" type="method" name="fetchExitNodesFromOnionooServer" visibility="private" complexity="11" crap="11" count="7"/>
      <line num="186" type="stmt" count="7"/>
      <line num="188" type="stmt" count="7"/>
      <line num="189" type="stmt" count="7"/>
      <line num="190" type="stmt" count="7"/>
      <line num="191" type="stmt" count="7"/>
      <line num="193" type="stmt" count="7"/>
      <line num="194" type="stmt" count="7"/>
      <line num="195" type="stmt" count="7"/>
      <line num="196" type="stmt" count="7"/>
      <line num="197" type="stmt" count="0"/>
      <line num="199" type="stmt" count="7"/>
      <line num="201" type="stmt" count="7"/>
      <line num="202" type="stmt" count="1"/>
      <line num="203" type="stmt" count="1"/>
      <line num="204" type="stmt" count="1"/>
      <line num="205" type="stmt" count="1"/>
      <line num="206" type="stmt" count="1"/>
      <line num="207" type="stmt" count="1"/>
      <line num="208" type="stmt" count="1"/>
      <line num="211" type="stmt" count="6"/>
      <line num="213" type="stmt" count="6"/>
      <line num="214" type="stmt" count="1"/>
      <line num="215" type="stmt" count="1"/>
      <line num="218" type="stmt" count="5"/>
      <line num="219" type="stmt" count="5"/>
      <line num="220" type="stmt" count="4"/>
      <line num="221" type="stmt" count="4"/>
      <line num="222" type="stmt" count="1"/>
      <line num="225" type="stmt" count="4"/>
      <line num="227" type="stmt" count="4"/>
      <line num="228" type="stmt" count="4"/>
      <line num="229" type="stmt" count="4"/>
      <line num="233" type="stmt" count="4"/>
      <line num="234" type="stmt" count="4"/>
      <line num="235" type="stmt" count="1"/>
      <line num="238" type="stmt" count="4"/>
      <line num="239" type="stmt" count="1"/>
      <line num="240" type="stmt" count="1"/>
      <line num="241" type="stmt" count="1"/>
      <line num="242" type="stmt" count="1"/>
      <line num="243" type="stmt" count="1"/>
      <line num="244" type="stmt" count="1"/>
      <line num="245" type="stmt" count="1"/>
      <line num="248" type="stmt" count="4"/>
      <line num="252" type="stmt" count="5"/>
      <metrics loc="255" ncloc="187" classes="1" methods="7" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="103" coveredstatements="85" elements="110" coveredelements="88"/>
    </file>
    <file name="/workspace/src/extensions/TorBlock/maintenance/CheckExitNode.php">
      <class name="MediaWiki\Extension\TorBlock\Maintenance\CheckExitNode" namespace="global">
        <metrics complexity="4" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
      </class>
      <metrics loc="67" ncloc="38" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
    </file>
    <file name="/workspace/src/extensions/TorBlock/maintenance/loadExitNodes.php">
      <class name="MediaWiki\Extension\TorBlock\Maintenance\LoadExitNodes" namespace="global">
        <metrics complexity="5" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
      </class>
      <metrics loc="75" ncloc="42" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
    </file>
    <metrics files="8" loc="939" ncloc="623" classes="5" methods="27" coveredmethods="21" conditionals="0" coveredconditionals="0" statements="239" coveredstatements="216" elements="266" coveredelements="237"/>
  </project>
</coverage>
