<?xml version="1.0" encoding="UTF-8"?>
<package packagerversion="1.4.10" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
http://pear.php.net/dtd/tasks-1.0.xsd
http://pear.php.net/dtd/package-2.0
http://pear.php.net/dtd/package-2.0.xsd">
 <name>PHP_CodeSniffer</name>
 <channel>pear.php.net</channel>
 <summary>PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files to detect and fix violations of a defined set of coding standards.</summary>
 <description>PHP_CodeSniffer is a set of two PHP scripts; the main phpcs script that tokenizes PHP, JavaScript and CSS files to detect violations of a defined coding standard, and a second phpcbf script to automatically correct coding standard violations. PHP_CodeSniffer is an essential development tool that ensures your code remains clean and consistent.
 </description>
 <lead>
  <name>Greg Sherwood</name>
  <user>squiz</user>
  <email>gsherwood@squiz.net</email>
  <active>yes</active>
 </lead>
 <date>2022-06-18</date>
 <time>17:20:00</time>
 <version>
  <release>3.7.2</release>
  <api>3.7.2</api>
 </version>
 <stability>
  <release>stable</release>
  <api>stable</api>
 </stability>
 <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD 3-Clause License</license>
 <notes>
  - Newer versions of Composer will now suggest installing PHPCS using require-dev instead of require
    -- Thanks to Gary Jones (@GaryJones) for the patch
  - A custom Out Of Memory error will now be shown if PHPCS or PHPCBF run out of memory during a run
    -- Error message provides actionable information about how to fix the problem and ensures the error is not silent
    -- Thanks to Juliette Reinders Folmer (@jrfnl) and Alain Schlesser (@schlessera) for the patch
  - When using auto report width (the default) a value of 80 columns will be used if an auto width cannot be determined
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Sniff error messages are now more informative to help bugs get reported to the correct project
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Generic.PHP.LowerCaseType sniff now correctly examines types inside arrow functions
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - PSR2.Classes.PropertyDeclaration now enforces that the readonly modifier comes after the visibility modifier
    - PSR2 and PSR12 do not have documented rules for this as they pre-date the readonly modifier
    - PSR-PER has been used to confirm the order of this keyword so it can be applied to PSR2 and PSR12 correctly
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Squiz.Formatting.OperatorBracket no longer reports false positives in match() structures
  - Fixed bug #3616 : Squiz.PHP.DisallowComparisonAssignment false positive for PHP 8 match expression
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3618 : Generic.WhiteSpace.ArbitraryParenthesesSpacing false positive for return new parent()
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3632 : Short list not tokenized correctly in control structures without braces
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3639 : Tokenizer not applying tab replacement to heredoc/nowdoc closers
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3640 : Generic.WhiteSpace.DisallowTabIndent not reporting errors for PHP 7.3 flexible heredoc/nowdoc syntax
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3645 : PHPCS can show 0 exit code when running in parallel even if child process has fatal error
    -- Thanks to Alex Panshin (@enl) for the patch
  - Fixed bug #3653 : False positives for match() in OperatorSpacingSniff
    -- Thanks to Jaroslav Hanslík (@kukulich) for the patch
  - Fixed bug #3666 : PEAR.Functions.FunctionCallSignature incorrect indent fix when checking mixed HTML/PHP files
  - Fixed bug #3668 : PSR12.Classes.ClassInstantiation.MissingParentheses false positive when instantiating parent classes
    -- Similar issues also fixed in Generic.Functions.FunctionCallArgumentSpacing and Squiz.Formatting.OperatorBracket
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3672 : Incorrect ScopeIndent.IncorrectExact report for match inside array literal
  - Fixed bug #3694 : Generic.WhiteSpace.SpreadOperatorSpacingAfter does not ignore spread operator in PHP 8.1 first class callables
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3722 : Potential "Uninitialized string offset 1" in octal notation backfill
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3777 : Squiz/NonExecutableCode: slew of bug fixes, mostly related to modern PHP
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3779 : Squiz/LowercasePHPFunctions + Generic/ForbiddenFunctions: bug fix for class names in attributes
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3787 : PEAR/Squiz/[MultiLine]FunctionDeclaration: allow for PHP 8.1 new in initializers
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3789 : Incorrect tokenization for ternary operator with match inside of it
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3797 : Tokenizer/PHP: more context sensitive keyword fixes
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
  - Fixed bug #3805 : Generic/FunctionCallArgumentSpacing: prevent fixer conflict over PHP 7.3+ trailing comma's in function calls
    -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
 </notes>
 <contents>
  <dir name="/">
   <file baseinstalldir="PHP/CodeSniffer" name="autoload.php" role="php">
    <tasks:replace from="@test_dir@" to="test_dir" type="pear-config" />
   </file>
   <file baseinstalldir="PHP/CodeSniffer" name="CodeSniffer.conf.dist" role="data" />
   <file baseinstalldir="PHP/CodeSniffer" name="README.md" role="doc" />
   <file baseinstalldir="PHP/CodeSniffer" name="CONTRIBUTING.md" role="doc" />
   <file baseinstalldir="PHP/CodeSniffer" name="licence.txt" role="doc" />
   <file baseinstalldir="PHP/CodeSniffer" name="phpcs.xml.dist" role="php" />
   <file baseinstalldir="PHP/CodeSniffer" name="phpcs.xsd" role="php" />
   <file baseinstalldir="PHP/CodeSniffer" name="phpunit.xml.dist" role="test" />
   <dir name="bin">
    <file baseinstalldir="" name="phpcbf" role="script">
     <tasks:replace from="/usr/bin/env php" to="php_bin" type="pear-config" />
    </file>
    <file baseinstalldir="" name="phpcs" role="script">
     <tasks:replace from="/usr/bin/env php" to="php_bin" type="pear-config" />
    </file>
    <file baseinstalldir="" name="phpcs.bat" role="script">
     <tasks:replace from="@php_bin@" to="php_bin" type="pear-config" />
     <tasks:replace from="@bin_dir@" to="bin_dir" type="pear-config" />
    </file>
    <file baseinstalldir="" name="phpcbf.bat" role="script">
     <tasks:replace from="@php_bin@" to="php_bin" type="pear-config" />
     <tasks:replace from="@bin_dir@" to="bin_dir" type="pear-config" />
    </file>
   </dir>
   <dir name="tests">
    <dir name="Core">
     <dir name="Autoloader">
       <dir name="TestFiles">
        <dir name="Sub">
         <file baseinstalldir="" name="C.inc" role="test" />
        </dir>
        <file baseinstalldir="" name="A.inc" role="test" />
        <file baseinstalldir="" name="B.inc" role="test" />
        <file baseinstalldir="" name="C.inc" role="test" />
       </dir>
       <file baseinstalldir="" name="DetermineLoadedClassTest.php" role="test" />
     </dir>
     <dir name="File">
      <file baseinstalldir="" name="FindEndOfStatementTest.inc" role="test" />
      <file baseinstalldir="" name="FindEndOfStatementTest.php" role="test" />
      <file baseinstalldir="" name="FindExtendedClassNameTest.inc" role="test" />
      <file baseinstalldir="" name="FindExtendedClassNameTest.php" role="test" />
      <file baseinstalldir="" name="FindImplementedInterfaceNamesTest.inc" role="test" />
      <file baseinstalldir="" name="FindImplementedInterfaceNamesTest.php" role="test" />
      <file baseinstalldir="" name="FindStartOfStatementTest.inc" role="test" />
      <file baseinstalldir="" name="FindStartOfStatementTest.php" role="test" />
      <file baseinstalldir="" name="GetMemberPropertiesTest.inc" role="test" />
      <file baseinstalldir="" name="GetMemberPropertiesTest.php" role="test" />
      <file baseinstalldir="" name="GetMethodParametersTest.inc" role="test" />
      <file baseinstalldir="" name="GetMethodParametersTest.php" role="test" />
      <file baseinstalldir="" name="GetMethodPropertiesTest.inc" role="test" />
      <file baseinstalldir="" name="GetMethodPropertiesTest.php" role="test" />
      <file baseinstalldir="" name="IsReferenceTest.inc" role="test" />
      <file baseinstalldir="" name="IsReferenceTest.php" role="test" />
     </dir>
     <dir name="Filters">
      <dir name="Filter">
       <file baseinstalldir="" name="AcceptTest.xml" role="test" />
       <file baseinstalldir="" name="AcceptTest.php" role="test" />
      </dir>
     </dir>
     <dir name="Ruleset">
      <file baseinstalldir="" name="RuleInclusionTest.php" role="test" />
      <file baseinstalldir="" name="RuleInclusionTest.xml" role="test" />
      <file baseinstalldir="" name="RuleInclusionTest-include.xml" role="test" />
      <file baseinstalldir="" name="RuleInclusionAbsoluteLinuxTest.php" role="test" />
      <file baseinstalldir="" name="RuleInclusionAbsoluteLinuxTest.xml" role="test" />
      <file baseinstalldir="" name="RuleInclusionAbsoluteWindowsTest.php" role="test" />
      <file baseinstalldir="" name="RuleInclusionAbsoluteWindowsTest.xml" role="test" />
     </dir>
     <dir name="Sniffs">
      <file baseinstalldir="" name="AbstractArraySniffTest.inc" role="test" />
      <file baseinstalldir="" name="AbstractArraySniffTest.php" role="test" />
      <file baseinstalldir="" name="AbstractArraySniffTestable.php" role="test" />
     </dir>
     <dir name="Tokenizer">
      <file baseinstalldir="" name="AnonClassParenthesisOwnerTest.inc" role="test" />
      <file baseinstalldir="" name="AnonClassParenthesisOwnerTest.php" role="test" />
      <file baseinstalldir="" name="ArrayKeywordTest.inc" role="test" />
      <file baseinstalldir="" name="ArrayKeywordTest.php" role="test" />
      <file baseinstalldir="" name="AttributesTest.inc" role="test" />
      <file baseinstalldir="" name="AttributesTest.php" role="test" />
      <file baseinstalldir="" name="BackfillEnumTest.inc" role="test" />
      <file baseinstalldir="" name="BackfillEnumTest.php" role="test" />
      <file baseinstalldir="" name="BackfillExplicitOctalNotationTest.inc" role="test" />
      <file baseinstalldir="" name="BackfillExplicitOctalNotationTest.php" role="test" />
      <file baseinstalldir="" name="BackfillFnTokenTest.inc" role="test" />
      <file baseinstalldir="" name="BackfillFnTokenTest.php" role="test" />
      <file baseinstalldir="" name="BackfillMatchTokenTest.inc" role="test" />
      <file baseinstalldir="" name="BackfillMatchTokenTest.php" role="test" />
      <file baseinstalldir="" name="BackfillNumericSeparatorTest.inc" role="test" />
      <file baseinstalldir="" name="BackfillNumericSeparatorTest.php" role="test" />
      <file baseinstalldir="" name="BitwiseOrTest.inc" role="test" />
      <file baseinstalldir="" name="BitwiseOrTest.php" role="test" />
      <file baseinstalldir="" name="ContextSensitiveKeywordsTest.inc" role="test" />
      <file baseinstalldir="" name="ContextSensitiveKeywordsTest.php" role="test" />
      <file baseinstalldir="" name="DefaultKeywordTest.inc" role="test" />
      <file baseinstalldir="" name="DefaultKeywordTest.php" role="test" />
      <file baseinstalldir="" name="DoubleArrowTest.inc" role="test" />
      <file baseinstalldir="" name="DoubleArrowTest.php" role="test" />
      <file baseinstalldir="" name="DoubleQuotedStringTest.inc" role="test" />
      <file baseinstalldir="" name="DoubleQuotedStringTest.php" role="test" />
      <file baseinstalldir="" name="EnumCaseTest.inc" role="test" />
      <file baseinstalldir="" name="EnumCaseTest.php" role="test" />
      <file baseinstalldir="" name="FinallyTest.inc" role="test" />
      <file baseinstalldir="" name="FinallyTest.php" role="test" />
      <file baseinstalldir="" name="GotoLabelTest.inc" role="test" />
      <file baseinstalldir="" name="GotoLabelTest.php" role="test" />
      <file baseinstalldir="" name="HeredocNowdocCloserTest.inc" role="test" />
      <file baseinstalldir="" name="HeredocNowdocCloserTest.php" role="test" />
      <file baseinstalldir="" name="HeredocStringTest.inc" role="test" />
      <file baseinstalldir="" name="HeredocStringTest.php" role="test" />
      <file baseinstalldir="" name="NamedFunctionCallArgumentsTest.inc" role="test" />
      <file baseinstalldir="" name="NamedFunctionCallArgumentsTest.php" role="test" />
      <file baseinstalldir="" name="NullsafeObjectOperatorTest.inc" role="test" />
      <file baseinstalldir="" name="NullsafeObjectOperatorTest.php" role="test" />
      <file baseinstalldir="" name="BackfillReadonlyTest.inc" role="test" />
      <file baseinstalldir="" name="BackfillReadonlyTest.php" role="test" />
      <file baseinstalldir="" name="ScopeSettingWithNamespaceOperatorTest.inc" role="test" />
      <file baseinstalldir="" name="ScopeSettingWithNamespaceOperatorTest.php" role="test" />
      <file baseinstalldir="" name="ShortArrayTest.inc" role="test" />
      <file baseinstalldir="" name="ShortArrayTest.php" role="test" />
      <file baseinstalldir="" name="StableCommentWhitespaceTest.inc" role="test" />
      <file baseinstalldir="" name="StableCommentWhitespaceTest.php" role="test" />
      <file baseinstalldir="" name="StableCommentWhitespaceWinTest.inc" role="test" />
      <file baseinstalldir="" name="StableCommentWhitespaceWinTest.php" role="test" />
      <file baseinstalldir="" name="TypeIntersectionTest.inc" role="test" />
      <file baseinstalldir="" name="TypeIntersectionTest.php" role="test" />
      <file baseinstalldir="" name="UndoNamespacedNameSingleTokenTest.inc" role="test" />
      <file baseinstalldir="" name="UndoNamespacedNameSingleTokenTest.php" role="test" />
     </dir>
     <file baseinstalldir="" name="AbstractMethodUnitTest.php" role="test" />
     <file baseinstalldir="" name="AllTests.php" role="test" />
     <file baseinstalldir="" name="ErrorSuppressionTest.php" role="test" />
     <file baseinstalldir="" name="IsCamelCapsTest.php" role="test" />
    </dir>
    <dir name="Standards">
     <file baseinstalldir="" name="AbstractSniffUnitTest.php" role="test" />
     <file baseinstalldir="" name="AllSniffs.php" role="test" />
    </dir>
    <file baseinstalldir="" name="AllTests.php" role="test" />
    <file baseinstalldir="" name="bootstrap.php" role="test" />
    <file baseinstalldir="" name="FileList.php" role="test" />
    <file baseinstalldir="" name="TestSuite.php" role="test" />
    <file baseinstalldir="" name="TestSuite7.php" role="test" />
   </dir>
   <dir name="src">
    <file baseinstalldir="PHP/CodeSniffer" name="Config.php" role="php">
      <tasks:replace from="@data_dir@" to="data_dir" type="pear-config" />
    </file>
    <file baseinstalldir="PHP/CodeSniffer" name="Fixer.php" role="php" />
    <file baseinstalldir="PHP/CodeSniffer" name="Reporter.php" role="php" />
    <file baseinstalldir="PHP/CodeSniffer" name="Ruleset.php" role="php" />
    <file baseinstalldir="PHP/CodeSniffer" name="Runner.php" role="php" />
    <dir name="Exceptions">
     <file baseinstalldir="PHP/CodeSniffer" name="DeepExitException.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="RuntimeException.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="TokenizerException.php" role="php" />
    </dir>
    <dir name="Files">
     <file baseinstalldir="PHP/CodeSniffer" name="DummyFile.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="File.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="FileList.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="LocalFile.php" role="php" />
    </dir>
    <dir name="Filters">
     <file baseinstalldir="PHP/CodeSniffer" name="ExactMatch.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Filter.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="GitModified.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="GitStaged.php" role="php" />
    </dir>
    <dir name="Generators">
     <file baseinstalldir="PHP/CodeSniffer" name="Generator.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="HTML.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Markdown.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Text.php" role="php" />
    </dir>
    <dir name="Reports">
     <file baseinstalldir="PHP/CodeSniffer" name="Cbf.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Checkstyle.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Code.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Csv.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Diff.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Emacs.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Full.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Gitblame.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Hgblame.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Info.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Json.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Junit.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Notifysend.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Report.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Source.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Summary.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Svnblame.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="VersionControl.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Xml.php" role="php" />
    </dir>
    <dir name="Sniffs">
     <file baseinstalldir="PHP/CodeSniffer" name="AbstractArraySniff.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="AbstractPatternSniff.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="AbstractScopeSniff.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="AbstractVariableSniff.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Sniff.php" role="php" />
    </dir>
    <dir name="Standards">
     <dir name="Generic">
      <dir name="Docs">
       <dir name="Arrays">
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowLongArraySyntaxStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortArraySyntaxStandard.xml" role="php" />
       </dir>
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateClassNameStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningBraceSameLineStandard.xml" role="php" />
       </dir>
       <dir name="Debug">
        <file baseinstalldir="PHP/CodeSniffer" name="CSSLintStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosureLinterStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="JSHintStandard.xml" role="php" />
       </dir>
       <dir name="Commenting">
        <file baseinstalldir="PHP/CodeSniffer" name="FixmeStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="TodoStandard.xml" role="php" />
       </dir>
       <dir name="CodeAnalysis">
        <file baseinstalldir="PHP/CodeSniffer" name="JumbledIncrementerStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnusedFunctionParameterStandard.xml" role="php" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowYodaConditionsStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureStandard.xml" role="php" />
       </dir>
       <dir name="CodeAnalysis">
        <file baseinstalldir="PHP/CodeSniffer" name="AssignmentInConditionStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyStatementStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopShouldBeWhileLoopStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopWithTestFunctionCallStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnconditionalIfStatementStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnnecessaryFinalModifierStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UselessOverridingMethodStandard.xml" role="php" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="ByteOrderMarkStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ExecutableFileStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineHTMLStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineEndingsStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineLengthStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercasedFilenameStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneClassPerFileStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneInterfacePerFileStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneObjectStructurePerFileStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneTraitPerFileStandard.xml" role="php" />
       </dir>
       <dir name="Formatting">
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowMultipleStatementsStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultipleStatementAlignmentStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="NoSpaceAfterCastStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceAfterCastStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceAfterNotStandard.xml" role="php" />
       </dir>
       <dir name="Functions">
        <file baseinstalldir="PHP/CodeSniffer" name="CallTimePassByReferenceStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallArgumentSpacingStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningFunctionBraceBsdAllmanStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningFunctionBraceKernighanRitchieStandard.xml" role="php" />
       </dir>
       <dir name="Metrics">
        <file baseinstalldir="PHP/CodeSniffer" name="CyclomaticComplexityStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="NestingLevelStandard.xml" role="php" />
       </dir>
       <dir name="NamingConventions">
        <file baseinstalldir="PHP/CodeSniffer" name="AbstractClassNamePrefixStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="CamelCapsFunctionNameStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ConstructorNameStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="InterfaceNameSuffixStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="TraitNameSuffixStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UpperCaseConstantNameStandard.xml" role="php" />
       </dir>
       <dir name="PHP">
        <file baseinstalldir="PHP/CodeSniffer" name="BacktickOperatorStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="CharacterBeforePHPOpeningTagStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingPHPTagStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DeprecatedFunctionsStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowAlternativePHPTagsStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowRequestSuperglobalStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortOpenTagStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DiscourageGotoStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForbiddenFunctionsStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseConstantStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseKeywordStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseTypeStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="NoSilencedErrorsStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SAPIUsageStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UpperCaseConstantStandard.xml" role="php" />
       </dir>
       <dir name="Strings">
        <file baseinstalldir="PHP/CodeSniffer" name="UnnecessaryStringConcatStandard.xml" role="php" />
       </dir>
       <dir name="VersionControl">
        <file baseinstalldir="PHP/CodeSniffer" name="SubversionPropertiesStandard.xml" role="php" />
       </dir>
       <dir name="WhiteSpace">
        <file baseinstalldir="PHP/CodeSniffer" name="ArbitraryParenthesesSpacingStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpreadOperatorSpacingAfterStandard.xml" role="php" />
       </dir>
      </dir>
      <dir name="Sniffs">
       <dir name="Arrays">
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayIndentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowLongArraySyntaxSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortArraySyntaxSniff.php" role="php" />
       </dir>
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateClassNameSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningBraceSameLineSniff.php" role="php" />
       </dir>
       <dir name="CodeAnalysis">
        <file baseinstalldir="PHP/CodeSniffer" name="AssignmentInConditionSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyPHPStatementSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyStatementSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopShouldBeWhileLoopSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopWithTestFunctionCallSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="JumbledIncrementerSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnconditionalIfStatementSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnnecessaryFinalModifierSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnusedFunctionParameterSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UselessOverridingMethodSniff.php" role="php" />
       </dir>
       <dir name="Commenting">
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FixmeSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="TodoSniff.php" role="php" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowYodaConditionsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureSniff.php" role="php" />
       </dir>
       <dir name="Debug">
        <file baseinstalldir="PHP/CodeSniffer" name="ClosureLinterSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="CSSLintSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ESLintSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="JSHintSniff.php" role="php" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="ByteOrderMarkSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ExecutableFileSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineHTMLSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineEndingsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineLengthSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercasedFilenameSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneClassPerFileSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneInterfacePerFileSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneObjectStructurePerFileSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneTraitPerFileSniff.php" role="php" />
       </dir>
       <dir name="Formatting">
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowMultipleStatementsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultipleStatementAlignmentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="NoSpaceAfterCastSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceAfterCastSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceAfterNotSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceBeforeCastSniff.php" role="php" />
       </dir>
       <dir name="Functions">
        <file baseinstalldir="PHP/CodeSniffer" name="CallTimePassByReferenceSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallArgumentSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningFunctionBraceBsdAllmanSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningFunctionBraceKernighanRitchieSniff.php" role="php" />
       </dir>
       <dir name="Metrics">
        <file baseinstalldir="PHP/CodeSniffer" name="CyclomaticComplexitySniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="NestingLevelSniff.php" role="php" />
       </dir>
       <dir name="NamingConventions">
        <file baseinstalldir="PHP/CodeSniffer" name="AbstractClassNamePrefixSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="CamelCapsFunctionNameSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ConstructorNameSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="InterfaceNameSuffixSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="TraitNameSuffixSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UpperCaseConstantNameSniff.php" role="php" />
       </dir>
       <dir name="PHP">
        <file baseinstalldir="PHP/CodeSniffer" name="BacktickOperatorSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="CharacterBeforePHPOpeningTagSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingPHPTagSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DeprecatedFunctionsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowRequestSuperglobalSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortOpenTagSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowAlternativePHPTagsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DiscourageGotoSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForbiddenFunctionsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseConstantSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseKeywordSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseTypeSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="NoSilencedErrorsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="RequireStrictTypesSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SAPIUsageSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SyntaxSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UpperCaseConstantSniff.php" role="php" />
       </dir>
       <dir name="Strings">
        <file baseinstalldir="PHP/CodeSniffer" name="UnnecessaryStringConcatSniff.php" role="php" />
       </dir>
       <dir name="VersionControl">
        <file baseinstalldir="PHP/CodeSniffer" name="GitMergeConflictSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SubversionPropertiesSniff.php" role="php" />
       </dir>
       <dir name="WhiteSpace">
        <file baseinstalldir="PHP/CodeSniffer" name="ArbitraryParenthesesSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncrementDecrementSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LanguageConstructSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpreadOperatorSpacingAfterSniff.php" role="php" />
       </dir>
      </dir>
      <dir name="Tests">
       <dir name="Arrays">
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayIndentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayIndentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayIndentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowLongArraySyntaxUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowLongArraySyntaxUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowLongArraySyntaxUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowLongArraySyntaxUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowLongArraySyntaxUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortArraySyntaxUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortArraySyntaxUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortArraySyntaxUnitTest.php" role="test" />
       </dir>
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateClassNameUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateClassNameUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateClassNameUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateClassNameUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateClassNameUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateClassNameUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateClassNameUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningBraceSameLineUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningBraceSameLineUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningBraceSameLineUnitTest.php" role="test" />
       </dir>
       <dir name="CodeAnalysis">
        <file baseinstalldir="PHP/CodeSniffer" name="AssignmentInConditionUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="AssignmentInConditionUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyPHPStatementUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyPHPStatementUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyPHPStatementUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyStatementUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyStatementUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopShouldBeWhileLoopUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopShouldBeWhileLoopUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopWithTestFunctionCallUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopWithTestFunctionCallUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="JumbledIncrementerUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="JumbledIncrementerUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnconditionalIfStatementUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnconditionalIfStatementUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnnecessaryFinalModifierUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnnecessaryFinalModifierUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnusedFunctionParameterUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnusedFunctionParameterUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UselessOverridingMethodUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UselessOverridingMethodUnitTest.php" role="test" />
       </dir>
       <dir name="Commenting">
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FixmeUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FixmeUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FixmeUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="TodoUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="TodoUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="TodoUnitTest.php" role="test" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowYodaConditionsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowYodaConditionsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineControlStructureUnitTest.php" role="test" />
       </dir>
       <dir name="Debug">
        <file baseinstalldir="PHP/CodeSniffer" name="ClosureLinterUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosureLinterUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CSSLintUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CSSLintUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ESLintUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ESLintUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="JSHintUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="JSHintUnitTest.php" role="test" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="ByteOrderMarkUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ByteOrderMarkUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.1.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.1.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.2.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.2.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.3.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.3.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.3.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.3.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.3.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.4.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.6.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.7.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.8.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.1.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.1.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.1.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.1.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.2.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.2.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.2.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.2.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.3.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.3.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.6.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.8.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.8.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.9.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.9.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.10.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNoNewlineUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ExecutableFileUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ExecutableFileUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ExecutableFileUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ExecutableFileUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ExecutableFileUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineHTMLUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineHTMLUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineHTMLUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineHTMLUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineHTMLUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineHTMLUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineHTMLUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineHTMLUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineEndingsUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineEndingsUnitTest.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineEndingsUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineEndingsUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineEndingsUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineEndingsUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineEndingsUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineEndingsUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineEndingsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineLengthUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineLengthUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineLengthUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineLengthUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineLengthUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercasedFilenameUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercasedFilenameUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercasedFilenameUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneClassPerFileUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneClassPerFileUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneInterfacePerFileUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneInterfacePerFileUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneObjectStructurePerFileUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneObjectStructurePerFileUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneTraitPerFileUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OneTraitPerFileUnitTest.php" role="test" />
       </dir>
       <dir name="Formatting">
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowMultipleStatementsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowMultipleStatementsUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowMultipleStatementsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultipleStatementAlignmentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultipleStatementAlignmentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultipleStatementAlignmentUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultipleStatementAlignmentUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultipleStatementAlignmentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NoSpaceAfterCastUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NoSpaceAfterCastUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NoSpaceAfterCastUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceAfterCastUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceAfterCastUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceAfterCastUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceAfterNotUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceAfterNotUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceAfterNotUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceAfterNotUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceAfterNotUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceBeforeCastUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceBeforeCastUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpaceBeforeCastUnitTest.php" role="test" />
       </dir>
       <dir name="Functions">
        <file baseinstalldir="PHP/CodeSniffer" name="CallTimePassByReferenceUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CallTimePassByReferenceUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallArgumentSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallArgumentSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallArgumentSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningFunctionBraceBsdAllmanUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningFunctionBraceBsdAllmanUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningFunctionBraceBsdAllmanUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningFunctionBraceKernighanRitchieUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningFunctionBraceKernighanRitchieUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningFunctionBraceKernighanRitchieUnitTest.php" role="test" />
       </dir>
       <dir name="Metrics">
        <file baseinstalldir="PHP/CodeSniffer" name="CyclomaticComplexityUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CyclomaticComplexityUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NestingLevelUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NestingLevelUnitTest.php" role="test" />
       </dir>
       <dir name="NamingConventions">
        <file baseinstalldir="PHP/CodeSniffer" name="AbstractClassNamePrefixUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="AbstractClassNamePrefixUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CamelCapsFunctionNameUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CamelCapsFunctionNameUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ConstructorNameUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ConstructorNameUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InterfaceNameSuffixUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InterfaceNameSuffixUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="TraitNameSuffixUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="TraitNameSuffixUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UpperCaseConstantNameUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UpperCaseConstantNameUnitTest.php" role="test" />
       </dir>
       <dir name="PHP">
        <file baseinstalldir="PHP/CodeSniffer" name="BacktickOperatorUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="BacktickOperatorUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CharacterBeforePHPOpeningTagUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CharacterBeforePHPOpeningTagUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CharacterBeforePHPOpeningTagUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CharacterBeforePHPOpeningTagUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingPHPTagUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingPHPTagUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingPHPTagUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DeprecatedFunctionsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DeprecatedFunctionsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowAlternativePHPTagsUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowAlternativePHPTagsUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowAlternativePHPTagsUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowAlternativePHPTagsUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowAlternativePHPTagsUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowAlternativePHPTagsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowRequestSuperglobalUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowRequestSuperglobalUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortOpenTagUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortOpenTagUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortOpenTagUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortOpenTagUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortOpenTagUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowShortOpenTagUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DiscourageGotoUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DiscourageGotoUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForbiddenFunctionsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForbiddenFunctionsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseConstantUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseConstantUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseConstantUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseConstantUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseConstantUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseKeywordUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseKeywordUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseKeywordUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseTypeUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseTypeUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowerCaseTypeUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NoSilencedErrorsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NoSilencedErrorsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="RequireStrictTypesUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="RequireStrictTypesUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="RequireStrictTypesUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SAPIUsageUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SAPIUsageUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SyntaxUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SyntaxUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SyntaxUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UpperCaseConstantUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UpperCaseConstantUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UpperCaseConstantUnitTest.php" role="test" />
       </dir>
       <dir name="Strings">
        <file baseinstalldir="PHP/CodeSniffer" name="UnnecessaryStringConcatUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnnecessaryStringConcatUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnnecessaryStringConcatUnitTest.php" role="test" />
       </dir>
       <dir name="VersionControl">
        <file baseinstalldir="PHP/CodeSniffer" name="GitMergeConflictUnitTest.1.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GitMergeConflictUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GitMergeConflictUnitTest.2.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GitMergeConflictUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GitMergeConflictUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GitMergeConflictUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GitMergeConflictUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GitMergeConflictUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GitMergeConflictUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GitMergeConflictUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GitMergeConflictUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SubversionPropertiesUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SubversionPropertiesUnitTest.php" role="test" />
       </dir>
       <dir name="WhiteSpace">
        <file baseinstalldir="PHP/CodeSniffer" name="ArbitraryParenthesesSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArbitraryParenthesesSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArbitraryParenthesesSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentUnitTest.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentUnitTest.3.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSpaceIndentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentUnitTest.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentUnitTest.3.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowTabIndentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncrementDecrementSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncrementDecrementSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncrementDecrementSpacingUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncrementDecrementSpacingUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncrementDecrementSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LanguageConstructSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LanguageConstructSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LanguageConstructSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentUnitTest.1.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentUnitTest.1.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentUnitTest.3.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpreadOperatorSpacingAfterUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpreadOperatorSpacingAfterUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SpreadOperatorSpacingAfterUnitTest.php" role="test" />
       </dir>
      </dir>
      <file baseinstalldir="PHP/CodeSniffer" name="ruleset.xml" role="php" />
     </dir>
     <dir name="MySource">
      <dir name="Sniffs">
       <dir name="Channels">
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSelfActionsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncludeOwnSystemSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncludeSystemSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnusedSystemSniff.php" role="php" />
       </dir>
       <dir name="Commenting">
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentSniff.php" role="php" />
       </dir>
       <dir name="CSS">
        <file baseinstalldir="PHP/CodeSniffer" name="BrowserSpecificStylesSniff.php" role="php" />
       </dir>
       <dir name="Debug">
        <file baseinstalldir="PHP/CodeSniffer" name="DebugCodeSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FirebugConsoleSniff.php" role="php" />
       </dir>
       <dir name="Objects">
        <file baseinstalldir="PHP/CodeSniffer" name="AssignThisSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="CreateWidgetTypeCallbackSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowNewWidgetSniff.php" role="php" />
       </dir>
       <dir name="PHP">
        <file baseinstalldir="PHP/CodeSniffer" name="AjaxNullComparisonSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EvalObjectFactorySniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="GetRequestDataSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ReturnFunctionValueSniff.php" role="php" />
       </dir>
       <dir name="Strings">
        <file baseinstalldir="PHP/CodeSniffer" name="JoinStringsSniff.php" role="php" />
       </dir>
      </dir>
      <dir name="Tests">
       <dir name="Channels">
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSelfActionsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSelfActionsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncludeSystemUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncludeSystemUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnusedSystemUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UnusedSystemUnitTest.php" role="test" />
       </dir>
       <dir name="Commenting">
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentUnitTest.php" role="test" />
       </dir>
       <dir name="CSS">
        <file baseinstalldir="PHP/CodeSniffer" name="BrowserSpecificStylesUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="BrowserSpecificStylesUnitTest.php" role="test" />
       </dir>
       <dir name="Debug">
        <file baseinstalldir="PHP/CodeSniffer" name="DebugCodeUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DebugCodeUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FirebugConsoleUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FirebugConsoleUnitTest.php" role="test" />
       </dir>
       <dir name="Objects">
        <file baseinstalldir="PHP/CodeSniffer" name="AssignThisUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="AssignThisUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CreateWidgetTypeCallbackUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CreateWidgetTypeCallbackUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowNewWidgetUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowNewWidgetUnitTest.php" role="test" />
       </dir>
       <dir name="PHP">
        <file baseinstalldir="PHP/CodeSniffer" name="AjaxNullComparisonUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="AjaxNullComparisonUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EvalObjectFactoryUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EvalObjectFactoryUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GetRequestDataUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GetRequestDataUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ReturnFunctionValueUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ReturnFunctionValueUnitTest.php" role="test" />
       </dir>
       <dir name="Strings">
        <file baseinstalldir="PHP/CodeSniffer" name="JoinStringsUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="JoinStringsUnitTest.php" role="test" />
       </dir>
      </dir>
      <file baseinstalldir="PHP/CodeSniffer" name="ruleset.xml" role="php" />
     </dir>
     <dir name="PEAR">
      <dir name="Docs">
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationStandard.xml" role="php" />
       </dir>
       <dir name="Commenting">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassCommentStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineCommentStandard.xml" role="php" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="ControlSignatureStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineConditionStandard.xml" role="php" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="IncludingFileStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LineLengthStandard.xml" role="php" />
       </dir>
       <dir name="Formatting">
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineAssignmentStandard.xml" role="php" />
       </dir>
       <dir name="Functions">
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallSignatureStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidDefaultValueStandard.xml" role="php" />
       </dir>
       <dir name="NamingConventions">
        <file baseinstalldir="PHP/CodeSniffer" name="ValidClassNameStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidFunctionNameStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidVariableNameStandard.xml" role="php" />
       </dir>
       <dir name="WhiteSpace">
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeClosingBraceStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectOperatorIndentStandard.xml" role="php" />
       </dir>
      </dir>
      <dir name="Sniffs">
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationSniff.php" role="php" />
       </dir>
       <dir name="Commenting">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineCommentSniff.php" role="php" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="ControlSignatureSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineConditionSniff.php" role="php" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="IncludingFileSniff.php" role="php" />
       </dir>
       <dir name="Formatting">
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineAssignmentSniff.php" role="php" />
       </dir>
       <dir name="Functions">
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallSignatureSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidDefaultValueSniff.php" role="php" />
       </dir>
       <dir name="NamingConventions">
        <file baseinstalldir="PHP/CodeSniffer" name="ValidClassNameSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidFunctionNameSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidVariableNameSniff.php" role="php" />
       </dir>
       <dir name="WhiteSpace">
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectOperatorIndentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeClosingBraceSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentSniff.php" role="php" />
       </dir>
      </dir>
      <dir name="Tests">
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.php" role="test" />
       </dir>
       <dir name="Commenting">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineCommentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineCommentUnitTest.php" role="test" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="ControlSignatureUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlSignatureUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineConditionUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineConditionUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineConditionUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineConditionUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineConditionUnitTest.php" role="test" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="IncludingFileUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncludingFileUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncludingFileUnitTest.php" role="test" />
       </dir>
       <dir name="Formatting">
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineAssignmentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineAssignmentUnitTest.php" role="test" />
       </dir>
       <dir name="Functions">
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallSignatureUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallSignatureUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallSignatureUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallSignatureUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallSignatureUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidDefaultValueUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidDefaultValueUnitTest.php" role="test" />
       </dir>
       <dir name="NamingConventions">
        <file baseinstalldir="PHP/CodeSniffer" name="ValidClassNameUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidClassNameUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidFunctionNameUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidFunctionNameUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidVariableNameUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidVariableNameUnitTest.php" role="test" />
       </dir>
       <dir name="WhiteSpace">
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectOperatorIndentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectOperatorIndentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectOperatorIndentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeClosingBraceUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeClosingBraceUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeClosingBraceUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeIndentUnitTest.php" role="test" />
       </dir>
      </dir>
      <file baseinstalldir="PHP/CodeSniffer" name="ruleset.xml" role="php" />
     </dir>
     <dir name="PSR1">
      <dir name="Docs">
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationStandard.xml" role="php" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsStandard.xml" role="php" />
       </dir>
       <dir name="Methods">
        <file baseinstalldir="PHP/CodeSniffer" name="CamelCapsMethodNameStandard.xml" role="php" />
       </dir>
      </dir>
      <dir name="Sniffs">
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationSniff.php" role="php" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsSniff.php" role="php" />
       </dir>
       <dir name="Methods">
        <file baseinstalldir="PHP/CodeSniffer" name="CamelCapsMethodNameSniff.php" role="php" />
       </dir>
      </dir>
      <dir name="Tests">
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.php" role="test" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.8.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.9.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.10.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.11.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.12.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.13.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.14.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.15.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.16.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.php" role="test" />
       </dir>
       <dir name="Methods">
        <file baseinstalldir="PHP/CodeSniffer" name="CamelCapsMethodNameUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CamelCapsMethodNameUnitTest.php" role="test" />
       </dir>
      </dir>
      <file baseinstalldir="PHP/CodeSniffer" name="ruleset.xml" role="php" />
     </dir>
     <dir name="PSR12">
      <dir name="Docs">
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassInstantiationStandard.xml" role="php" />
       </dir>
       <dir name="Functions">
        <file baseinstalldir="PHP/CodeSniffer" name="NullableTypeDeclarationStandard.xml" role="php" />
       </dir>
       <dir name="Keywords">
        <file baseinstalldir="PHP/CodeSniffer" name="ShortFormTypeKeywordsStandard.xml" role="php" />
       </dir>
       <dir name="Namespaces">
        <file baseinstalldir="PHP/CodeSniffer" name="CompoundNamespaceDepthStandard.xml" role="php" />
       </dir>
       <dir name="Operators">
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorSpacingStandard.xml" role="php" />
       </dir>
      </dir>
      <dir name="Sniffs">
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="AnonClassDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassInstantiationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingBraceSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningBraceSpaceSniff.php" role="php" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="BooleanOperatorPlacementSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingSniff.php" role="php" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="DeclareStatementSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ImportStatementSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpenTagSniff.php" role="php" />
       </dir>
       <dir name="Functions">
        <file baseinstalldir="PHP/CodeSniffer" name="NullableTypeDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ReturnTypeDeclarationSniff.php" role="php" />
       </dir>
       <dir name="Keywords">
        <file baseinstalldir="PHP/CodeSniffer" name="ShortFormTypeKeywordsSniff.php" role="php" />
       </dir>
       <dir name="Namespaces">
        <file baseinstalldir="PHP/CodeSniffer" name="CompoundNamespaceDepthSniff.php" role="php" />
       </dir>
       <dir name="Operators">
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorSpacingSniff.php" role="php" />
       </dir>
       <dir name="Properties">
        <file baseinstalldir="PHP/CodeSniffer" name="ConstantVisibilitySniff.php" role="php" />
       </dir>
       <dir name="Traits">
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationSniff.php" role="php" />
       </dir>
      </dir>
      <dir name="Tests">
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="AnonClassDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="AnonClassDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="AnonClassDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassInstantiationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassInstantiationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassInstantiationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingBraceUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingBraceUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningBraceSpaceUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningBraceSpaceUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpeningBraceSpaceUnitTest.php" role="test" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="BooleanOperatorPlacementUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="BooleanOperatorPlacementUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="BooleanOperatorPlacementUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingUnitTest.php" role="test" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="DeclareStatementUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DeclareStatementUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DeclareStatementUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.4.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.7.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.8.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.9.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.10.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.10.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.11.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.11.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.12.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.12.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.13.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.14.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.15.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.16.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.17.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileHeaderUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ImportStatementUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ImportStatementUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ImportStatementUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpenTagUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpenTagUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpenTagUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpenTagUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpenTagUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpenTagUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpenTagUnitTest.php" role="test" />
       </dir>
       <dir name="Functions">
        <file baseinstalldir="PHP/CodeSniffer" name="NullableTypeDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NullableTypeDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NullableTypeDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ReturnTypeDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ReturnTypeDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ReturnTypeDeclarationUnitTest.php" role="test" />
       </dir>
       <dir name="Keywords">
        <file baseinstalldir="PHP/CodeSniffer" name="ShortFormTypeKeywordsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ShortFormTypeKeywordsUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ShortFormTypeKeywordsUnitTest.php" role="test" />
       </dir>
       <dir name="Namespaces">
        <file baseinstalldir="PHP/CodeSniffer" name="CompoundNamespaceDepthUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CompoundNamespaceDepthUnitTest.php" role="test" />
       </dir>
       <dir name="Operators">
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorSpacingUnitTest.php" role="test" />
       </dir>
       <dir name="Properties">
        <file baseinstalldir="PHP/CodeSniffer" name="ConstantVisibilityUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ConstantVisibilityUnitTest.php" role="test" />
       </dir>
       <dir name="Traits">
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.php" role="test" />
       </dir>
      </dir>
      <file baseinstalldir="PHP/CodeSniffer" name="ruleset.xml" role="php" />
     </dir>
     <dir name="PSR2">
      <dir name="Docs">
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="PropertyDeclarationStandard.xml" role="php" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ElseIfDeclarationStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SwitchDeclarationStandard.xml" role="php" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineStandard.xml" role="php" />
       </dir>
       <dir name="Methods">
        <file baseinstalldir="PHP/CodeSniffer" name="MethodDeclarationStandard.xml" role="php" />
       </dir>
       <dir name="Namespaces">
        <file baseinstalldir="PHP/CodeSniffer" name="NamespaceDeclarationStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationStandard.xml" role="php" />
       </dir>
      </dir>
      <dir name="Sniffs">
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="PropertyDeclarationSniff.php" role="php" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ElseIfDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SwitchDeclarationSniff.php" role="php" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineSniff.php" role="php" />
       </dir>
       <dir name="Methods">
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallSignatureSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionClosingBraceSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="MethodDeclarationSniff.php" role="php" />
       </dir>
       <dir name="Namespaces">
        <file baseinstalldir="PHP/CodeSniffer" name="NamespaceDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationSniff.php" role="php" />
       </dir>
      </dir>
      <dir name="Tests">
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="PropertyDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="PropertyDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="PropertyDeclarationUnitTest.php" role="test" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ElseIfDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ElseIfDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ElseIfDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SwitchDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SwitchDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SwitchDeclarationUnitTest.php" role="test" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.4.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.5.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.6.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.7.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.3.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.6.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.7.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.8.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.9.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.9.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.10.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.10.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.11.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.11.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.12.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.12.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.13.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.13.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.14.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EndFileNewlineUnitTest.php" role="test" />
       </dir>
       <dir name="Methods">
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallSignatureUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallSignatureUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCallSignatureUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionClosingBraceUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionClosingBraceUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionClosingBraceUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MethodDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MethodDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MethodDeclarationUnitTest.php" role="test" />
       </dir>
       <dir name="Namespaces">
        <file baseinstalldir="PHP/CodeSniffer" name="NamespaceDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NamespaceDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NamespaceDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.3.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.5.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.8.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.9.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.10.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.10.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.11.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.11.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.12.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.12.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.13.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.13.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.14.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.14.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.15.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.16.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.16.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="UseDeclarationUnitTest.17.inc" role="test" />
       </dir>
      </dir>
      <file baseinstalldir="PHP/CodeSniffer" name="ruleset.xml" role="php" />
     </dir>
     <dir name="Squiz">
      <dir name="Docs">
       <dir name="Arrays">
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayBracketSpacingStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayDeclarationStandard.xml" role="php" />
       </dir>
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseClassKeywordsStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SelfMemberReferenceStandard.xml" role="php" />
       </dir>
       <dir name="Commenting">
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentAlignmentStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentThrowTagStandard.xml" role="php" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="ForEachLoopDeclarationStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopDeclarationStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseDeclarationStandard.xml" role="php" />
       </dir>
       <dir name="Functions">
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDuplicateArgumentStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseFunctionKeywordsStandard.xml" role="php" />
       </dir>
       <dir name="Scope">
        <file baseinstalldir="PHP/CodeSniffer" name="StaticThisUsageStandard.xml" role="php" />
       </dir>
       <dir name="Strings">
        <file baseinstalldir="PHP/CodeSniffer" name="EchoedStringsStandard.xml" role="php" />
       </dir>
       <dir name="WhiteSpace">
        <file baseinstalldir="PHP/CodeSniffer" name="CastSpacingStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionOpeningBraceStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LanguageConstructSpacingStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectOperatorSpacingStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeKeywordSpacingStandard.xml" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SemicolonSpacingStandard.xml" role="php" />
       </dir>
      </dir>
      <dir name="Sniffs">
       <dir name="Arrays">
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayBracketSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayDeclarationSniff.php" role="php" />
       </dir>
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassFileNameSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicatePropertySniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseClassKeywordsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SelfMemberReferenceSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidClassNameSniff.php" role="php" />
       </dir>
       <dir name="Commenting">
        <file baseinstalldir="PHP/CodeSniffer" name="BlockCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingDeclarationCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentAlignmentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyCatchCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentThrowTagSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LongConditionClosingCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="PostStatementCommentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="VariableCommentSniff.php" role="php" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="ControlSignatureSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ElseIfDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForEachLoopDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineIfDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SwitchDeclarationSniff.php" role="php" />
       </dir>
       <dir name="CSS">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDefinitionClosingBraceSpaceSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDefinitionNameSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDefinitionOpeningBraceSpaceSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ColonSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ColourDefinitionSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowMultipleStyleDefinitionsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateClassDefinitionSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateStyleDefinitionSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyClassDefinitionSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyStyleDefinitionSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForbiddenStylesSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="IndentationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseStyleDefinitionSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="MissingColonSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="NamedColoursSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpacitySniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SemicolonSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ShorthandSizeSniff.php" role="php" />
       </dir>
       <dir name="Debug">
        <file baseinstalldir="PHP/CodeSniffer" name="JavaScriptLintSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="JSLintSniff.php" role="php" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="FileExtensionSniff.php" role="php" />
       </dir>
       <dir name="Formatting">
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorBracketSniff.php" role="php" />
       </dir>
       <dir name="Functions">
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationArgumentSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDuplicateArgumentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="GlobalFunctionSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseFunctionKeywordsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineFunctionDeclarationSniff.php" role="php" />
       </dir>
       <dir name="NamingConventions">
        <file baseinstalldir="PHP/CodeSniffer" name="ValidFunctionNameSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidVariableNameSniff.php" role="php" />
       </dir>
       <dir name="Objects">
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowObjectStringIndexSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectInstantiationSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectMemberCommaSniff.php" role="php" />
       </dir>
       <dir name="Operators">
        <file baseinstalldir="PHP/CodeSniffer" name="ComparisonOperatorUsageSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncrementDecrementUsageSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidLogicalOperatorsSniff.php" role="php" />
       </dir>
       <dir name="PHP">
        <file baseinstalldir="PHP/CodeSniffer" name="CommentedOutCodeSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowBooleanStatementSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowComparisonAssignmentSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowInlineIfSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowMultipleAssignmentsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSizeFunctionsInLoopsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DiscouragedFunctionsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmbeddedPhpSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EvalSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="GlobalKeywordSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="HeredocSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="InnerFunctionsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercasePHPFunctionsSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="NonExecutableCodeSniff.php" role="php" />
       </dir>
       <dir name="Scope">
        <file baseinstalldir="PHP/CodeSniffer" name="MemberVarScopeSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="MethodScopeSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="StaticThisUsageSniff.php" role="php" />
       </dir>
       <dir name="Strings">
        <file baseinstalldir="PHP/CodeSniffer" name="ConcatenationSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="DoubleQuoteUsageSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="EchoedStringsSniff.php" role="php" />
       </dir>
       <dir name="WhiteSpace">
        <file baseinstalldir="PHP/CodeSniffer" name="CastSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionClosingBraceSpaceSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionOpeningBraceSpaceSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LanguageConstructSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="LogicalOperatorSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="MemberVarSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectOperatorSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="PropertyLabelSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeClosingBraceSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeKeywordSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SemicolonSpacingSniff.php" role="php" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceSniff.php" role="php" />
       </dir>
      </dir>
      <dir name="Tests">
       <dir name="Arrays">
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayBracketSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayBracketSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayBracketSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayDeclarationUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayDeclarationUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayDeclarationUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayDeclarationUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ArrayDeclarationUnitTest.php" role="test" />
       </dir>
       <dir name="Classes">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassFileNameUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassFileNameUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicatePropertyUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicatePropertyUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseClassKeywordsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseClassKeywordsUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseClassKeywordsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SelfMemberReferenceUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SelfMemberReferenceUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SelfMemberReferenceUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidClassNameUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidClassNameUnitTest.php" role="test" />
       </dir>
       <dir name="Commenting">
        <file baseinstalldir="PHP/CodeSniffer" name="BlockCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="BlockCommentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="BlockCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingDeclarationCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingDeclarationCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentAlignmentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentAlignmentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentAlignmentUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentAlignmentUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DocCommentAlignmentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyCatchCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyCatchCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.8.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.9.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.1.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.1.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.2.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentThrowTagUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentThrowTagUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineCommentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineCommentUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineCommentUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LongConditionClosingCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LongConditionClosingCommentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LongConditionClosingCommentUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LongConditionClosingCommentUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LongConditionClosingCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="PostStatementCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="PostStatementCommentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="PostStatementCommentUnitTest.1.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="PostStatementCommentUnitTest.1.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="PostStatementCommentUnitTest.2.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="PostStatementCommentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="VariableCommentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="VariableCommentUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="VariableCommentUnitTest.php" role="test" />
       </dir>
       <dir name="ControlStructures">
        <file baseinstalldir="PHP/CodeSniffer" name="ControlSignatureUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlSignatureUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlSignatureUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlSignatureUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlSignatureUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ElseIfDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ElseIfDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ElseIfDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForEachLoopDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForEachLoopDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForEachLoopDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopDeclarationUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopDeclarationUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForLoopDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineIfDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineIfDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InlineIfDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SwitchDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SwitchDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SwitchDeclarationUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SwitchDeclarationUnitTest.php" role="test" />
       </dir>
       <dir name="CSS">
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDefinitionClosingBraceSpaceUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDefinitionClosingBraceSpaceUnitTest.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDefinitionClosingBraceSpaceUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDefinitionNameSpacingUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDefinitionNameSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDefinitionOpeningBraceSpaceUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDefinitionOpeningBraceSpaceUnitTest.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClassDefinitionOpeningBraceSpaceUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ColonSpacingUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ColonSpacingUnitTest.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ColonSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ColourDefinitionUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ColourDefinitionUnitTest.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ColourDefinitionUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowMultipleStyleDefinitionsUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowMultipleStyleDefinitionsUnitTest.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowMultipleStyleDefinitionsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateClassDefinitionUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateClassDefinitionUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateStyleDefinitionUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DuplicateStyleDefinitionUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyClassDefinitionUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyClassDefinitionUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyStyleDefinitionUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmptyStyleDefinitionUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForbiddenStylesUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForbiddenStylesUnitTest.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ForbiddenStylesUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IndentationUnitTest.1.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IndentationUnitTest.1.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IndentationUnitTest.2.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IndentationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseStyleDefinitionUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseStyleDefinitionUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MissingColonUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MissingColonUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NamedColoursUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NamedColoursUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpacityUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpacityUnitTest.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OpacityUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SemicolonSpacingUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SemicolonSpacingUnitTest.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SemicolonSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ShorthandSizeUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ShorthandSizeUnitTest.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ShorthandSizeUnitTest.php" role="test" />
       </dir>
       <dir name="Debug">
        <file baseinstalldir="PHP/CodeSniffer" name="JavaScriptLintUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="JavaScriptLintUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="JSLintUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="JSLintUnitTest.php" role="test" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="FileExtensionUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileExtensionUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileExtensionUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileExtensionUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileExtensionUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FileExtensionUnitTest.php" role="test" />
       </dir>
       <dir name="Formatting">
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorBracketUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorBracketUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorBracketUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorBracketUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorBracketUnitTest.php" role="test" />
       </dir>
       <dir name="Functions">
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationArgumentSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationArgumentSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationArgumentSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDeclarationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDuplicateArgumentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionDuplicateArgumentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GlobalFunctionUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GlobalFunctionUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseFunctionKeywordsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseFunctionKeywordsUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercaseFunctionKeywordsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineFunctionDeclarationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineFunctionDeclarationUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineFunctionDeclarationUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineFunctionDeclarationUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MultiLineFunctionDeclarationUnitTest.php" role="test" />
       </dir>
       <dir name="NamingConventions">
        <file baseinstalldir="PHP/CodeSniffer" name="ValidFunctionNameUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidFunctionNameUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidVariableNameUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidVariableNameUnitTest.php" role="test" />
       </dir>
       <dir name="Objects">
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowObjectStringIndexUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowObjectStringIndexUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectInstantiationUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectInstantiationUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectMemberCommaUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectMemberCommaUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectMemberCommaUnitTest.php" role="test" />
       </dir>
       <dir name="Operators">
        <file baseinstalldir="PHP/CodeSniffer" name="ComparisonOperatorUsageUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ComparisonOperatorUsageUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ComparisonOperatorUsageUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncrementDecrementUsageUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="IncrementDecrementUsageUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidLogicalOperatorsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidLogicalOperatorsUnitTest.php" role="test" />
       </dir>
       <dir name="PHP">
        <file baseinstalldir="PHP/CodeSniffer" name="CommentedOutCodeUnitTest.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CommentedOutCodeUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CommentedOutCodeUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowBooleanStatementUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowBooleanStatementUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowComparisonAssignmentUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowComparisonAssignmentUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowInlineIfUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowInlineIfUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowInlineIfUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowMultipleAssignmentsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowMultipleAssignmentsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSizeFunctionsInLoopsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSizeFunctionsInLoopsUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DisallowSizeFunctionsInLoopsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DiscouragedFunctionsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DiscouragedFunctionsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmbeddedPhpUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmbeddedPhpUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EmbeddedPhpUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EvalUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EvalUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GlobalKeywordUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="GlobalKeywordUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="HeredocUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="HeredocUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InnerFunctionsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="InnerFunctionsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercasePHPFunctionsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercasePHPFunctionsUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LowercasePHPFunctionsUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NonExecutableCodeUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NonExecutableCodeUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="NonExecutableCodeUnitTest.php" role="test" />
       </dir>
       <dir name="Scope">
        <file baseinstalldir="PHP/CodeSniffer" name="MemberVarScopeUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MemberVarScopeUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MethodScopeUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MethodScopeUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="StaticThisUsageUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="StaticThisUsageUnitTest.php" role="test" />
       </dir>
       <dir name="Strings">
        <file baseinstalldir="PHP/CodeSniffer" name="ConcatenationSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ConcatenationSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ConcatenationSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DoubleQuoteUsageUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DoubleQuoteUsageUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="DoubleQuoteUsageUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EchoedStringsUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EchoedStringsUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="EchoedStringsUnitTest.php" role="test" />
       </dir>
       <dir name="WhiteSpace">
        <file baseinstalldir="PHP/CodeSniffer" name="CastSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CastSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CastSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ControlStructureSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionClosingBraceSpaceUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionClosingBraceSpaceUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionClosingBraceSpaceUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionClosingBraceSpaceUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionClosingBraceSpaceUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionOpeningBraceSpaceUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionOpeningBraceSpaceUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionOpeningBraceSpaceUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionOpeningBraceSpaceUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionOpeningBraceSpaceUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.3.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.5.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.6.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="FunctionSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LanguageConstructSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LanguageConstructSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LanguageConstructSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LogicalOperatorSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LogicalOperatorSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LogicalOperatorSpacingUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LogicalOperatorSpacingUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="LogicalOperatorSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MemberVarSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MemberVarSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="MemberVarSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectOperatorSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectOperatorSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ObjectOperatorSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorSpacingUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorSpacingUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="OperatorSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="PropertyLabelSpacingUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="PropertyLabelSpacingUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="PropertyLabelSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeClosingBraceUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeClosingBraceUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeClosingBraceUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeKeywordSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeKeywordSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ScopeKeywordSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SemicolonSpacingUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SemicolonSpacingUnitTest.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SemicolonSpacingUnitTest.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SemicolonSpacingUnitTest.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SemicolonSpacingUnitTest.php" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.2.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.3.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.4.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.5.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.1.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.1.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.1.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.1.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.2.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.2.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.2.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.2.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.3.css" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.3.css.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.3.js" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.3.js.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="SuperfluousWhitespaceUnitTest.php" role="test" />
       </dir>
      </dir>
      <file baseinstalldir="PHP/CodeSniffer" name="ruleset.xml" role="php" />
     </dir>
     <dir name="Zend">
      <dir name="Docs">
       <dir name="Debug">
        <file baseinstalldir="PHP/CodeSniffer" name="CodeAnalyzerStandard.xml" role="php" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagStandard.xml" role="php" />
       </dir>
       <dir name="NamingConventions">
        <file baseinstalldir="PHP/CodeSniffer" name="ValidVariableNameStandard.xml" role="php" />
       </dir>
      </dir>
      <dir name="Sniffs">
       <dir name="Debug">
        <file baseinstalldir="PHP/CodeSniffer" name="CodeAnalyzerSniff.php" role="php" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagSniff.php" role="php" />
       </dir>
       <dir name="NamingConventions">
        <file baseinstalldir="PHP/CodeSniffer" name="ValidVariableNameSniff.php" role="php" />
       </dir>
      </dir>
      <dir name="Tests">
       <dir name="Debug">
        <file baseinstalldir="PHP/CodeSniffer" name="CodeAnalyzerUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="CodeAnalyzerUnitTest.php" role="test" />
       </dir>
       <dir name="Files">
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.1.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.1.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.2.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.3.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.3.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.4.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.4.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.5.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.5.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.6.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.6.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.7.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.7.inc.fixed" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ClosingTagUnitTest.php" role="test" />
       </dir>
       <dir name="NamingConventions">
        <file baseinstalldir="PHP/CodeSniffer" name="ValidVariableNameUnitTest.inc" role="test" />
        <file baseinstalldir="PHP/CodeSniffer" name="ValidVariableNameUnitTest.php" role="test" />
       </dir>
      </dir>
      <file baseinstalldir="PHP/CodeSniffer" name="ruleset.xml" role="php" />
     </dir>
    </dir>
    <dir name="Tokenizers">
     <file baseinstalldir="PHP/CodeSniffer" name="Comment.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="CSS.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="JS.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="PHP.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Tokenizer.php" role="php" />
    </dir>
    <dir name="Util">
     <file baseinstalldir="PHP/CodeSniffer" name="Cache.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Common.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Standards.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Timing.php" role="php" />
     <file baseinstalldir="PHP/CodeSniffer" name="Tokens.php" role="php" />
    </dir>
   </dir>
  </dir>
 </contents>
 <dependencies>
  <required>
   <php>
    <min>5.4.0</min>
   </php>
   <pearinstaller>
    <min>1.4.0b1</min>
   </pearinstaller>
   <extension>
    <name>tokenizer</name>
   </extension>
   <extension>
    <name>xmlwriter</name>
   </extension>
   <extension>
    <name>simplexml</name>
   </extension>
  </required>
 </dependencies>
 <phprelease>
  <installconditions>
   <os>
    <name>windows</name>
   </os>
  </installconditions>
  <filelist>
   <install as="phpcs" name="bin/phpcs" />
   <install as="phpcbf" name="bin/phpcbf" />
   <install as="phpcs.bat" name="bin/phpcs.bat" />
   <install as="phpcbf.bat" name="bin/phpcbf.bat" />
   <install as="README" name="README.md" />
   <install as="CONTRIBUTING" name="CONTRIBUTING.md" />
   <install as="LICENCE" name="licence.txt" />
   <install as="phpunit.xml" name="phpunit.xml.dist" />
   <install as="AllTests.php" name="tests/AllTests.php" />
   <install as="FileList.php" name="tests/FileList.php" />
   <install as="TestSuite.php" name="tests/TestSuite.php" />
   <install as="TestSuite7.php" name="tests/TestSuite7.php" />
   <install as="tests/bootstrap.php" name="tests/bootstrap.php" />
   <install as="CodeSniffer/Core/AbstractMethodUnitTest.php" name="tests/Core/AbstractMethodUnitTest.php" />
   <install as="CodeSniffer/Core/AllTests.php" name="tests/Core/AllTests.php" />
   <install as="CodeSniffer/Core/IsCamelCapsTest.php" name="tests/Core/IsCamelCapsTest.php" />
   <install as="CodeSniffer/Core/ErrorSuppressionTest.php" name="tests/Core/ErrorSuppressionTest.php" />
   <install as="CodeSniffer/Core/Autoloader/DetermineLoadedClassTest.php" name="tests/Core/Autoloader/DetermineLoadedClassTest.php" />
   <install as="CodeSniffer/Core/Autoloader/TestFiles/A.inc" name="tests/Core/Autoloader/TestFiles/A.inc" />
   <install as="CodeSniffer/Core/Autoloader/TestFiles/B.inc" name="tests/Core/Autoloader/TestFiles/B.inc" />
   <install as="CodeSniffer/Core/Autoloader/TestFiles/C.inc" name="tests/Core/Autoloader/TestFiles/C.inc" />
   <install as="CodeSniffer/Core/Autoloader/TestFiles/Sub/C.inc" name="tests/Core/Autoloader/TestFiles/Sub/C.inc" />
   <install as="CodeSniffer/Core/File/FindEndOfStatementTest.php" name="tests/Core/File/FindEndOfStatementTest.php" />
   <install as="CodeSniffer/Core/File/FindEndOfStatementTest.inc" name="tests/Core/File/FindEndOfStatementTest.inc" />
   <install as="CodeSniffer/Core/File/FindExtendedClassNameTest.php" name="tests/Core/File/FindExtendedClassNameTest.php" />
   <install as="CodeSniffer/Core/File/FindExtendedClassNameTest.inc" name="tests/Core/File/FindExtendedClassNameTest.inc" />
   <install as="CodeSniffer/Core/File/FindImplementedInterfaceNamesTest.php" name="tests/Core/File/FindImplementedInterfaceNamesTest.php" />
   <install as="CodeSniffer/Core/File/FindImplementedInterfaceNamesTest.inc" name="tests/Core/File/FindImplementedInterfaceNamesTest.inc" />
   <install as="CodeSniffer/Core/File/FindStartOfStatementTest.php" name="tests/Core/File/FindStartOfStatementTest.php" />
   <install as="CodeSniffer/Core/File/FindStartOfStatementTest.inc" name="tests/Core/File/FindStartOfStatementTest.inc" />
   <install as="CodeSniffer/Core/File/GetMemberPropertiesTest.php" name="tests/Core/File/GetMemberPropertiesTest.php" />
   <install as="CodeSniffer/Core/File/GetMemberPropertiesTest.inc" name="tests/Core/File/GetMemberPropertiesTest.inc" />
   <install as="CodeSniffer/Core/File/GetMethodParametersTest.php" name="tests/Core/File/GetMethodParametersTest.php" />
   <install as="CodeSniffer/Core/File/GetMethodParametersTest.inc" name="tests/Core/File/GetMethodParametersTest.inc" />
   <install as="CodeSniffer/Core/File/GetMethodPropertiesTest.php" name="tests/Core/File/GetMethodPropertiesTest.php" />
   <install as="CodeSniffer/Core/File/GetMethodPropertiesTest.inc" name="tests/Core/File/GetMethodPropertiesTest.inc" />
   <install as="CodeSniffer/Core/File/IsReferenceTest.php" name="tests/Core/File/IsReferenceTest.php" />
   <install as="CodeSniffer/Core/File/IsReferenceTest.inc" name="tests/Core/File/IsReferenceTest.inc" />
   <install as="CodeSniffer/Core/Filters/Filter/AcceptTest.php" name="tests/Core/Filters/Filter/AcceptTest.php" />
   <install as="CodeSniffer/Core/Filters/Filter/AcceptTest.xml" name="tests/Core/Filters/Filter/AcceptTest.xml" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionTest.php" name="tests/Core/Ruleset/RuleInclusionTest.php" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionTest.xml" name="tests/Core/Ruleset/RuleInclusionTest.xml" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionTest-include.xml" name="tests/Core/Ruleset/RuleInclusionTest-include.xml" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.php" name="tests/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.php" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.xml" name="tests/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.xml" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.php" name="tests/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.php" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.xml" name="tests/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.xml" />
   <install as="CodeSniffer/Core/Sniffs/AbstractArraySniffTest.inc" name="tests/Core/Sniffs/AbstractArraySniffTest.inc" />
   <install as="CodeSniffer/Core/Sniffs/AbstractArraySniffTest.php" name="tests/Core/Sniffs/AbstractArraySniffTest.php" />
   <install as="CodeSniffer/Core/Sniffs/AbstractArraySniffTestable.php" name="tests/Core/Sniffs/AbstractArraySniffTestable.php" />
   <install as="CodeSniffer/Core/Tokenizer/AnonClassParenthesisOwnerTest.php" name="tests/Core/Tokenizer/AnonClassParenthesisOwnerTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/AnonClassParenthesisOwnerTest.inc" name="tests/Core/Tokenizer/AnonClassParenthesisOwnerTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/ArrayKeywordTest.php" name="tests/Core/Tokenizer/ArrayKeywordTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/ArrayKeywordTest.inc" name="tests/Core/Tokenizer/ArrayKeywordTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/AttributesTest.php" name="tests/Core/Tokenizer/AttributesTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/AttributesTest.inc" name="tests/Core/Tokenizer/AttributesTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillEnumTest.php" name="tests/Core/Tokenizer/BackfillEnumTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillEnumTest.inc" name="tests/Core/Tokenizer/BackfillEnumTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillExplicitOctalNotationTest.php" name="tests/Core/Tokenizer/BackfillExplicitOctalNotationTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillExplicitOctalNotationTest.inc" name="tests/Core/Tokenizer/BackfillExplicitOctalNotationTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillFnTokenTest.php" name="tests/Core/Tokenizer/BackfillFnTokenTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillFnTokenTest.inc" name="tests/Core/Tokenizer/BackfillFnTokenTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillMatchTokenTest.php" name="tests/Core/Tokenizer/BackfillMatchTokenTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillMatchTokenTest.inc" name="tests/Core/Tokenizer/BackfillMatchTokenTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillNumericSeparatorTest.php" name="tests/Core/Tokenizer/BackfillNumericSeparatorTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillNumericSeparatorTest.inc" name="tests/Core/Tokenizer/BackfillNumericSeparatorTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BitwiseOrTest.php" name="tests/Core/Tokenizer/BitwiseOrTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BitwiseOrTest.inc" name="tests/Core/Tokenizer/BitwiseOrTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/ContextSensitiveKeywordsTest.php" name="tests/Core/Tokenizer/ContextSensitiveKeywordsTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/ContextSensitiveKeywordsTest.inc" name="tests/Core/Tokenizer/ContextSensitiveKeywordsTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/DefaultKeywordTest.php" name="tests/Core/Tokenizer/DefaultKeywordTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/DefaultKeywordTest.inc" name="tests/Core/Tokenizer/DefaultKeywordTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/DoubleArrowTest.php" name="tests/Core/Tokenizer/DoubleArrowTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/DoubleArrowTest.inc" name="tests/Core/Tokenizer/DoubleArrowTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/DoubleQuotedStringTest.php" name="tests/Core/Tokenizer/DoubleQuotedStringTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/DoubleQuotedStringTest.inc" name="tests/Core/Tokenizer/DoubleQuotedStringTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/EnumCaseTest.php" name="tests/Core/Tokenizer/EnumCaseTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/EnumCaseTest.inc" name="tests/Core/Tokenizer/EnumCaseTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/FinallyTest.php" name="tests/Core/Tokenizer/FinallyTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/FinallyTest.inc" name="tests/Core/Tokenizer/FinallyTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/GotoLabelTest.php" name="tests/Core/Tokenizer/GotoLabelTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/GotoLabelTest.inc" name="tests/Core/Tokenizer/GotoLabelTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/HeredocNowdocCloserTest.php" name="tests/Core/Tokenizer/HeredocNowdocCloserTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/HeredocNowdocCloserTest.inc" name="tests/Core/Tokenizer/HeredocNowdocCloserTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/HeredocStringTest.php" name="tests/Core/Tokenizer/HeredocStringTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/HeredocStringTest.inc" name="tests/Core/Tokenizer/HeredocStringTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/NamedFunctionCallArgumentsTest.php" name="tests/Core/Tokenizer/NamedFunctionCallArgumentsTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/NamedFunctionCallArgumentsTest.inc" name="tests/Core/Tokenizer/NamedFunctionCallArgumentsTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/NullsafeObjectOperatorTest.php" name="tests/Core/Tokenizer/NullsafeObjectOperatorTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/NullsafeObjectOperatorTest.inc" name="tests/Core/Tokenizer/NullsafeObjectOperatorTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillReadonlyTest.php" name="tests/Core/Tokenizer/BackfillReadonlyTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillReadonlyTest.inc" name="tests/Core/Tokenizer/BackfillReadonlyTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.php" name="tests/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.inc" name="tests/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/ShortArrayTest.php" name="tests/Core/Tokenizer/ShortArrayTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/ShortArrayTest.inc" name="tests/Core/Tokenizer/ShortArrayTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/StableCommentWhitespaceTest.php" name="tests/Core/Tokenizer/StableCommentWhitespaceTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/StableCommentWhitespaceTest.inc" name="tests/Core/Tokenizer/StableCommentWhitespaceTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/StableCommentWhitespaceWinTest.php" name="tests/Core/Tokenizer/StableCommentWhitespaceWinTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/StableCommentWhitespaceWinTest.inc" name="tests/Core/Tokenizer/StableCommentWhitespaceWinTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/TypeIntersectionTest.php" name="tests/Core/Tokenizer/TypeIntersectionTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/TypeIntersectionTest.inc" name="tests/Core/Tokenizer/TypeIntersectionTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/UndoNamespacedNameSingleTokenTest.php" name="tests/Core/Tokenizer/UndoNamespacedNameSingleTokenTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/UndoNamespacedNameSingleTokenTest.inc" name="tests/Core/Tokenizer/UndoNamespacedNameSingleTokenTest.inc" />
   <install as="CodeSniffer/Standards/AllSniffs.php" name="tests/Standards/AllSniffs.php" />
   <install as="CodeSniffer/Standards/AbstractSniffUnitTest.php" name="tests/Standards/AbstractSniffUnitTest.php" />
  </filelist>
 </phprelease>
 <phprelease>
  <filelist>
   <install as="phpcs" name="bin/phpcs" />
   <install as="phpcbf" name="bin/phpcbf" />
   <install as="README" name="README.md" />
   <install as="CONTRIBUTING" name="CONTRIBUTING.md" />
   <install as="LICENCE" name="licence.txt" />
   <install as="phpunit.xml" name="phpunit.xml.dist" />
   <install as="tests/AllTests.php" name="tests/AllTests.php" />
   <install as="tests/bootstrap.php" name="tests/bootstrap.php" />
   <install as="tests/FileList.php" name="tests/FileList.php" />
   <install as="tests/TestSuite.php" name="tests/TestSuite.php" />
   <install as="tests/TestSuite7.php" name="tests/TestSuite7.php" />
   <install as="CodeSniffer/Core/AbstractMethodUnitTest.php" name="tests/Core/AbstractMethodUnitTest.php" />
   <install as="CodeSniffer/Core/AllTests.php" name="tests/Core/AllTests.php" />
   <install as="CodeSniffer/Core/IsCamelCapsTest.php" name="tests/Core/IsCamelCapsTest.php" />
   <install as="CodeSniffer/Core/ErrorSuppressionTest.php" name="tests/Core/ErrorSuppressionTest.php" />
   <install as="CodeSniffer/Core/Autoloader/DetermineLoadedClassTest.php" name="tests/Core/Autoloader/DetermineLoadedClassTest.php" />
   <install as="CodeSniffer/Core/Autoloader/TestFiles/A.inc" name="tests/Core/Autoloader/TestFiles/A.inc" />
   <install as="CodeSniffer/Core/Autoloader/TestFiles/B.inc" name="tests/Core/Autoloader/TestFiles/B.inc" />
   <install as="CodeSniffer/Core/Autoloader/TestFiles/C.inc" name="tests/Core/Autoloader/TestFiles/C.inc" />
   <install as="CodeSniffer/Core/Autoloader/TestFiles/Sub/C.inc" name="tests/Core/Autoloader/TestFiles/Sub/C.inc" />
   <install as="CodeSniffer/Core/File/FindEndOfStatementTest.php" name="tests/Core/File/FindEndOfStatementTest.php" />
   <install as="CodeSniffer/Core/File/FindEndOfStatementTest.inc" name="tests/Core/File/FindEndOfStatementTest.inc" />
   <install as="CodeSniffer/Core/File/FindExtendedClassNameTest.php" name="tests/Core/File/FindExtendedClassNameTest.php" />
   <install as="CodeSniffer/Core/File/FindExtendedClassNameTest.inc" name="tests/Core/File/FindExtendedClassNameTest.inc" />
   <install as="CodeSniffer/Core/File/FindImplementedInterfaceNamesTest.php" name="tests/Core/File/FindImplementedInterfaceNamesTest.php" />
   <install as="CodeSniffer/Core/File/FindImplementedInterfaceNamesTest.inc" name="tests/Core/File/FindImplementedInterfaceNamesTest.inc" />
   <install as="CodeSniffer/Core/File/FindStartOfStatementTest.php" name="tests/Core/File/FindStartOfStatementTest.php" />
   <install as="CodeSniffer/Core/File/FindStartOfStatementTest.inc" name="tests/Core/File/FindStartOfStatementTest.inc" />
   <install as="CodeSniffer/Core/File/GetMemberPropertiesTest.php" name="tests/Core/File/GetMemberPropertiesTest.php" />
   <install as="CodeSniffer/Core/File/GetMemberPropertiesTest.inc" name="tests/Core/File/GetMemberPropertiesTest.inc" />
   <install as="CodeSniffer/Core/File/GetMethodParametersTest.php" name="tests/Core/File/GetMethodParametersTest.php" />
   <install as="CodeSniffer/Core/File/GetMethodParametersTest.inc" name="tests/Core/File/GetMethodParametersTest.inc" />
   <install as="CodeSniffer/Core/File/GetMethodPropertiesTest.php" name="tests/Core/File/GetMethodPropertiesTest.php" />
   <install as="CodeSniffer/Core/File/GetMethodPropertiesTest.inc" name="tests/Core/File/GetMethodPropertiesTest.inc" />
   <install as="CodeSniffer/Core/File/IsReferenceTest.php" name="tests/Core/File/IsReferenceTest.php" />
   <install as="CodeSniffer/Core/File/IsReferenceTest.inc" name="tests/Core/File/IsReferenceTest.inc" />
   <install as="CodeSniffer/Core/Filters/Filter/AcceptTest.php" name="tests/Core/Filters/Filter/AcceptTest.php" />
   <install as="CodeSniffer/Core/Filters/Filter/AcceptTest.xml" name="tests/Core/Filters/Filter/AcceptTest.xml" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionTest.php" name="tests/Core/Ruleset/RuleInclusionTest.php" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionTest.xml" name="tests/Core/Ruleset/RuleInclusionTest.xml" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionTest-include.xml" name="tests/Core/Ruleset/RuleInclusionTest-include.xml" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.php" name="tests/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.php" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.xml" name="tests/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.xml" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.php" name="tests/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.php" />
   <install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.xml" name="tests/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.xml" />
   <install as="CodeSniffer/Core/Sniffs/AbstractArraySniffTest.inc" name="tests/Core/Sniffs/AbstractArraySniffTest.inc" />
   <install as="CodeSniffer/Core/Sniffs/AbstractArraySniffTest.php" name="tests/Core/Sniffs/AbstractArraySniffTest.php" />
   <install as="CodeSniffer/Core/Sniffs/AbstractArraySniffTestable.php" name="tests/Core/Sniffs/AbstractArraySniffTestable.php" />
   <install as="CodeSniffer/Core/Tokenizer/AnonClassParenthesisOwnerTest.php" name="tests/Core/Tokenizer/AnonClassParenthesisOwnerTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/AnonClassParenthesisOwnerTest.inc" name="tests/Core/Tokenizer/AnonClassParenthesisOwnerTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/ArrayKeywordTest.php" name="tests/Core/Tokenizer/ArrayKeywordTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/ArrayKeywordTest.inc" name="tests/Core/Tokenizer/ArrayKeywordTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/AttributesTest.php" name="tests/Core/Tokenizer/AttributesTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/AttributesTest.inc" name="tests/Core/Tokenizer/AttributesTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillEnumTest.php" name="tests/Core/Tokenizer/BackfillEnumTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillEnumTest.inc" name="tests/Core/Tokenizer/BackfillEnumTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillExplicitOctalNotationTest.php" name="tests/Core/Tokenizer/BackfillExplicitOctalNotationTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillExplicitOctalNotationTest.inc" name="tests/Core/Tokenizer/BackfillExplicitOctalNotationTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillFnTokenTest.php" name="tests/Core/Tokenizer/BackfillFnTokenTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillFnTokenTest.inc" name="tests/Core/Tokenizer/BackfillFnTokenTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillMatchTokenTest.php" name="tests/Core/Tokenizer/BackfillMatchTokenTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillMatchTokenTest.inc" name="tests/Core/Tokenizer/BackfillMatchTokenTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillNumericSeparatorTest.php" name="tests/Core/Tokenizer/BackfillNumericSeparatorTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillNumericSeparatorTest.inc" name="tests/Core/Tokenizer/BackfillNumericSeparatorTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BitwiseOrTest.php" name="tests/Core/Tokenizer/BitwiseOrTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BitwiseOrTest.inc" name="tests/Core/Tokenizer/BitwiseOrTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/ContextSensitiveKeywordsTest.php" name="tests/Core/Tokenizer/ContextSensitiveKeywordsTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/ContextSensitiveKeywordsTest.inc" name="tests/Core/Tokenizer/ContextSensitiveKeywordsTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/DefaultKeywordTest.php" name="tests/Core/Tokenizer/DefaultKeywordTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/DefaultKeywordTest.inc" name="tests/Core/Tokenizer/DefaultKeywordTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/DoubleArrowTest.php" name="tests/Core/Tokenizer/DoubleArrowTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/DoubleArrowTest.inc" name="tests/Core/Tokenizer/DoubleArrowTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/DoubleQuotedStringTest.php" name="tests/Core/Tokenizer/DoubleQuotedStringTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/DoubleQuotedStringTest.inc" name="tests/Core/Tokenizer/DoubleQuotedStringTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/EnumCaseTest.php" name="tests/Core/Tokenizer/EnumCaseTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/EnumCaseTest.inc" name="tests/Core/Tokenizer/EnumCaseTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/FinallyTest.php" name="tests/Core/Tokenizer/FinallyTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/FinallyTest.inc" name="tests/Core/Tokenizer/FinallyTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/GotoLabelTest.php" name="tests/Core/Tokenizer/GotoLabelTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/GotoLabelTest.inc" name="tests/Core/Tokenizer/GotoLabelTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/HeredocNowdocCloserTest.php" name="tests/Core/Tokenizer/HeredocNowdocCloserTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/HeredocNowdocCloserTest.inc" name="tests/Core/Tokenizer/HeredocNowdocCloserTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/HeredocStringTest.php" name="tests/Core/Tokenizer/HeredocStringTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/HeredocStringTest.inc" name="tests/Core/Tokenizer/HeredocStringTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/NamedFunctionCallArgumentsTest.php" name="tests/Core/Tokenizer/NamedFunctionCallArgumentsTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/NamedFunctionCallArgumentsTest.inc" name="tests/Core/Tokenizer/NamedFunctionCallArgumentsTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/NullsafeObjectOperatorTest.php" name="tests/Core/Tokenizer/NullsafeObjectOperatorTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/NullsafeObjectOperatorTest.inc" name="tests/Core/Tokenizer/NullsafeObjectOperatorTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillReadonlyTest.php" name="tests/Core/Tokenizer/BackfillReadonlyTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/BackfillReadonlyTest.inc" name="tests/Core/Tokenizer/BackfillReadonlyTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.php" name="tests/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.inc" name="tests/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/ShortArrayTest.php" name="tests/Core/Tokenizer/ShortArrayTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/ShortArrayTest.inc" name="tests/Core/Tokenizer/ShortArrayTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/StableCommentWhitespaceTest.php" name="tests/Core/Tokenizer/StableCommentWhitespaceTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/StableCommentWhitespaceTest.inc" name="tests/Core/Tokenizer/StableCommentWhitespaceTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/StableCommentWhitespaceWinTest.php" name="tests/Core/Tokenizer/StableCommentWhitespaceWinTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/StableCommentWhitespaceWinTest.inc" name="tests/Core/Tokenizer/StableCommentWhitespaceWinTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/TypeIntersectionTest.php" name="tests/Core/Tokenizer/TypeIntersectionTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/TypeIntersectionTest.inc" name="tests/Core/Tokenizer/TypeIntersectionTest.inc" />
   <install as="CodeSniffer/Core/Tokenizer/UndoNamespacedNameSingleTokenTest.php" name="tests/Core/Tokenizer/UndoNamespacedNameSingleTokenTest.php" />
   <install as="CodeSniffer/Core/Tokenizer/UndoNamespacedNameSingleTokenTest.inc" name="tests/Core/Tokenizer/UndoNamespacedNameSingleTokenTest.inc" />
   <install as="CodeSniffer/Standards/AllSniffs.php" name="tests/Standards/AllSniffs.php" />
   <install as="CodeSniffer/Standards/AbstractSniffUnitTest.php" name="tests/Standards/AbstractSniffUnitTest.php" />
   <ignore name="bin/phpcs.bat" />
   <ignore name="bin/phpcbf.bat" />
  </filelist>
 </phprelease>
 <changelog>
  <release>
   <version>
    <release>3.7.2</release>
    <api>3.7.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2023-02-23</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Newer versions of Composer will now suggest installing PHPCS using require-dev instead of require
      -- Thanks to Gary Jones (@GaryJones) for the patch
    - A custom Out Of Memory error will now be shown if PHPCS or PHPCBF run out of memory during a run
      -- Error message provides actionable information about how to fix the problem and ensures the error is not silent
      -- Thanks to Juliette Reinders Folmer (@jrfnl) and Alain Schlesser (@schlessera) for the patch
    - Generic.PHP.LowerCaseType sniff now correctly examines types inside arrow functions
      -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
    - Squiz.Formatting.OperatorBracket no longer reports false positives in match() structures
    - Fixed bug #3616 : Squiz.PHP.DisallowComparisonAssignment false positive for PHP 8 match expression
      -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
    - Fixed bug #3618 : Generic.WhiteSpace.ArbitraryParenthesesSpacing false positive for return new parent()
      -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
    - Fixed bug #3632 : Short list not tokenized correctly in control structures without braces
      -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
    - Fixed bug #3639 : Tokenizer not applying tab replacement to heredoc/nowdoc closers
      -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
    - Fixed bug #3640 : Generic.WhiteSpace.DisallowTabIndent not reporting errors for PHP 7.3 flexible heredoc/nowdoc syntax
      -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
    - Fixed bug #3645 : PHPCS can show 0 exit code when running in parallel even if child process has fatal error
      -- Thanks to Alex Panshin (@enl) for the patch
    - Fixed bug #3653 : False positives for match() in OperatorSpacingSniff
      -- Thanks to Jaroslav Hanslík (@kukulich) for the patch
    - Fixed bug #3666 : PEAR.Functions.FunctionCallSignature incorrect indent fix when checking mixed HTML/PHP files
    - Fixed bug #3668 : PSR12.Classes.ClassInstantiation.MissingParentheses false positive when instantiating parent classes
      -- Similar issues also fixed in Generic.Functions.FunctionCallArgumentSpacing and Squiz.Formatting.OperatorBracket
      -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
    - Fixed bug #3672 : Incorrect ScopeIndent.IncorrectExact report for match inside array literal
    - Fixed bug #3694 : Generic.WhiteSpace.SpreadOperatorSpacingAfter does not ignore spread operator in PHP 8.1 first class   callables
      -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
   </notes>
  </release>
  <release>
   <version>
    <release>3.7.1</release>
    <api>3.7.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2022-06-18</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Fixed bug #3609 : Methods/constants with name empty/isset/unset are always reported as error
      -- Thanks to Juliette Reinders Folmer (@jrfnl) for the patch
   </notes>
  </release>
  <release>
   <version>
    <release>3.7.0</release>
    <api>3.7.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2022-06-13</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added support for PHP 8.1 explicit octal notation
      -- This new syntax has been backfilled for PHP versions less than 8.1
      -- Thanks to Mark Baker for the patch
      -- Thanks to Juliette Reinders Folmer for additional fixes
    - Added support for PHP 8.1 enums
      -- This new syntax has been backfilled for PHP versions less than 8.1
      -- Includes a new T_ENUM_CASE token to represent the case statements inside an enum
      -- Thanks to Jaroslav Hanslík for the patch
      -- Thanks to Juliette Reinders Folmer for additional core and sniff support
    - Added support for the PHP 8.1 readonly token
      -- Tokenzing of the readonly keyword has been backfilled for PHP versions less than 8.1
      -- Thanks to Jaroslav Hanslík for the patch
    - Added support for PHP 8.1 intersection types
      -- Includes a new T_TYPE_INTERSECTION token to represent the ampersand character inside intersection types
      -- Thanks to Jaroslav Hanslík for the patch
    - File::getMethodParameters now supports the new PHP 8.1 readonly token
      -- When constructor property promotion is used, a new property_readonly array index is included in the return value
        --- This is a boolean value indicating if the property is readonly
      -- If the readonly token is detected, a new readonly_token array index is included in the return value
        --- This contains the token index of the readonly keyword
      -- Thanks to Juliette Reinders Folmer for the patch
    - Support for new PHP 8.1 readonly keyword has been added to the following sniffs:
      -- Generic.PHP.LowerCaseKeyword
      -- PSR2.Classes.PropertyDeclaration
      -- Squiz.Commenting.BlockComment
      -- Squiz.Commenting.DocCommentAlignment
      -- Squiz.Commenting.VariableComment
      -- Squiz.WhiteSpace.ScopeKeywordSpacing
      -- Thanks to Juliette Reinders Folmer for the patches
    - The parallel feature is now more efficient and runs faster in some situations due to improved process management
      -- Thanks to Sergei Morozov for the patch
    - The list of installed coding standards now has consistent ordering across all platforms
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.PHP.UpperCaseConstant and Generic.PHP.LowerCaseConstant now ignore type declarations
      -- These sniffs now only report errors for true/false/null when used as values
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.PHP.LowerCaseType now supports the PHP 8.1 never type
      -- Thanks to Jaroslav Hanslík for the patch
    - Fixed bug #3502 : A match statement within an array produces Squiz.Arrays.ArrayDeclaration.NoKeySpecified
    - Fixed bug #3503 : Squiz.Commenting.FunctionComment.ThrowsNoFullStop false positive when one line @throw
    - Fixed bug #3505 : The nullsafe operator is not counted in Generic.Metrics.CyclomaticComplexity
      -- Thanks to Mark Baker for the patch
    - Fixed bug #3526 : PSR12.Properties.ConstantVisibility false positive when using public final const syntax
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3530 : Line indented incorrectly false positive when using match-expression inside switch case
    - Fixed bug #3534 : Name of typed enum tokenized as T_GOTO_LABEL
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3546 : Tokenizer/PHP: bug fix - parent/static keywords in class instantiations
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3550 : False positive from PSR2.ControlStructures.SwitchDeclaration.TerminatingComment when using trailing   comment
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3575: Squiz.Scope.MethodScope misses visibility keyword on previous line
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3604: Tokenizer/PHP: bug fix for double quoted strings using ${
      -- Thanks to Juliette Reinders Folmer for the patch
   </notes>
  </release>
  <release>
   <version>
    <release>3.6.2</release>
    <api>3.6.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2021-12-13</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Processing large code bases that use tab indenting inside comments and strings will now be faster
      -- Thanks to Thiemo Kreuz for the patch
    - Fixed bug #3388 : phpcs does not work when run from WSL drives
      -- Thanks to Juliette Reinders Folmer and Graham Wharton for the patch
    - Fixed bug #3422 : Squiz.WhiteSpace.ScopeClosingBrace fixer removes HTML content when fixing closing brace alignment
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3437 : PSR12 does not forbid blank lines at the start of the class body
      -- Added new PSR12.Classes.OpeningBraceSpace sniff to enforce this
    - Fixed bug #3440 : Squiz.WhiteSpace.MemberVarSpacing false positives when attributes used without docblock
      -- Thanks to Vadim Borodavko for the patch
    - Fixed bug #3448 : PHP 8.1 deprecation notice while generating running time value
      -- Thanks to Juliette Reinders Folmer and Andy Postnikov for the patch
    - Fixed bug #3456 : PSR12.Classes.ClassInstantiation.MissingParentheses false positive using attributes on anonymous class
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3460 : Generic.Formatting.MultipleStatementAlignment false positive on closure with parameters
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3468 : do/while loops are double-counted in Generic.Metrics.CyclomaticComplexity
      -- Thanks to Mark Baker for the patch
    - Fixed bug #3469 : Ternary Operator and Null Coalescing Operator are not counted in Generic.Metrics.CyclomaticComplexity
      -- Thanks to Mark Baker for the patch
    - Fixed bug #3472 : PHP 8 match() expression is not counted in Generic.Metrics.CyclomaticComplexity
      -- Thanks to Mark Baker for the patch
   </notes>
  </release>
  <release>
   <version>
    <release>3.6.1</release>
    <api>3.6.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2021-10-11</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - PHPCS annotations can now be specified using hash-style comments
      -- Previously, only slash-style and block-style comments could be used to do things like disable errors
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed an issue where some sniffs would not run on PHP files that only used the short echo tag
      -- The following sniffs were affected:
         --- Generic.Files.ExecutableFile
         --- Generic.Files.LowercasedFilename
         --- Generic.Files.LineEndings
         --- Generic.Files.EndFileNewline
         --- Generic.Files.EndFileNoNewline
         --- Generic.PHP.ClosingPHPTag
         --- Generic.PHP.Syntax
         --- Generic.VersionControl.GitMergeConflict
         --- Generic.WhiteSpace.DisallowSpaceIndent
         --- Generic.WhiteSpace.DisallowTabIndent
      -- Thanks to Juliette Reinders Folmer for the patch
    - The new PHP 8.1 tokenisation for ampersands has been reverted to use the existing PHP_CodeSniffer method
      -- The PHP 8.1 tokens T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG and T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG are unsued
      -- Ampersands continue to be tokenized as T_BITWISE_AND for all PHP versions
      -- Thanks to Juliette Reinders Folmer and Anna Filina for the patch
    - File::getMethodParameters() no longer incorrectly returns argument attributes in the type hint array index
      -- A new has_attributes array index is available and set to TRUE if the argument has attributes defined
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.NamingConventions.ConstructorName no longer throws deprecation notices on PHP 8.1
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Commenting.BlockComment now correctly applies rules for block comments after a short echo tag
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed false positives when using attributes in the following sniffs:
      -- PEAR.Commenting.FunctionComment
      -- Squiz.Commenting.InlineComment
      -- Squiz.Commenting.BlockComment
      -- Squiz.Commenting.VariableComment
      -- Squiz.WhiteSpace.MemberVarSpacing
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3294 : Bug in attribute tokenization when content contains PHP end token or attribute closer on new line
      -- Thanks to Alessandro Chitolina for the patch
      -- Thanks to Juliette Reinders Folmer for the tests
    - Fixed bug #3296 : PSR2.ControlStructures.SwitchDeclaration takes phpcs:ignore as content of case body
    - Fixed bug #3297 : PSR2.ControlStructures.SwitchDeclaration.TerminatingComment does not handle try/finally blocks
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3302 : PHP 8.0 | Tokenizer/PHP: bugfix for union types using namespace operator
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3303 : findStartOfStatement() doesn't work with T_OPEN_TAG_WITH_ECHO
    - Fixed bug #3316 : Arrow function not tokenized correctly when using null in union type
    - Fixed bug #3317 : Problem with how phpcs handles ignored files when running in parallel
      -- Thanks to Emil Andersson for the patch
    - Fixed bug #3324 : PHPCS hangs processing some nested arrow functions inside a function call
    - Fixed bug #3326 : Generic.Formatting.MultipleStatementAlignment error with const DEFAULT
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3333 : Squiz.Objects.ObjectInstantiation: null coalesce operators are not recognized as assignment
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3340 : Ensure interface and trait names are always tokenized as T_STRING
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3342 : PSR12/Squiz/PEAR standards all error on promoted properties with docblocks
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3345 : IF statement with no braces and double catch turned into syntax error by auto-fixer
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3352 : PSR2.ControlStructures.SwitchDeclaration can remove comments on the same line as the case statement while   fixing
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3357 : Generic.Functions.OpeningFunctionBraceBsdAllman removes return type when additional lines are present
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3362 : Generic.WhiteSpace.ScopeIndent false positive for arrow functions inside arrays
    - Fixed bug #3384 : Squiz.Commenting.FileComment.SpacingAfterComment false positive on empty file
    - Fixed bug #3394 : Fix PHP 8.1 auto_detect_line_endings deprecation notice
    - Fixed bug #3400 : PHP 8.1: prevent deprecation notices about missing return types
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3424 : PHPCS fails when using PHP 8 Constructor property promotion with attributes
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3425 : PHP 8.1 | Runner::processChildProcs(): fix passing null to non-nullable bug
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3445 : Nullable parameter after attribute incorrectly tokenized as ternary operator
      -- Thanks to Juliette Reinders Folmer for the patch
   </notes>
  </release>
  <release>
   <version>
    <release>3.6.0</release>
    <api>3.6.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2021-04-09</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added support for PHP 8.0 union types
      -- A new T_TYPE_UNION token is available to represent the pipe character
      -- File::getMethodParameters(), getMethodProperties(), and getMemberProperties() will now return union types
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added support for PHP 8.0 named function call arguments
      -- A new T_PARAM_NAME token is available to represent the label with the name of the function argument in it
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added support for PHP 8.0 attributes
      -- The PHP-supplied T_ATTRIBUTE token marks the start of an attribute
      -- A new T_ATTRIBUTE_END token is available to mark the end of an attribute
      -- New attribute_owner and attribute_closer indexes are available in the tokens array for all tokens inside an attribute
      -- Tokenizing of attributes has been backfilled for older PHP versions
      -- The following sniffs have been updated to support attributes:
         --- PEAR.Commenting.ClassComment
         --- PEAR.Commenting.FileComment
         --- PSR1.Files.SideEffects
         --- PSR12.Files.FileHeader
         --- Squiz.Commenting.ClassComment
         --- Squiz.Commenting.FileComment
         --- Squiz.WhiteSpace.FunctionSpacing
             ---- Thanks to Vadim Borodavko for the patch
      -- Thanks to Alessandro Chitolina for the patch
    - Added support for PHP 8.0 dereferencing of text strings with interpolated variables
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added support for PHP 8.0 match expressions
      -- Match expressions are now tokenised with parenthesis and scope openers and closers
         --- Sniffs can listen for the T_MATCH token to process match expressions
         --- Note that the case and default statements inside match expressions do not have scopes set
      -- A new T_MATCH_ARROW token is available to represent the arrows in match expressions
      -- A new T_MATCH_DEFAULT token is available to represent the default keyword in match expressions
      -- All tokenizing of match expressions has been backfilled for older PHP versions
      -- The following sniffs have been updated to support match expressions:
         --- Generic.CodeAnalysis.AssignmentInCondition
         --- Generic.CodeAnalysis.EmptyPHPStatement
             ---- Thanks to Vadim Borodavko for the patch
         --- Generic.CodeAnalysis.EmptyStatement
         --- Generic.PHP.LowerCaseKeyword
         --- PEAR.ControlStructures.ControlSignature
         --- PSR12.ControlStructures.BooleanOperatorPlacement
         --- Squiz.Commenting.LongConditionClosingComment
         --- Squiz.Commenting.PostStatementComment
         --- Squiz.ControlStructures.LowercaseDeclaration
         --- Squiz.ControlStructures.ControlSignature
         --- Squiz.Formatting.OperatorBracket
         --- Squiz.PHP.DisallowMultipleAssignments
         --- Squiz.Objects.ObjectInstantiation
         --- Squiz.WhiteSpace.ControlStructureSpacing
      -- Thanks to Juliette Reinders Folmer for the patch
    - The value of the T_FN_ARROW token has changed from "T_FN_ARROW" to "PHPCS_T_FN_ARROW" to avoid package conflicts
      -- This will have no impact on custom sniffs unless they are specifically looking at the value of the T_FN_ARROW constant
      -- If sniffs are just using constant to find arrow functions, they will continue to work without modification
      -- Thanks to Juliette Reinders Folmer for the patch
    - File::findStartOfStatement() now works correctly when passed the last token in a statement
    - File::getMethodParameters() now supports PHP 8.0 constructor property promotion
      -- Returned method params now include a "property_visibility" and "visibility_token" index if property promotion is detected
      -- Thanks to Juliette Reinders Folmer for the patch
    - File::getMethodProperties() now includes a "return_type_end_token" index in the return value
      -- This indicates the last token in the return type, which is helpful when checking union types
      -- Thanks to Juliette Reinders Folmer for the patch
    - Include patterns are now ignored when processing STDIN
      -- Previously, checks using include patterns were excluded when processing STDIN when no file path was provided via --stdin-path
      -- Now, all include and exclude rules are ignored when no file path is provided, allowing all checks to run
      -- If you want include and exclude rules enforced when checking STDIN, use --stdin-path to set the file path
      -- Thanks to Juliette Reinders Folmer for the patch
    - Spaces are now correctly escaped in the paths to external on Windows
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added Generic.NamingConventions.AbstractClassNamePrefix to enforce that class names are prefixed with "Abstract"
      -- Thanks to Anna Borzenko for the contribution
    - Added Generic.NamingConventions.InterfaceNameSuffix to enforce that interface names are suffixed with "Interface"
      -- Thanks to Anna Borzenko for the contribution
    - Added Generic.NamingConventions.TraitNameSuffix to enforce that trait names are suffixed with "Trait"
      -- Thanks to Anna Borzenko for the contribution
    - Generic.CodeAnalysis.UnusedFunctionParameter can now be configured to ignore variable usage for specific type hints
        -- This allows you to suppress warnings for some variables that are not required, but leave warnings for others
        -- Set the ignoreTypeHints array property to a list of type hints to ignore
        -- Thanks to Petr Bugyík for the patch
    - Generic.Formatting.MultipleStatementAlignment can now align statements at the start of the assignment token
      -- Previously, the sniff enforced that the values were aligned, even if this meant the assignment tokens were not
      -- Now, the sniff can enforce that the assignment tokens are aligned, even if this means the values are not
      -- Set the "alignAtEnd" sniff property to "false" to align the assignment tokens
      -- The default remains at "true", so the assigned values are aligned
      -- Thanks to John P. Bloch for the patch
    - Generic.PHP.LowerCaseType now supports checking of typed properties
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.PHP.LowerCaseType now supports checking of union types
      -- Thanks to Juliette Reinders Folmer for the patch
    - PEAR.Commenting.FunctionComment and Squiz.Commenting.FunctionComment sniffs can now ignore private and protected methods
      -- Set the "minimumVisibility" sniff property to "protected" to ignore private methods
      -- Set the "minimumVisibility" sniff property to "public" to ignore both private and protected methods
      -- The default remains at "private", so all methods are checked
      -- Thanks to Vincent Langlet for the patch
    - PEAR.Commenting.FunctionComment and Squiz.Commenting.FunctionComment sniffs can now ignore return tags in any method
      -- Previously, only __construct and __destruct were ignored
      -- Set the list of method names to ignore in the "specialMethods" sniff property
      -- The default remains at "__construct" and "__destruct" only
      -- Thanks to Vincent Langlet for the patch
    - PSR2.ControlStructures.SwitchDeclaration now supports nested switch statements where every branch terminates
      -- Previously, if a CASE only contained a SWITCH and no direct terminating statement, a fall-through error was displayed
      -- Now, the error is surpressed if every branch of the SWITCH has a terminating statement
      -- Thanks to Vincent Langlet for the patch
    - The PSR2.Methods.FunctionCallSignature.SpaceBeforeCloseBracket error message is now reported on the closing parenthesis token
      -- Previously, the error was being reported on the function keyword, leading to confusing line numbers in the error report
    - Squiz.Commenting.FunctionComment is now able to ignore function comments that are only inheritdoc statements
      -- Set the skipIfInheritdoc sniff property to "true" to skip checking function comments if the content is only {@inhertidoc}
      -- The default remains at "false", so these comments will continue to report errors
      -- Thanks to Jess Myrbo for the patch
    - Squiz.Commenting.FunctionComment now supports the PHP 8 mixed type
      -- Thanks to Vadim Borodavko for the patch
    - Squiz.PHP.NonExecutableCode now has improved handling of syntax errors
      -- Thanks to Thiemo Kreuz for the patch
    - Squiz.WhiteSpace.ScopeKeywordSpacing now checks spacing when using PHP 8.0 constructor property promotion
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed an issue that could occurr when checking files on network drives, such as with WSL2 on Windows 10
      -- This works around a long-standing PHP bug with is_readable()
      -- Thanks to Michael S for the patch
    - Fixed a number of false positives in the Squiz.PHP.DisallowMultipleAssignments sniff
      -- Sniff no longer errors for default value assignments in arrow functions
      -- Sniff no longer errors for assignments on first line of closure
      -- Sniff no longer errors for assignments after a goto label
      -- Thanks to Jaroslav Hanslík for the patch
    - Fixed bug #2913 : Generic.WhiteSpace.ScopeIndent false positive when opening and closing tag on same line inside conditional
    - Fixed bug #2992 : Enabling caching using a ruleset produces invalid cache files when using --sniffs and --exclude CLI args
    - Fixed bug #3003 : Squiz.Formatting.OperatorBracket autofix incorrect when assignment used with null coalescing operator
    - Fixed bug #3145 : Autoloading of sniff fails when multiple classes declared in same file
    - Fixed bug #3157 : PSR2.ControlStructures.SwitchDeclaration.BreakIndent false positive when case keyword is not indented
    - Fixed bug #3163 : Undefined index error with pre-commit hook using husky on PHP 7.4
      -- Thanks to Ismo Vuorinen for the patch
    - Fixed bug #3165 : Squiz.PHP.DisallowComparisonAssignment false positive when comparison inside closure
    - Fixed bug #3167 : Generic.WhiteSpace.ScopeIndent false positive when using PHP 8.0 constructor property promotion
    - Fixed bug #3170 : Squiz.WhiteSpace.OperatorSpacing false positive when using negation with string concat
      -- This also fixes the same issue in the PSR12.Operators.OperatorSpacing sniff
    - Fixed bug #3177 : Incorrect tokenization of GOTO statements in mixed PHP/HTML files
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3184 : PSR2.Namespace.NamespaceDeclaration false positive on namespace operator
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3188 : Squiz.WhiteSpace.ScopeKeywordSpacing false positive for static return type
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3192 : findStartOfStatement doesn't work correctly inside switch
      -- Thanks to Vincent Langlet for the patch
    - Fixed bug #3195 : Generic.WhiteSpace.ScopeIndent confusing message when combination of tabs and spaces found
    - Fixed bug #3197 : Squiz.NamingConventions.ValidVariableName does not use correct error code for all member vars
    - Fixed bug #3219 : Generic.Formatting.MultipleStatementAlignment false positive for empty anonymous classes and closures
    - Fixed bug #3258 : Squiz.Formatting.OperatorBracket duplicate error messages for unary minus
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3273 : Squiz.Functions.FunctionDeclarationArgumentSpacing reports line break as 0 spaces between parenthesis
    - Fixed bug #3277 : Nullable static return typehint causes whitespace error
    - Fixed bug #3284 : Unused parameter false positive when using array index in arrow function
    </notes>
  </release>
  <release>
   <version>
    <release>3.5.8</release>
    <api>3.5.8</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2020-10-23</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Reverted a change to the way include/exclude patterns are processed for STDIN content
      -- This change is not backwards compatible and will be re-introduced in version 3.6.0
    </notes>
  </release>
  <release>
   <version>
    <release>3.5.7</release>
    <api>3.5.7</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2020-10-23</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The PHP 8.0 T_NULLSAFE_OBJECT_OPERATOR token has been made available for older versions
      -- Existing sniffs that check for T_OBJECT_OPERATOR have been modified to apply the same rules for the nullsafe object   operator
      -- Thanks to Juliette Reinders Folmer for the patch
    - The new method of PHP 8.0 tokenizing for namespaced names has been reverted to the pre 8.0 method
      -- This maintains backwards compatibility for existing sniffs on PHP 8.0
      -- This change will be removed in PHPCS 4.0 as the PHP 8.0 tokenizing method will be backported for pre 8.0 versions
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added support for changes to the way PHP 8.0 tokenizes hash comments
      -- The existing PHP 5-7 behaviour has been replicated for version 8, so no sniff changes are required
      -- Thanks to Juliette Reinders Folmer for the patch
    - The autoloader has been changed to fix sniff class name detection issues that may occur when running on PHP 7.4+
      -- Thanks to Eloy Lafuente for the patch
    - Running the unit tests now includes warnings in the found and fixable error code counts
      -- Thanks to Juliette Reinders Folmer for the patch
    - PSR12.ControlStructures.BooleanOperatorPlacement.FoundMixed error message is now more accurate when using the allowOnly   setting
      -- Thanks to Vincent Langlet for the patch
    - PSR12.Functions.NullableTypeDeclaration now supports the PHP8 static return type
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed Squiz.Formatting.OperatorBracket false positive when exiting with a negative number
    - Fixed Squiz.PHP.DisallowComparisonAssignment false positive for methods called on an object
    - Fixed bug #2882 : Generic.Arrays.ArrayIndent can request close brace indent to be less than the statement indent level
    - Fixed bug #2883 : Generic.WhiteSpace.ScopeIndent.Incorrect issue after NOWDOC
    - Fixed bug #2975 : Undefined offset in PSR12.Functions.ReturnTypeDeclaration when checking function return type inside ternary
    - Fixed bug #2988 : Undefined offset in Squiz.Strings.ConcatenationSpacing during live coding
      -- Thanks to Thiemo Kreuz for the patch
    - Fixed bug #2989 : Incorrect auto-fixing in Generic.ControlStructures.InlineControlStructure during live coding
      -- Thanks to Thiemo Kreuz for the patch
    - Fixed bug #3007 : Directory exclude pattern improperly excludes directories with names that start the same
      -- Thanks to Steve Talbot for the patch
    - Fixed bug #3043 : Squiz.WhiteSpace.OperatorSpacing false positive for negation in arrow function
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3049 : Incorrect error with arrow function and parameter passed as reference
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3053 : PSR2 incorrect fix when multiple use statements on same line do not have whitespace between them
    - Fixed bug #3058 : Progress gets unaligned when 100% happens at the end of the available dots
    - Fixed bug #3059 : Squiz.Arrays.ArrayDeclaration false positive when using type casting
      -- Thanks to Sergei Morozov for the patch
    - Fixed bug #3060 : Squiz.Arrays.ArrayDeclaration false positive for static functions
      -- Thanks to Sergei Morozov for the patch
    - Fixed bug #3065 : Should not fix Squiz.Arrays.ArrayDeclaration.SpaceBeforeComma if comment between element and comma
      -- Thanks to Sergei Morozov for the patch
    - Fixed bug #3066 : No support for namespace operator used in type declarations
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3075 : PSR12.ControlStructures.BooleanOperatorPlacement false positive when operator is the only content on line
    - Fixed bug #3099 : Squiz.WhiteSpace.OperatorSpacing false positive when exiting with negative number
      -- Thanks to Sergei Morozov for the patch
    - Fixed bug #3102 : PSR12.Squiz.OperatorSpacing false positive for default values of arrow functions
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #3124 : PSR-12 not reporting error for empty lines with only whitespace
    - Fixed bug #3135 : Ignore annotations are broken on PHP 8.0
      -- Thanks to Juliette Reinders Folmer for the patch
    </notes>
  </release>
  <release>
   <version>
    <release>3.5.6</release>
    <api>3.5.6</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2020-08-10</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added support for PHP 8.0 magic constant dereferencing
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added support for changes to the way PHP 8.0 tokenizes comments
      -- The existing PHP 5-7 behaviour has been replicated for version 8, so no sniff changes are required
      -- Thanks to Juliette Reinders Folmer for the patch
    - File::getMethodProperties() now detects the PHP 8.0 static return type
      -- Thanks to Juliette Reinders Folmer for the patch
    - The PHP 8.0 static return type is now supported for arrow functions
      -- Thanks to Juliette Reinders Folmer for the patch
    - The cache is no longer used if the list of loaded PHP extensions changes
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.NamingConventions.CamelCapsFunctionName no longer reports __serialize and __unserialize as invalid names
      -- Thanks to Filip Š for the patch
    - PEAR.NamingConventions.ValidFunctionName no longer reports __serialize and __unserialize as invalid names
      -- Thanks to Filip Š for the patch
    - Squiz.Scope.StaticThisUsage now detects usage of $this inside closures and arrow Functions
      -- Thanks to Michał Bundyra for the patch
    - Fixed bug #2877 : PEAR.Functions.FunctionCallSignature false positive for array of functions
      -- Thanks to Vincent Langlet for the patch
    - Fixed bug #2888 : PSR12.Files.FileHeader blank line error with multiple namespaces in one file
    - Fixed bug #2926 : phpcs hangs when using arrow functions that return heredoc
    - Fixed bug #2943 : Redundant semicolon added to a file when fixing PSR2.Files.ClosingTag.NotAllowed
    - Fixed bug #2967 : Markdown generator does not output headings correctly
      -- Thanks to Petr Bugyík for the patch
    - Fixed bug #2977 : File::isReference() does not detect return by reference for closures
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2994 : Generic.Formatting.DisallowMultipleStatements false positive for FOR loop with no body
    - Fixed bug #3033 : Error generated during tokenizing of goto statements on PHP 8
      -- Thanks to Juliette Reinders Folmer for the patch
    </notes>
  </release>
  <release>
   <version>
    <release>3.5.5</release>
    <api>3.5.5</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2020-04-17</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The T_FN backfill now works more reliably so T_FN tokens only ever represent real arrow functions
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed an issue where including sniffs using paths containing multiple dots would silently fail
    - Generic.CodeAnalysis.EmptyPHPStatement now detects empty statements at the start of control structures
    - Error wording in PEAR.Functions.FunctionCallSignature now always uses "parenthesis" instead of sometimes using "bracket"
      -- Thanks to Vincent Langlet for the patch
    - Fixed bug #2787 : Squiz.PHP.DisallowMultipleAssignments not ignoring typed property declarations
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2810 : PHPCBF fails to fix file with empty statement at start on control structure
    - Fixed bug #2812 : Squiz.Arrays.ArrayDeclaration not detecting some arrays with multiple arguments on the same line
      -- Thanks to Jakub Chábek for the patch
    - Fixed bug #2826 : Generic.WhiteSpace.ArbitraryParenthesesSpacing doesn't detect issues for statements directly after a   control structure
      -- Thanks to Vincent Langlet for the patch
    - Fixed bug #2848 : PSR12.Files.FileHeader false positive for file with mixed PHP and HTML and no file header
    - Fixed bug #2849 : Generic.WhiteSpace.ScopeIndent false positive with arrow function inside array
    - Fixed bug #2850 : Generic.PHP.LowerCaseKeyword complains __HALT_COMPILER is uppercase
    - Fixed bug #2853 : Undefined variable error when using Info report
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2865 : Double arrow tokenized as T_STRING when placed after function named "fn"
    - Fixed bug #2867 : Incorrect scope matching when arrow function used inside IF condition
    - Fixed bug #2868 : phpcs:ignore annotation doesnt work inside a docblock
    - Fixed bug #2878 : PSR12.Files.FileHeader conflicts with Generic.Files.LineEndings
    - Fixed bug #2895 : PSR2.Methods.FunctionCallSignature.MultipleArguments false positive with arrow function argument
    </notes>
  </release>
  <release>
   <version>
    <release>3.5.4</release>
    <api>3.5.4</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2020-01-31</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The PHP 7.4 numeric separator backfill now works correctly for more float formats
      -- Thanks to Juliette Reinders Folmer for the patch
    - The PHP 7.4 numeric separator backfill is no longer run on PHP version 7.4.0 or greater
    - File::getCondition() now accepts a 3rd argument that allows for the closest matching token to be returned
      -- By default, it continues to return the first matched token found from the top of the file
    - Fixed detection of array return types for arrow functions
    - Added Generic.PHP.DisallowRequestSuperglobal to ban the use of the $_REQUEST superglobal
      -- Thanks to Morerice for the contribution
    - Generic.ControlStructures.InlineControlStructure no longer shows errors for WHILE and FOR statements without a body
      -- Previously it required these to have curly braces, but there were no statements to enclose in them
      -- Thanks to Juliette Reinders Folmer for the patch
    - PSR12.ControlStructures.BooleanOperatorPlacement can now be configured to enforce a specific operator position
      -- By default, the sniff ensures that operators are all at the begining or end of lines, but not a mix of both
      -- Set the allowOnly property to "first" to enforce all boolean operators to be at the start of a line
      -- Set the allowOnly property to "last" to enforce all boolean operators to be at the end of a line
      -- Thanks to Vincent Langlet for the patch
    - PSR12.Files.ImportStatement now auto-fixes import statements by removing the leading slash
      -- Thanks to Michał Bundyra for the patch
    - Squiz.ControlStructures.ForLoopDeclaration now has a setting to ignore newline characters
      -- Default remains FALSE, so newlines are not allowed within FOR definitions
      -- Override the "ignoreNewlines" setting in a ruleset.xml file to change
    - Squiz.PHP.InnerFunctions now handles multiple nested anon classes correctly
    - Fixed bug #2497 : Sniff properties not set when referencing a sniff using relative paths or non-native slashes
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2657 : Squiz.WhiteSpace.FunctionSpacing can remove spaces between comment and first/last method during auto-fixing
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2688 : Case statements not tokenized correctly when switch is contained within ternary
    - Fixed bug #2698 : PHPCS throws errors determining auto report width when shell_exec is disabled
      -- Thanks to Matthew Peveler for the patch
    - Fixed bug #2730 : PSR12.ControlStructures.ControlStructureSpacing does not ignore comments between conditions
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2732 : PSR12.Files.FileHeader misidentifies file header in mixed content file
    - Fixed bug #2745 : AbstractArraySniff wrong indices when mixed coalesce and ternary values
      -- Thanks to Michał Bundyra for the patch
    - Fixed bug #2748 : Wrong end of statement for fn closures
      -- Thanks to Michał Bundyra for the patch
    - Fixed bug #2751 : Autoload relative paths first to avoid confusion with files from the global include path
      -- Thanks to Klaus Purer for the patch
    - Fixed bug #2763 : PSR12 standard reports errors for multi-line FOR definitions
    - Fixed bug #2768 : Generic.Files.LineLength false positive for non-breakable strings at exactly the soft limit
      -- Thanks to Alex Miles for the patch
    - Fixed bug #2773 : PSR2.Methods.FunctionCallSignature false positive when arrow function has array return type
    - Fixed bug #2790 : PSR12.Traits.UseDeclaration ignores block comments
      -- Thanks to Vincent Langlet for the patch
    - Fixed bug #2791 : PSR12.Functions.NullableTypeDeclaration false positive when ternary operator used with instanceof
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2802 : Can't specify a report file path using the tilde shortcut
    - Fixed bug #2804 : PHP4-style typed properties not tokenized correctly
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2805 : Undefined Offset notice during live coding of arrow functions
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2843 : Tokenizer does not support alternative syntax for declare statements
      -- Thanks to Juliette Reinders Folmer for the patch
    </notes>
  </release>
  <release>
   <version>
    <release>3.5.3</release>
    <api>3.5.3</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2019-12-04</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The PHP 7.4 T_FN token has been made available for older versions
      -- T_FN represents the fn string used for arrow functions
      -- The double arrow becomes the scope opener, and uses a new T_FN_ARROW token type
      -- The token after the statement (normally a semicolon) becomes the scope closer
      -- The token is also associated with the opening and closing parenthesis of the statement
      -- Any functions named "fn" will cause have a T_FN token for the function name, but have no scope information
      -- Thanks to Michał Bundyra for the help with this change
    - PHP 7.4 numeric separators are now tokenized in the same way when using older PHP versions
      -- Previously, a number like 1_000 would tokenize as T_LNUMBER (1), T_STRING (_000)
      -- Now, the number tokenizes as T_LNUMBER (1_000)
      -- Sniff developers should consider how numbers with underscores impact their custom sniffs
    - The PHPCS file cache now takes file permissions into account
      -- The cache is now invalidated for a file when its permissions are changed
    - File::getMethodParameters() now supports arrow functions
    - File::getMethodProperties() now supports arrow functions
    - Added Fixer::changeCodeBlockIndent() to change the indent of a code block while auto-fixing
      -- Can be used to either increase or decrease the indent
      -- Useful when moving the start position of something like a closure, where you want the content to also move
    - Added Generic.Files.ExecutableFile sniff
      -- Ensures that files are not executable
      -- Thanks to Matthew Peveler for the contribution
    - Generic.CodeAnalysis.EmptyPhpStatement now reports unnecessary semicolons after control structure closing braces
      -- Thanks to Vincent Langlet for the patch
    - Generic.PHP.LowerCaseKeyword now enforces that the "fn" keyword is lowercase
      -- Thanks to Michał Bundyra for the patch
    - Generic.WhiteSpace.ScopeIndent now supports static arrow functions
    - PEAR.Functions.FunctionCallSignature now adjusts the indent of function argument contents during auto-fixing
      -- Previously, only the first line of an argument was changed, leading to inconsistent indents
      -- This change also applies to PSR2.Methods.FunctionCallSignature
    - PSR2.ControlStructures.ControlStructureSpacing now checks whitespace before the closing parenthesis of multi-line control structures
      -- Previously, it incorrectly applied the whitespace check for single-line definitions only
    - PSR12.Functions.ReturnTypeDeclaration now checks the return type of arrow functions
      -- Thanks to Michał Bundyra for the patch
    - PSR12.Traits.UseDeclaration now ensures all trait import statements are grouped together
      -- Previously, the trait import section of the class ended when the first non-import statement was found
      -- Checking now continues throughout the class to ensure all statements are grouped together
      -- This also ensures that empty lines are not requested after an import statement that isn't the last one
    - Squiz.Functions.LowercaseFunctionKeywords now enforces that the "fn" keyword is lowercase
      -- Thanks to Michał Bundyra for the patch
    - Fixed bug #2586 : Generic.WhiteSpace.ScopeIndent false positives when indenting open tags at a non tab-stop
    - Fixed bug #2638 : Squiz.CSS.DuplicateClassDefinitionSniff sees comments as part of the class name
      -- Thanks to Raphael Horber for the patch
    - Fixed bug #2640 : Squiz.WhiteSpace.OperatorSpacing false positives for some negation operators
      -- Thanks to Jakub Chábek and Juliette Reinders Folmer for the patch
    - Fixed bug #2674 : Squiz.Functions.FunctionDeclarationArgumentSpacing prints wrong argument name in error message
    - Fixed bug #2676 : PSR12.Files.FileHeader locks up when file ends with multiple inline comments
    - Fixed bug #2678 : PSR12.Classes.AnonClassDeclaration incorrectly enforcing that closing brace be on a line by itself
    - Fixed bug #2685 : File::getMethodParameters() setting typeHintEndToken for vars with no type hint
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2694 : AbstractArraySniff produces invalid indices when using ternary operator
      -- Thanks to Michał Bundyra for the patch
    - Fixed bug #2702 : Generic.WhiteSpace.ScopeIndent false positive when using ternary operator with short arrays
    </notes>
  </release>
  <release>
   <version>
    <release>3.5.2</release>
    <api>3.5.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2019-10-28</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Generic.ControlStructures.DisallowYodaConditions now returns less false positives
      -- False positives were being returned for array comparisions, or when performing some function calls
    - Squiz.WhiteSpace.SemicolonSpacing.Incorrect error message now escapes newlines and tabs
      -- Provides a clearer error message as whitespace is now visible
      -- Also allows for better output for report types such as CSV and XML
    - The error message for PSR12.Files.FileHeader.SpacingAfterBlock has been made clearer
      -- It now uses the wording from the published PSR-12 standard to indicate that blocks must be separated by a blank line
      -- Thanks to Craig Duncan for the patch
    - Fixed bug #2654 : Incorrect indentation for arguments of multiline function calls
    - Fixed bug #2656 : Squiz.WhiteSpace.MemberVarSpacing removes comments before first member var during auto fixing
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2663 : Generic.NamingConventions.ConstructorName complains about old constructor in interfaces
    - Fixed bug #2664 : PSR12.Files.OpenTag incorrectly identifies PHP file with only an opening tag
    - Fixed bug #2665 : PSR12.Files.ImportStatement should not apply to traits
    - Fixed bug #2673 : PSR12.Traits.UseDeclaration does not allow comments or blank lines between use statements
    </notes>
  </release>
  <release>
   <version>
    <release>3.5.1</release>
    <api>3.5.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2019-10-17</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Very very verbose diff report output has slightly changed to improve readability
      -- Output is printed when running PHPCS with the --report=diff and -vvv command line arguments
      -- Fully qualified class names have been replaced with sniff codes
      -- Tokens being changed now display the line number they are on
    - PSR2, PSR12, and PEAR standards now correctly check for blank lines at the start of function calls
      -- This check has been missing from these standards, but has now been implemented
      -- When using the PEAR standard, the error code is PEAR.Functions.FunctionCallSignature.FirstArgumentPosition
      -- When using PSR2 or PSR12, the error code is PSR2.Methods.FunctionCallSignature.FirstArgumentPosition
    - PSR12.ControlStructures.BooleanOperatorPlacement no longer complains when multiple expression appears on the same line
      -- Previously, boolean operators were enforce to appear at the start or end of lines only
      -- Boolean operators can now appear in the middle of the line
    - PSR12.Files.FileHeader no longer ignores comments preceding a use, namespace, or declare statement
    - PSR12.Files.FileHeader now allows a hashbang line at the top of the file
    - Fixed bug #2506 : PSR2 standard can't auto fix multi-line function call inside a string concat statement
    - Fixed bug #2530 : PEAR.Commenting.FunctionComment does not support intersection types in comments
    - Fixed bug #2615 : Constant visibility false positive on non-class constants
    - Fixed bug #2616 : PSR12.Files.FileHeader false positive when file only contains docblock
    - Fixed bug #2619 : PSR12.Files.FileHeader locks up when inline comment is the last content in a file
    - Fixed bug #2621 : PSR12.Classes.AnonClassDeclaration.CloseBraceSameLine false positive for anon class passed as function argument
      -- Thanks to Martins Sipenko for the patch
    - Fixed bug #2623 : PSR12.ControlStructures.ControlStructureSpacing not ignoring indentation inside multi-line string arguments
    - Fixed bug #2624 : PSR12.Traits.UseDeclaration doesnt apply the correct indent during auto fixing
    - Fixed bug #2626 : PSR12.Files.FileHeader detects @var annotations as file docblocks
    - Fixed bug #2628 : PSR12.Traits.UseDeclaration does not allow comments above a USE declaration
    - Fixed bug #2632 : Incorrect indentation of lines starting with "static" inside closures
    - Fixed bug #2641 : PSR12.Functions.NullableTypeDeclaration false positive when using new static()
    </notes>
  </release>
  <release>
   <version>
    <release>3.5.0</release>
    <api>3.5.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2019-09-27</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The included PSR12 standard is now complete and ready to use
      -- Check your code using PSR-12 by running PHPCS with --standard=PSR12
    - Added support for PHP 7.4 typed properties
      -- The nullable operator is now tokenized as T_NULLABLE inside property types, as it is elsewhere
      -- To get the type of a member var, use the File::getMemberProperties() method, which now contains a "type" array index
         --- This contains the type of the member var, or a blank string if not specified
         --- If the type is nullable, the return type will contain the leading ?
         --- If a type is specified, the position of the first token in the type will be set in a "type_token" array index
         --- If a type is specified, the position of the last token in the type will be set in a "type_end_token" array index
         --- If the type is nullable, a "nullable_type" array index will also be set to TRUE
         --- If the type contains namespace information, it will be cleaned of whitespace and comments in the return value
    - The PSR1 standard now correctly bans alternate PHP tags
      -- Previously, it only banned short open tags and not the pre-7.0 alternate tags
    - Added support for only checking files that have been locally staged in a git repo
      -- Use --filter=gitstaged to check these files
      -- You still need to give PHPCS a list of files or directories in which to apply the filter
      -- Thanks to Juliette Reinders Folmer for the contribution
    - JSON reports now end with a newline character
    - The phpcs.xsd schema now validates phpcs-only and phpcbf-only attributes correctly
      -- Thanks to Juliette Reinders Folmer for the patch
    - The tokenizer now correctly identifies inline control structures in more cases
    - All helper methods inside the File class now throw RuntimeException instead of TokenizerException
      -- Some tokenizer methods were also throwing RuntimeExpection but now correctly throw TokenizerException
      -- Thanks to Juliette Reinders Folmer for the patch
    - The File::getMethodParameters() method now returns more information, and supports closure USE groups
      -- If a type hint is specified, the position of the last token in the hint will be set in a "type_hint_end_token" array index
      -- If a default is specified, the position of the first token in the default value will be set in a "default_token" array   index
      -- If a default is specified, the position of the equals sign will be set in a "default_equal_token" array index
      -- If the param is not the last, the position of the comma will be set in a "comma_token" array index
      -- If the param is passed by reference, the position of the reference operator will be set in a "reference_token" array index
      -- If the param is variable length, the position of the variadic operator will be set in a "variadic_token" array index
    - The T_LIST token and it's opening and closing parentheses now contain references to each other in the tokens array
      -- Uses the same parenthesis_opener/closer/owner indexes as other tokens
      -- Thanks to Juliette Reinders Folmer for the patch
    - The T_ANON_CLASS token and it's opening and closing parentheses now contain references to each other in the tokens array
      -- Uses the same parenthesis_opener/closer/owner indexes as other tokens
      -- Only applicable if the anon class is passing arguments to the constructor
      -- Thanks to Juliette Reinders Folmer for the patch
    - The PHP 7.4 T_BAD_CHARACTER token has been made available for older versions
      -- Allows you to safely look for this token, but it will not appear unless checking with PHP 7.4+
    - Metrics are now available for Squiz.WhiteSpace.FunctionSpacing
      -- Use the "info" report to see blank lines before/after functions
      -- Thanks to Juliette Reinders Folmer for the patch
    - Metrics are now available for Squiz.WhiteSpace.MemberVarSpacing
      -- Use the "info" report to see blank lines before member vars
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added Generic.ControlStructures.DisallowYodaConditions sniff
      -- Ban the use of Yoda conditions
      -- Thanks to Mponos George for the contribution
    - Added Generic.PHP.RequireStrictTypes sniff
      -- Enforce the use of a strict types declaration in PHP files
    - Added Generic.WhiteSpace.SpreadOperatorSpacingAfter sniff
      -- Checks whitespace between the spread operator and the variable/function call it applies to
      -- Thanks to Juliette Reinders Folmer for the contribution
    - Added PSR12.Classes.AnonClassDeclaration sniff
      -- Enforces the formatting of anonymous classes
    - Added PSR12.Classes.ClosingBrace sniff
      -- Enforces that closing braces of classes/interfaces/traits/functions are not followed by a comment or statement
    - Added PSR12.ControlStructures.BooleanOperatorPlacement sniff
      -- Enforces that boolean operators between conditions are consistently at the start or end of the line
    - Added PSR12.ControlStructures.ControlStructureSpacing sniff
      -- Enforces that spacing and indents are correct inside control structure parenthesis
    - Added PSR12.Files.DeclareStatement sniff
      -- Enforces the formatting of declare statements within a file
    - Added PSR12.Files.FileHeader sniff
      -- Enforces the order and formatting of file header blocks
    - Added PSR12.Files.ImportStatement sniff
      -- Enforces the formatting of import statements within a file
    - Added PSR12.Files.OpenTag sniff
      -- Enforces that the open tag is on a line by itself when used at the start of a php-only file
    - Added PSR12.Functions.ReturnTypeDeclaration sniff
      -- Enforces the formatting of return type declarations in functions and closures
    - Added PSR12.Properties.ConstantVisibility sniff
      -- Enforces that constants must have their visibility defined
      -- Uses a warning instead of an error due to this conditionally requiring the project to support PHP 7.1+
    - Added PSR12.Traits.UseDeclaration sniff
      -- Enforces the formatting of trait import statements within a class
    - Generic.Files.LineLength ignoreComments property now ignores comments at the end of a line
        -- Previously, this property was incorrectly causing the sniff to ignore any line that ended with a comment
        -- Now, the trailing comment is not included in the line length, but the rest of the line is still checked
    - Generic.Files.LineLength now only ignores unwrappable comments when the comment is on a line by itself
        -- Previously, a short unwrappable comment at the end of the line would have the sniff ignore the entire line
    - Generic.Functions.FunctionCallArgumentSpacing no longer checks spacing around assignment operators inside function calls
      -- Use the Squiz.WhiteSpace.OperatorSpacing sniff to enforce spacing around assignment operators
         --- Note that this sniff checks spacing around all assignment operators, not just inside function calls
      -- The Generic.Functions.FunctionCallArgumentSpacing.NoSpaceBeforeEquals error has been removed
         --- use Squiz.WhiteSpace.OperatorSpacing.NoSpaceBefore instead
      -- The Generic.Functions.FunctionCallArgumentSpacing.NoSpaceAfterEquals error has been removed
         --- use Squiz.WhiteSpace.OperatorSpacing.NoSpaceAfter instead
      -- This also changes the PEAR/PSR2/PSR12 standards so they no longer check assignment operators inside function calls
         --- They were previously checking these operators when they should not have
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.WhiteSpace.ScopeIndent no longer performs exact indents checking for chained method calls
      -- Other sniffs can be used to enforce chained method call indent rules
      -- Thanks to Pieter Frenssen for the patch
    - PEAR.WhiteSpace.ObjectOperatorIndent now supports multi-level chained statements
      -- When enabled, chained calls must be indented 1 level more or less than the previous line
      -- Set the new "multilevel" setting to TRUE in a ruleset.xml file to enable this behaviour
      -- Thanks to Marcos Passos for the patch
    - PSR2.ControlStructures.ControlStructureSpacing now allows whitespace after the opening parenthesis if followed by a comment
      -- Thanks to Michał Bundyra for the patch
    - PSR2.Classes.PropertyDeclaration now enforces a single space after a property type keyword
      -- The PSR2 standard itself excludes this new check as it is not defined in the written standard
      -- Using the PSR12 standard will enforce this check
    - Squiz.Commenting.BlockComment no longer requires blank line before comment if it's the first content after the PHP open tag
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Functions.FunctionDeclarationArgumentSpacing now has more accurate error messages
      -- This includes renaming the SpaceAfterDefault error code to SpaceAfterEquals, which reflects the real error
    - Squiz.Functions.FunctionDeclarationArgumentSpacing now checks for no space after a reference operator
      -- If you don't want this new behaviour, exclude the SpacingAfterReference error message in a ruleset.xml file
    - Squiz.Functions.FunctionDeclarationArgumentSpacing now checks for no space after a variadic operator
      -- If you don't want this new behaviour, exclude the SpacingAfterVariadic error message in a ruleset.xml file
    - Squiz.Functions.MultiLineFunctionDeclaration now has improved fixing for the FirstParamSpacing and UseFirstParamSpacing errors
    - Squiz.Operators.IncrementDecrementUsage now suggests pre-increment of variables instead of post-increment
      -- This change does not enforce pre-increment over post-increment; only the suggestion has changed
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.PHP.DisallowMultipleAssignments now has a second error code for when assignments are found inside control structure   conditions
      -- The new error code is Squiz.PHP.DisallowMultipleAssignments.FoundInControlStructure
      -- All other multiple assignment cases use the existing error code Squiz.PHP.DisallowMultipleAssignments.Found
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.WhiteSpace.FunctionSpacing now applies beforeFirst and afterLast spacing rules to nested functions
      -- Previously, these rules only applied to the first and last function in a class, interface, or trait
      -- These rules now apply to functions nested in any statement block, including other functions and conditions
    - Squiz.WhiteSpace.OperatorSpacing now has improved handling of parse errors
        -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.WhiteSpace.OperatorSpacing now checks spacing around the instanceof operator
      -- Thanks to Jakub Chábek for the patch
    - Squiz.WhiteSpace.OperatorSpacing can now enforce a single space before assignment operators
      -- Previously, the sniff this spacing as multiple assignment operators are sometimes aligned
      -- Now, you can set the ignoreSpacingBeforeAssignments sniff property to FALSE to enable checking
      -- Default remains TRUE, so spacing before assignments is not checked by default
      -- Thanks to Jakub Chábek for the patch
    - Fixed bug #2391 : Sniff-specific ignore rules inside rulesets are filtering out too many files
      -- Thanks to Juliette Reinders Folmer and Willington Vega for the patch
    - Fixed bug #2478 : FunctionCommentThrowTag.WrongNumber when exception is thrown once but built conditionally
    - Fixed bug #2479 : Generic.WhiteSpace.ScopeIndent error when using array destructing with exact indent checking
    - Fixed bug #2498 : Squiz.Arrays.ArrayDeclaration.MultiLineNotAllowed autofix breaks heredoc
    - Fixed bug #2502 : Generic.WhiteSpace.ScopeIndent false positives with nested switch indentation and case fall-through
    - Fixed bug #2504 : Generic.WhiteSpace.ScopeIndent false positives with nested arrays and nowdoc string
    - Fixed bug #2511 : PSR2 standard not checking if closing paren of single-line function declaration is on new line
    - Fixed bug #2512 : Squiz.PHP.NonExecutableCode does not support alternate SWITCH control structure
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2522 : Text generator throws error when code sample line is too long
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2526 : XML report format has bad syntax on Windows
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2529 : Generic.Formatting.MultipleStatementAlignment wrong error for assign in string concat
    - Fixed bug #2534 : Unresolvable installed_paths can lead to open_basedir errors
      -- Thanks to Oliver Nowak for the patch
    - Fixed bug #2541 : Text doc generator does not allow for multi-line rule explanations
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2549 : Searching for a phpcs.xml file can throw warnings due to open_basedir restrictions
      -- Thanks to Matthew Peveler for the patch
    - Fixed bug #2558 : PHP 7.4 throwing offset syntax with curly braces is deprecated message
      -- Thanks to Matthew Peveler for the patch
    - Fixed bug #2561 : PHP 7.4 compatibility fix / implode argument order
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2562 : Inline WHILE triggers SpaceBeforeSemicolon incorrectly
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2565 : Generic.ControlStructures.InlineControlStructure confused by mixed short/long tags
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2566 : Author tag email validation doesn't support all TLDs
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2575 : Custom error messages don't have data replaced when cache is enabled
    - Fixed bug #2601 : Squiz.WhiteSpace.FunctionSpacing incorrect fix when spacing is 0
    - Fixed bug #2608 : PSR2 throws errors for use statements when multiple namespaces are defined in a file
    </notes>
  </release>
  <release>
   <version>
    <release>3.4.2</release>
    <api>3.4.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2019-04-11</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Squiz.Arrays.ArrayDeclaration now has improved handling of syntax errors
    - Fixed an issue where the PCRE JIT on PHP 7.3 caused PHPCS to die when using the parallel option
      -- PHPCS now disables the PCRE JIT before running
    - Fixed bug #2368 : MySource.PHP.AjaxNullComparison throws error when first function has no doc comment
    - Fixed bug #2414 : Indention false positive in switch/case/if combination
    - Fixed bug #2423 : Squiz.Formatting.OperatorBracket.MissingBrackets error with static
    - Fixed bug #2450 : Indentation false positive when closure containing nested IF conditions used as function argument
    - Fixed bug #2452 : LowercasePHPFunctions sniff failing on "new \File()"
    - Fixed bug #2453 : Squiz.CSS.SemicolonSpacingSniff false positive when style name proceeded by an asterisk
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2464 : Fixer conflict between Generic.WhiteSpace.ScopeIndent and Squiz.WhiteSpace.ScopeClosingBrace when class   indented 1 space
    - Fixed bug #2465 : Excluding a sniff by path is not working
    - Fixed bug #2467 : PHP open/close tags inside CSS files are replaced with internal PHPCS token strings when auto fixing
    </notes>
  </release>
  <release>
   <version>
    <release>3.4.1</release>
    <api>3.4.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2019-03-19</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The PEAR installable version of PHPCS was missing some files, which have been re-included in this release
      -- The code report was not previously available for PEAR installs
      -- The Generic.Formatting.SpaceBeforeCast sniff was not previously available for PEAR installs
      -- The Generic.WhiteSpace.LanguageConstructSpacing sniff was not previously available for PEAR installs
      -- Thanks to Juliette Reinders Folmer for the patch

    - PHPCS will now refuse to run if any of the required PHP extensions are not loaded
      -- Previously, PHPCS only relied on requirements being checked by PEAR and Composer
      -- Thanks to Juliette Reinders Folmer for the patch
    - Ruleset XML parsing errors are now displayed in a readable format so they are easier to correct
      -- Thanks to Juliette Reinders Folmer for the patch
    - The PSR2 standard no longer throws duplicate errors for spacing around FOR loop parentheses
      -- Thanks to Juliette Reinders Folmer for the patch
    - T_PHPCS_SET tokens now contain sniffCode, sniffProperty, and sniffPropertyValue indexes
      -- Sniffs can use this information instead of having to parse the token content manually
    - Added more guard code for syntax errors to various CSS sniffs
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.Commenting.DocComment error messages now contain the name of the comment tag that caused the error
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.ControlStructures.InlineControlStructure now handles syntax errors correctly
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.Debug.JSHint now longer requires rhino and can be run directly from the npm install
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.Files.LineEndings no longer adds superfluous new line at the end of JS and CSS files
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.Formatting.DisallowMultipleStatements no longer tries fix lines containing phpcs:ignore statements
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.Functions.FunctionCallArgumentSpacing now has improved performance and anonymous class support
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.WhiteSpace.ScopeIndent now respects changes to the "exact" property using phpcs:set mid-way through a file
      -- This allows you change the "exact" rule for only some parts of a file
    - Generic.WhiteSpace.ScopeIndent now disables exact indent checking inside all arrays
      -- Previously, this was only done when using long array syntax, but it now works for short array syntax as well
    - PEAR.Classes.ClassDeclaration now has improved handling of PHPCS annotations and tab indents
    - PSR12.Classes.ClassInstantiation has changed it's error code from MissingParenthesis to MissingParentheses
    - PSR12.Keywords.ShortFormTypeKeywords now ignores all spacing inside type casts during both checking and fixing
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Classes.LowercaseClassKeywords now examines the class keyword for anonymous classes
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.ControlStructures.ControlSignature now has improved handling of parse errors
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Commenting.PostStatementComment fixer no longer adds a blank line at the start of a JS file that begins with a comment
      -- Fixes a conflict between this sniff and the Squiz.WhiteSpace.SuperfluousWhitespace sniff
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Commenting.PostStatementComment now ignores comments inside control structure conditions, such as FOR loops
      -- Fixes a conflict between this sniff and the Squiz.ControlStructures.ForLoopDeclaration sniff
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Commenting.FunctionCommentThrowTag now has improved support for unknown exception types and namespaces
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.ControlStructures.ForLoopDeclaration has improved whitespace, closure, and empty expression support
      -- The SpacingAfterSecondNoThird error code has been removed as part of these fixes
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.CSS.ClassDefinitionOpeningBraceSpace now handles comments and indentation correctly
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.CSS.ClassDefinitionClosingBrace now handles comments, indentation, and multiple statements on the same line correctly
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.CSS.Opacity now handles comments correctly
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.CSS.SemicolonSpacing now handles comments and syntax errors correctly
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.NamingConventions.ValidVariableName now supports variables inside anonymous classes correctly
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.PHP.LowercasePHPFunctions now handles use statements, namespaces, and comments correctly
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.WhiteSpace.FunctionSpacing now fixes function spacing correctly when a function is the first content in a file
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.WhiteSpace.SuperfluousWhitespace no longer throws errors for spacing between functions and properties in anon classes
      -- Thanks to Juliette Reinders Folmer for the patch
    - Zend.Files.ClosingTag no longer adds a semi-colon during fixing of a file that only contains a comment
      -- Thanks to Juliette Reinders Folmer for the patch
    - Zend.NamingConventions.ValidVariableName now supports variables inside anonymous classes correctly
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2298 : PSR2.Classes.ClassDeclaration allows extended class on new line
      -- Thanks to Michał Bundyra for the patch
    - Fixed bug #2337 : Generic.WhiteSpace.ScopeIndent incorrect error when multi-line function call starts on same line as open   tag
    - Fixed bug #2348 : Cache not invalidated when changing a ruleset included by another
    - Fixed bug #2376 : Using __halt_compiler() breaks Generic.PHP.ForbiddenFunctions unless it's last in the function list
      -- Thanks to Sijun Zhu for the patch
    - Fixed bug #2393 : The gitmodified filter will infinitely loop when encountering deleted file paths
      -- Thanks to Lucas Manzke for the patch
    - Fixed bug #2396 : Generic.WhiteSpace.ScopeIndent incorrect error when multi-line IF condition mixed with HTML
    - Fixed bug #2431 : Use function/const not tokenized as T_STRING when preceded by comment
    </notes>
  </release>
  <release>
   <version>
    <release>3.4.0</release>
    <api>3.4.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2018-12-20</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The Generic.Formatting.NoSpaceAfterCast sniff has been deprecated and will be removed in version 4
      -- The functionality of this sniff is now available in the Generic.Formatting.SpaceAfterCast sniff
         --- Include the Generic.Formatting.SpaceAfterCast sniff and set the "spacing" property to "0"
      -- As soon as possible, replace all instances of the old sniff code with the new sniff code and property setting
         --- The existing sniff will continue to work until version 4 has been released

    - Rule include patterns in a ruleset.xml file are now evaluated as OR instead of AND
      -- Previously, a file had to match every include pattern and no exclude patterns to be included
      -- Now, a file must match at least one include pattern and no exclude patterns to be included
      -- This is a bug fix as include patterns are already documented to work this way
    - New token T_BITWISE_NOT added for the bitwise not operator
      -- This token was previously tokenized as T_NONE
      -- Any sniffs specifically looking for T_NONE tokens with a tilde as the contents must now also look for T_BITWISE_NOT
      -- Sniffs can continue looking for T_NONE as well as T_BITWISE_NOT to support older PHP_CodeSniffer versions
    - All types of binary casting are now tokenized as T_BINARY_CAST
      -- Previously, the 'b' in 'b"some string with $var"' would be a T_BINARY_CAST, but only when the string contained a var
      -- This change ensures the 'b' is always tokenized as T_BINARY_CAST
      -- This change also converts '(binary)' from T_STRING_CAST to T_BINARY_CAST
      -- Thanks to Juliette Reinders Folmer for the help with this patch
    - Array properties set inside a ruleset.xml file can now extend a previous value instead of always overwriting it
      -- e.g., if you include a ruleset that defines forbidden functions, can you now add to that list instead of having to   redefine it
      -- To use this feature, add extends="true" to the property tag
         --- e.g., property name="forbiddenFunctionNames" type="array" extend="true"
      -- Thanks to Michael Moravec for the patch
    - If $XDG_CACHE_HOME is set and points to a valid directory, it will be used for caching instead of the system temp directory
    - PHPCBF now disables parallel running if you are passing content on STDIN
      -- Stops an error from being shown after the fixed output is printed
    - The progress report now shows files with tokenizer errors as skipped (S) instead of a warning (W)
      -- The tokenizer error is still displayed in reports as normal
      -- Thanks to Juliette Reinders Folmer for the patch
    - The Squiz standard now ensures there is no space between an increment/decrement operator and its variable
    - The File::getMethodProperties() method now includes a has_body array index in the return value
      -- FALSE if the method has no body (as with abstract and interface methods) or TRUE otherwise
      -- Thanks to Chris Wilkinson for the patch
    - The File::getTokensAsString() method now throws an exception if the $start param is invalid
      -- If the $length param is invalid, an empty string will be returned
      -- Stops an infinite loop when the function is passed invalid data
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added new Generic.CodeAnalysis.EmptyPHPStatement sniff
      -- Warns when it finds empty PHP open/close tag combinations or superfluous semicolons
      -- Thanks to Juliette Reinders Folmer for the contribution
    - Added new Generic.Formatting.SpaceBeforeCast sniff
      -- Ensures there is exactly 1 space before a type cast, unless the cast statement is indented or multi-line
      -- Thanks to Juliette Reinders Folmer for the contribution
    - Added new Generic.VersionControl.GitMergeConflict sniff
      -- Detects merge conflict artifacts left in files
      -- Thanks to Juliette Reinders Folmer for the contribution
    - Added Generic.WhiteSpace.IncrementDecrementSpacing sniff
      -- Ensures there is no space between the operator and the variable it applies to
      -- Thanks to Juliette Reinders Folmer for the contribution
    - Added PSR12.Functions.NullableTypeDeclaration sniff
      -- Ensures there is no space after the question mark in a nullable type declaration
      -- Thanks to Timo Schinkel for the contribution
    - A number of sniffs have improved support for methods in anonymous classes
      -- These sniffs would often throw the same error twice for functions in nested classes
      -- Error messages have also been changed to be less confusing
      -- The full list of affected sniffs is:
         --- Generic.NamingConventions.CamelCapsFunctionName
         --- PEAR.NamingConventions.ValidFunctionName
         --- PSR1.Methods.CamelCapsMethodName
         --- PSR2.Methods.MethodDeclaration
         --- Squiz.Scope.MethodScope
         --- Squiz.Scope.StaticThisUsage
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.CodeAnalysis.UnusedFunctionParameter now only skips functions with empty bodies when the class implements an   interface
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.CodeAnalysis.UnusedFunctionParameter now has additional error codes to indicate where unused params were found
      -- The new error code prefixes are:
         --- FoundInExtendedClass: when the class extends another
         --- FoundInImplementedInterface: when the class implements an interface
         --- Found: used in all other cases, including closures
      -- The new error code suffixes are:
         --- BeforeLastUsed: the unused param was positioned before the last used param in the function signature
         --- AfterLastUsed: the unused param was positioned after the last used param in the function signature
      -- This makes the new error code list for this sniff:
         --- Found
         --- FoundBeforeLastUsed
         --- FoundAfterLastUsed
         --- FoundInExtendedClass
         --- FoundInExtendedClassBeforeLastUsed
         --- FoundInExtendedClassAfterLastUsed
         --- FoundInImplementedInterface
         --- FoundInImplementedInterfaceBeforeLastUsed
         --- FoundInImplementedInterfaceAfterLastUsed
      -- These errors code make it easier for specific cases to be ignored or promoted using a ruleset.xml file
      -- Thanks to Juliette Reinders Folmer for the contribution
    - Generic.Classes.DuplicateClassName now inspects traits for duplicate names as well as classes and interfaces
      -- Thanks to Chris Wilkinson for the patch
    - Generic.Files.InlineHTML now ignores a BOM at the start of the file
      -- Thanks to Chris Wilkinson for the patch
    - Generic.PHP.CharacterBeforePHPOpeningTag now ignores a BOM at the start of the file
      -- Thanks to Chris Wilkinson for the patch
    - Generic.Formatting.SpaceAfterCast now has a setting to specify how many spaces are required after a type cast
      -- Default remains 1
      -- Override the "spacing" setting in a ruleset.xml file to change
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.Formatting.SpaceAfterCast now has a setting to ignore newline characters after a type cast
      -- Default remains FALSE, so newlines are not allowed
      -- Override the "ignoreNewlines" setting in a ruleset.xml file to change
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.Formatting.SpaceAfterNot now has a setting to specify how many spaces are required after a NOT operator
      -- Default remains 1
      -- Override the "spacing" setting in a ruleset.xml file to change
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.Formatting.SpaceAfterNot now has a setting to ignore newline characters after the NOT operator
      -- Default remains FALSE, so newlines are not allowed
      -- Override the "ignoreNewlines" setting in a ruleset.xml file to change
      -- Thanks to Juliette Reinders Folmer for the patch
    - PEAR.Functions.FunctionDeclaration now checks spacing before the opening parenthesis of functions with no body
      -- Thanks to Chris Wilkinson for the patch
    - PEAR.Functions.FunctionDeclaration now enforces no space before the semicolon in functions with no body
      -- Thanks to Chris Wilkinson for the patch
    - PSR2.Classes.PropertyDeclaration now checks the order of property modifier keywords
      -- This is a rule that is documented in PSR-2 but was not enforced by the included PSR2 standard until now
      -- This sniff is also able to fix the order of the modifier keywords if they are incorrect
      -- Thanks to Juliette Reinders Folmer for the patch
    - PSR2.Methods.MethodDeclaration now checks method declarations inside traits
      -- Thanks to Chris Wilkinson for the patch
    - Squiz.Commenting.InlineComment now has better detection of comment block boundaries
    - Squiz.Classes.ClassFileName now checks that a trait name matches the filename
      -- Thanks to Chris Wilkinson for the patch
    - Squiz.Classes.SelfMemberReference now supports scoped declarations and anonymous classes
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Classes.SelfMemberReference now fixes multiple errors at once, increasing fixer performance
      -- Thanks to Gabriel Ostrolucký for the patch
    - Squiz.Functions.LowercaseFunctionKeywords now checks abstract and final prefixes, and auto-fixes errors
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Objects.ObjectMemberComma.Missing has been renamed to Squiz.Objects.ObjectMemberComma.Found
      -- The error is thrown when the comma is found but not required, so the error code was incorrect
      -- If you are referencing the old error code in a ruleset XML file, please use the new code instead
      -- If you wish to maintain backwards compatibility, you can provide rules for both the old and new codes
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.WhiteSpace.ObjectOperatorSpacing is now more tolerant of parse errors
    - Squiz.WhiteSpace.ObjectOperatorSpacing now fixes errors more efficiently
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2109 : Generic.Functions.CallTimePassByReference false positive for bitwise and used in function argument
    - Fixed bug #2165 : Conflict between Squiz.Arrays.ArrayDeclaration and ScopeIndent sniffs when heredoc used in array
    - Fixed bug #2167 : Generic.WhiteSpace.ScopeIndent shows invalid error when scope opener indented inside inline HTML
    - Fixed bug #2178 : Generic.NamingConventions.ConstructorName matches methods in anon classes with same name as containing   class
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2190 : PEAR.Functions.FunctionCallSignature incorrect error when encountering trailing PHPCS annotation
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2194 : Generic.Whitespace.LanguageConstructSpacing should not be checking namespace operators
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2202 : Squiz.WhiteSpace.OperatorSpacing throws error for negative index when using curly braces for string   access
      -- Same issue fixed in Squiz.Formatting.OperatorBracket
      -- Thanks to Andreas Buchenrieder for the patch
    - Fixed bug #2210 : Generic.NamingConventions.CamelCapsFunctionName not ignoring SoapClient __getCookies() method
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2211 : PSR2.Methods.MethodDeclaration gets confused over comments between modifier keywords
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2212 : FUNCTION and CONST in use groups being tokenised as T_FUNCTION and T_CONST
      -- Thanks to Chris Wilkinson for the patch
    - Fixed bug #2214 : File::getMemberProperties() is recognizing method params as properties
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2236 : Memory info measurement unit is Mb but probably should be MB
    - Fixed bug #2246 : CSS tokenizer does not tokenize class names correctly when they contain the string NEW
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2278 : Squiz.Operators.ComparisonOperatorUsage false positive when inline IF contained in parentheses
      -- Thanks to Arnout Boks for the patch
    - Fixed bug #2284 : Squiz.Functions.FunctionDeclarationArgumentSpacing removing type hint during fixing
      -- Thanks to Michał Bundyra for the patch
    - Fixed bug #2297 : Anonymous class not tokenized correctly when used as argument to another anon class
      -- Thanks to Michał Bundyra for the patch
    </notes>
  </release>
  <release>
   <version>
    <release>2.9.2</release>
    <api>2.9.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2018-11-08</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - PHPCS should now run under PHP 7.3 without deprecation warnings
      -- Thanks to Nick Wilde for the patch
    - Fixed bug #1496 : Squiz.Strings.DoubleQuoteUsage not unescaping dollar sign when fixing
      -- Thanks to Michał Bundyra for the patch
    - Fixed bug #1549 : Squiz.PHP.EmbeddedPhp fixer conflict with // comment before PHP close tag
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1890 : Incorrect Squiz.WhiteSpace.ControlStructureSpacing.NoLineAfterClose error between catch and finally statements
    </notes>
  </release>
  <release>
   <version>
    <release>3.3.2</release>
    <api>3.3.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2018-09-24</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Fixed a problem where the report cache was not being cleared when the sniffs inside a standard were updated
    - The info report (--report=info) now has improved formatting for metrics that span multiple lines
      -- Thanks to Juliette Reinders Folmer for the patch
    - The unit test runner now skips .bak files when looking for test cases
      -- Thanks to Juliette Reinders Folmer for the patch
    - The Squiz standard now ensures underscores are not used to indicate visibility of private members vars and methods
      -- Previously, this standard enforced the use of underscores
    - Generic.PHP.NoSilencedErrors error messages now contain a code snippet to show the context of the error
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Arrays.ArrayDeclaration no longer reports errors for a comma on a line new after a here/nowdoc
      -- Also stops a parse error being generated when auto-fixing
      -- The SpaceBeforeComma error message has been changed to only have one data value instead of two
    - Squiz.Commenting.FunctionComment no longer errors when trying to fix indents of multi-line param comments
    - Squiz.Formatting.OperatorBracket now correctly fixes statements that contain strings
    - Squiz.PHP.CommentedOutCode now ignores more @-style annotations and includes better comment block detection
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed a problem where referencing a relative file path in a ruleset XML file could add unnecessary sniff exclusions
      -- This didn't actually exclude anything, but caused verbose output to list strange exclusion rules
    - Fixed bug #2110 : Squiz.WhiteSpace.FunctionSpacing is removing indents from the start of functions when fixing
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2115 : Squiz.Commenting.VariableComment not checking var types when the @var line contains a comment
    - Fixed bug #2120 : Tokenizer fails to match T_INLINE_ELSE when used after function call containing closure
    - Fixed bug #2121 : Squiz.PHP.DisallowMultipleAssignments false positive in while loop conditions
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2127 : File::findExtendedClassName() doesn't support nested classes
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2138 : Tokenizer detects wrong token for php ::class feature with spaces
    - Fixed bug #2143 : PSR2.Namespaces.UseDeclaration does not properly fix "use function" and "use const" statements
      -- Thanks to Chris Wilkinson for the patch
    - Fixed bug #2144 : Squiz.Arrays.ArrayDeclaration does incorrect align calculation in array with cyrillic keys
    - Fixed bug #2146 : Zend.Files.ClosingTag removes closing tag from end of file without inserting a semicolon
    - Fixed bug #2151 : XML schema not updated with the new array property syntax
    </notes>
  </release>
  <release>
   <version>
    <release>3.3.1</release>
    <api>3.3.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2018-07-27</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Support for HHVM has been dropped due to recent unfixed bugs and HHVM refocus on Hack only
      -- Thanks to Walt Sorensen and Juliette Reinders Folmer for helping to remove all HHVM exceptions from the core

    - The full report (the default report) now has improved word wrapping for multi-line messages and sniff codes
      -- Thanks to Juliette Reinders Folmer for the patch
    - The summary report now sorts files based on their directory location instead of just a basic string sort
      -- Thanks to Juliette Reinders Folmer for the patch
    - The source report now orders error codes by name when they have the same number of errors
      -- Thanks to Juliette Reinders Folmer for the patch
    - The junit report no longer generates validation errors with the Jenkins xUnit plugin
      -- Thanks to Nikolay Geo for the patch
    - Generic.Commenting.DocComment no longer generates the SpacingBeforeTags error if tags are the first content in the docblock
      -- The sniff will still generate a MissingShort error if there is no short comment
      -- This allows the MissingShort error to be suppressed in a ruleset to make short descriptions optional
    - Generic.Functions.FunctionCallArgumentSpacing now properly fixes multi-line function calls with leading commas
      -- Previously, newlines between function arguments would be removed
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.PHP.Syntax will now use PHP_BINARY instead of trying to discover the executable path
      -- This ensures that the sniff will always syntax check files using the PHP version that PHPCS is running under
      -- Setting the php_path config var will still override this value as normal
      -- Thanks to Willem Stuursma-Ruwen for the patch
    - PSR2.Namespaces.UseDeclaration now supports commas at the end of group use declarations
      -- Also improves checking and fixing for use statements containing parse errors
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Arrays.ArrayDeclaration no longer removes the array opening brace while fixing
      -- This could occur when the opening brace was on a new line and the first array key directly followed
      -- This change also stops the KeyNotAligned error message being incorrectly reported in these cases
    - Squiz.Arrays.ArrayDeclaration no longer tries to change multi-line arrays to single line when they contain comments
      -- Fixes a conflict between this sniff and some indentation sniffs
    - Squiz.Classes.ClassDeclaration no longer enforces spacing rules when a class is followed by a function
      -- Fixes a conflict between this sniff and the Squiz.WhiteSpace.FunctionSpacing sniff
    - The Squiz.Classes.ValidClassName.NotCamelCaps message now references PascalCase instead of CamelCase
      -- The "CamelCase class name" metric produced by the sniff has been changed to "PascalCase class name"
      -- This reflects the fact that the class name check is actually a Pascal Case check and not really Camel Case
      -- Thanks to Tom H Anderson for the patch
    - Squiz.Commenting.InlineComment no longer enforces spacing rules when an inline comment is followed by a docblock
      -- Fixes a conflict between this sniff and the Squiz.WhiteSpace.FunctionSpacing sniff
    - Squiz.WhiteSpace.OperatorSpacing no longer tries to fix operator spacing if the next content is a comment on a new line
      -- Fixes a conflict between this sniff and the Squiz.Commenting.PostStatementComment sniff
      -- Also stops PHPCS annotations from being moved to a different line, potentially changing their meaning
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.WhiteSpace.FunctionSpacing no longer checks spacing of functions at the top of an embedded PHP block
      -- Fixes a conflict between this sniff and the Squiz.PHP.EmbeddedPHP sniff
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.WhiteSpace.MemberVarSpacing no longer checks spacing before member vars that come directly after methods
      -- Fixes a conflict between this sniff and the Squiz.WhiteSpace.FunctionSpacing sniff
    - Squiz.WhiteSpace.SuperfluousWhitespace now recognizes unicode whitespace at the start and end of a file
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2029 : Squiz.Scope.MemberVarScope throws fatal error when a property is found in an interface
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2047 : PSR12.Classes.ClassInstantiation false positive when instantiating class from array index
    - Fixed bug #2048 : GenericFormatting.MultipleStatementAlignment false positive when assigning values inside an array
    - Fixed bug #2053 : PSR12.Classes.ClassInstantiation incorrectly fix when using member vars and some variable formats
    - Fixed bug #2065 : Generic.ControlStructures.InlineControlStructure fixing fails when inline control structure contains closure
    - Fixed bug #2072 : Squiz.Arrays.ArrayDeclaration throws NoComma error when array value is a shorthand IF statement
    - Fixed bug #2082 : File with "defined() or define()" syntax triggers PSR1.Files.SideEffects.FoundWithSymbols
    - Fixed bug #2095 : PSR2.Namespaces.NamespaceDeclaration does not handle namespaces defined over multiple lines
    </notes>
  </release>
  <release>
   <version>
    <release>3.3.0</release>
    <api>3.3.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2018-06-07</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The Squiz.WhiteSpace.LanguageConstructSpacing sniff has been deprecated and will be removed in version 4
      -- The sniff has been moved to the Generic standard, with a new code of Generic.WhiteSpace.LanguageConstructSpacing
      -- As soon as possible, replace all instances of the old sniff code with the new sniff code in your ruleset.xml files
         --- The existing Squiz sniff will continue to work until version 4 has been released
      -- The new Generic sniff now also checks many more language constructs to enforce additional spacing rules
         --- Thanks to Mponos George for the contribution

    - The current method for setting array properties in ruleset files has been deprecated and will be removed in version 4
      -- Currently, setting an array value uses the string syntax "print=>echo,create_function=>null"
      -- Now, individual array elements are specified using a new "element" tag with "key" and "value" attributes
         --- For example, element key="print" value="echo"
      -- Thanks to Michał Bundyra for the patch

    - The T_ARRAY_HINT token has been deprecated and will be removed in version 4
      -- The token was used to ensure array type hints were not tokenized as T_ARRAY, but no other type hints were given a special token
      -- Array type hints now use the standard T_STRING token instead
      -- Sniffs referencing this token type will continue to run without error until version 4, but will not find any T_ARRAY_HINT tokens

    - The T_RETURN_TYPE token has been deprecated and will be removed in version 4
      -- The token was used to ensure array/self/parent/callable return types were tokenized consistently
      -- For namespaced return types, only the last part of the string (the class name) was tokenized as T_RETURN_TYPE
      -- This was not consistent and so return types are now left using their original token types so they are not skipped by sniffs
         --- The exception are array return types, which are tokenized as T_STRING instead of T_ARRAY, as they are for type hints
      -- Sniffs referencing this token type will continue to run without error until version 4, but will not find any T_RETUTN_TYPE tokens
      -- To get the return type of a function, use the File::getMethodProperties() method, which now contains a "return_type" array index
         --- This contains the return type of the function or closer, or a blank string if not specified
         --- If the return type is nullable, the return type will contain the leading ?
             ---- A nullable_return_type array index in the return value will also be set to true
         --- If the return type contains namespace information, it will be cleaned of whitespace and comments
             ---- To access the original return value string, use the main tokens array

    - This release contains an incomplete version of the PSR-12 coding standard
      -- Errors found using this standard should be valid, but it will miss a lot of violations until it is complete
      -- If you'd like to test and help, you can use the standard by running PHPCS with --standard=PSR12

    - Config values set using --runtime-set now override any config values set in rulesets or the CodeSniffer.conf file
    - You can now apply include-pattern rules to individual message codes in a ruleset like you can with exclude-pattern rules
      -- Previously, include-pattern rules only applied to entire sniffs
      -- If a message code has both include and exclude patterns, the exclude patterns will be ignored
    - Using PHPCS annotations to selectively re-enable sniffs is now more flexible
      -- Previously, you could only re-enable a sniff/category/standard using the exact same code that was disabled
      -- Now, you can disable a standard and only re-enable a specific category or sniff
      -- Or, you can disable a specific sniff and have it re-enable when you re-enable the category or standard
    - The value of array sniff properties can now be set using phpcs:set annotations
      -- e.g., phpcs:set Standard.Category.SniffName property[] key=>value,key2=>value2
      -- Thanks to Michał Bundyra for the patch
    - PHPCS annotations now remain as T_PHPCS_* tokens instead of reverting to comment tokens when --ignore-annotations is used
      -- This stops sniffs (especially commenting sniffs) from generating a large number of false errors when ignoring
      -- Any custom sniffs that are using the T_PHPCS_* tokens to detect annotations may need to be changed to ignore them
         --- Check $phpcsFile->config->annotations to see if annotations are enabled and ignore when false
    - You can now use fully or partially qualified class names for custom reports instead of absolute file paths
      -- To support this, you must specify an autoload file in your ruleset.xml file and use it to register an autoloader
      -- Your autoloader will need to load your custom report class when requested
      -- Thanks to Juliette Reinders Folmer for the patch
    - The JSON report format now does escaping in error source codes as well as error messages
      -- Thanks to Martin Vasel for the patch
    - Invalid installed_paths values are now ignored instead of causing a fatal error
    - Improved testability of custom rulesets by allowing the installed standards to be overridden
      -- Thanks to Timo Schinkel for the patch
    - The key used for caching PHPCS runs now includes all set config values
      -- This fixes a problem where changing config values (e.g., via --runtime-set) used an incorrect cache file
    - The "Function opening brace placement" metric has been separated into function and closure metrics in the info report
      -- Closures are no longer included in the "Function opening brace placement" metric
      -- A new "Closure opening brace placement" metric now shows information for closures
    - Multi-line T_YIELD_FROM statements are now replicated properly for older PHP versions
    - The PSR2 standard no longer produces 2 error messages when the AS keyword in a foreach loop is not lowercase
    - Specifying a path to a non-existent dir when using the --report-[reportType]=/path/to/report CLI option no longer throws an exception
      -- This now prints a readable error message, as it does when using --report-file
    - The File::getMethodParamaters() method now includes a type_hint_token array index in the return value
      -- Provides the position in the token stack of the first token in the type hint
    - The File::getMethodProperties() method now includes a return_type_token array index in the return value
      -- Provides the position in the token stack of the first token in the return type
    - The File::getTokensAsString() method can now optionally return original (non tab-replaced) content
      -- Thanks to Juliette Reinders Folmer for the patch
    - Removed Squiz.PHP.DisallowObEndFlush from the Squiz standard
      -- If you use this sniff and want to continue banning ob_end_flush(), use Generic.PHP.ForbiddenFunctions instead
      -- You will need to set the forbiddenFunctions property in your ruleset.xml file
    - Removed Squiz.PHP.ForbiddenFunctions from the Squiz standard
      -- Replaced by using the forbiddenFunctions property of Generic.PHP.ForbiddenFunctions in the Squiz ruleset.xml
      -- Functionality of the Squiz standard remains the same, but the error codes are now different
      -- Previously, Squiz.PHP.ForbiddenFunctions.Found and Squiz.PHP.ForbiddenFunctions.FoundWithAlternative
      -- Now, Generic.PHP.ForbiddenFunctions.Found and Generic.PHP.ForbiddenFunctions.FoundWithAlternative
    - Added new Generic.PHP.LowerCaseType sniff
      -- Ensures PHP types used for type hints, return types, and type casting are lowercase
      -- Thanks to Juliette Reinders Folmer for the contribution
    - Added new Generic.WhiteSpace.ArbitraryParenthesesSpacing sniff
      -- Generates an error for whitespace inside parenthesis that don't belong to a function call/declaration or control structure
      -- Generates a warning for any empty parenthesis found
      -- Allows the required spacing to be set using the spacing sniff property (default is 0)
      -- Allows newlines to be used by setting the ignoreNewlines sniff property (default is false)
      -- Thanks to Juliette Reinders Folmer for the contribution
    - Added new PSR12.Classes.ClassInstantiation sniff
      -- Ensures parenthesis are used when instantiating a new class
    - Added new PSR12.Keywords.ShortFormTypeKeywords sniff
      -- Ensures the short form of PHP types is used when type casting
    - Added new PSR12.Namespaces.CompundNamespaceDepth sniff
      -- Ensures compound namespace use statements have a max depth of 2 levels
      -- The max depth can be changed by setting the 'maxDepth' sniff property in a ruleset.xml file
    - Added new PSR12.Operators.OperatorSpacing sniff
      -- Ensures operators are preceded and followed by at least 1 space
    - Improved core support for grouped property declarations
      -- Also improves support in Squiz.WhiteSpace.ScopeKeywordSpacing and Squiz.WhiteSpace.MemberVarSpacing
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.Commenting.DocComment now produces a NonParamGroup error when tags are mixed in with the @param tag group
      -- It would previously throw either a NonParamGroup or ParamGroup error depending on the order of tags
      -- This change allows the NonParamGroup error to be suppressed in a ruleset to allow the @param group to contain other tags
      -- Thanks to Phil Davis for the patch
    - Generic.Commenting.DocComment now continues checks param tags even if the doc comment short description is missing
      -- This change allows the MissingShort error to be suppressed in a ruleset without all other errors being suppressed as well
      -- Thanks to Phil Davis for the patch
    - Generic.CodeAnalysis.AssignmentInCondition now reports a different error code for assignments found in WHILE conditions
      -- The return value of a function call is often assigned in a WHILE condition, so this change makes it easier to exclude these cases
      -- The new code for this error message is Generic.CodeAnalysis.AssignmentInCondition.FoundInWhileCondition
      -- The error code for all other cases remains as Generic.CodeAnalysis.AssignmentInCondition.Found
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.Functions.OpeningFunctionBraceBsdAllman now longer leaves trailing whitespace when moving the opening brace during fixing
      -- Also applies to fixes made by PEAR.Functions.FunctionDeclaration and Squiz.Functions.MultiLineFunctionDeclaration
    - Generic.WhiteSpace.ScopeIndent now does a better job of fixing the indent of multi-line comments
    - Generic.WhiteSpace.ScopeIndent now does a better job of fixing the indent of PHP open and close tags
    - PEAR.Commenting.FunctionComment now report a different error code for param comment lines with too much padding
      -- Previously, any lines of a param comment that don't start at the exact comment position got the same error code
      -- Now, only comment lines with too little padding use ParamCommentAlignment as they are clearly mistakes
      -- Comment lines with too much padding may be using precision alignment as now use ParamCommentAlignmentExceeded
      -- This allows for excessive padding to be excluded from a ruleset while continuing to enforce a minimum padding
    - PEAR.WhiteSpace.ObjectOperatorIndent now checks the indent of more chained operators
      -- Previously, it only checked chains beginning with a variable
      -- Now, it checks chains beginning with function calls, static class names, etc
    - Squiz.Arrays.ArrayDeclaration now continues checking array formatting even if the key indent is not correct
      -- Allows for using different array indent rules while still checking/fixing double arrow and value alignment
    - Squiz.Commenting.BlockComment has improved support for tab-indented comments
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Commenting.BlockComment auto fixing no longer breaks when two block comments follow each other
      -- Also stopped single-line block comments from being auto fixed when they are embedded in other code
      -- Also fixed as issue found when PHPCS annotations were used inside a block comment
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Commenting.BlockComment.LastLineIndent is now able to be fixed with phpcbf
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Commenting.BlockComment now aligns star-prefixed lines under the opening tag while fixing, instead of indenting them
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Commenting.FunctionComment.IncorrectTypeHint message no longer contains cut-off suggested type hints
    - Squiz.Commenting.InlineComment now uses a new error code for inline comments at the end of a function
      -- Previously, all inline comments followed by a blank line threw a Squiz.Commenting.InlineComment.SpacingAfter error
      -- Now, inline comments at the end of a function will instead throw Squiz.Commenting.InlineComment.SpacingAfterAtFunctionEnd
      -- If you previously excluded SpacingAfter, add an exclusion for SpacingAfterAtFunctionEnd to your ruleset as well
      -- If you previously only included SpacingAfter, consider including SpacingAfterAtFunctionEnd as well
      -- The Squiz standard now excludes SpacingAfterAtFunctionEnd as the blank line is checked elsewhere
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.ControlStructures.ControlSignature now errors when a comment follows the closing brace of an earlier body
      -- Applies to catch, finally, else, elseif, and do/while structures
      -- The included PSR2 standard now enforces this rule
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Formatting.OperatorBracket.MissingBrackets message has been changed to remove the word "arithmetic"
      -- The sniff checks more than just arithmetic operators, so the message is now clearer
    - Sniffs.Operators.ComparisonOperatorUsage now detects more cases of implicit true comparisons
      -- It could previously be confused by comparisons used as function arguments
    - Squiz.PHP.CommentedOutCode now ignores simple @-style annotation comments so they are not flagged as commented out code
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.PHP.CommentedOutCode now ignores a greater number of short comments so they are not flagged as commented out code
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.PHP.DisallowComparisonAssignment no longer errors when using the null coalescing operator
      -- Given this operator is used almost exclusively to assign values, it didn't make sense to generate an error
    - Squiz.WhiteSpacing.FunctionSpacing now has a property to specify how many blank lines should be before the first class method
      -- Only applies when a method is the first code block in a class (i.e., there are no member vars before it)
      -- Override the 'spacingBeforeFirst' property in a ruleset.xml file to change
      -- If not set, the sniff will use whatever value is set for the existing 'spacing' property
    - Squiz.WhiteSpacing.FunctionSpacing now has a property to specify how many blank lines should be after the last class method
      -- Only applies when a method is the last code block in a class (i.e., there are no member vars after it)
      -- Override the 'spacingAfterLast' property in a ruleset.xml file to change
      -- If not set, the sniff will use whatever value is set for the existing 'spacing' property
    - Fixed bug #1863 : File::findEndOfStatement() not working when passed a scope opener
    - Fixed bug #1876 : PSR2.Namespaces.UseDeclaration not giving error for use statements before the namespace declaration
      -- Adds a new PSR2.Namespaces.UseDeclaration.UseBeforeNamespace error message
    - Fixed bug #1881 : Generic.Arrays.ArrayIndent is indenting sub-arrays incorrectly when comma not used after the last value
    - Fixed bug #1882 : Conditional with missing braces confused by indirect variables
    - Fixed bug #1915 : JS tokenizer fails to tokenize regular expression proceeded by boolean not operator
    - Fixed bug #1920 : Directory exclude pattern improperly excludes files with names that start the same
      -- Thanks to Jeff Puckett for the patch
    - Fixed bug #1922 : Equal sign alignment check broken when list syntax used before assignment operator
    - Fixed bug #1925 : Generic.Formatting.MultipleStatementAlignment skipping assignments within closures
    - Fixed bug #1931 : Generic opening brace placement sniffs do not correctly support function return types
    - Fixed bug #1932 : Generic.ControlStructures.InlineControlStructure fixer moves new PHPCS annotations
    - Fixed bug #1938 : Generic opening brace placement sniffs incorrectly move PHPCS annotations
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1939 : phpcs:set annotations do not cause the line they are on to be ignored
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1949 : Squiz.PHP.DisallowMultipleAssignments false positive when using namespaces with static assignments
    - Fixed bug #1959 : SquizMultiLineFunctionDeclaration error when param has trailing comment
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1963 : Squiz.Scope.MemberVarScope does not work for multiline member declaration
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1971 : Short array list syntax not correctly tokenized if short array is the first content in a file
    - Fixed bug #1979 : Tokenizer does not change heredoc to nowdoc token if the start tag contains spaces
    - Fixed bug #1982 : Squiz.Arrays.ArrayDeclaration fixer sometimes puts a comma in front of the last array value
    - Fixed bug #1993 : PSR1/PSR2 not reporting or fixing short open tags
    - Fixed bug #1996 : Custom report paths don't work on case-sensitive filesystems
    - Fixed bug #2006 : Squiz.Functions.FunctionDeclarationArgumentSpacing fixer removes comment between parens when no args
      -- The SpacingAfterOpenHint error message has been removed
         --- It is replaced by the the existing SpacingAfterOpen message
      -- The error message format for the SpacingAfterOpen and SpacingBeforeClose messages has been changed
         --- These used to contain 3 pieces of data, but now only contain 2
      -- If you have customised the error messages of this sniff, please review your ruleset after upgrading
    - Fixed bug #2018 : Generic.Formatting.MultipleStatementAlignment does see PHP close tag as end of statement block
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #2027 : PEAR.NamingConventions.ValidFunctionName error when function name includes double underscore
      -- Thanks to Juliette Reinders Folmer for the patch
    </notes>
  </release>
  <release>
   <version>
    <release>3.2.3</release>
    <api>3.2.3</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2018-02-21</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The new phpcs: comment syntax can now be prefixed with an at symbol ( @phpcs: )
      -- This restores the behaviour of the previous syntax where these comments are ignored by doc generators
    - The current PHP version ID is now used to generate cache files
      -- This ensures that only cache files generated by the current PHP version are selected
      -- This change fixes caching issues when using sniffs that produce errors based on the current PHP version
    - A new Tokens::$phpcsCommentTokens array is now available for sniff developers to detect phpcs: comment syntax
      -- Thanks to Juliette Reinders Folmer for the patch
    - The PEAR.Commenting.FunctionComment.Missing error message now includes the name of the function
      -- Thanks to Yorman Arias for the patch
    - The PEAR.Commenting.ClassComment.Missing and Squiz.Commenting.ClassComment.Missing error messages now include the name of the class
      -- Thanks to Yorman Arias for the patch
    - PEAR.Functions.FunctionCallSignature now only forces alignment at a specific tab stop while fixing
      -- It was enforcing this during checking, but this meant invalid errors if the OpeningIndent message was being muted
      -- This fixes incorrect errors when using the PSR2 standard with some code blocks
    - Generic.Files.LineLength now ignores lines that only contain phpcs: annotation comments
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.Formatting.MultipleStatementAlignment now skips over arrays containing comments
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.PHP.Syntax now forces display_errors to ON when linting
      -- Thanks to Raúl Arellano for the patch
    - PSR2.Namespaces.UseDeclaration has improved syntax error handling and closure detection
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.PHP.CommentedOutCode now has improved comment block detection for improved accuracy
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.PHP.NonExecutableCode could fatal error while fixing file with syntax error
    - Squiz.PHP.NonExecutableCode now detects unreachable code after a goto statement
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.WhiteSpace.LanguageConstructSpacing has improved syntax error handling while fixing
      -- Thanks to Juliette Reinders Folmer for the patch
    - Improved phpcs: annotation syntax handling for a number of sniffs
      -- Thanks to Juliette Reinders Folmer for the patch
    - Improved auto-fixing of files with incomplete comment blocks for various commenting sniffs
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed test suite compatibility with PHPUnit 7
    - Fixed bug #1793 : PSR2 forcing exact indent for function call opening statements
    - Fixed bug #1803 : Squiz.WhiteSpace.ScopeKeywordSpacing removes member var name while fixing if no space after scope keyword
    - Fixed bug #1817 : Blank line not enforced after control structure if comment on same line as closing brace
    - Fixed bug #1827 : A phpcs:enable comment is not tokenized correctly if it is outside a phpcs:disable block
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1828 : Squiz.WhiteSpace.SuperfluousWhiteSpace ignoreBlankLines property ignores whitespace after single line comments
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1840 : When a comment has too many asterisks, phpcbf gives FAILED TO FIX error
    - Fixed bug #1867 : Cant use phpcs:ignore where the next line is HTML
    - Fixed bug #1870 : Invalid warning in multiple assignments alignment with closure or anon class
    - Fixed bug #1890 : Incorrect Squiz.WhiteSpace.ControlStructureSpacing.NoLineAfterClose error between catch and finally statements
    - Fixed bug #1891 : Comment on last USE statement causes false positive for PSR2.Namespaces.UseDeclaration.SpaceAfterLastUse
      -- Thanks to Matt Coleman, Daniel Hensby, and Juliette Reinders Folmer for the patch
    - Fixed bug #1901 : Fixed PHPCS annotations in multi-line tab-indented comments + not ignoring whole line for phpcs:set
      -- Thanks to Juliette Reinders Folmer for the patch
    </notes>
  </release>
  <release>
   <version>
    <release>3.2.2</release>
    <api>3.2.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-12-20</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Disabled STDIN detection on Windows
      -- This fixes a problem with IDE plugins (e.g., PHPStorm) hanging on Windows
    </notes>
  </release>
  <release>
   <version>
    <release>3.2.1</release>
    <api>3.2.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-12-18</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Fixed problems with some scripts and plugins waiting for STDIN
      -- This was a notable problem with IDE plugins (e.g., PHPStorm) and build systems
    - Empty diffs are no longer followed by a newline character (request #1781)
    - Generic.Functions.OpeningFunctionBraceKernighanRitchie no longer complains when the open brace is followed by a close tag
      -- This makes the sniff more useful when used in templates
      -- Thanks to Joseph Zidell for the patch
    - Fixed bug #1782 : Incorrect detection of operator in ternary + anonymous function
    </notes>
  </release>
  <release>
   <version>
    <release>3.2.0</release>
    <api>3.2.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-12-13</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - This release deprecates the @codingStandards comment syntax used for sending commands to PHP_CodeSniffer
      -- The existing syntax will continue to work in all version 3 releases, but will be removed in version 4
      -- The comment formats have been replaced by a shorter syntax:
         --- @codingStandardsIgnoreFile becomes phpcs:ignoreFile
         --- @codingStandardsIgnoreStart becomes phpcs:disable
         --- @codingStandardsIgnoreEnd becomes phpcs:enable
         --- @codingStandardsIgnoreLine becomes phpcs:ignore
         --- @codingStandardsChangeSetting becomes phpcs:set
      -- The new syntax allows for additional developer comments to be added after a -- separator
         --- This is useful for describing why a code block is being ignored, or why a setting is being changed
         --- E.g., phpcs:disable -- This code block must be left as-is.
      -- Comments using the new syntax are assigned new comment token types to allow them to be detected:
         --- phpcs:ignoreFile has the token T_PHPCS_IGNORE_FILE
         --- phpcs:disable has the token T_PHPCS_DISABLE
         --- phpcs:enable has the token T_PHPCS_ENABLE
         --- phpcs:ignore has the token T_PHPCS_IGNORE
         --- phpcs:set has the token T_PHPCS_SET

    - The phpcs:disable and phpcs:ignore comments can now selectively ignore specific sniffs (request #604)
      -- E.g., phpcs:disable Generic.Commenting.Todo.Found for a specific message
      -- E.g., phpcs:disable Generic.Commenting.Todo for a whole sniff
      -- E.g., phpcs:disable Generic.Commenting for a whole category of sniffs
      -- E.g., phpcs:disable Generic for a whole standard
      -- Multiple sniff codes can be specified by comma separating them
         --- E.g., phpcs:disable Generic.Commenting.Todo,PSR1.Files
    - @codingStandardsIgnoreLine comments now only ignore the following line if they are on a line by themselves
      -- If they are at the end of an existing line, they will only ignore the line they are on
      -- Stops some lines from accidentally being ignored
      -- Same rule applies for the new phpcs:ignore comment syntax
    - PSR1.Files.SideEffects now respects the new phpcs:disable comment syntax
      -- The sniff will no longer check any code that is between phpcs:disable and phpcs:enable comments
      -- The sniff does not support phpcs:ignore; you must wrap code structures with disable/enable comments
      -- Previously, there was no way to have this sniff ignore parts of a file
    - Fixed a problem where PHPCS would sometimes hang waiting for STDIN, or read incomplete versions of large files
      -- Thanks to Arne Jørgensen for the patch
    - Array properties specified in ruleset files now have their keys and values trimmed
      -- This saves having to do this in individual sniffs and stops errors introduced by whitespace in rulesets
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added phpcs.xsd to allow validation of ruleset XML files
      -- Thanks to Renaat De Muynck for the contribution
    - File paths specified using --stdin-path can now point to fake file locations (request #1488)
      -- Previously, STDIN files using fake file paths were excluded from checking
    - Setting an empty basepath (--basepath=) on the CLI will now clear a basepath set directly in a ruleset
      -- Thanks to Xaver Loppenstedt for the patch
    - Ignore patterns are now checked on symlink target paths instead of symlink source paths
      -- Restores previous behaviour of this feature
    - Metrics were being double counted when multiple sniffs were recording the same metric
    - Added support for bash process substitution
      -- Thanks to Scott Dutton for the contribution
    - Files included in the cache file code hash are now sorted to aid in cache file reuse across servers
    - Windows BAT files can now be used outside a PEAR install
      -- You must have the path to PHP set in your PATH environment variable
      -- Thanks to Joris Debonnet for the patch
    - The JS unsigned right shift assignment operator is now properly classified as an assignment operator
      -- Thanks to Juliette Reinders Folmer for the patch
    - The AbstractVariableSniff abstract sniff now supports anonymous classes and nested functions
      -- Also fixes an issue with Squiz.Scope.MemberVarScope where member vars of anonymous classes were not being checked
    - Added AbstractArraySniff to make it easier to create sniffs that check array formatting
      -- Allows for checking of single and multi line arrays easily
      -- Provides a parsed structure of the array including positions of keys, values, and double arrows
    - Added Generic.Arrays.ArrayIndent to enforce a single tab stop indent for array keys in multi-line arrays
     -- Also ensures the close brace is on a new line and indented to the same level as the original statement
     -- Allows for the indent size to be set using an "indent" property of the sniff
    - Added Generic.PHP.DiscourageGoto to warn about the use of the GOTO language construct
      -- Thanks to Juliette Reinders Folmer for the contribution
    - Generic.Debug.ClosureLinter was not running the gjslint command
      -- Thanks to Michał Bundyra for the patch
    - Generic.WhiteSpace.DisallowSpaceIndent now fixes space indents in multi-line block comments
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.WhiteSpace.DisallowSpaceIndent now fixes mixed space/tab indents more accurately
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.WhiteSpace.DisallowTabIndent now fixes tab indents in multi-line block comments
      -- Thanks to Juliette Reinders Folmer for the patch
    - PEAR.Functions.FunctionDeclaration no longer errors when a function declaration is the first content in a JS file
      -- Thanks to Juliette Reinders Folmer for the patch
    - PEAR.Functions.FunctionCallSignature now requires the function name to be indented to an exact tab stop
      -- If the function name is not the start of the statement, the opening statement must be indented correctly instead
      -- Added a new fixable error code PEAR.Functions.FunctionCallSignature.OpeningIndent for this error
    - Squiz.Functions.FunctionDeclarationArgumentSpacing is no longer confused about comments in function declarations
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.PHP.NonExecutableCode error messages now indicate which line the code block ending is on
      -- Makes it easier to identify where the code block exited or returned
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Commenting.FunctionComment now supports nullable type hints
    - Squiz.Commenting.FunctionCommentThrowTag no longer assigns throw tags inside anon classes to the enclosing function
    - Squiz.WhiteSpace.SemicolonSpacing now ignores semicolons used for empty statements inside FOR conditions
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.ControlStructures.ControlSignature now allows configuring the number of spaces before the colon in alternative syntax
      -- Override the 'requiredSpacesBeforeColon' setting in a ruleset.xml file to change
      -- Default remains at 1
      -- Thanks to Nikola Kovacs for the patch
    - The Squiz standard now ensures array keys are indented 4 spaces from the main statement
      -- Previously, this standard aligned keys 1 space from the start of the array keyword
    - The Squiz standard now ensures array end braces are aligned with the main statement
      -- Previously, this standard aligned the close brace with the start of the array keyword
    - The standard for PHP_CodeSniffer itself now enforces short array syntax
    - The standard for PHP_CodeSniffer itself now uses the Generic.Arrays/ArrayIndent sniff rules
    - Improved fixer conflicts and syntax error handling for a number of sniffs
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1462 : Error processing cyrillic strings in Tokenizer
    - Fixed bug #1573 : Squiz.WhiteSpace.LanguageConstructSpacing does not properly check for tabs and newlines
      -- Thanks to Michał Bundyra for the patch
    - Fixed bug #1590 : InlineControlStructure CBF issue while adding braces to an if thats returning a nested function
    - Fixed bug #1718 : Unclosed strings at EOF sometimes tokenized as T_WHITESPACE by the JS tokenizer
    - Fixed bug #1731 : Directory exclusions do not work as expected when a single file name is passed to phpcs
    - Fixed bug #1737 : Squiz.CSS.EmptyStyleDefinition sees comment as style definition and fails to report error
    - Fixed bug #1746 : Very large reports can sometimes become garbled when using the parallel option
    - Fixed bug #1747 : Squiz.Scope.StaticThisUsage incorrectly looking inside closures
    - Fixed bug #1757 : Unknown type hint "object" in Squiz.Commenting.FunctionComment
    - Fixed bug #1758 : PHPCS gets stuck creating file list when processing circular symlinks
    - Fixed bug #1761 : Generic.WhiteSpace.ScopeIndent error on multi-line function call with static closure argument
    - Fixed bug #1762 : Generic.WhiteSpace.Disallow[Space/Tab]Indent not inspecting content before open tag
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1769 : Custom "define" function triggers a warning about declaring new symbols
    - Fixed bug #1776 : Squiz.Scope.StaticThisUsage incorrectly looking inside anon classes
    - Fixed bug #1777 : Generic.WhiteSpace.ScopeIndent incorrect indent errors when self called function proceeded by comment
   </notes>
  </release>
  <release>
   <version>
    <release>3.1.1</release>
    <api>3.1.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-10-17</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Restored preference of non-dist files over dist files for phpcs.xml and phpcs.xml.dist
      -- The order that the files are searched is now: .phpcs.xml, phpcs.xml, .phpcs.xml.dist, phpcs.xml.dist
      -- Thanks to Juliette Reinders Folmer for the patch
    - Progress output now correctly shows skipped files
    - Progress output now shows 100% when the file list has finished processing (request #1697)
    - Stopped some IDEs complaining about testing class aliases
      -- Thanks to Vytautas Stankus for the patch
    - Squiz.Commenting.InlineComment incorrectly identified comment blocks in some cases, muting some errors
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1512 : PEAR.Functions.FunctionCallSignature enforces spaces when no arguments if required spaces is not 0
    - Fixed bug #1522 : Squiz Arrays.ArrayDeclaration and Strings.ConcatenationSpacing fixers causing parse errors with here/  nowdocs
    - Fixed bug #1570 : Squiz.Arrays.ArrayDeclaration fixer removes comments between array keyword and open parentheses
    - Fixed bug #1604 : File::isReference has problems with some bitwise operators and class property references
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1645 : Squiz.Commenting.InlineComment will fail to fix comments at the end of the file
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1656 : Using the --sniffs argument has a problem with case sensitivity
    - Fixed bug #1657 : Uninitialized string offset: 0 when sniffing CSS
    - Fixed bug #1669 : Temporary expression proceeded by curly brace is detected as function call
    - Fixed bug #1681 : Huge arrays are super slow to scan with Squiz.Arrays.ArrayDeclaration sniff
    - Fixed bug #1694 : Squiz.Arrays.ArrayBracketSpacing is removing some comments during fixing
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1702 : Generic.WhiteSpaceDisallowSpaceIndent fixer bug when line only contains superfluous whitespace
    </notes>
  </release>
  <release>
   <version>
    <release>3.1.0</release>
    <api>3.1.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-09-20</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - This release includes a change to support newer versions of PHPUnit (versions 4, 5, and 6 are now supported)
     -- The custom PHP_CodeSniffer test runner now requires a bootstrap file
     -- Developers with custom standards using the PHP_CodeSniffer test runner will need to do one of the following:
        --- run your unit tests from the PHP_CodeSniffer root dir so the bootstrap file is included
        --- specify the PHP_CodeSniffer bootstrap file on the command line: phpunit --bootstrap=/path/to/phpcs/tests/bootstrap.php
        --- require the PHP_CodeSniffer bootstrap file from your own bootstrap file
     -- If you don't run PHP_CodeSniffer unit tests, this change will not affect you
     -- Thanks to Juliette Reinders Folmer for the patch

    - A phpcs.xml or phpcs.xml.dist file now takes precedence over the default_standard config setting
      -- Thanks to Björn Fischer for the patch
    - Both phpcs.xml and phpcs.xml.dist files can now be prefixed with a dot (request #1566)
      -- The order that the files are searched is: .phpcs.xml, .phpcs.xml.dist, phpcs.xml, phpcs.xml.dist
    - The autoloader will now search for files during unit tests runs from the same locations as during normal phpcs runs
      -- Allows for easier unit testing of custom standards that use helper classes or custom namespaces
    - Include patterns for sniffs now use OR logic instead of AND logic
      -- Previously, a file had to be in each of the include patterns to be processed by a sniff
      -- Now, a file has to only be in at least one of the patterns
      -- This change reflects the original intention of the feature
    - PHPCS will now follow symlinks under the list of checked directories
      -- This previously only worked if you specified the path to a symlink on the command line
    - Output from --config-show, --config-set, and --config-delete now includes the path to the loaded config file
    - PHPCS now cleanly exits if its config file is not readable
      -- Previously, a combination of PHP notices and PHPCS errors would be generated
    - Comment tokens that start with /** are now always tokenized as docblocks
      -- Thanks to Michał Bundyra for the patch
    - The PHP-supplied T_YIELD and T_YIELD_FROM token have been replicated for older PHP versions
      -- Thanks to Michał Bundyra for the patch
    - Added new Generic.CodeAnalysis.AssignmentInCondition sniff to warn about variable assignments inside conditions
      -- Thanks to Juliette Reinders Folmer for the contribution
    - Added Generic.Files.OneObjectStructurePerFile sniff to ensure there is a single class/interface/trait per file
      -- Thanks to Mponos George for the contribution
    - Function call sniffs now check variable function names and self/static object creation
      -- Specific sniffs are Generic.Functions.FunctionCallArgumentSpacing, PEAR.Functions.FunctionCallSignature, and   PSR2.Methods.FunctionCallSignature
      -- Thanks to Michał Bundyra for the patch
    - Generic.Files.LineLength can now be configured to ignore all comment lines, no matter their length
      -- Set the ignoreComments property to TRUE (default is FALSE) in your ruleset.xml file to enable this
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.PHP.LowerCaseKeyword now checks self, parent, yield, yield from, and closure (function) keywords
      -- Thanks to Michał Bundyra for the patch
    - PEAR.Functions.FunctionDeclaration now removes a blank line if it creates one by moving the curly brace during fixing
    - Squiz.Commenting.FunctionCommentThrowTag now supports PHP 7.1 multi catch exceptions
    - Squiz.Formatting.OperatorBracket no longer throws errors for PHP 7.1 multi catch exceptions
    - Squiz.Commenting.LongConditionClosingComment now supports finally statements
    - Squiz.Formatting.OperatorBracket now correctly fixes pipe separated flags
    - Squiz.Formatting.OperatorBracket now correctly fixes statements containing short array syntax
    - Squiz.PHP.EmbeddedPhp now properly fixes cases where the only content in an embedded PHP block is a comment
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.WhiteSpace.ControlStructureSpacing now ignores comments when checking blank lines at the top of control structures
    - Squiz.WhiteSpace.ObjectOperatorSpacing now detects and fixes spaces around double colons
      -- Thanks to Julius Šmatavičius for the patch
    - Squiz.WhiteSpace.MemberVarSpacing can now be configured to check any number of blank lines between member vars
      -- Set the spacing property (default is 1) in your ruleset.xml file to set the spacing
    - Squiz.WhiteSpace.MemberVarSpacing can now be configured to check a different number of blank lines before the first member var
      -- Set the spacingBeforeFirst property (default is 1) in your ruleset.xml file to set the spacing
    - Added a new PHP_CodeSniffer\Util\Tokens::$ooScopeTokens static member var for quickly checking object scope
      -- Includes T_CLASS, T_ANON_CLASS, T_INTERFACE, and T_TRAIT
      -- Thanks to Juliette Reinders Folmer for the patch
    - PHP_CodeSniffer\Files\File::findExtendedClassName() now supports extended interfaces
      -- Thanks to Martin Hujer for the patch
    - Fixed bug #1550 : Squiz.Commenting.FunctionComment false positive when function contains closure
    - Fixed bug #1577 : Generic.InlineControlStructureSniff breaks with a comment between body and condition in do while loops
    - Fixed bug #1581 : Sniffs not loaded when one-standard directories are being registered in installed_paths
    - Fixed bug #1591 : Autoloader failing to load arbitrary files when installed_paths only set via a custom ruleset
    - Fixed bug #1605 : Squiz.WhiteSpace.OperatorSpacing false positive on unary minus after comment
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1615 : Uncaught RuntimeException when phpcbf fails to fix files
    - Fixed bug #1637 : Generic.WhiteSpaceScopeIndent closure argument indenting incorrect with multi-line strings
    - Fixed bug #1638 : Squiz.WhiteSpace.ScopeClosingBrace closure argument indenting incorrect with multi-line strings
    - Fixed bug #1640 : Squiz.Strings.DoubleQuoteUsage replaces tabs with spaces when fixing
      -- Thanks to Juliette Reinders Folmer for the patch
    </notes>
  </release>
  <release>
   <version>
    <release>3.0.2</release>
    <api>3.0.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-07-18</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Fixed a problem where the source report was not printing the correct number of errors found
    - Fixed a problem where the --cache=/path/to/cachefile CLI argument was not working
    - The code report now gracefully handles tokenizer exceptions
    - The phpcs and phpcbf scripts and now the only places that exit() in the code
      -- This allows for easier usage of core PHPCS functions from external scripts
      -- If you are calling Runner::runPHPCS() or Runner::runPHPCBF() directly, you will get back the full range of exit codes
      -- If not, catch the new DeepExitException to get the error message ($e->getMessage()) and exit code ($e->getCode());
    - NOWDOC tokens are now considered conditions, just as HEREDOC tokens are
      -- This makes it easier to find the start and end of a NOWDOC from any token within it
      -- Thanks to Michał Bundyra for the patch
    - Custom autoloaders are now only included once in case multiple standards are using the same one
      -- Thanks to Juliette Reinders Folmer for the patch
    - Improved tokenizing of fallthrough CASE and DEFAULT statements that share a closing statement and use curly braces
    - Improved the error message when Squiz.ControlStructures.ControlSignature detects a newline after the closing parenthesis
    - Fixed bug #1465 : Generic.WhiteSpace.ScopeIndent reports incorrect errors when indenting double arrows in short arrays
    - Fixed bug #1478 : Indentation in fallthrough CASE that contains a closure
    - Fixed bug #1497 : Fatal error if composer prepend-autoloader is set to false
      -- Thanks to Kunal Mehta for the patch
    - Fixed bug #1503 : Alternative control structure syntax not always recognized as scoped
    - Fixed bug #1523 : Fatal error when using the --suffix argument
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1526 : Use of basepath setting can stop PHPCBF being able to write fixed files
    - Fixed bug #1530 : Generic.WhiteSpace.ScopeIndent can increase indent too much for lines within code blocks
    - Fixed bug #1547 : Wrong token type for backslash in use function
      -- Thanks to Michał Bundyra for the patch
    - Fixed bug #1549 : Squiz.PHP.EmbeddedPhp fixer conflict with // comment before PHP close tag
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1560 : Squiz.Commenting.FunctionComment fatal error when fixing additional param comment lines that have no indent
    </notes>
  </release>
  <release>
   <version>
    <release>3.0.1</release>
    <api>3.0.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-06-14</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - This release contains a fix for a security advisory related to the improper handling of a shell command
      -- A properly crafted filename would allow for arbitrary code execution when using the --filter=gitmodified command line option
      -- All version 3 users are encouraged to upgrade to this version, especially if you are checking 3rd-party code
         --- e.g., you run PHPCS over libraries that you did not write
         --- e.g., you provide a web service that runs PHPCS over user-uploaded files or 3rd-party repositories
         --- e.g., you allow external tool paths to be set by user-defined values
      -- If you are unable to upgrade but you check 3rd-party code, ensure you are not using the Git modified filter
      -- This advisory does not affect PHP_CodeSniffer version 2.
      -- Thanks to Sergei Morozov for the report and patch

    - Arguments on the command line now override or merge with those specified in a ruleset.xml file in all cases
    - PHPCS now stops looking for a phpcs.xml file as soon as one is found, favoring the closest one to the current dir
    - Added missing help text for the --stdin-path CLI option to --help
    - Re-added missing help text for the --file-list and --bootstrap CLI options to --help
    - Runner::runPHPCS() and Runner::runPHPCBF() now return an exit code instead of exiting directly (request #1484)
    - The Squiz standard now enforces short array syntax by default
    - The autoloader is now working correctly with classes created with class_alias()
    - The autoloader will now search for files inside all directories in the installed_paths config var
      -- This allows autoloading of files inside included custom coding standards without manually requiring them
    - You can now specify a namespace for a custom coding standard, used by the autoloader to load non-sniff helper files
      -- Also used by the autoloader to help other standards directly include sniffs for your standard
      -- Set the value to the namespace prefix you are using for sniff files (everything up to \Sniffs\)
      -- e.g., if your namespace format is MyProject\CS\Standard\Sniffs\Category set the namespace to MyProject\CS\Standard
      -- If omitted, the namespace is assumed to be the same as the directory name containing the ruleset.xml file
      -- The namespace is set in the ruleset tag of the ruleset.xml file
      -- e.g., ruleset name="My Coding Standard" namespace="MyProject\CS\Standard"
    - Rulesets can now specify custom autoloaders using the new autoload tag
      -- Autoloaders are included while the ruleset is being processed and before any custom sniffs are included
      -- Allows for very custom autoloading of helper classes well before the boostrap files are included
    - The PEAR standard now includes Squiz.Commenting.DocCommentAlignment
      -- It previously broke comments onto multiple lines, but didn't align them
    - Fixed a problem where excluding a message from a custom standard's own sniff would exclude the whole sniff
      -- This caused some PSR2 errors to be under-reported
    - Fixed bug #1442 : T_NULLABLE detection not working for nullable parameters and return type hints in some cases
    - Fixed bug #1447 : Running the unit tests with a phpunit config file breaks the test suite
      -- Unknown arguments were not being handled correctly, but are now stored in $config->unknown
    - Fixed bug #1449 : Generic.Classes.OpeningBraceSameLine doesn't detect comment before opening brace
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1450 : Coding standard located under an installed_path with the same directory name throws an error
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1451 : Sniff exclusions/restrictions dont work with custom sniffs unless they use the PHP_CodeSniffer NS
    - Fixed bug #1454 : Squiz.WhiteSpace.OperatorSpacing is not checking spacing on either side of a short ternary operator
      -- Thanks to Mponos George for the patch
    - Fixed bug #1495 : Setting an invalid installed path breaks all commands
    - Fixed bug #1496 : Squiz.Strings.DoubleQuoteUsage not unescaping dollar sign when fixing
      -- Thanks to Michał Bundyra for the patch
    - Fixed bug #1501 : Interactive mode is broken
    - Fixed bug #1504 : PSR2.Namespaces.UseDeclaration hangs fixing use statement with no trailing code
    </notes>
  </release>
  <release>
   <version>
    <release>2.9.1</release>
    <api>2.9.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-05-22</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Fixed bug #1442 : T_NULLABLE detection not working for nullable parameters and return type hints in some cases
    - Fixed bug #1448 : Generic.Classes.OpeningBraceSameLine doesn't detect comment before opening brace
      -- Thanks to Juliette Reinders Folmer for the patch
    </notes>
  </release>
  <release>
   <version>
    <release>3.0.0</release>
    <api>3.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-05-04</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added an --ignore-annotations command line argument to ignore all @codingStandards annotations in code comments (request #811)
    -- This allows you to force errors to be shown that would otherwise be ignored by code comments
      -- Also stop files being able to change sniff properties mid way through processing
    - An error is now reported if no sniffs were registered to be run (request #1129)
    - The autoloader will now search for files inside the directory of any loaded coding standard
      -- This allows autoloading of any file inside a custom coding standard without manually requiring them
      -- Ensure your namespace begins with your coding standard's directory name and follows PSR-4
      -- e.g., StandardName\Sniffs\CategoryName\AbstractHelper or StandardName\Helpers\StringSniffHelper
    - Fixed an error where STDIN was sometimes not checked when using the --parallel CLI option
    - The is_closure index has been removed from the return value of File::getMethodProperties()
      -- This value was always false because T_FUNCTION tokens are never closures
      -- Closures have a token type of T_CLOSURE
    - The File::isAnonymousFunction() method has been removed
      -- This function always returned false because it only accepted T_FUNCTION tokens, which are never closures
      -- Closures have a token type of T_CLOSURE
    - Includes all changes from the 2.9.0 release
    - Fixed bug #834 : PSR2.ControlStructures.SwitchDeclaration does not handle if branches with returns
      -- Thanks to Fabian Wiget for the patch
    </notes>
  </release>
  <release>
   <version>
    <release>3.0.0RC4</release>
    <api>3.0.0RC4</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2017-03-02</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - This release contains a fix for a security advisory related to the improper handling of shell commands
      -- Uses of shell_exec() and exec() were not escaping filenames and configuration settings in most cases
      -- A properly crafted filename or configuration option would allow for arbitrary code execution when using some features
      -- All users are encouraged to upgrade to this version, especially if you are checking 3rd-party code
         --- e.g., you run PHPCS over libraries that you did not write
         --- e.g., you provide a web service that runs PHPCS over user-uploaded files or 3rd-party repositories
         --- e.g., you allow external tool paths to be set by user-defined values
      -- If you are unable to upgrade but you check 3rd-party code, ensure you are not using the following features:
         --- The diff report
         --- The notify-send report
         --- The Generic.PHP.Syntax sniff
         --- The Generic.Debug.CSSLint sniff
         --- The Generic.Debug.ClosureLinter sniff
         --- The Generic.Debug.JSHint sniff
         --- The Squiz.Debug.JSLint sniff
         --- The Squiz.Debug.JavaScriptLint sniff
         --- The Zend.Debug.CodeAnalyzer sniff
      -- Thanks to Klaus Purer for the report

    - The indent property of PEAR.Classes.ClassDeclaration has been removed
      -- Instead of calculating the indent of the brace, it just ensures the brace is aligned with the class keyword
      -- Other sniffs can be used to ensure the class itself is indented correctly
    - Invalid exclude rules inside a ruleset.xml file are now ignored instead of potentially causing out of memory errors
      -- Using the -vv command line argument now also shows the invalid exclude rule as XML
    - Includes all changes from the 2.8.1 release
    - Fixed bug #1333 : The new autoloader breaks some frameworks with custom autoloaders
    - Fixed bug #1334 : Undefined offset when explaining standard with custom sniffs
    </notes>
  </release>
  <release>
   <version>
    <release>3.0.0RC3</release>
    <api>3.0.0RC3</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2017-02-02</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added support for ES6 class declarations
      -- Previously, these class were tokenized as JS objects but are now tokenized as normal T_CLASS structures
    - Added support for ES6 method declarations, where the "function" keyword is not used
      -- Previously, these methods were tokenized as JS objects (fixes bug #1251)
      -- The name of the ES6 method is now assigned the T_FUNCTION keyword and treated like a normal function
      -- Custom sniffs that support JS and listen for T_FUNCTION tokens can't assume the token represents the word   "function"
      -- Check the contents of the token first, or use $phpcsFile->getDeclarationName($stackPtr) if you just want its name
      -- There is no change for custom sniffs that only check PHP code
    - PHPCBF exit codes have been changed so they are now more useful (request #1270)
      -- Exit code 0 is now used to indicate that no fixable errors were found, and so nothing was fixed
      -- Exit code 1 is now used to indicate that all fixable errors were fixed correctly
      -- Exit code 2 is now used to indicate that PHPCBF failed to fix some of the fixable errors it found
      -- Exit code 3 is now used for general script execution errors
    - Added PEAR.Commenting.FileComment.ParamCommentAlignment to check alignment of multi-line param comments
    - Includes all changes from the 2.8.0 release
    - Fixed an issue where excluding a file using a @codingStandardsIgnoreFile comment would produce errors
      -- For PHPCS, it would show empty files being processed
      -- For PHPCBF, it would produce a PHP error
    - Fixed bug #1233 : Can't set config data inside ruleset.xml file
    - Fixed bug #1241 : CodeSniffer.conf not working with 3.x PHAR file
    </notes>
  </release>
  <release>
   <version>
    <release>3.0.0RC2</release>
    <api>3.0.0RC2</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2016-11-30</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Fixed an undefined var name error that could be produced while running PHPCBF
    - Made the Runner class easier to use with wrapper scripts
    - Full usage information is no longer printed when a usage error is encountered (request #1186)
      -- Makes it a lot easier to find and read the error message that was printed
    - Includes all changes from the 2.7.1 release
    - Fixed bug #1167 : 3.0.0RC1 PHAR does not work with PEAR standard
    - Fixed bug #1208 : Excluding files doesn't work when using STDIN with a filename specified
    </notes>
  </release>
  <release>
   <version>
    <release>3.0.0RC1</release>
    <api>3.0.0RC1</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2016-09-02</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Progress output now shows E and W in green when a file has fixable errors or warnings
      -- Only supported if colors are enabled
    - PHPCBF no longer produces verbose output by default (request #699)
      -- Use the -v command line argument to show verbose fixing output
      -- Use the -q command line argument to disable verbose information if enabled by default
    - PHPBF now prints a summary report after fixing files
      -- Report shows files that were fixed, how many errors were fixed, and how many remain
    - PHPCBF now supports the -p command line argument to print progress information
      -- Prints a green F for files where fixes occurred
      -- Prints a red E for files that could not be fixed due to an error
      -- Use the -q command line argument to disable progress information if enabled by default
    - Running unit tests using --verbose no longer throws errors
    - Fixed shell error appearing on some systems when trying to find executable paths
    - Includes all changes from the 2.7.0 release
    </notes>
  </release>
  <release>
   <version>
    <release>3.0.0a1</release>
    <api>3.0.0a1</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2016-07-20</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Min PHP version increased from 5.1.2 to 5.4.0
    - Added optional caching of results between runs (request #530)
      -- Enable the cache by using the --cache command line argument
      -- If you want the cache file written somewhere specific, use --cache=/path/to/cacheFile
      -- Use the command "phpcs --config-set cache true" to turn caching on by default
      -- Use the --no-cache command line argument to disable caching if it is being turned on automatically
    - Add support for checking file in parallel (request #421)
      -- Tell PHPCS how many files to check at once using the --parallel command line argument
      -- To check 100 files at once, using --parallel=100
      -- To disable parallel checking if it is being turned on automatically, use --parallel=1
      -- Requires PHP to be compiled with the PCNTL package
    - The default encoding has been changed from iso-8859-1 to utf-8 (request #760)
      -- The --encoding command line argument still works, but you no longer have to set it to process files as utf-8
      -- If encoding is being set to utf-8 in a ruleset or on the CLI, it can be safely removed
      -- If the iconv PHP extension is not installed, standard non-multibyte aware functions will be used
    - Added a new "code" report type to show a code snippet for each error (request #419)
      -- The line containing the error is printed, along with 2 lines above and below it to show context
      -- The location of the errors is underlined in the code snippet if you also use --colors
      -- Use --report=code to generate this report
    - Added support for custom filtering of the file list
      -- Developers can write their own filter classes to perform custom filtering of the list before the run starts
      -- Use the command line arg --filter=/path/to/filter.php to specify a filter to use
      -- Extend \PHP_CodeSniffer\Filters\Filter to also support the core PHPCS extension and path filtering
      -- Extend \PHP_CodeSniffer\Filters\ExactMatch to get the core filtering and the ability to use blacklists and whitelists
      -- The included \PHP_CodeSniffer\Filters\GitModified filter is a good example of an ExactMatch filter
    - Added support for only checking files that have been locally modified or added in a git repo
      -- Use --filter=gitmodified to check these files
      -- You still need to give PHPCS a list of files or directories in which to check
    - Added automatic discovery of executable paths (request #571)
      -- Thanks to Sergey Morozov for the patch
    - You must now pass "-" on the command line to have PHPCS wait for STDIN
      -- E.g., phpcs --standard=PSR2 -
      -- You can still pipe content via STDIN as normal as PHPCS will see this and process it
      -- But without the "-", PHPCS will throw an error if no content or files are passed to it
    - All PHP errors generated by sniffs are caught, re-thrown as exceptions, and reported in the standard error reports
      -- This should stop bugs inside sniffs causing infinite loops
      -- Also stops invalid reports being produced as errors don't print to the screen directly
    - Sniff codes are no longer optional
      -- If a sniff throws and error or a warning, it must specify an internal code for that message
    - The installed_paths config setting can now point directly to a standard
      -- Previously, it had to always point to the directory in which the standard lives
    - Multiple reports can now be specified using the --report command line argument
      -- Report types are separated by commas
      -- E.g., --report=full,summary,info
      -- Previously, you had to use one argument for each report such as --report=full --report=summary --report=info
    - You can now set the severity, message type, and exclude patterns for and entire sniff, category, or standard
      -- Previously, this was only available for a single message
    - You can now include a single sniff code in a ruleset instead of having to include an entire sniff
      -- Including a sniff code will automatically exclude all other messages from that sniff
      -- If the sniff is already included by an imported standard, set the sniff severity to 0 and include the specific message you want
    - PHPCBF no longer uses patch
      -- Files are now always overwritten
      -- The --no-patch option has been removed
    - Added a --basepath option to strip a directory from the front of file paths in output (request #470)
      -- The basepath is absolute or relative to the current directory
      -- E.g., to output paths relative to current dir in reports, use --basepath=.
    - Ignore rules are now checked when using STDIN (request #733)
    - Added an include-pattern tag to rulesets to include a sniff for specific files and folders only (request #656)
      -- This is the exact opposite of the exclude-pattern tag
      -- This option is only usable within sniffs, not globally like exclude-patterns are
    - Added a new -m option to stop error messages from being recorded, which saves a lot of memory
      -- PHPCBF always uses this setting to reduce memory as it never outputs error messages
      -- Setting the $recordErrors member var inside custom report classes is no longer supported (use -m instead)
    - Exit code 2 is now used to indicate fixable errors were found (request #930)
      -- Exit code 3 is now used for general script execution errors
      -- Exit code 1 is used to indicate that coding standard errors were found, but none are fixable
      -- Exit code 0 is unchanged and continues to mean no coding standard errors found
    - The included PHPCS standard has been removed
      -- All rules are now found inside the phpcs.xml.dist file
      -- Running "phpcs" without any arguments from a git clone will use this ruleset
    - The included SVN pre-commit hook has been removed
      -- Hooks for version control systems will no longer be maintained within the PHPCS project
    </notes>
  </release>
  <release>
   <version>
    <release>2.9.0</release>
    <api>2.9.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-05-04</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added Generic.Debug.ESLint sniff to run ESLint over JS files and report errors
      -- Set eslint path using: phpcs --config-set eslint_path /path/to/eslint
      -- Thanks to Ryan McCue for the contribution
    - T_POW is now properly considered an arithmetic operator, and will be checked as such
      -- Thanks to Juliette Reinders Folmer for the patch
    - T_SPACESHIP and T_COALESCE are now properly considered comparison operators, and will be checked as such
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.PHP.DisallowShortOpenTag now warns about possible short open tags even when short_open_tag is set to OFF
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.WhiteSpace.DisallowTabIndent now finds and fixes improper use of spaces anywhere inside the line indent
      -- Previously, only the first part of the indent was used to determine the indent type
      -- Thanks to Juliette Reinders Folmer for the patch
    - PEAR.Commenting.ClassComment now supports checking of traits as well as classes and interfaces
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Commenting.FunctionCommentThrowTag now supports re-throwing exceptions (request #946)
      -- Thanks to Samuel Levy for the patch
    - Squiz.PHP.DisallowMultipleAssignments now ignores PHP4-style member var assignments
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.WhiteSpace.FunctionSpacing now ignores spacing above functions when they are preceded by inline comments
      -- Stops conflicts between this sniff and comment spacing sniffs
    - Squiz.WhiteSpace.OperatorSpacing no longer checks the equal sign in declare statements
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added missing error codes for a couple of sniffs so they can now be customised as normal
    - Fixed bug #1266 : PEAR.WhiteSpace.ScopeClosingBrace can throw an error while fixing mixed PHP/HTML
    - Fixed bug #1364 : Yield From values are not recognised as returned values in Squiz FunctionComment sniff
    - Fixed bug #1373 : Error in tab expansion results in white-space of incorrect size
      -- Thanks to Mark Clements for the patch
    - Fixed bug #1381 : Tokenizer: dereferencing incorrectly identified as short array
    - Fixed bug #1387 : Squiz.ControlStructures.ControlSignature does not handle alt syntax when checking space after closing   brace
    - Fixed bug #1392 : Scope indent calculated incorrectly when using array destructuring
    - Fixed bug #1394 : integer type hints appearing as TypeHintMissing instead of ScalarTypeHintMissing
      -- PHP 7 type hints were also being shown when run under PHP 5 in some cases
    - Fixed bug #1405 : Squiz.WhiteSpace.ScopeClosingBrace fails to fix closing brace within indented PHP tags
    - Fixed bug #1421 : Ternaries used in constant scalar expression for param default misidentified by tokenizer
    - Fixed bug #1431 : PHPCBF can't fix short open tags when they are not followed by a space
      -- Thanks to Gonçalo Queirós for the patch
    - Fixed bug #1432 : PHPCBF can make invalid fixes to inline JS control structures that make use of JS objects
    </notes>
  </release>
  <release>
   <version>
    <release>2.8.1</release>
    <api>2.8.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-03-02</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - This release contains a fix for a security advisory related to the improper handling of shell commands
      -- Uses of shell_exec() and exec() were not escaping filenames and configuration settings in most cases
      -- A properly crafted filename or configuration option would allow for arbitrary code execution when using some features
      -- All users are encouraged to upgrade to this version, especially if you are checking 3rd-party code
         --- e.g., you run PHPCS over libraries that you did not write
         --- e.g., you provide a web service that runs PHPCS over user-uploaded files or 3rd-party repositories
         --- e.g., you allow external tool paths to be set by user-defined values
      -- If you are unable to upgrade but you check 3rd-party code, ensure you are not using the following features:
         --- The diff report
         --- The notify-send report
         --- The Generic.PHP.Syntax sniff
         --- The Generic.Debug.CSSLint sniff
         --- The Generic.Debug.ClosureLinter sniff
         --- The Generic.Debug.JSHint sniff
         --- The Squiz.Debug.JSLint sniff
         --- The Squiz.Debug.JavaScriptLint sniff
         --- The Zend.Debug.CodeAnalyzer sniff
      -- Thanks to Klaus Purer for the report


    - The PHP-supplied T_COALESCE_EQUAL token has been replicated for PHP versions before 7.2
    - PEAR.Functions.FunctionDeclaration now reports an error for blank lines found inside a function declaration
    - PEAR.Functions.FunctionDeclaration no longer reports indent errors for blank lines in a function declaration
    - Squiz.Functions.MultiLineFunctionDeclaration no longer reports errors for blank lines in a function declaration
      -- It would previously report that only one argument is allowed per line
    - Squiz.Commenting.FunctionComment now corrects multi-line param comment padding more accurately
    - Squiz.Commenting.FunctionComment now properly fixes pipe-separated param types
    - Squiz.Commenting.FunctionComment now works correctly when function return types also contain a comment
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.ControlStructures.InlineIfDeclaration now supports the elvis operator
      -- As this is not a real PHP operator, it enforces no spaces between ? and : when the THEN statement is empty
    - Squiz.ControlStructures.InlineIfDeclaration is now able to fix the spacing errors it reports
    - Fixed bug #1340 : STDIN file contents not being populated in some cases
      -- Thanks to David Biňovec for the patch
    - Fixed bug #1344 : PEAR.Functions.FunctionCallSignatureSniff throws error for blank comment lines
    - Fixed bug #1347 : PSR2.Methods.FunctionCallSignature strips some comments during fixing
      -- Thanks to Algirdas Gurevicius for the patch
    - Fixed bug #1349 : Squiz.Strings.DoubleQuoteUsage.NotRequired message is badly formatted when string contains a CR newline char
      -- Thanks to Algirdas Gurevicius for the patch
    - Fixed bug #1350 : Invalid Squiz.Formatting.OperatorBracket error when using namespaces
    - Fixed bug #1369 : Empty line in multi-line function declaration cause infinite loop
    </notes>
  </release>
  <release>
   <version>
    <release>2.8.0</release>
    <api>2.8.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2017-02-02</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The Internal.NoCodeFound error is no longer generated for content sourced from STDIN
      -- This should stop some Git hooks generating errors because PHPCS is trying to process the refs passed on STDIN
    - Squiz.Commenting.DocCommentAlignment now checks comments on class properties defined using the VAR keyword
      -- Thanks to Klaus Purer for the patch
    - The getMethodParameters() method now recognises "self" as a valid type hint
      -- The return array now contains a new "content" index containing the raw content of the param definition
      -- Thanks to Juliette Reinders Folmer for the patch
    - The getMethodParameters() method now supports nullable types
      -- The return array now contains a new "nullable_type" index set to true or false for each method param
      -- Thanks to Juliette Reinders Folmer for the patch
    - The getMethodParameters() method now supports closures
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added more guard code for JS files with syntax errors (request #1271 and request #1272)
    - Added more guard code for CSS files with syntax errors (request #1304)
    - PEAR.Commenting.FunctionComment fixers now correctly handle multi-line param comments
    - AbstractVariableSniff now supports anonymous classes
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.NamingConventions.ConstructorName and PEAR.NamingConventions.ValidVariable now support anonymous classes
    - Generic.NamingConventions.CamelCapsFunctionName and PEAR.NamingConventions.ValidFunctionName now support anonymous   classes
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.CodeAnalysis.UnusedFunctionParameter and PEAR.Functions.ValidDefaultValue now support closures
      -- Thanks to Juliette Reinders Folmer for the patch
    - PEAR.NamingConventions.ValidClassName and Squiz.Classes.ValidClassName now support traits
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.Functions.FunctionCallArgumentSpacing now supports closures other PHP-provided functions
      -- Thanks to Algirdas Gurevicius for the patch
    - Fixed an error where a nullable type character was detected as an inline then token
      -- A new T_NULLABLE token has been added to represent the ? nullable type character
      -- Thanks to Jaroslav Hanslík for the patch
    - Squiz.WhiteSpace.SemicolonSpacing no longer removes comments while fixing the placement of semicolons
      -- Thanks to Algirdas Gurevicius for the patch
    - Fixed bug #1230 : JS tokeniser incorrectly tokenises bitwise shifts as comparison
      -- Thanks to Ryan McCue for the patch
    - Fixed bug #1237 : Uninitialized string offset in PHP Tokenizer on PHP 5.2
    - Fixed bug #1239 : Warning when static method name is 'default'
    - Fixed bug #1240 : False positive for function names starting with triple underscore
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1245 : SELF is not recognised as T_SELF token in: return new self
    - Fixed bug #1246 : A mix of USE statements with and without braces can cause the tokenizer to mismatch brace tokens
      -- Thanks to Michał Bundyra for the patch
    - Fixed bug #1249 : GitBlame report requires a .git directory
    - Fixed bug #1252 : Squiz.Strings.ConcatenationSpacing fix creates syntax error when joining a number to a string
    - Fixed bug #1253 : Generic.ControlStructures.InlineControlStructure fix creates syntax error fixing if-try/catch
    - Fixed bug #1255 : Inconsistent indentation check results when ELSE on new line
    - Fixed bug #1257 : Double dash in CSS class name can lead to "Named colours are forbidden" false positives
    - Fixed bug #1260 : Syntax errors not being shown when error_prepend_string is set
      -- Thanks to Juliette Reinders Folmer for the patch
    - Fixed bug #1264 : Array return type hint is sometimes detected as T_ARRAY_HINT instead of T_RETURN_TYPE
      -- Thanks to Jaroslav Hanslík for the patch
    - Fixed bug #1265 : ES6 arrow function raises unexpected operator spacing errors
    - Fixed bug #1267 : Fixer incorrectly handles filepaths with repeated dir names
      -- Thanks to Sergey Ovchinnikov for the patch
    - Fixed bug #1276 : Commenting.FunctionComment.InvalidReturnVoid conditional issue with anonymous classes
    - Fixed bug #1277 : Squiz.PHP.DisallowMultipleAssignments.Found error when var assignment is on the same line as an   open tag
    - Fixed bug #1284 : Squiz.Arrays.ArrayBracketSpacing.SpaceBeforeBracket false positive match for short list syntax
    </notes>
  </release>
  <release>
   <version>
    <release>2.7.1</release>
    <api>2.7.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2016-11-30</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Squiz.ControlStructures.ControlSignature.SpaceAfterCloseParenthesis fix now removes unnecessary whitespace
    - Squiz.Formatting.OperatorBracket no longer errors for negative array indexes used within a function call
    - Squiz.PHP.EmbeddedPhp no longer expects a semicolon after statements that are only opening a scope
    - Fixed a problem where the content of T_DOC_COMMENT_CLOSE_TAG tokens could sometimes be (boolean) false
    - Developers of custom standards with custom test runners can now have their standards ignored by the built-in test runner
      -- Set the value of an environment variable called PHPCS_IGNORE_TESTS with a comma separated list of your standard names
      -- Thanks to Juliette Reinders Folmer for the patch
    - The unit test runner now loads the test sniff outside of the standard's ruleset so that exclude rules do not get applied
      -- This may have caused problems when testing custom sniffs inside custom standards
      -- Also makes the unit tests runs a little faster
    - The SVN pre-commit hook now works correctly when installed via composer
      -- Thanks to Sergey for the patch
    - Fixed bug #1135 : PEAR.ControlStructures.MultiLineCondition.CloseBracketNewLine not detected if preceded by multiline function   call
    - Fixed bug #1138 : PEAR.ControlStructures.MultiLineCondition.Alignment not detected if closing brace is first token on line
    - Fixed bug #1141 : Sniffs that check EOF newlines don't detect newlines properly when the last token is a doc block
    - Fixed bug #1150 : Squiz.Strings.EchoedStrings does not properly fix bracketed statements
    - Fixed bug #1156 : Generic.Formatting.DisallowMultipleStatements errors when multiple short echo tags are used on the same line
      -- Thanks to Nikola Kovacs for the patch
    - Fixed bug #1161 : Absolute report path is treated like a relative path if it also exists within the current directory
    - Fixed bug #1170 : Javascript regular expression literal not recognized after comparison operator
    - Fixed bug #1180 : Class constant named FUNCTION is incorrectly tokenized
    - Fixed bug #1181 : Squiz.Operators.IncrementDecrementUsage.NoBrackets false positive when incrementing properties
      -- Thanks to Jürgen Henge-Ernst for the patch
    - Fixed bug #1188 : Generic.WhiteSpace.ScopeIndent issues with inline HTML and multi-line function signatures
    - Fixed bug #1190 : phpcbf on if/else with trailing comment generates erroneous code
    - Fixed bug #1191 : Javascript sniffer fails with function called "Function"
    - Fixed bug #1203 : Inconsistent behavior of PHP_CodeSniffer_File::findEndOfStatement
    - Fixed bug #1218 : CASE conditions using class constants named NAMESPACE/INTERFACE/TRAIT etc are incorrectly tokenized
    - Fixed bug #1221 : Indented function call with multiple closure arguments can cause scope indent error
    - Fixed bug #1224 : PHPCBF fails to fix code with heredoc/nowdoc as first argument to a function
    </notes>
  </release>
  <release>
   <version>
    <release>2.7.0</release>
    <api>2.7.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2016-09-02</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added --file-list command line argument to allow a list of files and directories to be specified in an external file
      -- Useful is you have a generated list of files to check that would be too long for the command line
      -- File and directory paths are listed one per line
      -- Usage is: phpcs --file-list=/path/to/file-list ...
      -- Thanks to Blotzu for the patch
    - Values set using @codingStandardsChangeSetting comments can now contain spaces
    - Sniff unit tests can now specify a list of test files instead of letting the runner pick them (request #1078)
      -- Useful if a sniff needs to exclude files based on the environment, or is checking filenames
      -- Override the new getTestFiles() method to specify your own list of test files
    - Generic.Functions.OpeningFunctionBraceKernighanRitchie now ignores spacing for function return types
      -- The sniff code Generic.Functions.OpeningFunctionBraceKernighanRitchie.SpaceAfterBracket has been removed
      -- Replaced by Generic.Functions.OpeningFunctionBraceKernighanRitchie.SpaceBeforeBrace
      -- The new error message is slightly clearer as it indicates that a single space is needed before the brace
    - Squiz.Commenting.LongConditionClosingComment now allows for the length of a code block to be configured
      -- Set the lineLimit property (default is 20) in your ruleset.xml file to set the code block length
      -- When the code block length is reached, the sniff will enforce a closing comment after the closing brace
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.Commenting.LongConditionClosingComment now allows for the end comment format to be configured
      -- Set the commentFormat property (default is "//end %s") in your ruleset.xml file to set the format
      -- The placeholder %s will be replaced with the type of condition opener, e.g., "//end foreach"
      -- Thanks to Juliette Reinders Folmer for the patch
    - Generic.PHPForbiddenFunctions now allows forbidden functions to have mixed case
      -- Previously, it would only do a strtolower comparison
      -- Error message now shows what case was found in the code and what the correct case should be
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added Generic.Classes.OpeningBraceSameLine to ensure opening brace of class/interface/trait is on the same line as the declaration
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added Generic.PHP.BacktickOperator to ban the use of the backtick operator for running shell commands
      -- Thanks to Juliette Reinders Folmer for the patch
    - Added Generic.PHP.DisallowAlternativePHPTags to ban the use of alternate PHP tags
      -- Thanks to Juliette Reinders Folmer for the patch
    - Squiz.WhiteSpace.LanguageConstructSpacing no longer checks for spaces if parenthesis are being used (request #1062)
      -- Makes this sniff more compatible with those that check parenthesis spacing of function calls
    - Squiz.WhiteSpace.ObjectOperatorSpacing now has a setting to ignore newline characters around object operators
      -- Default remains FALSE, so newlines are not allowed
      -- Override the "ignoreNewlines" setting in a ruleset.xml file to change
      -- Thanks to Alex Howansky for the patch
    - Squiz.Scope.MethodScope now sniffs traits as well as classes and interfaces
      -- Thanks to Jesse Donat for the patch
    - PHPCBF is now able to fix Squiz.SelfMemberReference.IncorrectCase errors
      -- Thanks to Nikola Kovacs for the patch
    - PHPCBF is now able to fix Squiz.Commenting.VariableComment.IncorrectVarType
      -- Thanks to Walt Sorensen for the patch
    - PHPCBF is now able to fix Generic.PHP.DisallowShortOpenTag
      -- Thanks to Juliette Reinders Folmer for the patch
    - Improved the formatting of the end brace when auto fixing InlineControlStructure errors (request #1121)
    - Generic.Functions.OpeningFunctionBraceKernighanRitchie.BraceOnNewLine fix no longer leaves blank line after brace (request #1085)
    - Generic UpperCaseConstantNameSniff now allows lowercase namespaces in constant definitions
      -- Thanks to Daniel Schniepp for the patch
    - Squiz DoubleQuoteUsageSniff is now more tolerant of syntax errors caused by mismatched string tokens
    - A few sniffs that produce errors based on the current PHP version can now be told to run using a specific PHP version
      -- Set the php_version config var using --config-set, --runtime-set, or in a ruleset to specify a specific PHP version
      -- The format of the PHP version is the same as the PHP_VERSION_ID constant (e.g., 50403 for version 5.4.3)
      -- Supported sniffs are Generic.PHP.DisallowAlternativePHPTags, PSR1.Classes.ClassDeclaration, Squiz.Commenting.FunctionComment
      -- Thanks to Finlay Beaton for the patch
    - Fixed bug #985  : Duplicate class definition detection generates false-positives in media queries
      -- Thanks to Raphael Horber for the patch
    - Fixed bug #1014 : Squiz VariableCommentSniff doesn't always detect a missing comment
    - Fixed bug #1066 : Undefined index: quiet in CLI.php during unit test run with -v command line arg
    - Fixed bug #1072 : Squiz.SelfMemberReference.NotUsed not detected if leading namespace separator is used
    - Fixed bug #1089 : Rulesets cannot be loaded if the path contains urlencoded characters
    - Fixed bug #1091 : PEAR and Squiz FunctionComment sniffs throw errors for some invalid @param line formats
    - Fixed bug #1092 : PEAR.Functions.ValidDefaultValue should not flag type hinted methods with a NULL default argument
    - Fixed bug #1095 : Generic LineEndings sniff replaces tabs with spaces with --tab-width is set
    - Fixed bug #1096 : Squiz FunctionDeclarationArgumentSpacing gives incorrect error/fix when variadic operator is followed by a space
    - Fixed bug #1099 : Group use declarations are incorrectly fixed by the PSR2 standard
      -- Thanks to Jason McCreary for the patch
    - Fixed bug #1101 : Incorrect indent errors when breaking out of PHP inside an IF statement
    - Fixed bug #1102 : Squiz.Formatting.OperatorBracket.MissingBrackets faulty bracketing fix
    - Fixed bug #1109 : Wrong scope indent reported in anonymous class
    - Fixed bug #1112 : File docblock not recognized when require_once follows it
    - Fixed bug #1120 : InlineControlStructureSniff does not handle auto-fixing for control structures that make function calls
    - Fixed bug #1124 : Squiz.Operators.ComparisonOperatorUsage does not detect bracketed conditions for inline IF statements
      -- Thanks to Raphael Horber for the patch
    </notes>
  </release>
  <release>
   <version>
    <release>2.6.2</release>
    <api>2.6.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2016-07-14</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added a new --exclude CLI argument to exclude a list of sniffs from checking and fixing (request #904)
      -- Accepts the same sniff codes as the --sniffs command line argument, but provides the opposite functionality
    - Added a new -q command line argument to disable progress and verbose information from being printed (request #969)
      -- Useful if a coding standard hard-codes progress or verbose output but you want PHPCS to be quiet
      -- Use the command "phpcs --config-set quiet true" to turn quiet mode on by default
    - Generic LineLength sniff no longer errors for comments that cannot be broken out onto a new line (request #766)
      -- A typical case is a comment that contains a very long URL
      -- The comment is ignored if putting the URL on a indented new comment line would be longer than the allowed length
    - Settings extensions in a ruleset no longer causes PHP notices during unit testing
      -- Thanks to Klaus Purer for the patch
    - Version control reports now show which errors are fixable if you are showing sources
    - Added a new sniff to enforce a single space after a NOT operator (request #1051)
      -- Include in a ruleset using the code Generic.Formatting.SpaceAfterNot
    - The Squiz.Commenting.BlockComment sniff now supports tabs for indenting comment lines (request #1056)
    - Fixed bug #790 : Incorrect missing @throws error in methods that use closures
    - Fixed bug #908 : PSR2 standard is not checking that closing brace is on line following the body
    - Fixed bug #945 : Incorrect indent behavior using deep-nested function and arrays
    - Fixed bug #961 : Two anonymous functions passed as function/method arguments cause indentation false positive
    - Fixed bug #1005 : Using global composer vendor autoload breaks PHP lowercase built-in function sniff
      -- Thanks to Michael Butler for the patch
    - Fixed bug #1007 : Squiz Unreachable code detection is not working properly with a closure inside a case
    - Fixed bug #1023 : PSR2.Classes.ClassDeclaration fails if class extends base class and "implements" is on trailing line
    - Fixed bug #1026 : Arrays in comma delimited class properties cause ScopeIndent to increase indent
    - Fixed bug #1028 : Squiz ArrayDeclaration incorrectly fixes multi-line array where end bracket is not on a new line
    - Fixed bug #1034 : Squiz FunctionDeclarationArgumentSpacing gives incorrect error when first arg is a variadic
    - Fixed bug #1036 : Adjacent assignments aligned analysis statement wrong
    - Fixed bug #1049 : Version control reports can show notices when the report width is very small
    - Fixed bug #21050 : PEAR MultiLineCondition sniff suppresses errors on last condition line
    </notes>
  </release>
  <release>
   <version>
    <release>2.6.1</release>
    <api>2.6.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2016-05-31</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The PHP-supplied T_COALESCE token has been replicated for PHP versions before 7.0
    - Function return types of self, parent and callable are now tokenized as T_RETURN_TYPE
      -- Thanks to Jaroslav Hanslík for the patch
    - The default_standard config setting now allows multiple standards to be listed, like on the command line
      -- Thanks to Michael Mayer for the patch
    - Installations done via composer now only include the composer autoloader for PHP 5.3.2+ (request #942)
    - Added a rollbackChangeset() method to the Fixer class to purposely rollback the active changeset
    - Fixed bug #940 : Auto-fixing issue encountered with inconsistent use of braces
    - Fixed bug #943 : Squiz.PHP.InnerFunctions.NotAllowed reported in anonymous classes
    - Fixed bug #944 : PHP warning when running the latest phar
    - Fixed bug #951 : InlineIfDeclaration: invalid error produced with UTF-8 string
    - Fixed bug #957 : Operator spacing sniff errors when plus is used as part of a number
      -- Thanks to Klaus Purer for the patch
    - Fixed bug #959 : Call-time pass-by-reference false positive if there is a square bracket before the ampersand
      -- Thanks to Konstantin Leboev for the patch
    - Fixed bug #962 : Null coalescing operator (??) not detected as a token
      -- Thanks to Joel Posti for the patch
    - Fixed bug #973 : Anonymous class declaration and PSR1.Files.SideEffects.FoundWithSymbols
    - Fixed bug #974 : Error when file ends with "function"
    - Fixed bug #979 : Anonymous function with return type hint is not refactored as expected
    - Fixed bug #983 : Squiz.WhiteSpace.MemberVarSpacing.AfterComment fails to fix error when comment is not a docblock
    - Fixed bug #1010 : Squiz NonExecutableCode sniff does not detect boolean OR
      -- Thanks to Derek Henderson for the patch
    - Fixed bug #1015 : The Squiz.Commenting.FunctionComment sniff doesn't allow description in @return tag
      -- Thanks to Alexander Obuhovich for the patch
    - Fixed bug #1022 : Duplicate spaces after opening bracket error with PSR2 standard
    - Fixed bug #1025 : Syntax error in JS file can cause undefined index for parenthesis_closer
    </notes>
  </release>
  <release>
   <version>
    <release>2.6.0</release>
    <api>2.6.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2016-04-04</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Paths used when setting CLI arguments inside ruleset.xml files are now relative to the ruleset location (request #847)
      -- This change only applies to paths within ARG tags, used to set CLI arguments
      -- Previously, the paths were relative to the directory PHPCS was being run from
      -- Absolute paths are still allowed and work the same way they always have
      -- This change allows ruleset.xml files to be more portable
    - Content passed via STDIN will now be processed even if files are specified on the command line or in a ruleset
    - When passing content via STDIN, you can now specify the file path to use on the command line (request #934)
      -- This allows sniffs that check file paths to work correctly
      -- This is the same functionality provided by the phpcs_input_file line, except it is available on the command line
    - Files processed with custom tokenizers will no longer be skipped if they appear minified (request #877)
      -- If the custom tokenizer wants minified files skipped, it can set a $skipMinified member var to TRUE
      -- See the included JS and CSS tokenizers for an example
    - Config vars set in ruleset.xml files are now processed earlier, allowing them to be used during sniff registration
      -- Among other things, this allows the installed_paths config var to be set in ruleset.xml files
      -- Thanks to Pieter Frenssen for the patch
    - Improved detection of regular expressions in the JS tokenizer
    - Generic PHP Syntax sniff now uses PHP_BINARY (if available) to determine the path to PHP if no other path is available
      -- You can still manually set php_path to use a specific binary for testing
      -- Thanks to Andrew Berry for the patch
    - The PHP-supplied T_POW_EQUAL token has been replicated for PHP versions before 5.6
    - Added support for PHP7 use group declarations (request #878)
      -- New tokens T_OPEN_USE_GROUP and T_CLOSE_USE_GROUP are assigned to the open and close curly braces
    - Generic ScopeIndent sniff now reports errors for every line that needs the indent changed (request #903)
      -- Previously, it ignored lines that were indented correctly in the context of their block
      -- This change produces more technically accurate error messages, but is much more verbose
    - The PSR2 and Squiz standards now allow multi-line default values in function declarations (request #542)
      -- Previously, these would automatically make the function a multi-line declaration
    - Squiz InlineCommentSniff now allows docblocks on require(_once) and include(_once) statements
      -- Thanks to Gary Jones for the patch
    - Squiz and PEAR Class and File sniffs no longer assume the first comment in a file is always a file comment
      -- phpDocumentor assigns the comment to the file only if it is not followed by a structural element
      -- These sniffs now follow this same rule
    - Squiz ClassCommentSniff no longer checks for blank lines before class comments
      -- Removes the error Squiz.Commenting.ClassComment.SpaceBefore
    - Renamed Squiz.CSS.Opacity.SpacingAfterPoint to Squiz.CSS.Opacity.DecimalPrecision
      -- Please update your ruleset if you are referencing this error code directly
    - Fixed PHP tokenizer problem that caused an infinite loop when checking a comment with specific content
    - Generic Disallow Space and Tab indent sniffs now detect and fix indents inside embedded HTML chunks (request #882)
    - Squiz CSS IndentationSniff no longer assumes the class opening brace is at the end of a line
    - Squiz FunctionCommentThrowTagSniff now ignores non-docblock comments
    - Squiz ComparisonOperatorUsageSniff now allows conditions like while(true)
    - PEAR FunctionCallSignatureSniff (and the Squiz and PSR2 sniffs that use it) now correctly check the first argument
      -- Further fix for bug #698
    - Fixed bug #791 : codingStandardsChangeSetting settings not working with namespaces
    - Fixed bug #872 : Incorrect detection of blank lines between CSS class names
    - Fixed bug #879 : Generic InlineControlStructureSniff can create parse error when case/if/elseif/else have mixed brace and braceless definitions
    - Fixed bug #883 : PSR2 is not checking for blank lines at the start and end of control structures
    - Fixed bug #884 : Incorrect indentation notice for anonymous classes
    - Fixed bug #887 : Using curly braces for a shared CASE/DEFAULT statement can generate an error in PSR2 SwitchDeclaration
    - Fixed bug #889 : Closure inside catch/else/elseif causes indentation error
    - Fixed bug #890 : Function call inside returned short array value can cause indentation error inside CASE statements
    - Fixed bug #897 : Generic.Functions.CallTimePassByReference.NotAllowed false positive when short array syntax
    - Fixed bug #900 : Squiz.Functions.FunctionDeclarationArgumentSpacing bug when no space between type hint and argument
    - Fixed bug #902 : T_OR_EQUAL and T_POW_EQUAL are not seen as assignment tokens
    - Fixed bug #910 : Unrecognized "extends" and indentation on anonymous classes
    - Fixed bug #915 : JS Tokenizer generates errors when processing some decimals
    - Fixed bug #928 : Endless loop when sniffing a PHP file with a git merge conflict inside a function
    - Fixed bug #937 : Shebang can cause PSR1 SideEffects warning
      -- Thanks to Clay Loveless for the patch
    - Fixed bug #938 : CallTimePassByReferenceSniff ignores functions with return value
    </notes>
  </release>
  <release>
   <version>
    <release>2.5.1</release>
    <api>2.5.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2016-01-20</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The PHP-supplied T_SPACESHIP token has been replicated for PHP versions before 7.0
    - T_SPACESHIP is now correctly identified as an operator
      -- Thanks to Alexander Obuhovich for the patch
    - Generic LowerCaseKeyword now ensures array type hints are lowercase as well
      -- Thanks to Mathieu Rochette for the patch
    - Squiz ComparisonOperatorUsageSniff no longer hangs on JS FOR loops that don't use semicolons
    - PHP_CodesSniffer now includes the composer autoload.php file, if there is one
      -- Thanks to Klaus Purer for the patch
    - Added error Squiz.Commenting.FunctionComment.ScalarTypeHintMissing for PHP7 only (request #858)
      -- These errors were previously reported as Squiz.Commenting.FunctionComment.TypeHintMissing on PHP7
      -- Disable this error message in a ruleset.xml file if your code needs to run on both PHP5 and PHP7
    - The PHP 5.6 __debugInfo magic method no longer produces naming convention errors
      -- Thanks to Michael Nowack for the patch
    - PEAR and Squiz FunctionComment sniffs now support variadic functions (request #841)
    - Fixed bug #622 : Wrong detection of Squiz.CSS.DuplicateStyleDefinition with media queries
    - Fixed bug #752 : The missing exception error is reported in first found DocBlock
    - Fixed bug #794 : PSR2 MultiLineFunctionDeclaration forbids comments after opening parenthesis of a multiline call
    - Fixed bug #820 : PEAR/PSR2 FunctionCallSignature sniffs suggest wrong indent when there are multiple arguments on a line
    - Fixed bug #822 : Ruleset hard-coded file paths are not used if not running from the same directory as the ruleset
    - Fixed bug #825 : FunctionCallArgumentSpacing sniff complains about more than one space before comment in multi-line function call
    - Fixed bug #828 : Null classname is tokenized as T_NULL instead of T_STRING
    - Fixed bug #829 : Short array argument not fixed correctly when multiple function arguments are on the same line
    - Fixed bug #831 : PHPCS freezes in an infinite loop under Windows if no standard is passed
    - Fixed bug #832 : Tokenizer does not support context sensitive parsing
      -- Thanks to Jaroslav Hanslík for the patch
    - Fixed bug #835 : PEAR.Functions.FunctionCallSignature broken when closure uses return types
    - Fixed bug #838 : CSS indentation fixer changes color codes
      -- Thanks to Klaus Purer for the patch
    - Fixed bug #839 : "__()" method is marked as not camel caps
      -- Thanks to Tim Bezhashvyly for the patch
    - Fixed bug #852 : Generic.Commenting.DocComment not finding errors when long description is omitted
    - Fixed bug #854 : Return typehints in interfaces are not reported as T_RETURN_TYPE
      -- Thanks to Jaroslav Hanslík for the patch
    - Fixed bug #855 : Capital letter detection for multibyte strings doesn't work correctly
    - Fixed bug #857 : PSR2.ControlStructure.SwitchDeclaration shouldn't check indent of curly brace closers
    - Fixed bug #859 : Switch statement indention issue when returning function call with closure
    - Fixed bug #861 : Single-line arrays and function calls can generate incorrect indentation errors
    - Fixed bug #867 : Squiz.Strings.DoubleQuoteUsage broken for some escape codes
      -- Thanks to Jack Blower for the help with the fix
    - Fixed bug #21005 : Incorrect indent detection when multiple properties are initialized to arrays
    - Fixed bug #21010 : Incorrect missing colon detection in CSS when first style is not on new line
    - Fixed bug #21011 : Incorrect error message text when newline found after opening brace
    </notes>
  </release>
  <release>
   <version>
    <release>2.5.0</release>
    <api>2.5.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2015-12-11</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - PHPCS will now look for a phpcs.xml file in parent directories as well as the current directory (request #626)
    - PHPCS will now use a phpcs.xml file even if files are specified on the command line
      -- This file is still only used if no standard is specified on the command line
    - Added support for a phpcs.xml.dist file (request #583)
      -- If both a phpcs.xml and phpcs.xml.dist file are present, the phpcs.xml file will be used
    - Added support for setting PHP ini values in ruleset.xml files (request #560)
      -- Setting the value of the new ini tags to name="memory_limit" value="32M" is the same as -d memory_limit=32M
    - Added support for one or more bootstrap files to be run before processing begins
      -- Use the --bootstrap=file,file,file command line argument to include bootstrap files
      -- Useful if you want to override some of the high-level settings of PHPCS or PHPCBF
      -- Thanks to John Maguire for the patch
    - Added additional verbose output for CSS tokenizing
    - Squiz ComparisonOperatorUsageSniff now checks FOR, WHILE and DO-WHILE statements
      -- Thanks to Arnout Boks for the patch
    - Fixed bug #660 : Syntax checks can fail on Windows with PHP5.6
    - Fixed bug #784 : $this->trait is seen as a T_TRAIT token
    - Fixed bug #786 : Switch indent issue with short array notation
    - Fixed bug #787 : SpacingAfterDefaultBreak confused by multi-line statements
    - Fixed bug #797 : Parsing CSS url() value breaks further parsing
    - Fixed bug #805 : Squiz.Commenting.FunctionComment.InvalidTypeHint on Scalar types on PHP7
    - Fixed bug #807 : Cannot fix line endings when open PHP tag is not on the first line
    - Fixed bug #808 : JS tokeniser incorrectly setting some function and class names to control structure tokens
    - Fixed bug #809 : PHPCBF can break a require_once statement with a space before the open parenthesis
    - Fixed bug #813 : PEAR FunctionCallSignature checks wrong indent when first token on line is part of a multi-line string
    </notes>
  </release>
  <release>
   <version>
    <release>2.4.0</release>
    <api>2.4.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2015-11-24</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added support for PHP 7 anonymous classes
      -- Anonymous classes are now tokenized as T_ANON_CLASS and ignored by normal class sniffs
    - Added support for PHP 7 function return type declarations
      -- Return types are now tokenized as T_RETURN_TYPE
    - Fixed tokenizing of the XOR operator, which was incorrectly identified as a power operator (bug #765)
      -- The T_POWER token has been removed and replaced by the T_BITWISE_XOR token
      -- The PHP-supplied T_POW token has been replicated for PHP versions before 5.6
    - Traits are now tokenized in PHP versions before 5.4 to make testing easier
    - Improved regular expression detection in JS files
    - PEAR FunctionCallSignatureSniff now properly detects indents in more mixed HTML/PHP code blocks
    - Full report now properly indents lines when newlines are found inside error messages
    - Generating documentation without specifying a standard now uses the default standard instead
      -- Thanks to Ken Guest for the patch
    - Generic InlineControlStructureSniff now supports braceless do/while loops in JS
      -- Thanks to Pieter Frenssen for the patch
    - Added more guard code for function declarations with syntax errors
      -- Thanks to Yun Young-jin for the patch
    - Added more guard code for foreach declarations with syntax errors
      -- Thanks to Johan de Ruijter for the patch
    - Added more guard code for class declarations with syntax errors
    - Squiz ArrayDeclarationSniff now has guard code for arrays with syntax errors
    - Generic InlineControlStructureSniff now correctly fixes ELSEIF statements
    - Fixed bug #601 : Expected type hint int[]; found array in Squiz FunctionCommentSniff
      -- Thanks to Scato Eggen for the patch
    - Fixed bug #625 : Consider working around T_HASHBANG in HHVM 3.5.x and 3.6.x
      -- Thanks to Kunal Mehta for the patch
    - Fixed bug #692 : Comment tokenizer can break when using mbstring function overloading
    - Fixed bug #694 : Long sniff codes can cause PHP warnings in source report when showing error codes
    - Fixed bug #698 : PSR2.Methods.FunctionCallSignature.Indent forces exact indent of ternary operator parameters
    - Fixed bug #704 : ScopeIndent can fail when an opening parenthesis is on a line by itself
    - Fixed bug #707 : Squiz MethodScopeSniff doesn't handle nested functions
    - Fixed bug #709 : Squiz.Sniffs.Whitespace.ScopeClosingBraceSniff marking indented endif in mixed inline HTML blocks
    - Fixed bug #711 : Sniffing from STDIN shows Generic.Files.LowercasedFilename.NotFound error
    - Fixed bug #714 : Fixes suppression of errors using docblocks
      -- Thanks to Andrzej Karmazyn for the patch
    - Fixed bug #716 : JSON report is invalid when messages contain newlines or tabs
      -- Thanks to Pieter Frenssen for the patch
    - Fixed bug #723 : ScopeIndent can fail when multiple array closers are on the same line
    - Fixed bug #730 : ScopeIndent can fail when a short array opening square bracket is on a line by itself
    - Fixed bug #732 : PHP Notice if @package name is made up of all invalid characters
      -- Adds new error code PEAR.Commenting.FileComment.InvalidPackageValue
    - Fixed bug #748 : Auto fix for Squiz.Commenting.BlockComment.WrongEnd is incorrect
      -- Thanks to J.D. Grimes for the patch
    - Fixed bug #753 : PSR2 standard shouldn't require space after USE block when next code is a closing tag
    - Fixed bug #768 : PEAR FunctionCallSignature sniff forbids comments after opening parenthesis of a multiline call
    - Fixed bug #769 : Incorrect detection of variable reference operator when used with short array syntax
      -- Thanks to Klaus Purer for the patch
    - Fixed bug #772 : Syntax error when using PHPCBF on alternative style foreach loops
    - Fixed bug #773 : Syntax error when stripping trailing PHP close tag and previous statement has no semicolon
    - Fixed bug #778 : PHPCBF creates invalid PHP for inline FOREACH containing multiple control structures
    - Fixed bug #781 : Incorrect checking for PHP7 return types on multi-line function declarations
    - Fixed bug #782 : Conditional function declarations cause fixing conflicts in Squiz standard
      -- Squiz.ControlStructures.ControlSignature no longer enforces a single newline after open brace
      -- Squiz.WhiteSpace.ControlStructureSpacing can be used to check spacing at the start/end of control structures
    </notes>
  </release>
  <release>
   <version>
    <release>2.3.4</release>
    <api>2.3.4</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2015-09-09</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - JSON report format now includes the fixable status for each error message and the total number of fixable errors
    - Added more guard code for function declarations with syntax errors
    - Added tokenizer support for the PHP declare construct
      -- Thanks to Andy Blyler for the patch
    - Generic UnnecessaryStringConcatSniff can now allow strings concatenated over multiple lines
      -- Set the allowMultiline property to TRUE (default is FALSE) in your ruleset.xml file to enable this
      -- By default, concat used only for getting around line length limits still generates an error
      -- Thanks to Stefan Lenselink for the contribution
    - Invalid byte sequences no longer throw iconv_strlen() errors (request #639)
      -- Thanks to Willem Stuursma for the patch
    - Generic TodoSniff and FixmeSniff are now better at processing strings with invalid characters
    - PEAR FunctionCallSignatureSniff now ignores indentation of inline HTML content
    - Squiz ControlSignatureSniff now supports control structures with only inline HTML content
    - Fixed bug #636 : Some class names cause CSS tokenizer to hang
    - Fixed bug #638 : VCS blame reports output error content from the blame commands for files not under VC
    - Fixed bug #642 : Method params incorrectly detected when default value uses short array syntax
      -- Thanks to Josh Davis for the patch
    - Fixed bug #644 : PEAR ScopeClosingBrace sniff does not work with mixed HTML/PHP
    - Fixed bug #645 : FunctionSignature and ScopeIndent sniffs don't detect indents correctly when PHP open tag is not on a line by itself
    - Fixed bug #648 : Namespace not tokenized correctly when followed by multiple use statements
    - Fixed bug #654 : Comments affect indent check for BSDAllman brace style
    - Fixed bug #658 : Squiz.Functions.FunctionDeclarationSpacing error for multi-line declarations with required spaces greater than zero
      -- Thanks to J.D. Grimes for the patch
    - Fixed bug #663 : No space after class name generates: Class name "" is not in camel caps format
    - Fixed bug #667 : Scope indent check can go into infinite loop due to some parse errors
    - Fixed bug #670 : Endless loop in PSR1 SideEffects sniffer if no semicolon after last statement
      -- Thanks to Thomas Jarosch for the patch
    - Fixed bug #672 : Call-time pass-by-reference false positive
    - Fixed bug #683 : Comments are incorrectly reported by PSR2.ControlStructures.SwitchDeclaration sniff
    - Fixed bug #687 : ScopeIndent does not check indent correctly for method prefixes like public and abstract
    - Fixed bug #689 : False error on some comments after class closing brace
    </notes>
  </release>
  <release>
   <version>
    <release>2.3.3</release>
    <api>2.3.3</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2015-06-24</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Improved the performance of the CSS tokenizer, especially on very large CSS files (thousands of lines)
      -- Thanks to Klaus Purer for the patch
    - Defined tokens for lower PHP versions are now phpcs-specific strings instead of ints
      -- Stops conflict with other projects, like PHP_CodeCoverage
    - Added more guard code for syntax errors to various sniffs
    - Improved support for older HHVM versions
      -- Thanks to Kunal Mehta for the patch
    - Squiz ValidLogicalOperatorsSniff now ignores XOR as type casting is different when using the ^ operator (request #567)
    - Squiz CommentedOutCodeSniff is now better at ignoring URLs inside comments
    - Squiz ControlSignatureSniff is now better at checking embedded PHP code
    - Squiz ScopeClosingBraceSniff is now better at checking embedded PHP code
    - Fixed bug #584 : Squiz.Arrays.ArrayDeclaration sniff gives incorrect NoComma error for multiline string values
    - Fixed bug #589 : PEAR.Functions.FunctionCallSignature sniff not checking all function calls
    - Fixed bug #592 : USE statement tokenising can sometimes result in mismatched scopes
    - Fixed bug #594 : Tokenizer issue on closure that returns by reference
    - Fixed bug #595 : Colons in CSS selectors within media queries throw false positives
      -- Thanks to Klaus Purer for the patch
    - Fixed bug #598 : PHPCBF can break function/use closure brace placement
    - Fixed bug #603 : Squiz ControlSignatureSniff hard-codes opener type while fixing
    - Fixed bug #605 : Auto report-width specified in ruleset.xml ignored
    - Fixed bug #611 : Invalid numeric literal on CSS files under PHP7
    - Fixed bug #612 : Multi-file diff generating incorrectly if files do not end with EOL char
    - Fixed bug #615 : Squiz OperatorBracketSniff incorrectly reports and fixes operations using self::
    - Fixed bug #616 : Squiz DisallowComparisonAssignmentSniff inconsistent errors with inline IF statements
    - Fixed bug #617 : Space after switch keyword in PSR-2 is not being enforced
    - Fixed bug #621 : PSR2 SwitchDeclaration sniff doesn't detect, or correctly fix, case body on same line as statement
    </notes>
  </release>
  <release>
   <version>
    <release>2.3.2</release>
    <api>2.3.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2015-04-29</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The error message for PSR2.ControlStructures.SwitchDeclaration.WrongOpenercase is now clearer (request #579)
    - Fixed bug #545 : Long list of CASE statements can cause tokenizer to reach a depth limit
    - Fixed bug #565 : Squiz.WhiteSpace.OperatorSpacing reports negative number in short array
      -- Thanks to Vašek Purchart for the patch
      -- Same fix also applied to Squiz.Formatting.OperatorBracket
    - Fixed bug #569 : Generic ScopeIndentSniff throws PHP notices in JS files
    - Fixed bug #570 : Phar class fatals in PHP less than 5.3
    </notes>
  </release>
  <release>
   <version>
    <release>2.3.1</release>
    <api>2.3.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2015-04-23</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - PHPCS can now exit with 0 even if errors are found
      -- Set the ignore_errors_on_exit config variable to 1 to set this behaviour
      -- Use with the ignore_warnings_on_exit config variable to never return a non-zero exit code
    - Added Generic DisallowLongArraySyntaxSniff to enforce the use of the PHP short array syntax (request #483)
      -- Thanks to Xaver Loppenstedt for helping with tests
    - Added Generic DisallowShortArraySyntaxSniff to ban the use of the PHP short array syntax (request #483)
      -- Thanks to Xaver Loppenstedt for helping with tests
    - Generic ScopeIndentSniff no longer does exact checking for content inside parenthesis (request #528)
      -- Only applies to custom coding standards that set the "exact" flag to TRUE
    - Squiz ConcatenationSpacingSniff now has a setting to ignore newline characters around operators (request #511)
        -- Default remains FALSE, so newlines are not allowed
        -- Override the "ignoreNewlines" setting in a ruleset.xml file to change
    - Squiz InlineCommentSniff no longer checks the last char of a comment if the first char is not a letter (request #505)
    - The Squiz standard has increased the max padding for statement alignment from 12 to 20
    - Fixed bug #479 : Yielded values are not recognised as returned values in Squiz FunctionComment sniff
    - Fixed bug #512 : Endless loop whilst parsing mixture of control structure styles
    - Fixed bug #515 : Spaces in JS block incorrectly flagged as indentation error
    - Fixed bug #523 : Generic ScopeIndent errors for IF in FINALLY
    - Fixed bug #527 : Closure inside IF statement is not tokenized correctly
    - Fixed bug #529 : Squiz.Strings.EchoedStrings gives false positive when echo'ing using an inline condition
    - Fixed bug #537 : Using --config-set is breaking phpcs.phar
    - Fixed bug #543 : SWITCH with closure in condition generates inline control structure error
    - Fixed bug #551 : Multiple catch blocks not checked in Squiz.ControlStructures.ControlSignature sniff
    - Fixed bug #554 : ScopeIndentSniff causes errors when encountering an unmatched parenthesis
    - Fixed bug #558 : PHPCBF adds brace for ELSE IF split over multiple lines
    - Fixed bug #564 : Generic MultipleStatementAlignment sniff reports incorrect errors for multiple assignments on a single line
    </notes>
  </release>
  <release>
   <version>
    <release>2.3.0</release>
    <api>2.3.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2015-03-04</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The existence of the main config file is now cached to reduce is_file() calls when it doesn't exist (request #486)
    - Abstract classes inside the Sniffs directory are now ignored even if they are named [Name]Sniff.php (request #476)
      -- Thanks to David Vernet for the patch
    - PEAR and Squiz FileComment sniffs no longer have @ in their error codes
      -- e.g., PEAR.Commenting.FileComment.Duplicate@categoryTag becomes PEAR.Commenting.FileComment.DuplicateCategoryTag
      -- e.g., Squiz.Commenting.FileComment.Missing@categoryTag becomes Squiz.Commenting.FileComment.MissingCategoryTag
    - PEAR MultiLineConditionSniff now allows comment lines inside multi-line IF statement conditions
      -- Thanks to Klaus Purer for the patch
    - Generic ForbiddenFunctionsSniff now supports setting null replacements in ruleset files (request #263)
    - Generic opening function brace sniffs now support checking of closures
      -- Set the checkClosures property to TRUE (default is FALSE) in your ruleset.xml file to enable this
      -- Can also set the checkFunctions property to FALSE (default is TRUE) in your ruleset.xml file to only check closures
      -- Affects OpeningFunctionBraceBsdAllmanSniff and OpeningFunctionBraceKernighanRitchieSniff
    - Generic OpeningFunctionBraceKernighanRitchieSniff can now fix all the errors it finds
    - Generic OpeningFunctionBraceKernighanRitchieSniff now allows empty functions with braces next to each other
    - Generic OpeningFunctionBraceBsdAllmanSniff now allows empty functions with braces next to each other
    - Improved auto report width for the "full" report
    - Improved conflict detection during auto fixing
    - Generic ScopeIndentSniff is no longer confused by empty closures
    - Squiz ControlSignatureSniff now always ignores comments (fixes bug #490)
      -- Include the Squiz.Commenting.PostStatementComment sniff in your ruleset.xml to ban these comments again
    - Squiz OperatorSpacingSniff no longer throws errors for code in the form ($foo || -1 === $bar)
    - Fixed errors tokenizing T_ELSEIF tokens on HHVM 3.5
    - Squiz ArrayDeclarationSniff is no longer tricked by comments after array values
    - PEAR IncludingFileSniff no longer produces invalid code when removing parenthesis from require/include statements
    - Fixed bug #415 : The @codingStandardsIgnoreStart has no effect during fixing
    - Fixed bug #432 : Properties of custom sniffs cannot be configured
    - Fixed bug #453 : PSR2 standard does not allow closing tag for mixed PHP/HTML files
    - Fixed bug #457 : FunctionCallSignature sniffs do not support here/nowdoc syntax and can cause syntax error when fixing
    - Fixed bug #466 : PropertyLabelSpacing JS fixer issue when there is no space after colon
    - Fixed bug #473 : Writing a report for an empty folder to existing file includes the existing contents
    - Fixed bug #485 : PHP notice in Squiz.Commenting.FunctionComment when checking malformed @throws comment
    - Fixed bug #491 : Generic InlineControlStructureSniff can correct with missing semicolon
      -- Thanks to Jesse Donat for the patch
    - Fixed bug #492 : Use statements don't increase the scope indent
    - Fixed bug #493 : PSR1_Sniffs_Methods_CamelCapsMethodNameSniff false positives for some magic method detection
      -- Thanks to Andreas Möller for the patch
    - Fixed bug #496 : Closures in PSR2 are not checked for a space after the function keyword
    - Fixed bug #497 : Generic InlineControlStructureSniff does not support alternative SWITCH syntax
    - Fixed bug #500 : Functions not supported as values in Squiz ArrayDeclaration sniff
    - Fixed bug #501 : ScopeClosingBrace and ScopeIndent conflict with closures used as array values
      -- Generic ScopeIndentSniff may now report fewer errors for closures, but perform the same fixes
    - Fixed bug #502 : PSR1 SideEffectsSniff sees declare() statements as side effects
    </notes>
  </release>
  <release>
   <version>
    <release>2.2.0</release>
    <api>2.2.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2015-01-22</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added (hopefully) tastefully used colors to report and progress output for the phpcs command
      -- Use the --colors command line argument to use colors in output
      -- Use the command "phpcs --config-set colors true" to turn colors on by default
      -- Use the --no-colors command line argument to turn colors off when the config value is set
    - Added support for using the full terminal width for report output
      -- Use the --report-width=auto command line argument to auto-size the reports
      -- Use the command "phpcs --config-set report_width auto" to use auto-sizing by default
    - Reports will now size to fit inside the report width setting instead of always using padding to fill the space
    - If no files or standards are specified, PHPCS will now look for a phpcs.xml file in the current directory
      -- This file has the same format as a standard ruleset.xml file
      -- The phpcs.xml file should specify (at least) files to process and a standard/sniffs to use
      -- Useful for running the phpcs and phpcbf commands without any arguments at the top of a repository
    - Default file paths can now be specified in a ruleset.xml file using the "file" tag
      -- File paths are only processed if no files were specified on the command line
    - Extensions specified on the CLI are now merged with those set in ruleset.xml files
      -- Previously, the ruleset.xml file setting replaced the CLI setting completely
    - Squiz coding standard now requires lowercase PHP constants (true, false and null)
      -- Removed Squiz.NamingConventions.ConstantCase sniff as the rule is now consistent across PHP and JS files
    - Squiz FunctionOpeningBraceSpaceSniff no longer does additional checks for JS functions
      -- PHP and JS functions and closures are now treated the same way
    - Squiz MultiLineFunctionDeclarationSniff now supports JS files
    - Interactive mode no longer breaks if you also specify a report type on the command line
    - PEAR InlineCommentSniff now fixes the Perl-style comments that it finds (request #375)
    - PSR2 standard no longer fixes the placement of docblock open tags as comments are excluded from this standard
    - PSR2 standard now sets a default tab width of 4 spaces
    - Generic DocCommentSniff now only disallows lowercase letters at the start of a long/short comment (request #377)
      -- All non-letter characters are now allowed, including markdown special characters and numbers
    - Generic DisallowMultipleStatementsSniff now allows multiple open/close tags on the same line (request #423)
    - Generic CharacterBeforePHPOpeningTagSniff now only checks the first PHP tag it finds (request #423)
    - Generic CharacterBeforePHPOpeningTagSniff now allows a shebang line at the start of the file (request #20481)
    - Generic InlineHTMLUnitTest now allows a shebang line at the start of the file (request #20481)
    - PEAR ObjectOperatorIndentSniff now only checks object operators at the start of a line
    - PEAR FileComment and ClassComment sniffs no longer have @ in their error codes
      -- E.g., PEAR.Commenting.FileComment.Missing@categoryTag becomes PEAR.Commenting.FileComment.MissingCategoryTag
      -- Thanks to Grzegorz Rygielski for the patch
    - Squiz ControlStructureSpacingSniff no longer enforces a blank line before CATCH statements
    - Squiz FunctionCommentSniff now fixes the return type in the @return tag (request #392)
    - Squiz BlockCommentSniff now only disallows lowercase letters at the start of the comment
    - Squiz InlineCommentSniff now only disallows lowercase letters at the start of the comment
    - Squiz OperatorSpacingSniff now has a setting to ignore newline characters around operators (request #348)
      -- Default remains FALSE, so newlines are not allowed
      -- Override the "ignoreNewlines" setting in a ruleset.xml file to change
    - PSR2 ControlStructureSpacingSniff now checks for, and fixes, newlines after the opening parenthesis
    - Added a markdown document generator (--generator=markdown to use)
      -- Thanks to Stefano Kowalke for the contribution
    - Fixed bug #379 : Squiz.Arrays.ArrayDeclaration.NoCommaAfterLast incorrectly detects comments
    - Fixed bug #382 : JS tokenizer incorrect for inline conditionally created immediately invoked anon function
    - Fixed bug #383 : Squiz.Arrays.ArrayDeclaration.ValueNoNewline incorrectly detects nested arrays
    - Fixed bug #386 : Undefined offset in Squiz.FunctionComment sniff when param has no comment
    - Fixed bug #390 : Indentation of non-control structures isn't adjusted when containing structure is fixed
    - Fixed bug #400 : InlineControlStructureSniff fails to fix when statement has no semicolon
    - Fixed bug #401 : PHPCBF no-patch option shows an error when there are no fixable violations in a file
    - Fixed bug #405 : The "Squiz.WhiteSpace.FunctionSpacing" sniff removes class "}" during fixing
    - Fixed bug #407 : PEAR.ControlStructures.MultiLineCondition doesn't account for comments at the end of lines
    - Fixed bug #410 : The "Squiz.WhiteSpace.MemberVarSpacing" not respecting "var"
    - Fixed bug #411 : Generic.WhiteSpace.ScopeIndent.Incorrect - false positive with multiple arrays in argument list
    - Fixed bug #412 : PSR2 multi-line detection doesn't work for inline IF and string concats
    - Fixed bug #414 : Squiz.WhiteSpace.MemberVarSpacing - inconsistent checking of member vars with comment
    - Fixed bug #433 : Wrong detection of Squiz.Arrays.ArrayDeclaration.KeyNotAligned when key contains space
    - Fixed bug #434 : False positive for spacing around "=>" in inline array within foreach
    - Fixed bug #452 : Ruleset exclude-pattern for specific sniff code ignored when using CLI --ignore option
    - Fixed bug #20482 : Scope indent sniff can get into infinite loop when processing a parse error
    </notes>
  </release>
  <release>
   <version>
    <release>2.1.0</release>
    <api>2.1.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2014-12-18</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Time and memory output is now shown if progress information is also shown (request #335)
    - A tilde can now be used to reference a user's home directory in a path to a standard (request #353)
    - Added PHP_CodeSniffer_File::findStartOfStatement() to find the first non-whitespace token in a statement
      -- Possible alternative for code using PHP_CodeSniffer_File::findPrevious() with the local flag set
    - Added PHP_CodeSniffer_File::findEndOfStatement() to find the last non-whitespace token in a statement
      -- Possible alternative for code using PHP_CodeSniffer_File::findNext() with the local flag set
    - Generic opening function brace sniffs now ensure the opening brace is the last content on the line
      -- Affects OpeningFunctionBraceBsdAllmanSniff and OpeningFunctionBraceKernighanRitchieSniff
      -- Also enforced in PEAR FunctionDeclarationSniff and Squiz MultiLineFunctionDeclarationSniff
    - Generic DisallowTabIndentSniff now replaces tabs everywhere it finds them, except in strings and here/now docs
    - Generic EmptyStatementSniff error codes now contain the type of empty statement detected (request #314)
      -- All messages generated by this sniff are now errors (empty CATCH was previously a warning)
      -- Message code Generic.CodeAnalysis.EmptyStatement.NotAllowed has been removed
      -- Message code Generic.CodeAnalysis.EmptyStatement.NotAllowedWarning has been removed
      -- New message codes have the format Generic.CodeAnalysis.EmptyStatement.Detected[TYPE]
      -- Example code is Generic.CodeAnalysis.EmptyStatement.DetectedCATCH
      -- You can now use a custom ruleset to change messages to warnings and to exclude them
    - PEAR and Squiz FunctionCommentSniffs no longer ban @return tags for constructors and destructors
      -- Removed message PEAR.Commenting.FunctionComment.ReturnNotRequired
      -- Removed message Squiz.Commenting.FunctionComment.ReturnNotRequired
      -- Change initiated by request #324 and request #369
    - Squiz EmptyStatementSniff has been removed
      -- Squiz standard now includes Generic EmptyStatementSniff and turns off the empty CATCH error
    - Squiz ControlSignatureSniff fixes now retain comments between the closing parenthesis and open brace
    - Squiz SuperfluousWhitespaceSniff now checks for extra blank lines inside closures
      -- Thanks to Sertan Danis for the patch
    - Squiz ArrayDeclarationSniff now skips function calls while checking multi-line arrays
    - Fixed bug #337 : False positive with anonymous functions in Generic_Sniffs_WhiteSpace_ScopeIndentSniff
    - Fixed bug #339 : reformatting brace location can result in broken code
    - Fixed bug #342 : Nested ternary operators not tokenized correctly
    - Fixed bug #345 : Javascript regex not tokenized when inside array
    - Fixed bug #346 : PHP path can't be determined in some cases in "phpcs.bat" (on Windows XP)
    - Fixed bug #358 : False positives for Generic_Sniffs_WhiteSpace_ScopeIndentSniff
    - Fixed bug #361 : Sniff-specific exclude patterns don't work for Windows
    - Fixed bug #364 : Don't interpret "use function" as declaration
    - Fixed bug #366 : phpcbf with PSR2 errors on control structure alternative syntax
    - Fixed bug #367 : Nested Anonymous Functions Causing False Negative
    - Fixed bug #371 : Shorthand binary cast causes tokenizer errors
      -- New token T_BINARY_CAST added for the b"string" cast format (the 'b' is the T_BINARY_CAST token)
    - Fixed bug #372 : phpcbf parse problem, wrong brace placement for inline IF
    - Fixed bug #373 : Double quote usage fix removing too many double quotes
    - Fixed bug #20196 : 1.5.2 breaks scope_closer position
    </notes>
  </release>
  <release>
   <version>
    <release>2.0.0</release>
    <api>2.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2014-12-05</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - JS tokenizer now sets functions as T_CLOSUREs if the function is anonymous
    - JS tokenizer now sets all objects to T_OBJECT
      -- Object end braces are set to a new token T_CLOSE_OBJECT
      -- T_OBJECT tokens no longer act like scopes; i.e., they have no condition/opener/closer
      -- T_PROPERTY tokens no longer act like scopes; i.e., they have no condition/opener/closer
      -- T_OBJECT tokens have a bracket_closer instead, which can be used to find the ending
      -- T_CLOSE_OBJECT tokens have a bracket_opener
    - Improved regular expression detection in the JS tokenizer
    - You can now get PHP_CodeSniffer to ignore a single line by putting @codingStandardsIgnoreLine in a comment
      -- When the comment is found, the comment line and the following line will be ignored
      -- Thanks to Andy Bulford for the contribution
    - PHPCBF now prints output when it is changing into directories
    - Improved conflict detection during auto fixing
    - The -vvv command line argument will now output the current file content for each loop during fixing
    - Generic ScopeIndentSniff now checks that open/close PHP tags are aligned to the correct column
    - PEAR FunctionCallSignatureSniff now checks indent of closing parenthesis even if it is not on a line by itself
    - PEAR FunctionCallSignatureSniff now supports JS files
    - PEAR MultiLineConditionSniff now supports JS files
    - Squiz DocCommentAlignmentSniff now supports JS files
    - Fixed a problem correcting the closing brace line in Squiz ArrayDeclarationSniff
    - Fixed a problem auto-fixing the Squiz.WhiteSpace.FunctionClosingBraceSpace.SpacingBeforeNestedClose error
    - Squiz EmbeddedPhpSniff no longer reports incorrect alignment of tags when they are not on new lines
    - Squiz EmbeddedPhpSniff now aligns open tags correctly when moving them onto a new line
    - Improved fixing of arrays with multiple values in Squiz ArrayDeclarationSniff
    - Improved detection of function comments in Squiz FunctionCommentSpacingSniff
    - Improved fixing of lines after cases statements in Squiz SwitchDeclarationSniff
    - Fixed bug #311 : Suppression of function prototype breaks checking of lines within function
    - Fixed bug #320 : Code sniffer indentation issue
    - Fixed bug #333 : Nested ternary operators causing problems
    </notes>
  </release>
  <release>
   <version>
    <release>2.0.0RC4</release>
    <api>2.0.0RC4</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2014-11-07</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - JS tokenizer now detects xor statements correctly
    - Improved detection of properties and objects in the JS tokenizer
    - Generic ScopeIndentSniff can now fix indents using tabs instead of spaces
      -- Set the tabIndent property to TRUE in your ruleset.xml file to enable this
      -- It is important to also set a tab-width setting, either in the ruleset or on the command line, for accuracy
    - Generic ScopeIndentSniff now checks and auto-fixes JS files
    - Generic DisallowSpaceIndentSniff is now able to replace space indents with tab indents during fixing
    - Support for phpcs-only and phpcbf-only attributes has been added to all ruleset.xml elements
      -- Allows parts of the ruleset to only apply when using a specific tool
      -- Useful for doing things like excluding indent fixes but still reporting indent errors
    - Unit tests can now set command line arguments during a test run
      -- Override getCliValues() and pass an array of CLI arguments for each file being tested
    - File-wide sniff properties can now be set using T_INLINE_HTML content during unit test runs
      -- Sniffs that start checking at the open tag can only, normally, have properties set using a ruleset
    - Generic ConstructorNameSniff no longer errors for PHP4 style constructors when __construct() is present
      -- Thanks to Thibaud Fabre for the patch
    - Generic DocCommentSniff now checks that the end comment tag is on a new line
    - Generic MultipleStatementAlignmentSniff no longer skips assignments for closures
    - Squiz DocCommentAlignment sniff now has better checking for single line doc block
    - Running unit tests with the -v CLI argument no longer generates PHP errors
    - Fixed bug #295 : ScopeIndentSniff hangs when processing nested closures
    - Fixed bug #298 : False positive in ScopeIndentSniff when anonymous functions are used with method chaining
    - Fixed bug #302 : Fixing code in Squiz InlineComment sniff can remove some comment text
    - Fixed bug #303 : Open and close tag on same line can cause a PHP notice checking scope indent
    - Fixed bug #306 : File containing only a namespace declaration raises undefined index notice
    - Fixed bug #307 : Conditional breaks in case statements get incorrect indentations
    - Fixed bug #308 : Squiz InlineIfDeclarationSniff fails on ternary operators inside closure
    - Fixed bug #310 : Variadics not recognized by tokenizer
    </notes>
  </release>
  <release>
   <version>
    <release>2.0.0RC3</release>
    <api>2.0.0RC3</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2014-10-16</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Improved default output for PHPCBF and removed the options to print verbose and progress output
    - If a .fixed file is supplied for a unit test file, the auto fixes will be checked against it during testing
      -- See Generic ScopeIndentUnitTest.inc and ScopeIndentUnitTest.inc.fixed for an example
    - Fixer token replacement methods now return TRUE if the change was accepted and FALSE if rejected
    - The --config-show command now pretty-prints the config values
      -- Thanks to Ken Guest for the patch
    - Setting and removing config values now catches exceptions if the config file is not writable
      -- Thanks to Ken Guest for the patch
    - Setting and removing config values now prints a message to confirm the action and show old values
    - Generic ScopeIndentSniff has been completely rewritten to improve fixing and embedded PHP detection
    - Generic DisallowTabIndent and DisallowSpaceIndent sniffs now detect indents at the start of block comments
    - Generic DisallowTabIndent and DisallowSpaceIndent sniffs now detect indents inside multi-line strings
    - Generic DisallowTabIndentSniff now replaces tabs inside doc block comments
    - Squiz ControlStructureSpacingSniff error codes have been corrected; they were reversed
    - Squiz EmbeddedPhpSniff now checks open and close tag indents and fixes some errors
    - Squiz FileCommentSniff no longer throws incorrect blank line before comment errors in JS files
    - Squiz ClassDeclarationSniff now has better checking for blank lines after a closing brace
    - Removed error Squiz.Classes.ClassDeclaration.NoNewlineAfterCloseBrace (request #285)
      -- Already handled by Squiz.Classes.ClassDeclaration.CloseBraceSameLine
    - Fixed bug #280 : The --config-show option generates error when there is no config file
    </notes>
  </release>
  <release>
   <version>
    <release>2.0.0RC2</release>
    <api>2.0.0RC2</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2014-09-26</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Minified JS and CSS files are now detected and skipped (fixes bug #252 and bug #19899)
      -- A warning will be added to the file so it can be found in the report and ignored in the future
    - Fixed incorrect length of JS object operator tokens
    - PHP tokenizer no longer converts class/function names to special tokens types
      -- Class/function names such as parent and true would become special tokens such as T_PARENT and T_TRUE
    - PHPCS can now exit with 0 if only warnings were found (request #262)
      -- Set the ignore_warnings_on_exit config variable to 1 to set this behaviour
      -- Default remains at exiting with 0 only if no errors and no warnings were found
      -- Also changes return value of PHP_CodeSniffer_Reporting::printReport()
    - Rulesets can now set associative array properties
      -- property name="[property]" type="array" value="foo=>bar,baz=>qux"
    - Generic ForbiddenFunctionsSniff now has a public property called forbiddenFunctions (request #263)
      -- Override the property in a ruleset.xml file to define forbidden functions and their replacements
      -- A replacement of NULL indicates that no replacement is available
      -- e.g., value="delete=>unset,print=>echo,create_function=>null"
      -- Custom sniffs overriding this one will need to change the visibility of their member var
    - Improved closure support in Generic ScopeIndentSniff
    - Improved indented PHP tag support in Generic ScopeIndentSniff
    - Improved fixing of mixed line indents in Generic ScopeIndentSniff
    - Added conflict detection to the file fixer
      -- If 2 sniffs look to be conflicting, one change will be ignored to allow a fix to occur
    - Generic CamelCapsFunctionNameSniff now ignores a single leading underscore
      -- Thanks to Alex Slobodiskiy for the patch
    - Standards can now be located within hidden directories (further fix for bug #20323)
      -- Thanks to Klaus Purer for the patch
    - Sniff ignore patterns now replace Win dir separators like file ignore patterns already did
    - Exclude patterns now use backtick delimiters, allowing all special characters to work correctly again
      -- Thanks to Jeremy Edgell for the patch
    - Errors converted to warnings in a ruleset (and vice versa) now retain their fixable status
      -- Thanks to Alexander Obuhovich for the patch
    - Squiz ConcatenationSpacingSniff now has a setting to specify how many spaces there should around concat operators
      -- Default remains at 0
      -- Override the "spacing" setting in a ruleset.xml file to change
    - Added auto-fixes for Squiz InlineCommentSniff
    - Generic DocCommentSniff now correctly fixes additional blank lines at the end of a comment
    - Squiz OperatorBracketSniff now correctly fixes operations that include arrays
    - Zend ClosingTagSniff fix now correctly leaves closing tags when followed by HTML
    - Added Generic SyntaxSniff to check for syntax errors in PHP files
      -- Thanks to Blaine Schmeisser for the contribution
    - Added Generic OneTraitPerFileSniff to check that only one trait is defined in each file
      -- Thanks to Alexander Obuhovich for the contribution
    - Squiz DiscouragedFunctionsSniff now warns about var_dump()
    - PEAR ValidFunctionNameSniff no longer throws an error for _()
    - Squiz and PEAR FunctionCommentSniffs now support _()
    - Generic DisallowTabIndentSniff now checks for, and fixes, mixed indents again
    - Generic UpperCaseConstantSniff and LowerCaseConstantSniff now ignore function names
    - Fixed bug #243 : Missing DocBlock not detected
    - Fixed bug #248 : FunctionCommentSniff expects ampersand on param name
    - Fixed bug #265 : False positives with type hints in ForbiddenFunctionsSniff
    - Fixed bug #20373 : Inline comment sniff tab handling way
    - Fixed bug #20377 : Error when trying to execute phpcs with report=json
    - Fixed bug #20378 : Report appended to existing file if no errors found in run
    - Fixed bug #20381 : Invalid "Comment closer must be on a new line"
      -- Thanks to Brad Kent for the patch
    - Fixed bug #20402 : SVN pre-commit hook fails due to unknown argument error
    </notes>
  </release>
  <release>
   <version>
    <release>2.0.0RC1</release>
    <api>2.0.0RC1</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2014-08-06</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - PHPCBF will now fix incorrect newline characters in a file
    - PHPCBF now exists cleanly when there are no errors to fix
    - Added phpcbf.bat file for Windows
    - Verbose option no longer errors when using a phar file with a space in the path
    - Fixed a reporting error when using HHVM
      -- Thanks to Martins Sipenko for the patch
    - addFixableError() and addFixableWarning() now only return true if the fixer is enabled
      -- Saves checking ($phpcsFile->fixer->enabled === true) before every fix
    - Added addErrorOnLine() and addWarningOnLine() to add a non-fixable violation to a line at column 1
      -- Useful if you are generating errors using an external tool or parser and only know line numbers
      -- Thanks to Ondřej Mirtes for the patch
    - CSS tokenizer now identifies embedded PHP code using the new T_EMBEDDED_PHP token type
      -- The entire string of PHP is contained in a single token
    - PHP tokenizer contains better detection of short array syntax
    - Unit test runner now also test any standards installed under the installed_paths config var
    - Exclude patterns now use {} delimiters, allowing the | special character to work correctly again
    - The filtering component of the --extensions argument is now ignored again when passing filenames
      -- Can still be used to specify a custom tokenizer for each extension when passing filenames
      -- If no tokenizer is specified, default values will be used for common file extensions
    - Diff report now produces relative paths on Windows, where possible (further fix for bug #20234)
    - If a token's content has been modified by the tab-width setting, it will now have an orig_content in the tokens array
    - Generic DisallowSpaceIndent and DisallowTabIndent sniffs now check original indent content even when tab-width is set
      -- Previously, setting --tab-width would force both to check the indent as spaces
    - Fixed a problem where PHPCBF could replace tabs with too many spaces when changing indents
    - Fixed a problem that could occur with line numbers when using HHVM to check files with Windows newline characters
    - Removed use of sys_get_temp_dir() as this is not supported by the min PHP version
    - Squiz ArrayDeclarationSniff now supports short array syntax
    - Squiz ControlSignatureSniff no longer uses the Abstract Pattern sniff
      -- If you are extending this sniff, you'll need to rewrite your code
      -- The rewrite allows this sniff to fix all control structure formatting issues it finds
    - The installed_paths config var now accepts relative paths
      -- The paths are relative to the PHP_CodeSniffer install directory
      -- Thanks to Weston Ruter for the patch
    - Generic ScopeIndentSniff now accounts for different open tag indents
    - PEAR FunctionDeclarationSniff now ignores short arrays when checking indent
      -- Thanks to Daniel Tschinder for the patch
    - PSR2 FunctionCallSignatureSniff now treats multi-line strings as a single-line argument, like arrays and closures
      -- Thanks to Dawid Nowak for the patch
    - PSR2 UseDeclarationSniff now checks for a single space after the USE keyword
    - Generic ForbiddenFunctionsSniff now detects calls to functions in the global namespace
      -- Thanks to Ole Martin Handeland for the patch
    - Generic LowerCaseConstantSniff and UpperCaseConstantSniff now ignore namespaces beginning with TRUE/FALSE/NULL
      -- Thanks to Renan Gonçalves for the patch
    - Squiz InlineCommentSniff no longer requires a blank line after post-statement comments (request #20299)
    - Squiz SelfMemberReferenceSniff now works correctly with namespaces
    - Squiz FunctionCommentSniff is now more relaxed when checking namespaced type hints
    - Tab characters are now encoded in abstract pattern errors messages
      -- Thanks to Blaine Schmeisser for the patch
    - Invalid sniff codes passed to --sniffs now show a friendly error message (request #20313)
    - Generic LineLengthSniff now shows a warning if the iconv module is disabled (request #20314)
    - Source report no longer shows errors if category or sniff names ends in an uppercase error
      -- Thanks to Jonathan Marcil for the patch
    - Fixed bug #20261 : phpcbf has an endless fixing loop
    - Fixed bug #20268 : Incorrect documentation titles in PEAR documentation
    - Fixed bug #20296 : new array notion in function comma check fails
    - Fixed bug #20297 : phar does not work when renamed it to phpcs
    - Fixed bug #20307 : PHP_CodeSniffer_Standards_AbstractVariableSniff analyze traits
    - Fixed bug #20308 : Squiz.ValidVariableNameSniff - wrong variable usage
    - Fixed bug #20309 : Use "member variable" term in sniff "processMemberVar" method
    - Fixed bug #20310 : PSR2 does not check for space after function name
    - Fixed bug #20322 : Display rules set to type=error even when suppressing warnings
    - Fixed bug #20323 : PHPCS tries to load sniffs from hidden directories
    - Fixed bug #20346 : Fixer endless loop with Squiz.CSS sniffs
    - Fixed bug #20355 : No sniffs are registered with PHAR on Windows
    </notes>
  </release>
  <release>
   <version>
    <release>2.0.0a2</release>
    <api>2.0.0a2</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2014-05-01</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added report type --report=info to show information about the checked code to make building a standard easier
      -- Checks a number of things, such as what line length you use, and spacing are brackets, but not everything
      -- Still highly experimental
    - Generic LineLengthSniff now shows warnings for long lines referring to licence and VCS information
      -- It previously ignored these lines, but at the expense of performance
    - Generic DisallowTabIndent and DisallowSpaceIndent sniffs no longer error when detecting mixed indent types
      -- Only the first type of indent found on a line (space or indent) is considered
    - Lots of little performance improvements that can add up to a substantial saving over large code bases
      -- Added a "length" array index to tokens so you don't need to call strlen() of them, or deal with encoding
      -- Can now use isset() to find tokens inside the PHP_CodeSniffer_Tokens static vars instead of in_array()
    - Custom reports can now specify a $recordErrors member var; this previously only worked for built-in reports
      -- When set to FALSE, error messages will not be recorded and only totals will be returned
      -- This can save significant memory while processing a large code base
    - Removed dependence on PHP_Timer
    - PHP tokenizer now supports DEFAULT statements opened with a T_SEMICOLON
    - The Squiz and PHPCS standards have increased the max padding for statement alignment from 8 to 12
    - Squiz EchoedStringsSniff now supports statements without a semicolon, such as PHP embedded in HTML
    - Squiz DoubleQuoteUsageSniff now properly replaces escaped double quotes when fixing a doubled quoted string
    - Improved detection of nested IF statements that use the alternate IF/ENDIF syntax
    - PSR1 CamelCapsMethodNameSniff now ignores magic methods
      -- Thanks to Eser Ozvataf for the patch
    - PSR1 SideEffectsSniff now ignores methods named define()
    - PSR1 and PEAR ClassDeclarationSniffs now support traits (request #20208)
    - PSR2 ControlStructureSpacingSniff now allows newlines before/after parentheses
      -- Thanks to Maurus Cuelenaere for the patch
    - PSR2 ControlStructureSpacingSniff now checks TRY and CATCH statements
    - Squiz SuperfluousWhitespaceSniff now detects whitespace at the end of block comment lines
      -- Thanks to Klaus Purer for the patch
    - Squiz LowercasePHPFunctionsSniff no longer reports errors for namespaced functions
      -- Thanks to Max Galbusera for the patch
    - Squiz SwitchDeclarationSniff now allows exit() as a breaking statement for case/default
    - Squiz ValidVariableNameSniff and Zend ValidVariableNameSniff now ignore additional PHP reserved vars
      -- Thanks to Mikuláš Dítě and Adrian Crepaz for the patch
    - Sniff code Squiz.WhiteSpace.MemberVarSpacing.After changed to Squiz.WhiteSpace.MemberVarSpacing.Incorrect (request #20241)
    - Fixed bug #20200 : Invalid JSON produced with specific error message
    - Fixed bug #20204 : Ruleset exclude checks are case sensitive
    - Fixed bug #20213 : Invalid error, Inline IF must be declared on single line
    - Fixed bug #20225 : array_merge() that takes more than one line generates error
    - Fixed bug #20230 : Squiz ControlStructureSpacing sniff assumes specific condition formatting
    - Fixed bug #20234 : phpcbf patch command absolute paths
    - Fixed bug #20240 : Squiz block comment sniff fails when newline present
    - Fixed bug #20247 : The Squiz.WhiteSpace.ControlStructureSpacing sniff and do-while
      -- Thanks to Alexander Obuhovich for the patch
    - Fixed bug #20248 : The Squiz_Sniffs_WhiteSpace_ControlStructureSpacingSniff sniff and empty scope
    - Fixed bug #20252 : Unitialized string offset when package name starts with underscore
    </notes>
  </release>
  <release>
   <version>
    <release>2.0.0a1</release>
    <api>2.0.0a1</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2014-02-05</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added the phpcbf script to automatically fix many errors found by the phpcs script
    - Added report type --report=diff to show suggested changes to fix coding standard violations
    - The --report argument now allows for custom reports to be used
      -- Use the full path to your custom report class as the report name
    - The --extensions argument is now respected when passing filenames; not just with directories
    - The --extensions argument now allows you to specify the tokenizer for each extension
      -- e.g., --extensions=module/php,es/js
    - Command line arguments can now be set in ruleset files
      -- e.g., arg name="report" value="summary" (print summary report; same as --report=summary)
      -- e.g., arg value="sp" (print source and progress information; same as -sp)
      -- The -vvv, --sniffs, --standard and -l command line arguments cannot be set in this way
    - Sniff process() methods can not optionally return a token to ignore up to
      -- If returned, the sniff will not be executed again until the passed token is reached in the file
      -- Useful if you are looking for tokens like T_OPEN_TAG but only want to process the first one
    - Removed the comment parser classes and replaced it with a simple comment tokenizer
      -- T_DOC_COMMENT tokens are now tokenized into T_DOC_COMMENT_* tokens so they can be used more easily
      -- This change requires a significant rewrite of sniffs that use the comment parser
      -- This change requires minor changes to sniffs that listen for T_DOC_COMMENT tokens directly
    - Added Generic DocCommentSniff to check generic doc block formatting
      -- Removed doc block formatting checks from PEAR ClassCommentSniff
      -- Removed doc block formatting checks from PEAR FileCommentSniff
      -- Removed doc block formatting checks from PEAR FunctionCommentSniff
      -- Removed doc block formatting checks from Squiz ClassCommentSniff
      -- Removed doc block formatting checks from Squiz FileCommentSniff
      -- Removed doc block formatting checks from Squiz FunctionCommentSniff
      -- Removed doc block formatting checks from Squiz VariableCommentSniff
    - Squiz DocCommentAlignmentSniff has had its error codes changed
      -- NoSpaceBeforeTag becomes NoSpaceAfterStar
      -- SpaceBeforeTag becomes SpaceAfterStar
      -- SpaceBeforeAsterisk becomes SpaceBeforeStar
    - Generic MultipleStatementAlignment now aligns assignments within a block so they fit within their max padding setting
      -- The sniff previously requested the padding as 1 space if max padding was exceeded
      -- It now aligns the assignment with surrounding assignments if it can
      -- Removed property ignoreMultiline as multi-line assignments are now handled correctly and should not be ignored
    - Squiz FunctionClosingBraceSpaceSniff now requires a blank line before the brace in all cases except function args
    - Added error Squiz.Commenting.ClassComment.SpacingAfter to ensure there are no blank lines after a class comment
    - Added error Squiz.WhiteSpace.MemberVarSpacing.AfterComment to ensure there are no blank lines after a member var comment
      -- Fixes have also been corrected to not strip the member var comment or indent under some circumstances
      -- Thanks to Mark Scherer for help with this fix
    - Added error Squiz.Commenting.FunctionCommentThrowTag.Missing to ensure a throw is documented
    - Removed error Squiz.Commenting.FunctionCommentThrowTag.WrongType
    - Content passed via STDIN can now specify the filename to use so that sniffs can run the correct filename checks
      -- Ensure the first line of the content is: phpcs_input_file: /path/to/file
    - Squiz coding standard now enforces no closing PHP tag at the end of a pure PHP file
    - Squiz coding standard now enforces a single newline character at the end of the file
    - Squiz ClassDeclarationSniff no longer checks for a PHP ending tag after a class definition
    - Squiz ControlStructureSpacingSniff now checks TRY and CATCH statements as well
    - Removed MySource ChannelExceptionSniff
    </notes>
  </release>
  <release>
   <version>
    <release>1.5.6</release>
    <api>1.5.6</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2014-12-05</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - JS tokenizer now detects xor statements correctly
    - The --config-show command now pretty-prints the config values
      -- Thanks to Ken Guest for the patch
    - Setting and removing config values now catches exceptions if the config file is not writable
      -- Thanks to Ken Guest for the patch
    - Setting and removing config values now prints a message to confirm the action and show old values
    - You can now get PHP_CodeSniffer to ignore a single line by putting @codingStandardsIgnoreLine in a comment
      -- When the comment is found, the comment line and the following line will be ignored
      -- Thanks to Andy Bulford for the contribution
    - Generic ConstructorNameSniff no longer errors for PHP4 style constructors when __construct() is present
      -- Thanks to Thibaud Fabre for the patch
    - Fixed bug #280 : The --config-show option generates error when there is no config file
    - Fixed bug #306 : File containing only a namespace declaration raises undefined index notice
    - Fixed bug #308 : Squiz InlineIfDeclarationSniff fails on ternary operators inside closure
    - Fixed bug #310 : Variadics not recognized by tokenizer
    - Fixed bug #311 : Suppression of function prototype breaks checking of lines within function
   </notes>
  </release>
  <release>
   <version>
    <release>1.5.5</release>
    <api>1.5.5</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2014-09-25</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - PHP tokenizer no longer converts class/function names to special tokens types
      -- Class/function names such as parent and true would become special tokens such as T_PARENT and T_TRUE
    - Improved closure support in Generic ScopeIndentSniff
    - Improved indented PHP tag support in Generic ScopeIndentSniff
    - Generic CamelCapsFunctionNameSniff now ignores a single leading underscore
      -- Thanks to Alex Slobodiskiy for the patch
    - Standards can now be located within hidden directories (further fix for bug #20323)
      -- Thanks to Klaus Purer for the patch
    - Added Generic SyntaxSniff to check for syntax errors in PHP files
      -- Thanks to Blaine Schmeisser for the contribution
    - Squiz DiscouragedFunctionsSniff now warns about var_dump()
    - PEAR ValidFunctionNameSniff no longer throws an error for _()
    - Squiz and PEAR FunctionCommentSnif now support _()
    - Generic UpperCaseConstantSniff and LowerCaseConstantSniff now ignore function names
    - Fixed bug #248 : FunctionCommentSniff expects ampersand on param name
    - Fixed bug #265 : False positives with type hints in ForbiddenFunctionsSniff
    - Fixed bug #20373 : Inline comment sniff tab handling way
    - Fixed bug #20378 : Report appended to existing file if no errors found in run
    - Fixed bug #20381 : Invalid "Comment closer must be on a new line"
      -- Thanks to Brad Kent for the patch
    - Fixed bug #20386 : Squiz.Commenting.ClassComment.SpacingBefore thrown if first block comment
   </notes>
  </release>
  <release>
   <version>
    <release>1.5.4</release>
    <api>1.5.4</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2014-08-06</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Removed use of sys_get_temp_dir() as this is not supported by the min PHP version
    - The installed_paths config var now accepts relative paths
      -- The paths are relative to the PHP_CodeSniffer install directory
      -- Thanks to Weston Ruter for the patch
    - Generic ScopeIndentSniff now accounts for different open tag indents
    - PEAR FunctionDeclarationSniff now ignores short arrays when checking indent
      -- Thanks to Daniel Tschinder for the patch
    - PSR2 FunctionCallSignatureSniff now treats multi-line strings as a single-line argument, like arrays and closures
      -- Thanks to Dawid Nowak for the patch
    - Generic ForbiddenFunctionsSniff now detects calls to functions in the global namespace
      -- Thanks to Ole Martin Handeland for the patch
    - Generic LowerCaseConstantSniff and UpperCaseConstantSniff now ignore namespaces beginning with TRUE/FALSE/NULL
      -- Thanks to Renan Gonçalves for the patch
    - Squiz InlineCommentSniff no longer requires a blank line after post-statement comments (request #20299)
    - Squiz SelfMemberReferenceSniff now works correctly with namespaces
    - Tab characters are now encoded in abstract pattern errors messages
      -- Thanks to Blaine Schmeisser for the patch
    - Invalid sniff codes passed to --sniffs now show a friendly error message (request #20313)
    - Generic LineLengthSniff now shows a warning if the iconv module is disabled (request #20314)
    - Source report no longer shows errors if category or sniff names ends in an uppercase error
      -- Thanks to Jonathan Marcil for the patch
    - Fixed bug #20268 : Incorrect documentation titles in PEAR documentation
    - Fixed bug #20296 : new array notion in function comma check fails
    - Fixed bug #20307 : PHP_CodeSniffer_Standards_AbstractVariableSniff analyze traits
    - Fixed bug #20308 : Squiz.ValidVariableNameSniff - wrong variable usage
    - Fixed bug #20309 : Use "member variable" term in sniff "processMemberVar" method
    - Fixed bug #20310 : PSR2 does not check for space after function name
    - Fixed bug #20322 : Display rules set to type=error even when suppressing warnings
    - Fixed bug #20323 : PHPCS tries to load sniffs from hidden directories
   </notes>
  </release>
  <release>
   <version>
    <release>1.5.3</release>
    <api>1.5.3</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2014-05-01</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Improved detection of nested IF statements that use the alternate IF/ENDIF syntax
    - PHP tokenizer now supports DEFAULT statements opened with a T_SEMICOLON
    - PSR1 CamelCapsMethodNameSniff now ignores magic methods
      -- Thanks to Eser Ozvataf for the patch
    - PSR1 SideEffectsSniff now ignores methods named define()
    - PSR1 and PEAR ClassDeclarationSniffs now support traits (request #20208)
    - PSR2 ControlStructureSpacingSniff now allows newlines before/after parentheses
      -- Thanks to Maurus Cuelenaere for the patch
    - Squiz LowercasePHPFunctionsSniff no longer reports errors for namespaced functions
      -- Thanks to Max Galbusera for the patch
    - Squiz SwitchDeclarationSniff now allows exit() as a breaking statement for case/default
    - Squiz ValidVariableNameSniff and Zend ValidVariableNameSniff now ignore additional PHP reserved vars
      -- Thanks to Mikuláš Dítě and Adrian Crepaz for the patch
    - Sniff code Squiz.WhiteSpace.MemberVarSpacing.After changed to Squiz.WhiteSpace.MemberVarSpacing.Incorrect (request #20241)
    - Fixed bug #20200 : Invalid JSON produced with specific error message
    - Fixed bug #20204 : Ruleset exclude checks are case sensitive
    - Fixed bug #20213 : Invalid error, Inline IF must be declared on single line
    - Fixed bug #20225 : array_merge() that takes more than one line generates error
    - Fixed bug #20230 : Squiz ControlStructureSpacing sniff assumes specific condition formatting
    - Fixed bug #20240 : Squiz block comment sniff fails when newline present
    - Fixed bug #20247 : The Squiz.WhiteSpace.ControlStructureSpacing sniff and do-while
      -- Thanks to Alexander Obuhovich for the patch
    - Fixed bug #20248 : The Squiz_Sniffs_WhiteSpace_ControlStructureSpacingSniff sniff and empty scope
    - Fixed bug #20252 : Uninitialized string offset when package name starts with underscore
   </notes>
  </release>
  <release>
   <version>
    <release>1.5.2</release>
    <api>1.5.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2014-02-05</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Improved support for the PHP 5.5. classname::class syntax
      -- PSR2 SwitchDeclarationSniff no longer throws errors when this syntax is used in CASE conditions
    - Improved support for negative checks of instanceOf in Squiz ComparisonOperatorUsageSniff
      -- Thanks to Martin Winkel for the patch
    - Generic FunctionCallArgumentSpacingSniff now longer complains about space before comma when using here/nowdocs
      -- Thanks to Richard van Velzen for the patch
    - Generic LowerCaseConstantSniff and UpperCaseConstantSniff now ignore class constants
      -- Thanks to Kristopher Wilson for the patch
    - PEAR FunctionCallSignatureSniff now has settings to specify how many spaces should appear before/after parentheses
      -- Override the 'requiredSpacesAfterOpen' and 'requiredSpacesBeforeClose' settings in a ruleset.xml file to change
      -- Default remains at 0 for both
      -- Thanks to Astinus Eberhard for the patch
    - PSR2 ControlStructureSpacingSniff now has settings to specify how many spaces should appear before/after parentheses
      -- Override the 'requiredSpacesAfterOpen' and 'requiredSpacesBeforeClose' settings in a ruleset.xml file to change
      -- Default remains at 0 for both
      -- Thanks to Astinus Eberhard for the patch
    - Squiz ForEachLoopDeclarationSniff now has settings to specify how many spaces should appear before/after parentheses
      -- Override the 'requiredSpacesAfterOpen' and 'requiredSpacesBeforeClose' settings in a ruleset.xml file to change
      -- Default remains at 0 for both
      -- Thanks to Astinus Eberhard for the patch
    - Squiz ForLoopDeclarationSniff now has settings to specify how many spaces should appear before/after parentheses
      -- Override the 'requiredSpacesAfterOpen' and 'requiredSpacesBeforeClose' settings in a ruleset.xml file to change
      -- Default remains at 0 for both
      -- Thanks to Astinus Eberhard for the patch
    - Squiz FunctionDeclarationArgumentSpacingSniff now has settings to specify how many spaces should appear before/after parentheses
      -- Override the 'requiredSpacesAfterOpen' and 'requiredSpacesBeforeClose' settings in a ruleset.xml file to change
      -- Default remains at 0 for both
      -- Thanks to Astinus Eberhard for the patch
    - Removed UnusedFunctionParameter, CyclomaticComplexity and NestingLevel from the Squiz standard
    - Generic FixmeSniff and TodoSniff now work correctly with accented characters
    - Fixed bug #20145 : Custom ruleset preferences directory over installed standard
    - Fixed bug #20147 : phpcs-svn-pre-commit - no more default error report
    - Fixed bug #20151 : Problem handling "if(): ... else: ... endif;" syntax
    - Fixed bug #20190 : Invalid regex in Squiz_Sniffs_WhiteSpace_SuperfluousWhitespaceSniff
   </notes>
  </release>
  <release>
   <version>
    <release>1.5.1</release>
    <api>1.5.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2013-12-12</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Config values can now be set at runtime using the command line argument [--runtime-set key value]
      -- Runtime values are the same as config values, but are not written to the main config file
      -- Thanks to Wim Godden for the patch
    - Config values can now be set in ruleset files
      -- e.g., config name="zend_ca_path" value="/path/to/ZendCodeAnalyzer"
      -- Can not be used to set config values that override command line values, such as show_warnings
      -- Thanks to Jonathan Marcil for helping with the patch
    - Added a new installed_paths config value to allow for the setting of directories that contain standards
      -- By default, standards have to be installed into the CodeSniffer/Standards directory to be considered installed
      -- New config value allows a list of paths to be set in addition to this internal path
      -- Installed standards appear when using the -i arg, and can be referenced in rulesets using only their name
      -- Set paths by running: phpcs --config-set installed_paths /path/one,/path/two,...
    - PSR2 ClassDeclarationSniff now allows a list of extended interfaces to be split across multiple lines
    - Squiz DoubleQuoteUsageSniff now allows \b in double quoted strings
    - Generic ForbiddenFunctionsSniff now ignores object creation
      -- This is a further fix for bug #20100 : incorrect Function mysql() has been deprecated report
    - Fixed bug #20136 : Squiz_Sniffs_WhiteSpace_ScopeKeywordSpacingSniff and Traits
    - Fixed bug #20138 : Protected property underscore and camel caps issue (in trait with Zend)
      -- Thanks to Gaetan Rousseau for the patch
    - Fixed bug #20139 : No report file generated on success
   </notes>
  </release>
  <release>
   <version>
    <release>1.5.0</release>
    <api>1.5.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2013-11-28</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Doc generation is now working again for installed standards
      -- Includes a fix for limiting the docs to specific sniffs
    - Generic ScopeIndentSniff now allows for ignored tokens to be set via ruleset.xml files
      -- E.g., to ignore comments, override a property using:
      -- name="ignoreIndentationTokens" type="array" value="T_COMMENT,T_DOC_COMMENT"
    - PSR2 standard now ignores comments when checking indentation rules
    - Generic UpperCaseConstantNameSniff no longer reports errors where constants are used (request #20090)
      -- It still reports errors where constants are defined
    - Individual messages can now be excluded in ruleset.xml files using the exclude tag (request #20091)
      -- Setting message severity to 0 continues to be supported
    - Squiz OperatorSpacingSniff no longer throws errors for the ?: short ternary operator
      -- Thanks to Antoine Musso for the patch
    - Comment parser now supports non-English characters when splitting comment lines into words
      -- Thanks to Nik Sun for the patch
    - Exit statements are now recognised as valid closers for CASE and DEFAULT blocks
      -- Thanks to Maksim Kochkin for the patch
    - PHP_CodeSniffer_CLI::process() can now be passed an incomplete array of CLI values
      -- Missing values will be set to the CLI defaults
      -- Thanks to Maksim Kochkin for the patch
    - Fixed bug #20093 : Bug with ternary operator token
    - Fixed bug #20097 : CLI.php throws error in php 5.2
    - Fixed bug #20100 : incorrect Function mysql() has been deprecated report
    - Fixed bug #20119 : PHP warning: invalid argument to str_repeat() in SVN blame report with -s
    - Fixed bug #20123 : PSR2 complains about an empty second statement in for-loop
    - Fixed bug #20131 : PHP errors in svnblame report, if there are files not under version control
    - Fixed bug #20133 : Allow "HG: hg_id" as value for @version tag
   </notes>
  </release>
  <release>
   <version>
    <release>1.5.0RC4</release>
    <api>1.5.0RC4</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2013-09-26</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - You can now restrict violations to individual sniff codes using the --sniffs command line argument
     -- Previously, this only restricted violations to an entire sniff and not individual messages
     -- If you have scripts calling PHP_CodeSniffer::process() or creating PHP_CodeSniffer_File objects, you must update your code
     -- The array of restrictions passed to PHP_CodeSniffer::process() must now be an array of sniff codes instead of class names
     -- The PHP_CodeSniffer_File::__construct() method now requires an array of restrictions to be passed
    - Doc generation is now working again
    - Progress information now shows the percentage complete at the end of each line
    - Added report type --report=junit to show the error list in a JUnit compatible format
      -- Thanks to Oleg Lobach for the contribution
    - Added support for the PHP 5.4 callable type hint
    - Fixed problem where some file content could be ignored when checking STDIN
    - Version information is now printed when installed via composer or run from a Git clone (request #20050)
    - Added Squiz DisallowBooleanStatementSniff to ban boolean operators outside of control structure conditions
    - The CSS tokenizer is now more reliable when encountering 'list' and 'break' strings
    - Coding standard ignore comments can now appear instead doc blocks as well as inline comments
      -- Thanks to Stuart Langley for the patch
    - Generic LineLengthSniff now ignores SVN URL and Head URL comments
      -- Thanks to Karl DeBisschop for the patch
    - PEAR MultiLineConditionSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
      -- Thanks to Szabolcs Sulik for the patch
    - PEAR MultiLineAssignmentSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
      -- Thanks to Szabolcs Sulik for the patch
    - PEAR FunctionDeclarationSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
      -- Thanks to Szabolcs Sulik for the patch
    - Squiz SwitchDeclarationSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
      -- Thanks to Szabolcs Sulik for the patch
    - Squiz CSS IndentationSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
      -- Thanks to Hugo Fonseca for the patch
    - Squiz and MySource File and Function comment sniffs now allow all tags and don't require a particular licence
    - Squiz standard now allows lines to be 120 characters long before warning; up from 85
    - Squiz LowercaseStyleDefinitionSniff no longer throws errors for class names in nested style definitions
    - Squiz ClassFileNameSniff no longer throws errors when checking STDIN
    - Squiz CSS sniffs no longer generate errors for IE filters
    - Squiz CSS IndentationSniff no longer sees comments as blank lines
    - Squiz LogicalOperatorSpacingSniff now ignores whitespace at the end of a line
    - Squiz.Scope.MethodScope.Missing error message now mentions 'visibility' instead of 'scope modifier'
      -- Thanks to Renat Akhmedyanov for the patch
    - Added support for the PSR2 multi-line arguments errata
    - The PSR2 standard no longer throws errors for additional spacing after a type hint
    - PSR UseDeclarationSniff no longer throws errors for USE statements inside TRAITs
    - Fixed cases where code was incorrectly assigned the T_GOTO_LABEL token when used in a complex CASE condition
    - Fixed bug #20026 : Check for multi-line arrays that should be single-line is slightly wrong
      -- Adds new error message for single-line arrays that end with a comma
    - Fixed bug #20029 : ForbiddenFunction sniff incorrectly recognizes methods in USE clauses
    - Fixed bug #20043 : Mis-interpretation of Foo::class
    - Fixed bug #20044 : PSR1 camelCase check does not ignore leading underscores
    - Fixed bug #20045 : Errors about indentation for closures with multi-line 'use' in functions
    - Fixed bug #20051 : Undefined index: scope_opener / scope_closer
      -- Thanks to Anthon Pang for the patch
   </notes>
  </release>
  <release>
   <version>
    <release>1.5.0RC3</release>
    <api>1.5.0RC3</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2013-07-25</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added report type --report=json to show the error list and total counts for all checked files
      -- Thanks to Jeffrey Fisher for the contribution
    - PHP_CodeSniffer::isCamelCaps now allows for acronyms at the start of a string if the strict flag is FALSE
      -- acronyms are defined as at least 2 uppercase characters in a row
      -- e.g., the following is now valid camel caps with strict set to FALSE: XMLParser
    - The PHP tokenizer now tokenizes goto labels as T_GOTO_LABEL instead of T_STRING followed by T_COLON
    - The JS tokenizer now has support for the T_THROW token
    - Symlinked directories inside CodeSniffer/Standards and in ruleset.xml files are now supported
      -- Only available since PHP 5.2.11 and 5.3.1
      -- Thanks to Maik Penz for the patch
    - The JS tokenizer now correctly identifies T_INLINE_ELSE tokens instead of leaving them as T_COLON
      -- Thanks to Arnout Boks for the patch
    - Explaining a standard (phpcs -e) that uses namespaces now works correctly
    - Restricting a check to specific sniffs (phpcs --sniffs=...) now works correctly with namespaced sniffs
      -- Thanks to Maik Penz for the patch
    - Docs added for the entire Generic standard, and many sniffs from other standards are now documented as well
      -- Thanks to Spencer Rinehart for the contribution
    - Clearer error message for when the sniff class name does not match the directory structure
    - Generated HTML docs now correctly show the open PHP tag in code comparison blocks
    - Added Generic InlineHTMLSniff to ensure a file only contains PHP code
    - Added Squiz ShorthandSizeSniff to check that CSS sizes are using shorthand notation only when 1 or 2 values are used
    - Added Squiz ForbiddenStylesSniff to ban the use of some deprecated browser-specific styles
    - Added Squiz NamedColoursSniff to ban the use of colour names
    - PSR2 standard no longer enforces no whitespace between the closing parenthesis of a function call and the semicolon
    - PSR2 ClassDeclarationSniff now ignores empty classes when checking the end brace position
    - PSR2 SwitchDeclarationSniff no longer reports errors for empty lines between CASE statements
    - PEAR ObjectOperatorIndentSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the indent setting in a ruleset.xml file to change
      -- Thanks to Andrey Mindubaev for the patch
    - Squiz FileExtensionSniff now supports traits
      -- Thanks to Lucas Green for the patch
    - Squiz ArrayDeclarationSniff no longer reports errors for no comma at the end of a line that contains a function call
    - Squiz SwitchDeclarationSniff now supports T_CONTINUE and T_THROW as valid case/default breaking statements
    - Squiz CommentedOutCodeSniff is now better at ignoring commented out HTML, XML and regular expressions
    - Squiz DisallowComparisonAssignmentSniff no longer throws errors for the third expression in a FOR statement
    - Squiz ColourDefinitionSniff no longer throws errors for some CSS class names
    - Squiz ControlStructureSpacingSniff now supports all types of CASE/DEFAULT breaking statements
    - Generic CallTimePassByReferenceSniff now reports errors for functions called using a variable
      -- Thanks to Maik Penz for the patch
    - Generic ConstructorNameSniff no longer throws a notice for abstract constructors inside abstract classes
      -- Thanks to Spencer Rinehart for the patch
    - Squiz ComparisonOperatorUsageSniff now checks inside elseif statements
      -- Thanks to Arnout Boks for the patch
    - Squiz OperatorSpacingSniff now reports errors for no spacing around inline then and else tokens
      -- Thanks to Arnout Boks for the patch
    - Fixed bug #19811 : Comments not ignored in all cases in AbstractPatternSniff
      -- Thanks to Erik Wiffin for the patch
    - Fixed bug #19892 : ELSE with no braces causes incorrect SWITCH break statement indentation error
    - Fixed bug #19897 : Indenting warnings in templates not consistent
    - Fixed bug #19908 : PEAR MultiLineCondition Does Not Apply elseif
    - Fixed bug #19930 : option --report-file generate an empty file
    - Fixed bug #19935 : notify-send reports do not vanish in gnome-shell
      -- Thanks to Christian Weiske for the patch
    - Fixed bug #19944 : docblock squiz sniff "return void" trips over return in lambda function
    - Fixed bug #19953 : PSR2 - Spaces before interface name for abstract class
    - Fixed bug #19956 : phpcs warns for Type Hint missing Resource
    - Fixed bug #19957 : Does not understand trait method aliasing
    - Fixed bug #19968 : Permission denied on excluded directory
    - Fixed bug #19969 : Sniffs with namespace not recognized in reports
    - Fixed bug #19997 : Class names incorrectly detected as constants
   </notes>
  </release>
  <release>
   <version>
    <release>1.5.0RC2</release>
    <api>1.5.0RC2</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2013-04-04</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Ruleset processing has been rewritten to be more predictable
      -- Provides much better support for relative paths inside ruleset files
      -- May mean that sniffs that were previously ignored are now being included when importing external rulesets
      -- Ruleset processing output can be seen by using the -vv command line argument
      -- Internal sniff registering functions have all changed, so please review custom scripts
    - You can now pass multiple coding standards on the command line, comma separated (request #19144)
      -- Works with built-in or custom standards and rulesets, or a mix of both
    - You can now exclude directories or whole standards in a ruleset XML file (request #19731)
      -- e.g., exclude "Generic.Commenting" or just "Generic"
      -- You can also pass in a path to a directory instead, if you know it
    - Added Generic LowerCaseKeywordSniff to ensure all PHP keywords are defined in lowercase
      -- The PSR2 and Squiz standards now use this sniff
    - Added Generic SAPIUsageSniff to ensure the PHP_SAPI constant is used instead of php_sapi_name() (request #19863)
    - Squiz FunctionSpacingSniff now has a setting to specify how many lines there should between functions (request #19843)
      -- Default remains at 2
      -- Override the "spacing" setting in a ruleset.xml file to change
    - Squiz LowercasePHPFunctionSniff no longer throws errors for the limited set of PHP keywords it was checking
      -- Add a rule for Generic.PHP.LowerCaseKeyword to your ruleset to replicate this functionality
    - Added support for the PHP 5.4 T_CALLABLE token so it can be used in lower PHP versions
    - Generic EndFileNoNewlineSniff now supports checking of CSS and JS files
    - PSR2 SwitchDeclarationSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the indent setting in a ruleset.xml file to change
      -- Thanks to Asher Snyder for the patch
    - Generic ScopeIndentSniff now has a setting to specify a list of tokens that should be ignored
      -- The first token on the line is checked and the whole line is ignored if the token is in the array
      -- Thanks to Eloy Lafuente for the patch
    - Squiz LowercaseClassKeywordsSniff now checks for the TRAIT keyword
      -- Thanks to Anthon Pang for the patch
    - If you create your own PHP_CodeSniffer object, PHPCS will no longer exit when an unknown argument is found
      -- This allows you to create wrapper scripts for PHPCS more easily
    - PSR2 MethodDeclarationSniff no longer generates a notice for methods named "_"
      -- Thanks to Bart S for the patch
    - Squiz BlockCommentSniff no longer reports that a blank line between a scope closer and block comment is invalid
    - Generic DuplicateClassNameSniff no longer reports an invalid error if multiple PHP open tags exist in a file
    - Generic DuplicateClassNameSniff no longer reports duplicate errors if multiple PHP open tags exist in a file
    - Fixed bug #19819 : Freeze with syntax error in use statement
    - Fixed bug #19820 : Wrong message level in Generic_Sniffs_CodeAnalysis_EmptyStatementSniff
    - Fixed bug #19859 : CodeSniffer::setIgnorePatterns API changed
    - Fixed bug #19871 : findExtendedClassName doesn't return FQCN on namespaced classes
    - Fixed bug #19879 : bitwise and operator interpreted as reference by value
   </notes>
  </release>
  <release>
   <version>
    <release>1.5.0RC1</release>
    <api>1.5.0RC1</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2013-02-08</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Reports have been completely rewritten to consume far less memory
      -- Each report is incrementally written to the file system during a run and then printed out when the run ends
      -- There is no longer a need to keep the list of errors and warnings in memory during a run
    - Multi-file sniff support has been removed because they are too memory intensive
      -- If you have a custom multi-file sniff, you can convert it into a standard sniff quite easily
      -- See CodeSniffer/Standards/Generic/Sniffs/Classes/DuplicateClassNameSniff.php for an example
    </notes>
  </release>
  <release>
   <version>
    <release>1.4.8</release>
    <api>1.4.8</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2013-11-26</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Generic ScopeIndentSniff now allows for ignored tokens to be set via ruleset.xml files
      -- E.g., to ignore comments, override a property using:
      -- name="ignoreIndentationTokens" type="array" value="T_COMMENT,T_DOC_COMMENT"
    - PSR2 standard now ignores comments when checking indentation rules
    - Squiz OperatorSpacingSniff no longer throws errors for the ?: short ternary operator
      -- Thanks to Antoine Musso for the patch
    - Comment parser now supports non-English characters when splitting comment lines into words
      -- Thanks to Nik Sun for the patch
    - Exit statements are now recognised as valid closers for CASE and DEFAULT blocks
      -- Thanks to Maksim Kochkin for the patch
    - PHP_CodeSniffer_CLI::process() can now be passed an incomplete array of CLI values
      -- Missing values will be set to the CLI defaults
      -- Thanks to Maksim Kochkin for the patch
    - Fixed bug #20097 : CLI.php throws error in php 5.2
    - Fixed bug #20100 : incorrect Function mysql() has been deprecated report
    - Fixed bug #20119 : PHP warning: invalid argument to str_repeat() in SVN blame report with -s
    - Fixed bug #20123 : PSR2 complains about an empty second statement in for-loop
    - Fixed bug #20131 : PHP errors in svnblame report, if there are files not under version control
    - Fixed bug #20133 : Allow "HG: hg_id" as value for @version tag
   </notes>
  </release>
  <release>
   <version>
    <release>1.4.7</release>
    <api>1.4.7</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2013-09-26</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added report type --report=junit to show the error list in a JUnit compatible format
      -- Thanks to Oleg Lobach for the contribution
    - Added support for the PHP 5.4 callable type hint
    - Fixed problem where some file content could be ignored when checking STDIN
    - Version information is now printed when installed via composer or run from a Git clone (request #20050)
    - The CSS tokenizer is now more reliable when encountering 'list' and 'break' strings
    - Coding standard ignore comments can now appear instead doc blocks as well as inline comments
      -- Thanks to Stuart Langley for the patch
    - Generic LineLengthSniff now ignores SVN URL and Head URL comments
      -- Thanks to Karl DeBisschop for the patch
    - PEAR MultiLineConditionSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
      -- Thanks to Szabolcs Sulik for the patch
    - PEAR MultiLineAssignmentSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
      -- Thanks to Szabolcs Sulik for the patch
    - PEAR FunctionDeclarationSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
      -- Thanks to Szabolcs Sulik for the patch
    - Squiz SwitchDeclarationSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
      -- Thanks to Szabolcs Sulik for the patch
    - Squiz CSS IndentationSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the 'indent' setting in a ruleset.xml file to change
      -- Thanks to Hugo Fonseca for the patch
    - Squiz and MySource File and Function comment sniffs now allow all tags and don't require a particular licence
    - Squiz LowercaseStyleDefinitionSniff no longer throws errors for class names in nested style definitions
    - Squiz ClassFileNameSniff no longer throws errors when checking STDIN
    - Squiz CSS sniffs no longer generate errors for IE filters
    - Squiz CSS IndentationSniff no longer sees comments as blank lines
    - Squiz LogicalOperatorSpacingSniff now ignores whitespace at the end of a line
    - Squiz.Scope.MethodScope.Missing error message now mentions 'visibility' instead of 'scope modifier'
      -- Thanks to Renat Akhmedyanov for the patch
    - Added support for the PSR2 multi-line arguments errata
    - The PSR2 standard no longer throws errors for additional spacing after a type hint
    - PSR UseDeclarationSniff no longer throws errors for USE statements inside TRAITs
    - Fixed bug #20026 : Check for multi-line arrays that should be single-line is slightly wrong
      -- Adds new error message for single-line arrays that end with a comma
    - Fixed bug #20029 : ForbiddenFunction sniff incorrectly recognizes methods in USE clauses
    - Fixed bug #20043 : Mis-interpretation of Foo::class
    - Fixed bug #20044 : PSR1 camelCase check does not ignore leading underscores
    - Fixed bug #20045 : Errors about indentation for closures with multi-line 'use' in functions
   </notes>
  </release>
  <release>
   <version>
    <release>1.4.6</release>
    <api>1.4.6</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2013-07-25</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added report type --report=json to show the error list and total counts for all checked files
      -- Thanks to Jeffrey Fisher for the contribution
    - The JS tokenizer now has support for the T_THROW token
    - Symlinked directories inside CodeSniffer/Standards and in ruleset.xml files are now supported
      -- Only available since PHP 5.2.11 and 5.3.1
      -- Thanks to Maik Penz for the patch
    - The JS tokenizer now correctly identifies T_INLINE_ELSE tokens instead of leaving them as T_COLON
      -- Thanks to Arnout Boks for the patch
    - Explaining a standard (phpcs -e) that uses namespaces now works correctly
    - Restricting a check to specific sniffs (phpcs --sniffs=...) now works correctly with namespaced sniffs
      -- Thanks to Maik Penz for the patch
    - Docs added for the entire Generic standard, and many sniffs from other standards are now documented as well
      -- Thanks to Spencer Rinehart for the contribution
    - Clearer error message for when the sniff class name does not match the directory structure
    - Generated HTML docs now correctly show the open PHP tag in code comparison blocks
    - Added Generic InlineHTMLSniff to ensure a file only contains PHP code
    - Added Squiz ShorthandSizeSniff to check that CSS sizes are using shorthand notation only when 1 or 2 values are used
    - Added Squiz ForbiddenStylesSniff to ban the use of some deprecated browser-specific styles
    - Added Squiz NamedColoursSniff to ban the use of colour names
    - PSR2 standard no longer enforces no whitespace between the closing parenthesis of a function call and the semicolon
    - PSR2 ClassDeclarationSniff now ignores empty classes when checking the end brace position
    - PSR2 SwitchDeclarationSniff no longer reports errors for empty lines between CASE statements
    - PEAR ObjectOperatorIndentSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the indent setting in a ruleset.xml file to change
      -- Thanks to Andrey Mindubaev for the patch
    - Squiz FileExtensionSniff now supports traits
      -- Thanks to Lucas Green for the patch
    - Squiz ArrayDeclarationSniff no longer reports errors for no comma at the end of a line that contains a function call
    - Squiz SwitchDeclarationSniff now supports T_CONTINUE and T_THROW as valid case/default breaking statements
    - Squiz CommentedOutCodeSniff is now better at ignoring commented out HTML, XML and regular expressions
    - Squiz DisallowComparisonAssignmentSniff no longer throws errors for the third expression in a FOR statement
    - Squiz ColourDefinitionSniff no longer throws errors for some CSS class names
    - Squiz ControlStructureSpacingSniff now supports all types of CASE/DEFAULT breaking statements
    - Generic CallTimePassByReferenceSniff now reports errors for functions called using a variable
      -- Thanks to Maik Penz for the patch
    - Generic ConstructorNameSniff no longer throws a notice for abstract constructors inside abstract classes
      -- Thanks to Spencer Rinehart for the patch
    - Squiz ComparisonOperatorUsageSniff now checks inside elseif statements
      -- Thanks to Arnout Boks for the patch
    - Squiz OperatorSpacingSniff now reports errors for no spacing around inline then and else tokens
      -- Thanks to Arnout Boks for the patch
    - Fixed bug #19811 : Comments not ignored in all cases in AbstractPatternSniff
      -- Thanks to Erik Wiffin for the patch
    - Fixed bug #19892 : ELSE with no braces causes incorrect SWITCH break statement indentation error
    - Fixed bug #19897 : Indenting warnings in templates not consistent
    - Fixed bug #19908 : PEAR MultiLineCondition Does Not Apply elseif
    - Fixed bug #19913 : Running phpcs in interactive mode causes warnings
      -- Thanks to Harald Franndorfer for the patch
    - Fixed bug #19935 : notify-send reports do not vanish in gnome-shell
      -- Thanks to Christian Weiske for the patch
    - Fixed bug #19944 : docblock squiz sniff "return void" trips over return in lambda function
    - Fixed bug #19953 : PSR2 - Spaces before interface name for abstract class
    - Fixed bug #19956 : phpcs warns for Type Hint missing Resource
    - Fixed bug #19957 : Does not understand trait method aliasing
    - Fixed bug #19968 : Permission denied on excluded directory
    - Fixed bug #19969 : Sniffs with namespace not recognized in reports
    - Fixed bug #19997 : Class names incorrectly detected as constants
   </notes>
  </release>
  <release>
   <version>
    <release>1.4.5</release>
    <api>1.4.5</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2013-04-04</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added Generic LowerCaseKeywordSniff to ensure all PHP keywords are defined in lowercase
      -- The PSR2 and Squiz standards now use this sniff
    - Added Generic SAPIUsageSniff to ensure the PHP_SAPI constant is used instead of php_sapi_name() (request #19863)
    - Squiz FunctionSpacingSniff now has a setting to specify how many lines there should between functions (request #19843)
      -- Default remains at 2
      -- Override the "spacing" setting in a ruleset.xml file to change
    - Squiz LowercasePHPFunctionSniff no longer throws errors for the limited set of PHP keywords it was checking
      -- Add a rule for Generic.PHP.LowerCaseKeyword to your ruleset to replicate this functionality
    - Added support for the PHP 5.4 T_CALLABLE token so it can be used in lower PHP versions
    - Generic EndFileNoNewlineSniff now supports checking of CSS and JS files
    - PSR2 SwitchDeclarationSniff now has a setting to specify how many spaces code should be indented
      -- Default remains at 4; override the indent setting in a ruleset.xml file to change
      -- Thanks to Asher Snyder for the patch
    - Generic ScopeIndentSniff now has a setting to specify a list of tokens that should be ignored
      -- The first token on the line is checked and the whole line is ignored if the token is in the array
      -- Thanks to Eloy Lafuente for the patch
    - Squiz LowercaseClassKeywordsSniff now checks for the TRAIT keyword
      -- Thanks to Anthon Pang for the patch
    - If you create your own PHP_CodeSniffer object, PHPCS will no longer exit when an unknown argument is found
      -- This allows you to create wrapper scripts for PHPCS more easily
    - PSR2 MethodDeclarationSniff no longer generates a notice for methods named "_"
      -- Thanks to Bart S for the patch
    - Squiz BlockCommentSniff no longer reports that a blank line between a scope closer and block comment is invalid
    - Generic DuplicateClassNameSniff no longer reports an invalid error if multiple PHP open tags exist in a file
    - Generic DuplicateClassNameSniff no longer reports duplicate errors if multiple PHP open tags exist in a file
    - Fixed bug #19819 : Freeze with syntax error in use statement
    - Fixed bug #19820 : Wrong message level in Generic_Sniffs_CodeAnalysis_EmptyStatementSniff
    - Fixed bug #19859 : CodeSniffer::setIgnorePatterns API changed
    - Fixed bug #19871 : findExtendedClassName doesn't return FQCN on namespaced classes
    - Fixed bug #19879 : bitwise and operator interpreted as reference by value
   </notes>
  </release>
  <release>
   <version>
    <release>1.4.4</release>
    <api>1.4.4</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2013-02-07</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Ignored lines no longer cause the summary report to show incorrect error and warning counts
      -- Thanks to Bert Van Hauwaert for the patch
    - Added Generic CSSLintSniff to run CSSLint over a CSS file and report warnings
      -- Set full command to run CSSLint using phpcs --config-set csslint_path /path/to/csslint
      -- Thanks to Roman Levishchenko for the contribution
    - Added PSR2 ControlStructureSpacingSniff to ensure there are no spaces before and after parenthesis in control structures
      -- Fixes bug #19732 : PSR2: some control structures errors not reported
    - Squiz commenting sniffs now support non-English characters when checking for capital letters
      -- Thanks to Roman Levishchenko for the patch
    - Generic EndFileNewlineSniff now supports JS and CSS files
      -- Thanks to Denis Ryabkov for the patch
    - PSR1 SideEffectsSniff no longer reports constant declarations as side effects
    - Notifysend report now supports notify-send versions before 0.7.3
      -- Thanks to Ken Guest for the patch
    - PEAR and Squiz FunctionCommentSniffs no longer report errors for misaligned argument comments when they are blank
      -- Thanks to Thomas Peterson for the patch
    - Squiz FunctionDeclarationArgumentSpacingSniff now works correctly for equalsSpacing values greater than 0
      -- Thanks to Klaus Purer for the patch
    - Squiz SuperfluousWhitespaceSniff no longer throws errors for CSS files with no newline at the end
    - Squiz SuperfluousWhitespaceSniff now allows a single newline at the end of JS and CSS files
    - Fixed bug #19755 : Token of T_CLASS type has no scope_opener and scope_closer keys
    - Fixed bug #19759 : Squiz.PHP.NonExecutableCode fails for return function()...
    - Fixed bug #19763 : Use statements for traits not recognised correctly for PSR2 code style
    - Fixed bug #19764 : Instead of for traits throws uppercase constant name errors
    - Fixed bug #19772 : PSR2_Sniffs_Namespaces_UseDeclarationSniff does not properly recognize last use
    - Fixed bug #19775 : False positive in NonExecutableCode sniff when not using curly braces
    - Fixed bug #19782 : Invalid found size functions in loop when using object operator
    - Fixed bug #19799 : config folder is not created automatically
    - Fixed bug #19804 : JS Tokenizer wrong /**/ parsing
   </notes>
  </release>
  <release>
   <version>
    <release>1.4.3</release>
    <api>1.4.3</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2012-12-04</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added support for the PHP 5.5 T_FINALLY token to detect try/catch/finally statements
    - Added empty CodeSniffer.conf to enable config settings for Composer installs
    - Added Generic EndFileNoNewlineSniff to ensure there is no newline at the end of a file
    - Autoloader can now load PSR-0 compliant classes
      -- Thanks to Maik Penz for the patch
    - Squiz NonExecutableCodeSniff no longer throws error for multi-line RETURNs inside CASE statements
      -- Thanks to Marc Ypes for the patch
    - Squiz OperatorSpacingSniff no longer reports errors for negative numbers inside inline THEN statements
      -- Thanks to Klaus Purer for the patch
    - Squiz OperatorSpacingSniff no longer reports errors for the assignment of operations involving negative numbers
    - Squiz SelfMemberReferenceSniff can no longer get into an infinite loop when checking a static call with a namespace
      -- Thanks to Andy Grunwald for the patch
    - Fixed bug #19699 : Generic.Files.LineLength giving false positives when tab-width is used
    - Fixed bug #19726 : Wrong number of spaces expected after instanceof static
  - Fixed bug #19727 : PSR2: no error reported when using } elseif {
   </notes>
  </release>
  <release>
   <version>
    <release>1.4.2</release>
    <api>1.4.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2012-11-09</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - PHP_CodeSniffer can now be installed using Composer
      -- Require squizlabs/php_codesniffer in your composer.json file
      -- Thanks to Rob Bast, Stephen Rees-Carter, Stefano Kowalke and Ivan Habunek for help with this
    - Squiz BlockCommentSniff and InlineCommentSniff no longer report errors for trait block comments
    - Squiz SelfMemberReferenceSniff now supports namespaces
      -- Thanks to Andy Grunwald for the patch
    - Squiz FileCommentSniff now uses tag names inside the error codes for many messages
      -- This allows you to exclude specific missing, out of order etc., tags
    - Squiz SuperfluousWhitespaceSniff now has an option to ignore blank lines
      -- This will stop errors being reported for lines that contain only whitespace
      -- Set the ignoreBlankLines property to TRUE in your ruleset.xml file to enable this
    - PSR2 no longer reports errors for whitespace at the end of blank lines
    - Fixed gitblame report not working on Windows
      -- Thanks to Rogerio Prado de Jesus
    - Fixed an incorrect error in Squiz OperatorSpacingSniff for default values inside a closure definition
    - Fixed bug #19691 : SubversionPropertiesSniff fails to find missing properties
      -- Thanks to Kevin Winahradsky for the patch
    - Fixed bug #19692 : DisallowMultipleAssignments is triggered by a closure
    - Fixed bug #19693 : exclude-patterns no longer work on specific messages
    - Fixed bug #19694 : Squiz.PHP.LowercasePHPFunctions incorrectly matches return by ref functions
   </notes>
  </release>
  <release>
   <version>
    <release>1.4.1</release>
    <api>1.4.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2012-11-02</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - All ignore patterns have been reverted to being checked against the absolute path of a file
      -- Patterns can be specified to be relative in a ruleset.xml file, but nowhere else
      -- e.g., [exclude-pattern type="relative"]^tests/*[/exclude-pattern] (with angle brackets, not square brackets)
    - Added support for PHP tokenizing of T_INLINE_ELSE colons, so this token type is now available
      -- Custom sniffs that rely on looking for T_COLON tokens inside inline if statements must be changed to use the new token
      -- Fixes bug #19666 : PSR1.Files.SideEffects throws a notice Undefined index: scope_closer
    - Messages can now be changed from errors to warnings (and vice versa) inside ruleset.xml files
      -- As you would with "message" and "severity", specify a "type" tag under a "rule" tag and set the value to "error" or "warning"
    - PHP_CodeSniffer will now generate a warning on files that it detects have mixed line endings
      -- This warning has the code Internal.LineEndings.Mixed and can be overridden in a ruleset.xml file
      -- Thanks to Vit Brunner for help with this
    - Sniffs inside PHP 5.3 namespaces are now supported, along with the existing underscore-style emulated namespaces
      -- For example: namespace MyStandard\Sniffs\Arrays; class ArrayDeclarationSniff implements \PHP_CodeSniffer_Sniff { ...
      -- Thanks to Till Klampaeckel for the patch
    - Generic DuplicateClassNameSniff is no longer a multi-file sniff, so it won't max out your memory
      -- Multi-file sniff support should be considered deprecated as standard sniffs can now do the same thing
    - Added Generic DisallowSpaceIndent to check that files are indented using tabs
    - Added Generic OneClassPerFileSniff to check that only one class is defined in each file
      -- Thanks to Andy Grunwald for the contribution
    - Added Generic OneInterfacePerFileSniff to check that only one interface is defined in each file
      -- Thanks to Andy Grunwald for the contribution
    - Added Generic LowercasedFilenameSniff to check that filenames are lowercase
      -- Thanks to Andy Grunwald for the contribution
    - Added Generic ClosingPHPTagSniff to check that each open PHP tag has a corresponding close tag
      -- Thanks to Andy Grunwald for the contribution
    - Added Generic CharacterBeforePHPOpeningTagSniff to check that the open PHP tag is the first content in a file
      -- Thanks to Andy Grunwald for the contribution
    - Fixed incorrect errors in Squiz OperatorBracketSniff and OperatorSpacingSniff for negative numbers in CASE statements
      -- Thanks to Arnout Boks for the patch
    - Generic CamelCapsFunctionNameSniff no longer enforces exact case matching for PHP magic methods
    - Generic CamelCapsFunctionNameSniff no longer throws errors for overridden SOAPClient methods prefixed with double underscores
      -- Thanks to Dorian Villet for the patch
    - PEAR ValidFunctionNameSniff now supports traits
    - PSR1 ClassDeclarationSniff no longer throws an error for non-namespaced code if PHP version is less than 5.3.0
    - Fixed bug #19616 : Nested switches cause false error in PSR2
    - Fixed bug #19629 : PSR2 error for inline comments on multi-line argument lists
    - Fixed bug #19644 : Alternative syntax, e.g. if/endif triggers Inline Control Structure error
    - Fixed bug #19655 : Closures reporting as multi-line when they are not
    - Fixed bug #19675 : Improper indent of nested anonymous function bodies in a call
    - Fixed bug #19685 : PSR2 catch-22 with empty third statement in for loop
    - Fixed bug #19687 : Anonymous functions inside arrays marked as indented incorrectly in PSR2
   </notes>
  </release>
  <release>
   <version>
    <release>1.4.0</release>
    <api>1.4.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2012-09-26</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added PSR1 and PSR2 coding standards that can be used to check your code against these guidelines
    - PHP 5.4 short array syntax is now detected and tokens are assigned to the open and close characters
      -- New tokens are T_OPEN_SHORT_ARRAY and T_CLOSE_SHORT_ARRAY as PHP does not define its own
    - Added the ability to explain a coding standard by listing the sniffs that it includes
      -- The sniff list includes all imported and native sniffs
      -- Explain a standard by using the -e and --standard=[standard] command line arguments
      -- E.g., phpcs -e --standard=Squiz
      -- Thanks to Ben Selby for the idea
    - Added report to show results using notify-send
      -- Use --report=notifysend to generate the report
      -- Thanks to Christian Weiske for the contribution
    - The JS tokenizer now recognises RETURN as a valid closer for CASE and DEFAULT inside switch statements
    - AbstractPatternSniff now sets the ignoreComments option using a public var rather than through the constructor
      -- This allows the setting to be overwritten in ruleset.xml files
      -- Old method remains for backwards compatibility
    - Generic LowerCaseConstantSniff and UpperCaseConstantSniff no longer report errors on classes named True, False or Null
    - PEAR ValidFunctionNameSniff no longer enforces exact case matching for PHP magic methods
    - Squiz SwitchDeclarationSniff now allows RETURN statements to close a CASE or DEFAULT statement
    - Squiz BlockCommentSniff now correctly reports an error for blank lines before blocks at the start of a control structure
    - Fixed a PHP notice generated when loading custom array settings from a ruleset.xml file
    - Fixed bug #17908 : CodeSniffer does not recognise optional @params
      -- Thanks to Pete Walker for the patch
    - Fixed bug #19538 : Function indentation code sniffer checks inside short arrays
    - Fixed bug #19565 : Non-Executable Code Sniff Broken for Case Statements with both return and break
    - Fixed bug #19612 : Invalid @package suggestion
   </notes>
  </release>
  <release>
   <version>
    <release>1.3.6</release>
    <api>1.3.6</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2012-08-08</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Memory usage has been dramatically reduced when using the summary report
      -- Reduced memory is only available when displaying a single summary report to the screen
      -- PHP_CodeSniffer will not generate any messages in this case, storing only error counts instead
      -- Impact is most notable with very high error and warning counts
    - Significantly improved the performance of Squiz NonExecutableCodeSniff
    - Ignore patterns now check the relative path of a file based on the dir being checked
      -- Allows ignore patterns to become more generic as the path to the code is no longer included when checking
      -- Thanks to Kristof Coomans for the patch
    - Sniff settings can now be changed by specifying a special comment format inside a file
      -- e.g., // @codingStandardsChangeSetting PEAR.Functions.FunctionCallSignature allowMultipleArguments false
      -- If you change a setting, don't forget to change it back
    - Added Generic EndFileNewlineSniff to ensure PHP files end with a newline character
    - PEAR FunctionCallSignatureSniff now includes a setting to force one argument per line in multi-line calls
      -- Set allowMultipleArguments to false
    - Squiz standard now enforces one argument per line in multi-line function calls
    - Squiz FunctionDeclarationArgumentSpacingSniff now supports closures
    - Squiz OperatorSpacingSniff no longer throws an error for negative values inside an inline THEN statement
      -- Thanks to Klaus Purer for the patch
    - Squiz FunctionCommentSniff now throws an error for not closing a comment with */
      -- Thanks to Klaus Purer for the patch
    - Summary report no longer shows two lines of PHP_Timer output when showing sources
    - Fixed undefined variable error in PEAR FunctionCallSignatureSniff for lines with no indent
    - Fixed bug #19502 : Generic.Files.LineEndingsSniff fails if no new-lines in file
    - Fixed bug #19508 : switch+return: Closing brace indented incorrectly
    - Fixed bug #19532 : The PSR-2 standard don't recognize Null in class names
    - Fixed bug #19546 : Error thrown for __call() method in traits
   </notes>
  </release>
  <release>
   <version>
    <release>1.3.5</release>
    <api>1.3.5</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2012-07-12</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added Generic CamelCapsFunctionNameSniff to just check if function and method names use camel caps
      -- Does not allow underscore prefixes for private/protected methods
      -- Defaults to strict checking, where two uppercase characters can not be next to each other
      -- Strict checking can be disabled in a ruleset.xml file
    - Squiz FunctionDeclarationArgumentSpacing now has a setting to specify how many spaces should surround equals signs
      -- Default remains at 0
      -- Override the equalsSpacing setting in a ruleset.xml file to change
    - Squiz ClassDeclarationSniff now throws errors for > 1 space before extends/implements class name with ns separator
    - Squiz standard now warns about deprecated functions using Generic DeprecatedFunctionsSniff
    - PEAR FunctionDeclarationSniff now reports an error for multiple spaces after the FUNCTION keyword and around USE
    - PEAR FunctionDeclarationSniff now supports closures
    - Squiz MultiLineFunctionDeclarationSniff now supports closures
    - Exclude rules written for Unix systems will now work correctly on Windows
      -- Thanks to Walter Tamboer for the patch
    - The PHP tokenizer now recognises T_RETURN as a valid closer for T_CASE and T_DEFAULT inside switch statements
    - Fixed duplicate message codes in Generic OpeningFunctionBraceKernighanRitchieSniff
    - Fixed bug #18651 : PHPunit Test cases for custom standards are not working on Windows
    - Fixed bug #19416 : Shorthand arrays cause bracket spacing errors
    - Fixed bug #19421 : phpcs doesn't recognize ${x} as equivalent to $x
    - Fixed bug #19428 : PHPCS Report "hgblame" doesn't support windows paths
      -- Thanks to Justin Rovang for the patch
    - Fixed bug #19448 : Problem with detecting remote standards
    - Fixed bug #19463 : Anonymous functions incorrectly being flagged by NonExecutableCodeSniff
    - Fixed bug #19469 : PHP_CodeSniffer_File::getMemberProperties() sets wrong scope
    - Fixed bug #19471 : phpcs on Windows, when using Zend standard, doesn't catch problems
      -- Thanks to Ivan Habunek for the patch
    - Fixed bug #19478 : Incorrect indent detection in PEAR standard
      -- Thanks to Shane Auckland for the patch
    - Fixed bug #19483 : Blame Reports fail with space in directory name
   </notes>
  </release>
  <release>
   <version>
    <release>1.3.4</release>
    <api>1.3.4</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2012-05-17</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added missing package.xml entries for new Generic FixmeSniff
      -- Thanks to Jaroslav Hanslík for the patch
    - Expected indents for PEAR ScopeClosingBraceSniff and FunctionCallSignatureSniff can now be set in ruleset files
      -- Both sniffs use a variable called "indent"
      -- Thanks to Thomas Despoix for the patch
    - Standards designed to be installed in the PHPCS Standards dir will now work outside this dir as well
      -- In particular, allows the Drupal CS to work without needing to symlink it into the PHPCS install
      -- Thanks to Peter Philipp for the patch
    - Rule references for standards, directories and specific sniffs can now be relative in ruleset.xml files
      -- For example: ref="../MyStandard/Sniffs/Commenting/DisallowHashCommentsSniff.php"
    - Symlinked standards now work correctly, allowing aliasing of installed standards (request #19417)
      -- Thanks to Tom Klingenberg for the patch
    - Squiz ObjectInstantiationSniff now allows objects to be returned without assigning them to a variable
    - Added Squiz.Commenting.FileComment.MissingShort error message for file comments that only contains tags
      -- Also stops undefined index errors being generated for these comments
    - Debug option -vv now shows tokenizer status for CSS files
    - Added support for new gjslint error formats
      -- Thanks to Meck for the patch
    - Generic ScopeIndentSniff now allows comment indents to not be exact even if the exact flag is set
      -- The start of the comment is still checked for exact indentation as normal
    - Fixed an issue in AbstractPatternSniff where comments were not being ignored in some cases
    - Fixed an issue in Zend ClosingTagSniff where the closing tag was not always being detected correctly
      -- Thanks to Jonathan Robson for the patch
    - Fixed an issue in Generic FunctionCallArgumentSpacingSniff where closures could cause incorrect errors
    - Fixed an issue in Generic UpperCaseConstantNameSniff where errors were incorrectly reported on goto statements
      -- Thanks to Tom Klingenberg for the patch
    - PEAR FileCommentSniff and ClassCommentSniff now support author emails with a single character in the local part
      -- E.g., a@me.com
      -- Thanks to Denis Shapkin for the patch
    - Fixed bug #19290 : Generic indent sniffer fails for anonymous functions
    - Fixed bug #19324 : Setting show_warnings configuration option does not work
    - Fixed bug #19354 : Not recognizing references passed to method
    - Fixed bug #19361 : CSS tokenizer generates errors when PHP embedded in CSS file
    - Fixed bug #19374 : HEREDOC/NOWDOC Indentation problems
    - Fixed bug #19381 : traits and indentations in traits are not handled properly
    - Fixed bug #19394 : Notice in NonExecutableCodeSniff
    - Fixed bug #19402 : Syntax error when executing phpcs on Windows with parens in PHP path
      -- Thanks to Tom Klingenberg for the patch
    - Fixed bug #19411 : magic method error on __construct()
      -- The fix required a rewrite of AbstractScopeSniff, so please test any sniffs that extend this class
    - Fixed bug #19412 : Incorrect error about assigning objects to variables when inside inline IF
    - Fixed bug #19413 : php_cs thinks I haven't used a parameter when I have
    - Fixed bug #19414 : php_cs seems to not track variables correctly in heredocs
   </notes>
  </release>
  <release>
   <version>
    <release>1.3.3</release>
    <api>1.3.3</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2012-02-17</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added new Generic FixmeSniff that shows error messages for all FIXME comments left in your code
      -- Thanks to Sam Graham for the contribution
    - The maxPercentage setting in the Squiz CommentedOutCodeSniff can now be overridden in a ruleset.xml file
      -- Thanks to Volker Dusch for the patch
    - The Checkstyle and XML reports now use XMLWriter
      -- Only change in output is that empty file tags are no longer produced for files with no violations
      -- Thanks to Sebastian Bergmann for the patch
    - Added PHP_CodeSniffer_Tokens::$bracketTokens to give sniff writers fast access to open and close bracket tokens
    - Fixed an issue in AbstractPatternSniff where EOL tokens were not being correctly checked in some cases
    - PHP_CodeSniffer_File::getTokensAsString() now detects incorrect length value (request #19313)
    - Fixed bug #19114 : CodeSniffer checks extension even for single file
    - Fixed bug #19171 : Show sniff codes option is ignored by some report types
      -- Thanks to Dominic Scheirlinck for the patch
    - Fixed bug #19188 : Lots of PHP Notices when analyzing the Symfony framework
      -- First issue was list-style.. lines in CSS files not properly adjusting open/close bracket positions
      -- Second issue was notices caused by bug #19137
    - Fixed bug #19208 : UpperCaseConstantName reports class members
      -- Was also a problem with LowerCaseConstantName as well
    - Fixed bug #19256 : T_DOC_COMMENT in CSS files breaks ClassDefinitionNameSpacingSniff
      -- Thanks to Klaus Purer for the patch
    - Fixed bug #19264 : Squiz.PHP.NonExecutableCode does not handle RETURN in CASE without BREAK
    - Fixed bug #19270 : DuplicateClassName does not handle namespaces correctly
    - Fixed bug #19283 : CSS @media rules cause false positives
      -- Thanks to Klaus Purer for the patch
   </notes>
  </release>
  <release>
   <version>
    <release>1.3.2</release>
    <api>1.3.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2011-12-01</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added Generic JSHintSniff to run jshint.js over a JS file and report warnings
      -- Set jshint path using phpcs --config-set jshint_path /path/to/jshint-rhino.js
      -- Set rhino path using phpcs --config-set rhino_path /path/to/rhino
      -- Thanks to Alexander Weiß for the contribution
    - Nowdocs are now tokenized using PHP_CodeSniffer specific T_NOWDOC tokens for easier identification
    - Generic UpperCaseConstantNameSniff no longer throws errors for namespaces
      -- Thanks to Jaroslav Hanslík for the patch
    - Squiz NonExecutableCodeSniff now detects code after thrown exceptions
      -- Thanks to Jaroslav Hanslík for the patch
    - Squiz OperatorSpacingSniff now ignores references
      -- Thanks to Jaroslav Hanslík for the patch
    - Squiz FunctionCommentSniff now reports a missing function comment if it finds a standard code comment instead
    - Squiz FunctionCommentThrownTagSniff no longer reports errors if it can't find a function comment
    - Fixed unit tests not running under Windows
      -- Thanks to Jaroslav Hanslík for the patch
    - Fixed bug #18964 : "$stackPtr must be of type T_VARIABLE" on heredocs and nowdocs
    - Fixed bug #18973 : phpcs is looking for variables in a nowdoc
    - Fixed bug #18974 : Blank line causes "Multi-line function call not indented correctly"
      -- Adds new error message to ban empty lines in multi-line function calls
    - Fixed bug #18975 : "Closing parenthesis must be on a line by itself" also causes indentation error
   </notes>
  </release>
  <release>
   <version>
    <release>1.3.1</release>
    <api>1.3.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2011-11-03</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - All report file command line arguments now work with relative paths (request #17240)
    - The extensions command line argument now supports multi-part file extensions (request #17227)
    - Added report type --report=hgblame to show number of errors/warnings committed by authors in a Mercurial repository
      -- Has the same functionality as the svnblame report
      -- Thanks to Ben Selby for the patch
    - Added T_BACKTICK token type to make detection of backticks easier (request #18799)
    - Added pattern matching support to Generic ForbiddenFunctionsSniff
        -- If you are extending it and overriding register() or addError() you will need to review your sniff
    - Namespaces are now recognised as scope openers, although they do not require braces (request #18043)
    - Added new ByteOrderMarkSniff to Generic standard (request #18194)
      -- Throws an error if a byte order mark is found in any PHP file
      -- Thanks to Piotr Karas for the contribution
    - PHP_Timer output is no longer included in reports when being written to a file (request #18252)
      -- Also now shown for all report types if nothing is being printed to the screen
    - Generic DeprecatedFunctionSniff now reports functions as deprecated and not simply forbidden (request #18288)
    - PHPCS now accepts file contents from STDIN (request #18447)
      -- Example usage: cat temp.php | phpcs [options]  -OR-  phpcs [options] &lt; temp.php
      -- Not every sniff will work correctly due to the lack of a valid file path
    - PHP_CodeSniffer_Exception no longer extends PEAR_Exception (request #18483)
      -- PEAR_Exception added a requirement that PEAR had to be installed
      -- PHP_CodeSniffer is not used as a library, so unlikely to have any impact
    - PEAR FileCommentSniff now allows GIT IDs in the version tag (request #14874)
    - AbstractVariableSniff now supports heredocs
      -- Also includes some variable detection fixes
      -- Thanks to Sam Graham for the patch
    - Squiz FileCommentSniff now enforces rule that package names cannot start with the word Squiz
    - MySource AssignThisSniff now allows "this" to be assigned to the private var _self
    - Fixed issue in Squiz FileCommentSniff where suggested package name was the same as the incorrect package name
    - Fixed some issues with Squiz ArrayDeclarationSniff when using function calls in array values
    - Fixed doc generation so it actually works again
      -- Also now works when being run from an SVN checkout as well as when installed as a PEAR package
      -- Should fix bug #18949 : Call to private method from static
    - PEAR ClassDeclaration sniff now supports indentation checks when using the alternate namespace syntax
      -- PEAR.Classes.ClassDeclaration.SpaceBeforeBrace message now contains 2 variables instead of 1
      -- Sniff allows overriding of the default indent level, which is set to 4
      -- Fixes bug #18933 : Alternative namespace declaration syntax confuses scope sniffs
    - Fixed bug #18465 : "self::" does not work in lambda functions
      -- Also corrects conversion of T_FUNCTION tokens to T_CLOSURE, which was not fixing token condition arrays
    - Fixed bug #18543 : CSS Tokenizer deletes too many #
    - Fixed bug #18624 : @throws namespace problem
      -- Thanks to Gavin Davies for the patch
    - Fixed bug #18628 : Generic.Files.LineLength gives incorrect results with Windows line-endings
    - Fixed bug #18633 : CSS Tokenizer doesn't replace T_LIST tokens inside some styles
    - Fixed bug #18657 : anonymous functions wrongly indented
    - Fixed bug #18670 : UpperCaseConstantNameSniff fails on dynamic retrieval of class constant
    - Fixed bug #18709 : Code sniffer sniffs file if even if it's in --ignore
      -- Thanks to Artem Lopata for the patch
    - Fixed bug #18762 : Incorrect handling of define and constant in UpperCaseConstantNameSniff
      -- Thanks to Thomas Baker for the patch
    - Fixed bug #18769 : CSS Tokenizer doesn't replace T_BREAK tokens inside some styles
    - Fixed bug #18835 : Unreachable errors of inline returns of closure functions
      -- Thanks to Patrick Schmidt for the patch
    - Fixed bug #18839 : Fix miscount of warnings in AbstractSniffUnitTest.php
      -- Thanks to Sam Graham for the patch
    - Fixed bug #18844 : Generic_Sniffs_CodeAnalysis_UnusedFunctionParameterSniff with empty body
      -- Thanks to Dmitri Medvedev for the patch
    - Fixed bug #18847 : Running Squiz_Sniffs_Classes_ClassDeclarationSniff results in PHP notice
    - Fixed bug #18868 : jslint+rhino: errors/warnings not detected
      -- Thanks to Christian Weiske for the patch
    - Fixed bug #18879 : phpcs-svn-pre-commit requires escapeshellarg
      -- Thanks to Bjorn Katuin for the patch
    - Fixed bug #18951 : weird behaviour with closures and multi-line use () params
   </notes>
  </release>
  <release>
   <version>
    <release>1.3.0</release>
    <api>1.3.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2011-03-17</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Add a new token T_CLOSURE that replaces T_FUNCTION if the function keyword is anonymous
    - Many Squiz sniffs no longer report errors when checking closures; they are now ignored
    - Fixed some error messages in PEAR MultiLineConditionSniff that were not using placeholders for message data
    - AbstractVariableSniff now correctly finds variable names wrapped with curly braces inside double quoted strings
    - PEAR FunctionDeclarationSniff now ignores arrays in argument default values when checking multi-line declarations
    - Fixed bug #18200 : Using custom named ruleset file as standard no longer works
    - Fixed bug #18196 : PEAR MultiLineCondition.SpaceBeforeOpenBrace not consistent with newline chars
    - Fixed bug #18204 : FunctionCommentThrowTag picks wrong exception type when throwing function call
    - Fixed bug #18222 : Add __invoke method to PEAR standard
    - Fixed bug #18235 : Invalid error generation in Squiz.Commenting.FunctionCommentThrowTag
    - Fixed bug #18250 : --standard with relative path skips Standards' "implicit" sniffs
    - Fixed bug #18274 : Multi-line IF and function call indent rules conflict
    - Fixed bug #18282 : Squiz doesn't handle final keyword before function comments
      -- Thanks to Dave Perrett for the patch
    - Fixed bug #18336 : Function isUnderscoreName gives php notices
   </notes>
  </release>
  <release>
   <version>
    <release>1.3.0RC2</release>
    <api>1.3.0RC2</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2011-01-14</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - You can now print multiple reports for each run and print each to the screen or a file (request #12434)
      -- Format is --report-[report][=file] (e.g., --report-xml=out.xml)
      -- Printing to screen is done by leaving [file] empty (e.g., --report-xml)
      -- Multiple reports can be specified in this way (e.g., --report-summary --report-xml=out.xml)
      -- The standard --report and --report-file command line arguments are unchanged
    - Added -d command line argument to set php.ini settings while running (request #17244)
      -- Usage is: phpcs -d memory_limit=32M -d ...
      -- Thanks to Ben Selby for the patch
    - Added -p command line argument to show progress during a run
      -- Dot means pass, E means errors found, W means only warnings found and S means skipped file
      -- Particularly good for runs where you are checking more than 100 files
      -- Enable by default with --config-set show_progress 1
      -- Will not print anything if you are already printing verbose output
      -- This has caused a big change in the way PHP_CodeSniffer processes files (API changes around processing)
    - You can now add exclude rules for individual sniffs or error messages (request #17903)
      -- Only available when using a ruleset.xml file to specify rules
      -- Uses the same exclude-pattern tags as normal but allows them inside rule tags
    - Using the -vvv option will now print a list of sniffs executed for each file and how long they took to process
    - Added Generic ClosureLinterSniff to run Google's gjslint over your JS files
    - The XML and CSV reports now include the severity of the error (request #18165)
      -- The Severity column in the CSV report has been renamed to Type, and a new Severity column added for this
    - Fixed issue with Squiz FunctionCommentSniff reporting incorrect type hint when default value uses namespace
      -- Thanks to Anti Veeranna for the patch
    - Generic FileLengthSniff now uses iconv_strlen to check line length if an encoding is specified (request #14237)
    - Generic UnnecessaryStringConcatSniff now allows strings to be combined to form a PHP open or close tag
    - Squiz SwitchDeclarationSniff no longer reports indentation errors for BREAK statements inside IF conditions
    - Interactive mode now always prints the full error report (ignores command line)
    - Improved regular expression detection in JavaScript files
      -- Added new T_TYPEOF token that can be used to target the typeof JS operator
      -- Fixes bug #17611 : Regular expression tokens not recognised
    - Squiz ScopeIndentSniff removed
      -- Squiz standard no longer requires additional indents between ob_* methods
      -- Also removed Squiz OutputBufferingIndentSniff that was checking the same thing
    - PHP_CodeSniffer_File::getMemberProperties() performance improved significantly
      -- Improves performance of Squiz ValidVariableNameSniff significantly
    - Squiz OperatorSpacingSniff performance improved significantly
    - Squiz NonExecutableCodeSniff performance improved significantly
      -- Will throw duplicate errors in some cases now, but these should be rare
    - MySource IncludeSystemSniff performance improved significantly
    - MySource JoinStringsSniff no longer reports an error when using join() on a named JS array
    - Warnings are now reported for each file when they cannot be opened instead of stopping the script
      -- Hide warnings with the -n command line argument
      -- Can override the warnings using the code Internal.DetectLineEndings
    - Fixed bug #17693 : issue with pre-commit hook script with filenames that start with v
    - Fixed bug #17860 : isReference function fails with references in array
      -- Thanks to Lincoln Maskey for the patch
    - Fixed bug #17902 : Cannot run tests when tests are symlinked into tests dir
      -- Thanks to Matt Button for the patch
    - Fixed bug #17928 : Improve error message for Generic_Sniffs_PHP_UpperCaseConstantSniff
      -- Thanks to Stefano Kowalke for the patch
    - Fixed bug #18039 : JS Tokenizer crash when ] is last character in file
    - Fixed bug #18047 : Incorrect handling of namespace aliases as constants
      -- Thanks to Dmitri Medvedev for the patch
    - Fixed bug #18072 : Impossible to exclude path from processing when symlinked
    - Fixed bug #18073 : Squiz.PHP.NonExecutableCode fault
    - Fixed bug #18117 : PEAR coding standard: Method constructor not sniffed as a function
    - Fixed bug #18135 : Generic FunctionCallArgumentSpacingSniff reports function declaration errors
    - Fixed bug #18140 : Generic scope indent in exact mode: strange expected/found values for switch
    - Fixed bug #18145 : Sniffs are not loaded for custom ruleset file
      -- Thanks to Scott McCammon for the patch
    - Fixed bug #18152 : While and do-while with AbstractPatternSniff
    - Fixed bug #18191 : Squiz.PHP.LowercasePHPFunctions does not work with new Date()
    - Fixed bug #18193 : CodeSniffer doesn't reconize CR (\r) line endings
   </notes>
  </release>
  <release>
   <version>
    <release>1.3.0RC1</release>
    <api>1.3.0RC1</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2010-09-03</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added exclude pattern support to ruleset.xml file so you can specify ignore patterns in a standard (request #17683)
      -- Use new exclude-pattern tags to include the ignore rules into your ruleset.xml file
      -- See CodeSniffer/Standards/PHPCS/ruleset.xml for an example
    - Added new --encoding command line argument to specify the encoding of the files being checked
      -- When set to utf-8, stops the XML-based reports from double-encoding
      -- When set to something else, helps the XML-based reports encode to utf-8
      -- Default value is iso-8859-1 but can be changed with --config-set encoding [value]
    - The report is no longer printed to screen when using the --report-file command line option (request #17467)
      -- If you want to print it to screen as well, use the -v command line argument
    - The SVN and GIT blame reports now also show percentage of reported errors per author (request #17606)
      -- Thanks to Ben Selby for the patch
    - Updated the SVN pre-commit hook to work with the new severity levels feature
    - Generic SubversionPropertiesSniff now allows properties to have NULL values (request #17682)
      -- A null value indicates that the property should exist but the value should not be checked
    - Generic UpperCaseConstantName Sniff now longer complains about the PHPUnit_MAIN_METHOD constant (request #17798)
    - Squiz FileComment sniff now checks JS files as well as PHP files
    - Squiz FunctionCommentSniff now supports namespaces in type hints
    - Fixed a problem in Squiz OutputBufferingIndentSniff where block comments were reported as not indented
    - Fixed bug #17092 : Problems with utf8_encode and htmlspecialchars with non-ascii chars
      -- Use the new --encoding=utf-8 command line argument if your files are utf-8 encoded
    - Fixed bug #17629 : PHP_CodeSniffer_Tokens::$booleanOperators missing T_LOGICAL_XOR
      -- Thanks to Matthew Turland for the patch
    - Fixed bug #17699 : Fatal error generating code coverage with PHPUnit 5.3.0RC1
    - Fixed bug #17718 : Namespace 'use' statement: used global class name is recognized as constant
    - Fixed bug #17734 : Generic SubversionPropertiesSniff complains on non SVN files
    - Fixed bug #17742 : EmbeddedPhpSniff reacts negatively to file without closing php tag
    - Fixed bug #17823 : Notice: Please no longer include PHPUnit/Framework.php
   </notes>
  </release>
  <release>
   <version>
    <release>1.3.0a1</release>
    <api>1.3.0a1</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2010-07-15</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - All CodingStandard.php files have been replaced by ruleset.xml files
      -- Custom standards will need to be converted over to this new format to continue working
    - You can specify a path to your own custom ruleset.xml file by using the --standard command line arg
      -- e.g., phpcs --standard=/path/to/my/ruleset.xml
    - Added a new report type --report=gitblame to show how many errors and warnings were committed by each author
      -- Has the same functionality as the svnblame report
      -- Thanks to Ben Selby for the patch
    - A new token type T_DOLLAR has been added to allow you to sniff for variable variables (feature request #17095)
      -- Thanks to Ian Young for the patch
    - JS tokenizer now supports T_POWER (^) and T_MOD_EQUAL (%=) tokens (feature request #17441)
    - If you have PHP_Timer installed, you'll now get a time/memory summary at the end of a script run
      -- Only happens when printing reports that are designed to be read on the command line
    - Added Generic DeprecatedFunctionsSniff to warn about the use of deprecated functions (feature request #16694)
      -- Thanks to Sebastian Bergmann for the patch
    - Added Squiz LogicalOperatorSniff to ensure that logical operators are surrounded by single spaces
    - Added MySource ChannelExceptionSniff to ensure action files only throw ChannelException
    - Added new method getClassProperties() for sniffs to use to determine if a class is abstract and/or final
      -- Thanks to Christian Kaps for the patch
    - Generic UpperCaseConstantSniff no longer throws errors about namespaces
      -- Thanks to Christian Kaps for the patch
    - Squiz OperatorBracketSniff now correctly checks value assignments in arrays
    - Squiz LongConditionClosingCommentSniff now requires a comment for long CASE statements that use curly braces
    - Squiz LongConditionClosingCommentSniff now requires an exact comment match on the brace
    - MySource IncludeSystemSniff now ignores DOMDocument usage
    - MySource IncludeSystemSniff no longer requires inclusion of systems that are being implemented
    - Removed found and expected messages from Squiz ConcatenationSpacingSniff because they were messy and not helpful
    - Fixed a problem where Generic CodeAnalysisSniff could show warnings if checking multi-line strings
    - Fixed error messages in Squiz ArrayDeclarationSniff reporting incorrect number of found and expected spaces
    - Fixed bug #17048 : False positive in Squiz_WhiteSpace_ScopeKeywordSpacingSniff
    - Fixed bug #17054 : phpcs more strict than PEAR CS regarding function parameter spacing
    - Fixed bug #17096 : Notice: Undefined index: scope_condition in ScopeClosingBraceSniff.php
      -- Moved PEAR.Functions.FunctionCallArgumentSpacing to Generic.Functions.FunctionCallArgumentSpacing
    - Fixed bug #17144 : Deprecated: Function eregi() is deprecated
    - Fixed bug #17236 : PHP Warning due to token_get_all() in DoubleQuoteUsageSniff
    - Fixed bug #17243 : Alternate Switch Syntax causes endless loop of Notices in SwitchDeclaration
    - Fixed bug #17313 : Bug with switch case structure
    - Fixed bug #17331 : Possible parse error: interfaces may not include member vars
    - Fixed bug #17337 : CSS tokenizer fails on quotes urls
    - Fixed bug #17420 : Uncaught exception when comment before function brace
    - Fixed bug #17503 : closures formatting is not supported
   </notes>
  </release>
  <release>
   <version>
    <release>1.2.2</release>
    <api>1.2.2</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2010-01-27</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The core PHP_CodeSniffer_File methods now understand the concept of closures (feature request #16866)
      -- Thanks to Christian Kaps for the sample code
    - Sniffs can now specify violation codes for each error and warning they add
      -- Future versions will allow you to override messages and severities using these codes
      -- Specifying a code is optional, but will be required if you wish to support overriding
    - All reports have been broken into separate classes
      -- Command line usage and report output remains the same
      -- Thanks to Gabriele Santini for the patch
    - Added an interactive mode that can be enabled using the -a command line argument
      -- Scans files and stops when it finds a file with errors
      -- Waits for user input to recheck the file (hopefully you fixed the errors) or skip the file
      -- Useful for very large code bases where full rechecks take a while
    - The reports now show the correct number of errors and warnings found
    - The isCamelCaps method now allows numbers in class names
    - The JS tokenizer now correctly identifies boolean and bitwise AND and OR tokens
    - The JS tokenizer now correctly identifies regular expressions used in conditions
    - PEAR ValidFunctionNameSniff now ignores closures
    - Squiz standard now uses the PEAR setting of 85 chars for LineLengthSniff
    - Squiz ControlStructureSpacingSniff now ensure there are no spaces around parentheses
    - Squiz LongConditionClosingCommentSniff now checks for comments at the end of try/catch statements
    - Squiz LongConditionClosingCommentSniff now checks validity of comments for short structures if they exist
    - Squiz IncrementDecrementUsageSniff now has better checking to ensure it only looks at simple variable assignments
    - Squiz PostStatementCommentSniff no longer throws errors for end function comments
    - Squiz InlineCommentSniff no longer throws errors for end function comments
    - Squiz OperatorBracketSniff now allows simple arithmetic operations in SWITCH conditions
    - Squiz ValidFunctionNameSniff now ignores closures
    - Squiz MethodScopeSniff now ignores closures
    - Squiz ClosingDeclarationCommentSniff now ignores closures
    - Squiz GlobalFunctionSniff now ignores closures
    - Squiz DisallowComparisonAssignmentSniff now ignores the assigning of arrays
    - Squiz DisallowObjectStringIndexSniff now allows indexes that contain dots and reserved words
    - Squiz standard now throws nesting level and cyclomatic complexity errors at much higher levels
    - Squiz CommentedOutCodeSniff now ignores common comment framing characters
    - Squiz ClassCommentSniff now ensures the open comment tag is the only content on the first line
    - Squiz FileCommentSniff now ensures the open comment tag is the only content on the first line
    - Squiz FunctionCommentSniff now ensures the open comment tag is the only content on the first line
    - Squiz VariableCommentSniff now ensures the open comment tag is the only content on the first line
    - Squiz NonExecutableCodeSniff now warns about empty return statements that are not required
    - Removed ForbiddenStylesSniff from Squiz standard
      -- It is now in in the MySource standard as BrowserSpecificStylesSniff
      -- New BrowserSpecificStylesSniff ignores files with browser-specific suffixes
    - MySource IncludeSystemSniff no longer throws errors when extending the Exception class
    - MySource IncludeSystemSniff no longer throws errors for the abstract widget class
    - MySource IncludeSystemSniff and UnusedSystemSniff now allow includes inside IF statements
    - MySource IncludeSystemSniff no longer throws errors for included widgets inside methods
    - MySource GetRequestDataSniff now throws errors for using $_FILES
    - MySource CreateWidgetTypeCallbackSniff now allows return statements in nested functions
    - MySource DisallowSelfActionsSniff now ignores abstract classes
    - Fixed a problem with the SVN pre-commit hook for PHP versions without vertical whitespace regex support
    - Fixed bug #16740 : False positives for heredoc strings and unused parameter sniff
    - Fixed bug #16794 : ValidLogicalOperatorsSniff doesn't report operators not in lowercase
    - Fixed bug #16804 : Report filename is shortened too much
    - Fixed bug #16821 : Bug in Squiz_Sniffs_WhiteSpace_OperatorSpacingSniff
      -- Thanks to Jaroslav Hanslík for the patch
    - Fixed bug #16836 : Notice raised when using semicolon to open case
    - Fixed bug #16855 : Generic standard sniffs incorrectly for define() method
    - Fixed bug #16865 : Two bugs in Squiz_Sniffs_WhiteSpace_OperatorSpacingSniff
      -- Thanks to Jaroslav Hanslík for the patch
    - Fixed bug #16902 : Inline If Declaration bug
    - Fixed bug #16960 : False positive for late static binding in Squiz/ScopeKeywordSpacingSniff
      -- Thanks to Jakub Tománek for the patch
    - Fixed bug #16976 : The phpcs attempts to process symbolic links that don't resolve to files
    - Fixed bug #17017 : Including one file in the files sniffed alters errors reported for another file
   </notes>
  </release>
  <release>
   <version>
    <release>1.2.1</release>
    <api>1.2.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2009-11-17</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added a new report type --report=svnblame to show how many errors and warnings were committed by each author
      -- Also shows the percentage of their code that are errors and warnings
      -- Requires you to have the SVN command in your path
      -- Make sure SVN is storing usernames and passwords (if required) or you will need to enter them for each file
      -- You can also use the -s command line argument to see the different types of errors authors are committing
      -- You can use the -v command line argument to see all authors, even if they have no errors or warnings
    - Added a new command line argument --report-width to allow you to set the column width of screen reports
      -- Reports wont accept values less than 70 or else they get too small
      -- Can also be set via a config var: phpcs --config-set report_width 100
    - You can now get PHP_CodeSniffer to ignore a whole file by adding @codingStandardsIgnoreFile in the content
      -- If you put it in the first two lines the file wont even be tokenized, so it will be much quicker
    - Reports now print their file lists in alphabetical order
    - PEAR FunctionDeclarationSniff now reports error for incorrect closing bracket placement in multi-line definitions
    - Added Generic CallTimePassByReferenceSniff to prohibit the passing of variables into functions by reference
      -- Thanks to Florian Grandel for the contribution
    - Added Squiz DisallowComparisonAssignmentSniff to ban the assignment of comparison values to a variable
    - Added Squiz DuplicateStyleDefinitionSniff to check for duplicate CSS styles in a single class block
    - Squiz ArrayDeclarationSniff no longer checks the case of array indexes because that is not its job
    - Squiz PostStatementCommentSniff now allows end comments for class member functions
    - Squiz InlineCommentSniff now supports the checking of JS files
    - MySource CreateWidgetTypeCallbackSniff now allows the callback to be passed to another function
    - MySource CreateWidgetTypeCallbackSniff now correctly ignores callbacks used inside conditions
    - Generic MultipleStatementAlignmentSniff now enforces a single space before equals sign if max padding is reached
    - Fixed a problem in the JS tokenizer where regular expressions containing \// were not converted correctly
    - Fixed a problem tokenizing CSS files where multiple ID targets on a line would look like comments
    - Fixed a problem tokenizing CSS files where class names containing a colon looked like style definitions
    - Fixed a problem tokenizing CSS files when style statements had empty url() calls
    - Fixed a problem tokenizing CSS colours with the letter E in first half of the code
    - Squiz ColonSpacingSniff now ensures it is only checking style definitions in CSS files and not class names
    - Squiz DisallowComparisonAssignmentSniff no longer reports errors when assigning the return value of a function
    - CSS tokenizer now correctly supports multi-line comments
    - When only the case of var names differ for function comments, the error now indicates the case is different
    - Fixed an issue with Generic UnnecessaryStringConcatSniff where it incorrectly suggested removing a concat
    - Fixed bug #16530 : ScopeIndentSniff reports false positive
    - Fixed bug #16533 : Duplicate errors and warnings
    - Fixed bug #16563 : Check file extensions problem in phpcs-svn-pre-commit
      -- Thanks to Kaijung Chen for the patch
    - Fixed bug #16592 : Object operator indentation incorrect when first operator is on a new line
    - Fixed bug #16641 : Notice output
    - Fixed bug #16682 : Squiz_Sniffs_Strings_DoubleQuoteUsageSniff reports string "\0" as invalid
    - Fixed bug #16683 : Typing error in PHP_CodeSniffer_CommentParser_AbstractParser
    - Fixed bug #16684 : Bug in Squiz_Sniffs_PHP_NonExecutableCodeSniff
    - Fixed bug #16692 : Spaces in paths in Squiz_Sniffs_Debug_JavaScriptLintSniff
      -- Thanks to Jaroslav Hanslík for the patch
    - Fixed bug #16696 : Spelling error in MultiLineConditionSniff
    - Fixed bug #16697 : MultiLineConditionSniff incorrect result with inline IF
    - Fixed bug #16698 : Notice in JavaScript Tokenizer
    - Fixed bug #16736 : Multi-files sniffs aren't processed when FILE is a single directory
      -- Thanks to Alexey Shein for the patch
    - Fixed bug #16792 : Bug in Generic_Sniffs_PHP_ForbiddenFunctionsSniff
   </notes>
  </release>
  <release>
   <version>
    <release>1.2.0</release>
    <api>1.2.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2009-08-17</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Installed standards are now favoured over custom standards when using the cmd line arg with relative paths
    - Unit tests now use a lot less memory while running
    - Squiz standard now uses Generic EmptyStatementSniff but throws errors instead of warnings
    - Squiz standard now uses Generic UnusedFunctionParameterSniff
    - Removed unused ValidArrayIndexNameSniff from the Squiz standard
    - Fixed bug #16424 : SubversionPropertiesSniff print PHP Warning
    - Fixed bug #16450 : Constant PHP_CODESNIFFER_VERBOSITY already defined (unit tests)
    - Fixed bug #16453 : function declaration long line splitted error
    - Fixed bug #16482 : phpcs-svn-pre-commit ignores extensions parameter
   </notes>
  </release>
  <release>
   <version>
    <release>1.2.0RC3</release>
    <api>1.2.0RC3</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2009-07-07</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - You can now use @codingStandardsIgnoreStart and @...End comments to suppress messages (feature request #14002)
    - A warning is now included for files without any code when short_open_tag is set to Off (feature request #12952)
    - You can now use relative paths to your custom standards with the --standard cmd line arg (feature request #14967)
    - You can now override magic methods and functions in PEAR ValidFunctionNameSniff (feature request #15830)
    - MySource IncludeSystemSniff now recognises widget action classes
    - MySource IncludeSystemSniff now knows about unit test classes and changes rules accordingly
   </notes>
  </release>
  <release>
   <version>
    <release>1.2.0RC2</release>
    <api>1.2.0RC2</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2009-05-25</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Test suite can now be run using the full path to AllTests.php (feature request #16179)
    - Fixed bug #15980 : PHP_CodeSniffer change php current directory
      -- Thanks to Dolly Aswin Harahap for the patch
    - Fixed bug #16001 : Notice triggered
    - Fixed bug #16054 : phpcs-svn-pre-commit not showing any errors
    - Fixed bug #16071 : Fatal error: Uncaught PHP_CodeSniffer_Exception
    - Fixed bug #16170 : Undefined Offset -1 in MultiLineConditionSniff.php on line 68
    - Fixed bug #16175 : Bug in Squiz-IncrementDecrementUsageSniff
   </notes>
  </release>
  <release>
   <version>
    <release>1.2.0RC1</release>
    <api>1.2.0RC1</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2009-03-09</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Reports that are output to a file now include a trailing newline at the end of the file
    - Fixed sniff names not shown in -vvv token processing output
    - Added Generic SubversionPropertiesSniff to check that specific svn props are set for files
      -- Thanks to Jack Bates for the contribution
    - The PHP version check can now be overridden in classes that extend PEAR FileCommentSniff
      -- Thanks to Helgi Þormar Þorbjörnsson for the suggestion
    - Added Generic ConstructorNameSniff to check for PHP4 constructor name usage
      -- Thanks to Leif Wickland for the contribution
    - Squiz standard now supports multi-line function and condition sniffs from PEAR standard
    - Squiz standard now uses Generic ConstructorNameSniff
    - Added MySource GetRequestDataSniff to ensure REQUEST, GET and POST are not accessed directly
    - Squiz OperatorBracketSniff now allows square brackets in simple unbracketed operations
    - Fixed the incorrect tokenizing of multi-line block comments in CSS files
    - Fixed bug #15383 : Uncaught PHP_CodeSniffer_Exception
    - Fixed bug #15408 : An unexpected exception has been caught: Undefined offset: 2
    - Fixed bug #15519 : Uncaught PHP_CodeSniffer_Exception
    - Fixed bug #15624 : Pre-commit hook fails with PHP errors
    - Fixed bug #15661 : Uncaught PHP_CodeSniffer_Exception
    - Fixed bug #15722 : "declare(encoding = 'utf-8');" leads to "Missing file doc comment"
    - Fixed bug #15910 : Object operator indention not calculated correctly
   </notes>
  </release>
  <release>
   <version>
    <release>1.2.0a1</release>
    <api>1.2.0a1</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2008-12-18</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - PHP_CodeSniffer now has a CSS tokenizer for checking CSS files
    - Added support for a new multi-file sniff that sniffs all processed files at once
    - Added new output format --report=emacs to output errors using the emacs standard compile output format
      -- Thanks to Len Trigg for the contribution
    - Reports can now be written to a file using the --report-file command line argument (feature request #14953)
      -- The report is also written to screen when using this argument
    - The CheckStyle, CSV and XML reports now include a source for each error and warning (feature request #13242)
      -- A new report type --report=source can be used to show you the most common errors in your files
    - Added new command line argument -s to show error sources in all reports
    - Added new command line argument --sniffs to specify a list of sniffs to restrict checking to
      -- Uses the sniff source codes that are optionally displayed in reports
    - Changed the max width of error lines from 80 to 79 chars to stop blank lines in the default windows cmd window
    - PHP_CodeSniffer now has a token for an asperand (@ symbol) so sniffs can listen for them
      -- Thanks to Andy Brockhurst for the patch
    - Added Generic DuplicateClassNameSniff that will warn if the same class name is used in multiple files
      -- Not currently used by any standard; more of a multi-file sniff sample than anything useful
    - Added Generic NoSilencedErrorsSniff that warns if PHP errors are being silenced using the @ symbol
      -- Thanks to Andy Brockhurst for the contribution
    - Added Generic UnnecessaryStringConcatSniff that checks for two strings being concatenated
    - Added PEAR FunctionDeclarationSniff to enforce the new multi-line function declaration PEAR standard
    - Added PEAR MultiLineAssignmentSniff to enforce the correct indentation of multi-line assignments
    - Added PEAR MultiLineConditionSniff to enforce the new multi-line condition PEAR standard
    - Added PEAR ObjectOperatorIndentSniff to enforce the new chained function call PEAR standard
    - Added MySource DisallowSelfActionSniff to ban the use of self::method() calls in Action classes
    - Added MySource DebugCodeSniff to ban the use of Debug::method() calls
    - Added MySource CreateWidgetTypeCallback sniff to check callback usage in widget type create methods
    - Added Squiz DisallowObjectStringIndexSniff that forces object dot notation in JavaScript files
      -- Thanks to Sertan Danis for the contribution
    - Added Squiz DiscouragedFunctionsSniff to warn when using debug functions
    - Added Squiz PropertyLabelSniff to check whitespace around colons in JS property and label declarations
    - Added Squiz DuplicatePropertySniff to check for duplicate property names in JS classes
    - Added Squiz ColonSpacingSniff to check for spacing around colons in CSS style definitions
    - Added Squiz SemicolonSpacingSniff to check for spacing around semicolons in CSS style definitions
    - Added Squiz IndentationSniff to check for correct indentation of CSS files
    - Added Squiz ColourDefinitionSniff to check that CSS colours are defined in uppercase and using shorthand
    - Added Squiz EmptyStyleDefinitionSniff to check for CSS style definitions without content
    - Added Squiz EmptyClassDefinitionSniff to check for CSS class definitions without content
    - Added Squiz ClassDefinitionOpeningBraceSpaceSniff to check for spaces around opening brace of CSS class definitions
    - Added Squiz ClassDefinitionClosingBraceSpaceSniff to check for a single blank line after CSS class definitions
    - Added Squiz ClassDefinitionNameSpacingSniff to check for a blank lines inside CSS class definition names
    - Added Squiz DisallowMultipleStyleDefinitionsSniff to check for multiple style definitions on a single line
    - Added Squiz DuplicateClassDefinitionSniff to check for duplicate CSS class blocks that can be merged
    - Added Squiz ForbiddenStylesSniff to check for usage of browser specific styles
    - Added Squiz OpacitySniff to check for incorrect opacity values in CSS
    - Added Squiz LowercaseStyleDefinitionSniff to check for styles that are not defined in lowercase
    - Added Squiz MissingColonSniff to check for style definitions where the colon has been forgotten
    - Added Squiz MultiLineFunctionDeclarationSniff to check that multi-line declarations contain one param per line
    - Added Squiz JSLintSniff to check for JS errors using the jslint.js script through Rhino
      -- Set jslint path using phpcs --config-set jslint_path /path/to/jslint.js
      -- Set rhino path using phpcs --config-set rhino_path /path/to/rhino
    - Added Generic TodoSniff that warns about comments that contain the word TODO
    - Removed MultipleStatementAlignmentSniff from the PEAR standard as alignment is now optional
    - Generic ForbiddenFunctionsSniff now has protected member var to specify if it should use errors or warnings
    - Generic MultipleStatementAlignmentSniff now has correct error message if assignment is on a new line
    - Generic MultipleStatementAlignmentSniff now has protected member var to allow it to ignore multi-line assignments
    - Generic LineEndingsSniff now supports checking of JS files
    - Generic LineEndingsSniff now supports checking of CSS files
    - Generic DisallowTabIndentSniff now supports checking of CSS files
    - Squiz DoubleQuoteUsageSniff now bans the use of variables in double quoted strings in favour of concatenation
    - Squiz SuperfluousWhitespaceSniff now supports checking of JS files
    - Squiz SuperfluousWhitespaceSniff now supports checking of CSS files
    - Squiz DisallowInlineIfSniff now supports checking of JS files
    - Squiz SemicolonSpacingSniff now supports checking of JS files
    - Squiz PostStatementCommentSniff now supports checking of JS files
    - Squiz FunctionOpeningBraceSpacingSniff now supports checking of JS files
    - Squiz FunctionClosingBraceSpacingSniff now supports checking of JS files
      -- Empty JS functions must have their opening and closing braces next to each other
    - Squiz ControlStructureSpacingSniff now supports checking of JS files
    - Squiz LongConditionClosingCommentSniff now supports checking of JS files
    - Squiz OperatorSpacingSniff now supports checking of JS files
    - Squiz SwitchDeclarationSniff now supports checking of JS files
    - Squiz CommentedOutCodeSniff now supports checking of CSS files
    - Squiz DisallowSizeFunctionsInLoopsSniff now supports checking of JS files for the use of object.length
    - Squiz DisallowSizeFunctionsInLoopsSniff no longer complains about size functions outside of the FOR condition
    - Squiz ControlStructureSpacingSniff now bans blank lines at the end of a control structure
    - Squiz ForLoopDeclarationSniff no longer throws errors for JS FOR loops without semicolons
    - Squiz MultipleStatementAlignmentSniff no longer throws errors if a statement would take more than 8 spaces to align
    - Squiz standard now uses Generic TodoSniff
    - Squiz standard now uses Generic UnnecessaryStringConcatSniff
    - Squiz standard now uses PEAR MultiLineAssignmentSniff
    - Squiz standard now uses PEAR MultiLineConditionSniff
    - Zend standard now uses OpeningFunctionBraceBsdAllmanSniff (feature request #14647)
    - MySource JoinStringsSniff now bans the use of inline array joins and suggests the + operator
    - Fixed incorrect errors that can be generated from abstract scope sniffs when moving to a new file
    - Core tokenizer now matches orphaned curly braces in the same way as square brackets
    - Whitespace tokens at the end of JS files are now added to the token stack
    - JavaScript tokenizer now identifies properties and labels as new token types
    - JavaScript tokenizer now identifies object definitions as a new token type and matches curly braces for them
    - JavaScript tokenizer now identifies DIV_EQUAL and MUL_EQUAL tokens
    - Improved regular expression detection in the JavaScript tokenizer
    - Improve AbstractPatternSniff support so it can listen for any token type, not just weighted tokens
    - Fixed Squiz DoubleQuoteUsageSniff so it works correctly with short_open_tag=Off
    - Fixed bug #14409 : Output of warnings to log file
    - Fixed bug #14520 : Notice: Undefined offset: 1 in /usr/share/php/PHP/CodeSniffer/File.php on line
    - Fixed bug #14637 : Call to processUnknownArguments() misses second parameter $pos
      -- Thanks to Peter Buri for the patch
    - Fixed bug #14889 : Lack of clarity: licence or license
    - Fixed bug #15008 : Nested Parentheses in Control Structure Sniffs
    - Fixed bug #15091 : pre-commit hook attempts to sniff folders
      -- Thanks to Bruce Weirdan for the patch
    - Fixed bug #15124 : AbstractParser.php uses deprecated split() function
      -- Thanks to Sebastian Bergmann for the patch
    - Fixed bug #15188 : PHPCS vs HEREDOC strings
    - Fixed bug #15231 : Notice: Uninitialized string offset: 0 in FileCommentSniff.php on line 555
    - Fixed bug #15336 : Notice: Undefined offset: 2 in /usr/share/php/PHP/CodeSniffer/File.php on line
   </notes>
  </release>
  <release>
   <version>
    <release>1.1.0</release>
    <api>1.1.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2008-07-14</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - PEAR FileCommentSniff now allows tag orders to be overridden in child classes
      -- Thanks to Jeff Hodsdon for the patch
    - Added Generic DisallowMultipleStatementsSniff to ensure there is only one statement per line
    - Squiz standard now uses DisallowMultipleStatementsSniff
    - Fixed error in Zend ValidVariableNameSniff when checking vars in form: $class->{$var}
    - Fixed bug #14077 : Fatal error: Uncaught PHP_CodeSniffer_Exception: $stackPtr is not a class member
    - Fixed bug #14168 : Global Function -> Static Method and __autoload()
    - Fixed bug #14238 : Line length not checked at last line of a file
    - Fixed bug #14249 : wrong detection of scope_opener
    - Fixed bug #14250 : ArrayDeclarationSniff emit warnings at malformed array
    - Fixed bug #14251 : --extensions option doesn't work
   </notes>
  </release>
  <release>
   <version>
    <release>1.1.0RC3</release>
    <api>1.1.0RC3</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2008-07-03</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - PEAR FileCommentSniff now allows tag orders to be overridden in child classes
      -- Thanks to Jeff Hodsdon for the patch
    - Added Generic DisallowMultipleStatementsSniff to ensure there is only one statement per line
    - Squiz standard now uses DisallowMultipleStatementsSniff
    - Fixed error in Zend ValidVariableNameSniff when checking vars in form: $class->{$var}
    - Fixed bug #14077 : Fatal error: Uncaught PHP_CodeSniffer_Exception: $stackPtr is not a class member
    - Fixed bug #14168 : Global Function -> Static Method and __autoload()
    - Fixed bug #14238 : Line length not checked at last line of a file
    - Fixed bug #14249 : wrong detection of scope_opener
    - Fixed bug #14250 : ArrayDeclarationSniff emit warnings at malformed array
    - Fixed bug #14251 : --extensions option doesn't work
   </notes>
  </release>
  <release>
   <version>
    <release>1.1.0RC2</release>
    <api>1.1.0RC2</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2008-06-13</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Permission denied errors now stop script execution but still display current errors (feature request #14076)
    - Added Squiz ValidArrayIndexNameSniff to ensure array indexes do not use camel case
    - Squiz ArrayDeclarationSniff now ensures arrays are not declared with camel case index values
    - PEAR ValidVariableNameSniff now alerts about a possible parse error for member vars inside an interface
    - Fixed bug #13921 : js parsing fails for comments on last line of file
    - Fixed bug #13922 : crash in case of malformed (but tokenized) php file
      -- PEAR and Squiz ClassDeclarationSniff now throw warnings for possible parse errors
      -- Squiz ValidClassNameSniff now throws warning for possible parse errors
      -- Squiz ClosingDeclarationCommentSniff now throws additional warnings for parse errors
   </notes>
  </release>
  <release>
   <version>
    <release>1.1.0RC1</release>
    <api>1.1.0RC1</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2008-05-13</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added support for multiple tokenizers so PHP_CodeSniffer can check more than just PHP files
      -- PHP_CodeSniffer now has a JS tokenizer for checking JavaScript files
      -- Sniffs need to be updated to work with additional tokenizers, or new sniffs written for them
   - phpcs now exits with status 2 if the tokenizer extension has been disabled (feature request #13269)
   - Added scripts/phpcs-svn-pre-commit that can be used as an SVN pre-commit hook
     -- Also reworked the way the phpcs script works to make it easier to wrap it with other functionality
     -- Thanks to Jack Bates for the contribution
   - Fixed error in phpcs error message when a supplied file does not exist
   - Fixed a cosmetic error in AbstractPatternSniff where the "found" string was missing some content
   - Added sniffs that implement part of the PMD rule catalog to the Generic standard
     -- Thanks to Manuel Pichler for the contribution of all these sniffs.
   - Squiz FunctionCommentThrowTagSniff no longer throws errors for function that only throw variables
   - Generic ScopeIndentSniff now has private member to enforce exact indent matching
   - Replaced Squiz DisallowCountInLoopsSniff with Squiz DisallowSizeFunctionsInLoopsSniff
     -- Thanks to Jan Miczaika for the sniff
   - Squiz BlockCommentSniff now checks inline doc block comments
   - Squiz InlineCommentSniff now checks inline doc block comments
   - Squiz BlockCommentSniff now checks for no blank line before first comment in a function
   - Squiz DocCommentAlignmentSniff now ignores inline doc block comments
   - Squiz ControlStructureSpacingSniff now ensures no blank lines at the start of control structures
   - Squiz ControlStructureSpacingSniff now ensures no blank lines between control structure closing braces
   - Squiz IncrementDecrementUsageSniff now ensures inc/dec ops are bracketed in string concats
   - Squiz IncrementDecrementUsageSniff now ensures inc/dec ops are not used in arithmetic operations
   - Squiz FunctionCommentSniff no longer throws errors if return value is mixed but function returns void somewhere
   - Squiz OperatorBracketSniff no allows function call brackets to count as operator brackets
   - Squiz DoubleQuoteUsageSniff now supports \x \f and \v (feature request #13365)
   - Squiz ComparisonOperatorUsageSniff now supports JS files
   - Squiz ControlSignatureSniff now supports JS files
   - Squiz ForLoopDeclarationSniff now supports JS files
   - Squiz OperatorBracketSniff now supports JS files
   - Squiz InlineControlStructureSniff now supports JS files
   - Generic LowerCaseConstantSniff now supports JS files
   - Generic DisallowTabIndentSniff now supports JS files
   - Generic MultipleStatementAlignmentSniff now supports JS files
   - Added Squiz ObjectMemberCommaSniff to ensure the last member of a JS object is not followed by a comma
   - Added Squiz ConstantCaseSniff to ensure the PHP constants are uppercase and JS lowercase
   - Added Squiz JavaScriptLintSniff to check JS files with JSL
     -- Set path using phpcs --config-set jsl_path /path/to/jsl
   - Added MySource FirebugConsoleSniff to ban the use of "console" for JS variable and function names
   - Added MySource JoinStringsSniff to enforce the use of join() to concatenate JS strings
   - Added MySource AssignThisSniff to ensure this is only assigned to a var called self
   - Added MySource DisallowNewWidgetSniff to ban manual creation of widget objects
   - Removed warning shown in Zend CodeAnalyzerSniff when the ZCA path is not set
   - Fixed error in Squiz ValidVariableNameSniff when checking vars in the form $obj->$var
   - Fixed error in Squiz DisallowMultipleAssignmentsSniff when checking vars in the form $obj->$var
   - Fixed error in Squiz InlineCommentSniff where comments for class constants were seen as inline
   - Fixed error in Squiz BlockCommentSniff where comments for class constants were not ignored
   - Fixed error in Squiz OperatorBracketSniff where negative numbers were ignored during comparisons
   - Fixed error in Squiz FunctionSpacingSniff where functions after member vars reported incorrect spacing
   - Fixed bug #13062 : Interface comments aren't handled in PEAR standard
     -- Thanks to Manuel Pichler for the path
   - Fixed bug #13119 : php minimum requirement need to be fix
   - Fixed bug #13156 : Bug in Squiz_Sniffs_PHP_NonExecutableCodeSniff
   - Fixed bug #13158 : Strange behaviour in AbstractPatternSniff
   - Fixed bug #13169 : Undefined variables
   - Fixed bug #13178 : Catch exception in File.php
   - Fixed bug #13254 : Notices output in checkstyle report causes XML issues
   - Fixed bug #13446 : crash with src of phpMyAdmin
     -- Thanks to Manuel Pichler for the path
   </notes>
  </release>
  <release>
   <version>
    <release>1.1.0a1</release>
    <api>1.1.0a1</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2008-04-21</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Fixed error in PEAR ValidClassNameSniff when checking class names with double underscores
    - Moved Squiz InlineControlStructureSniff into Generic standard
    - PEAR standard now throws warnings for inline control structures
    - Squiz OutputBufferingIndentSniff now ignores the indentation of inline HTML
    - MySource IncludeSystemSniff now ignores usage of ZipArchive
    - Removed "function" from error messages for Generic function brace sniffs (feature request #13820)
    - Generic UpperCaseConstantSniff no longer throws errors for declare(ticks = ...)
      -- Thanks to Josh Snyder for the patch
    - Squiz ClosingDeclarationCommentSniff and AbstractVariableSniff now throw warnings for possible parse errors
    - Fixed bug #13827 : AbstractVariableSniff throws "undefined index"
    - Fixed bug #13846 : Bug in Squiz.NonExecutableCodeSniff
    - Fixed bug #13849 : infinite loop in PHP_CodeSniffer_File::findNext()
   </notes>
  </release>
  <release>
   <version>
    <release>1.0.1</release>
    <api>1.0.1</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2008-02-04</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Squiz ArrayDeclarationSniff now throws error if the array keyword is followed by a space
    - Squiz ArrayDeclarationSniff now throws error for empty multi-line arrays
    - Squiz ArrayDeclarationSniff now throws error for multi-line arrays with a single value
    - Squiz DocCommentAlignmentSniff now checks for a single space before tags inside docblocks
    - Squiz ForbiddenFunctionsSniff now disallows is_null() to force use of (=== NULL) instead
    - Squiz VariableCommentSniff now continues throwing errors after the first one is found
    - Squiz SuperfluousWhitespaceSniff now throws errors for multiple blank lines inside functions
    - MySource IncludedSystemSniff now checks extended class names
    - MySource UnusedSystemSniff now checks extended and implemented class names
    - MySource IncludedSystemSniff now supports includeWidget()
    - MySource UnusedSystemSniff now supports includeWidget()
    - Added PEAR ValidVariableNameSniff to check that only private member vars are prefixed with an underscore
    - Added Squiz DisallowCountInLoopsSniff to check for the use of count() in FOR and WHILE loop conditions
    - Added MySource UnusedSystemSniff to check for included classes that are never used
    - Fixed a problem that caused the parentheses map to sometimes contain incorrect values
    - Fixed bug #12767 : Cant run phpcs from dir with PEAR subdir
    - Fixed bug #12773 : Reserved variables are not detected in strings
      -- Thanks to Wilfried Loche for the patch
    - Fixed bug #12832 : Tab to space conversion does not work
    - Fixed bug #12888 : extra space indentation = Notice: Uninitialized string offset...
    - Fixed bug #12909 : Default generateDocs function does not work under linux
      -- Thanks to Paul Smith for the patch
    - Fixed bug #12957 : PHP 5.3 magic method __callStatic
      -- Thanks to Manuel Pichler for the patch
   </notes>
  </release>
  <release>
   <version>
    <release>1.0.0</release>
    <api>1.0.0</api>
   </version>
   <stability>
    <release>stable</release>
    <api>stable</api>
   </stability>
   <date>2007-12-21</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - You can now specify the full path to a coding standard on the command line (feature request #11886)
      -- This allows you to use standards that are stored outside of PHP_CodeSniffer's own Standard dir
      -- You can also specify full paths in the CodingStandard.php include and exclude methods
      -- Classes, dirs and files need to be names as if the standard was part of PHP_CodeSniffer
      -- Thanks to Dirk Thomas for the doc generator patch and testing
    - Modified the scope map to keep checking after 3 lines for some tokens (feature request #12561)
      -- Those tokens that must have an opener (like T_CLASS) now keep looking until EOF
      -- Other tokens (like T_FUNCTION) still stop after 3 lines for performance
    - You can now escape commas in ignore patterns so they can be matched in file names
      -- Thanks to Carsten Wiedmann for the patch
    - Config data is now cached in a global var so the file system is not hit so often
      -- You can also set config data temporarily for the script if you are using your own external script
      -- Pass TRUE as the third argument to PHP_CodeSniffer::setConfigData()
    - PEAR ClassDeclarationSniff no longer throws errors for multi-line class declarations
    - Squiz ClassDeclarationSniff now ensures there is one blank line after a class closing brace
    - Squiz ClassDeclarationSniff now throws errors for a missing end PHP tag after the end class tag
    - Squiz IncrementDecrementUsageSniff no longer throws errors when -= and += are being used with vars
    - Squiz SwitchDeclarationSniff now throws errors for switch statements that do not contain a case statement
      -- Thanks to Sertan Danis for the patch
    - MySource IncludeSystemSniff no longer throws errors for the Util package
    - Fixed bug #12621 : "space after AS" check is wrong
      -- Thanks to Satoshi Oikawa for the patch
    - Fixed bug #12645 : error message is wrong
      -- Thanks to Renoiv for the patch
    - Fixed bug #12651 : Increment/Decrement Operators Usage at -1
   </notes>
  </release>
  <release>
   <version>
    <release>1.0.0RC3</release>
    <api>1.0.0RC3</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2007-11-30</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added new command line argument --tab-width that will convert tabs to spaces before testing
      -- This allows you to use the existing sniffs that check for spaces even when you use tabs
      -- Can also be set via a config var: phpcs --config-set tab_width 4
      -- A value of zero (the default) tells PHP_CodeSniffer not to replace tabs with spaces
    - You can now change the default report format from "full" to something else
        -- Run: phpcs --config-set report_format [format]
    - Improved performance by optimising the way the scope map is created during tokenising
    - Added new Squiz DisallowInlineIfSniff to disallow the usage of inline IF statements
    - Fixed incorrect errors being thrown for nested switches in Squiz SwitchDeclarationSniff
    - PEAR FunctionCommentSniff no longer complains about missing comments for @throws tags
    - PEAR FunctionCommentSniff now throws error for missing exception class name for @throws tags
    - PHP_CodeSniffer_File::isReference() now correctly returns for functions that return references
    - Generic LineLengthSniff no longer warns about @version lines with CVS or SVN id tags
    - Generic LineLengthSniff no longer warns about @license lines with long URLs
    - Squiz FunctionCommentThrowTagSniff no longer complains about throwing variables
    - Squiz ComparisonOperatorUsageSniff no longer throws incorrect errors for inline IF statements
    - Squiz DisallowMultipleAssignmentsSniff no longer throws errors for assignments in inline IF statements
    - Fixed bug #12455 : CodeSniffer treats content inside heredoc as PHP code
    - Fixed bug #12471 : Checkstyle report is broken
    - Fixed bug #12476 : PHP4 destructors are reported as error
    - Fixed bug #12513 : Checkstyle XML messages need to be utf8_encode()d
      -- Thanks to Sebastian Bergmann for the patch.
    - Fixed bug #12517 : getNewlineAfter() and dos files
   </notes>
  </release>
  <release>
   <version>
    <release>1.0.0RC2</release>
    <api>1.0.0RC2</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2007-11-14</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added a new Checkstyle report format
      -- Like the current XML format but modified to look like Checkstyle output
      -- Thanks to Manuel Pichler for helping get the format correct
    - You can now hide warnings by default
        -- Run: phpcs --config-set show_warnings 0
        -- If warnings are hidden by default, use the new -w command line argument to override
    - Added new command line argument --config-delete to delete a config value and revert to the default
    - Improved overall performance by optimising tokenising and next/prev methods (feature request #12421)
      -- Thanks to Christian Weiske for the patch
    - Added FunctionCallSignatureSniff to Squiz standard
    - Added @subpackage support to file and class comment sniffs in PEAR standard (feature request #12382)
      -- Thanks to Carsten Wiedmann for the patch
    - An error is now displayed if you use a PHP version less than 5.1.0 (feature request #12380)
      -- Thanks to Carsten Wiedmann for the patch
    - phpcs now exits with status 2 if it receives invalid input (feature request #12380)
      -- This is distinct from status 1, which indicates errors or warnings were found
    - Added new Squiz LanguageConstructSpacingSniff to throw errors for additional whitespace after echo etc.
    - Removed Squiz ValidInterfaceNameSniff
    - PEAR FunctionCommentSniff no longer complains about unknown tags
    - Fixed incorrect errors about missing function comments in PEAR FunctionCommentSniff
    - Fixed incorrect function docblock detection in Squiz FunctionCommentSniff
    - Fixed incorrect errors for list() in Squiz DisallowMultipleAssignmentsSniff
    - Errors no longer thrown if control structure is followed by a CASE's BREAK in Squiz ControlStructureSpacingSniff
    - Fixed bug #12368 : Autoloader cannot be found due to include_path override
      -- Thanks to Richard Quadling for the patch
    - Fixed bug #12378 : equal sign alignments problem with while()
   </notes>
  </release>
  <release>
   <version>
    <release>1.0.0RC1</release>
    <api>1.0.0RC1</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2007-11-01</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Main phpcs script can now be run from a CVS checkout without installing the package
    - Added a new CSV report format
      -- Header row indicates what position each element is in
      -- Always use the header row to determine positions rather than assuming the format, as it may change
    - XML and CSV report formats now contain information about which column the error occurred at
      -- Useful if you want to highlight the token that caused the error in a custom application
    - Square bracket tokens now have bracket_opener and bracket_closer set
    - Added new Squiz SemicolonSpacingSniff to throw errors if whitespace is found before a semicolon
    - Added new Squiz ArrayBracketSpacingSniff to throw errors if whitespace is found around square brackets
    - Added new Squiz ObjectOperatorSpacingSniff to throw errors if whitespace is found around object operators
    - Added new Squiz DisallowMultipleAssignmentsSniff to throw errors if multiple assignments are on the same line
    - Added new Squiz ScopeKeywordSpacingSniff to throw errors if there is not a single space after a scope modifier
    - Added new Squiz ObjectInstantiationSniff to throw errors if new objects are not assigned to a variable
    - Added new Squiz FunctionDuplicateArgumentSniff to throw errors if argument is declared multiple times in a function
    - Added new Squiz FunctionOpeningBraceSpaceSniff to ensure there are no blank lines after a function open brace
    - Added new Squiz CommentedOutCodeSniff to warn about comments that looks like they are commented out code blocks
    - Added CyclomaticComplexitySniff to Squiz standard
    - Added NestingLevelSniff to Squiz standard
    - Squiz ForbiddenFunctionsSniff now recommends echo() instead of print()
    - Squiz ValidLogicalOperatorsSniff now recommends ^ instead of xor
    - Squiz SwitchDeclarationSniff now contains more checks
      -- A single space is required after the case keyword
      -- No space is allowed before the colon in a case or default statement
      -- All switch statements now require a default case
      -- Default case must contain a break statement
      -- Empty default case must contain a comment describing why the default is ignored
      -- Empty case statements are not allowed
      -- Case and default statements must not be followed by a blank line
      -- Break statements must be followed by a blank line or the closing brace
      -- There must be no blank line before a break statement
    - Squiz standard is now using the PEAR IncludingFileSniff
    - PEAR ClassCommentSniff no longer complains about unknown tags
    - PEAR FileCommentSniff no longer complains about unknown tags
    - PEAR FileCommentSniff now accepts multiple @copyright tags
    - Squiz BlockCommentSniff now checks that comment starts with a capital letter
    - Squiz InlineCommentSniff now has better checking to ensure comment starts with a capital letter
    - Squiz ClassCommentSniff now checks that short and long comments start with a capital letter
    - Squiz FunctionCommentSniff now checks that short, long and param comments start with a capital letter
    - Squiz VariableCommentSniff now checks that short and long comments start with a capital letter
    - Fixed error with multi-token array indexes in Squiz ArrayDeclarationSniff
    - Fixed error with checking shorthand IF statements without a semicolon in Squiz InlineIfDeclarationSniff
    - Fixed error where constants used as default values in function declarations were seen as type hints
    - Fixed bug #12316 : PEAR is no longer the default standard
    - Fixed bug #12321 : wrong detection of missing function docblock
   </notes>
  </release>
  <release>
   <version>
    <release>0.9.0</release>
    <api>0.9.0</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2007-09-24</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added a config system for setting config data across phpcs runs
    - You can now change the default coding standard from PEAR to something else
      -- Run: phpcs --config-set default_standard [standard]
    - Added new Zend coding standard to check code against the Zend Framework standards
      -- The complete standard is not yet implemented
      -- Specify --standard=Zend to use
      -- Thanks to Johann-Peter Hartmann for the contribution of some sniffs
      -- Thanks to Holger Kral for the Code Analyzer sniff
   </notes>
  </release>
  <release>
   <version>
    <release>0.8.0</release>
    <api>0.8.0</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2007-08-08</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added new XML report format; --report=xml (feature request #11535)
      -- Thanks to Brett Bieber for the patch
    - Added new command line argument --ignore to specify a list of files to skip (feature request #11556)
    - Added PHPCS and MySource coding standards into the core install
    - Scope map no longer gets confused by curly braces that act as string offsets
    - Removed CodeSniffer/SniffException.php as it is no longer used
    - Unit tests can now be run directly from a CVS checkout
    - Made private vars and functions protected in PHP_CodeSniffer class so this package can be overridden
    - Added new Metrics category to Generic coding standard
      -- Contains Cyclomatic Complexity and Nesting Level sniffs
      -- Thanks to Johann-Peter Hartmann for the contribution
    - Added new Generic DisallowTabIndentSniff to throw errors if tabs are used for indentation (feature request #11738)
      -- PEAR and Squiz standards use this new sniff to throw more specific indentation errors
    - Generic MultipleStatementAlignmentSniff has new private var to set a padding size limit (feature request #11555)
    - Generic MultipleStatementAlignmentSniff can now handle assignments that span multiple lines (feature request #11561)
    - Generic LineLengthSniff now has a max line length after which errors are thrown instead of warnings
      -- BC BREAK: Override the protected member var absoluteLineLimit and set it to zero in custom LineLength sniffs
      -- Thanks to Johann-Peter Hartmann for the contribution
    - Comment sniff errors about incorrect tag orders are now more descriptive (feature request #11693)
    - Fixed bug #11473 : Invalid CamelCaps name when numbers used in names
   </notes>
  </release>
  <release>
   <version>
    <release>0.7.0</release>
    <api>0.7.0</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2007-07-02</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - BC BREAK: EOL character is now auto-detected and used instead of hard-coded \n
      -- Pattern sniffs must now specify "EOL" instead of "\n" or "\r\n" to use auto-detection
      -- Please use $phpcsFile->eolChar to check for newlines instead of hard-coding "\n" or "\r\n"
      -- Comment parser classes now require you to pass $phpcsFile as an additional argument
    - BC BREAK: Included and excluded sniffs now require .php extension
      -- Please update your coding standard classes and add ".php" to all sniff entries
      -- See CodeSniffer/Standards/PEAR/PEARCodingStandard.php for an example

    - Fixed error where including a directory of sniffs in a coding standard class did not work
    - Coding standard classes can now specify a list of sniffs to exclude as well as include (feature request #11056)
    - Two uppercase characters can now be placed side-by-side in class names in Squiz ValidClassNameSniff
    - SVN tags now allowed in PEAR file doc blocks (feature request #11038)
      -- Thanks to Torsten Roehr for the patch
    - Private methods in commenting sniffs and comment parser are now protected (feature request #11087)
    - Added Generic LineEndingsSniff to check the EOL character of a file
    - PEAR standard now only throws one error per file for incorrect line endings (eg. /r/n)
    - Command line arg -v now shows number of registered sniffs
    - Command line arg -vvv now shows list of registered sniffs
    - Squiz ControlStructureSpacingSniff no longer throws errors if the control structure is at the end of the script
    - Squiz FunctionCommentSniff now throws error for "return void" if function has return statement
    - Squiz FunctionCommentSniff now throws error for functions that return void but specify something else
    - Squiz ValidVariableNameSniff now allows multiple uppercase letters in a row
    - Squiz ForEachLoopDeclarationSniff now throws error for AS keyword not being lowercase
    - Squiz SwitchDeclarationSniff now throws errors for CASE/DEFAULT/BREAK keywords not being lowercase
    - Squiz ArrayDeclarationSniff now handles multi-token array values when checking alignment
    - Squiz standard now enforces a space after cast tokens
    - Generic MultipleStatementAlignmentSniff no longer gets confused by assignments inside FOR conditions
    - Generic MultipleStatementAlignmentSniff no longer gets confused by the use of list()
    - Added Generic SpaceAfterCastSniff to ensure there is a single space after a cast token
    - Added Generic NoSpaceAfterCastSniff to ensure there is no whitespace after a cast token
    - Added PEAR ClassDeclarationSniff to ensure the opening brace of a class is on the line after the keyword
    - Added Squiz ScopeClosingBraceSniff to ensure closing braces are aligned correctly
    - Added Squiz EvalSniff to discourage the use of eval()
    - Added Squiz LowercaseDeclarationSniff to ensure all declaration keywords are lowercase
    - Added Squiz LowercaseClassKeywordsSniff to ensure all class declaration keywords are lowercase
    - Added Squiz LowercaseFunctionKeywordsSniff to ensure all function declaration keywords are lowercase
    - Added Squiz LowercasePHPFunctionsSniff to ensure all calls to inbuilt PHP functions are lowercase
    - Added Squiz CastSpacingSniff to ensure cast statements dont contain whitespace
    - Errors no longer thrown when checking 0 length files with verbosity on
    - Fixed bug #11105 : getIncludedSniffs() not working anymore
      -- Thanks to Blair Robertson for the patch
    - Fixed bug #11120 : Uninitialized string offset in AbstractParser.php on line 200
   </notes>
  </release>
  <release>
   <version>
    <release>0.6.0</release>
    <api>0.6.0</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2007-05-15</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - The number of errors and warnings found is now shown for each file while checking the file if verbosity is enabled
    - Now using PHP_EOL instead of hard-coded \n so output looks good on Windows (feature request #10761)
      - Thanks to Carsten Wiedmann for the patch.
    - phpcs now exits with status 0 (no errors) or 1 (errors found) (feature request #10348)
    - Added new -l command line argument to stop recursion into directories (feature request #10979)
    - Fixed variable name error causing incorrect error message in Squiz ValidVariableNameSniff
    - Fixed bug #10757 : Error in ControlSignatureSniff
    - Fixed bugs #10751, #10777 : Sniffer class paths handled incorrectly in Windows
      - Thanks to Carsten Wiedmann for the patch.
    - Fixed bug #10961 : Error "Last parameter comment requires a blank newline after it" thrown
    - Fixed bug #10983 : phpcs outputs notices when checking invalid PHP
    - Fixed bug #10980 : Incorrect warnings for equals sign
   </notes>
  </release>
  <release>
   <version>
    <release>0.5.0</release>
    <api>0.5.0</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2007-04-17</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - BC BREAK: Coding standards now require a class to be added so PHP_CodeSniffer can get information from them
      - Please read the end user docs for info about the new class required for all coding standards

    - Coding standards can now include sniffs from other standards, or whole standards, without writing new sniff files
    - PHP_CodeSniffer_File::isReference() now correctly returns for references in function declarations
    - PHP_CodeSniffer_File::isReference() now returns false if you don't pass it a T_BITWISE_AND token
    - PHP_CodeSniffer_File now stores the absolute path to the file so sniffs can check file locations correctly
    - Fixed undefined index error in AbstractVariableSniff for variables inside an interface function definition
    - Added MemberVarSpacingSniff to Squiz standard to enforce one-line spacing between member vars
    - Add FunctionCommentThrowTagSniff to Squiz standard to check that @throws tags are correct
    - Fixed problems caused by references and type hints in Squiz FunctionDeclarationArgumentSpacingSniff
    - Fixed problems with errors not being thrown for some misaligned @param comments in Squiz FunctionCommentSniff
    - Fixed badly spaced comma error being thrown for "extends" class in Squiz ClassDeclarationSniff
    - Errors no longer thrown for class method names in Generic ForbiddenFunctionsSniff
    - Errors no longer thrown for type hints in front of references in Generic UpperCaseConstantNameSniff
    - Errors no longer thrown for correctly indented buffered lines in Squiz ScopeIndexSniff
    - Errors no longer thrown for user-defined functions named as forbidden functions in Generic ForbiddenFunctionsSniff
    - Errors no longer thrown on __autoload functions in PEAR ValidFunctionNameSniff
    - Errors now thrown for __autoload methods in PEAR ValidFunctionNameSniff
    - Errors now thrown if constructors or destructors have @return tags in Squiz FunctionCommentSniff
    - Errors now thrown if @throws tags dont start with a capital and end with a full stop in Squiz FunctionCommentSniff
    - Errors now thrown for invalid @var tag values in Squiz VariableCommentSniff
    - Errors now thrown for missing doc comment in Squiz VariableCommentSniff
    - Errors now thrown for unspaced operators in FOR loop declarations in Squiz OperatorSpacingSniff
    - Errors now thrown for using ob_get_clean/flush functions to end buffers in Squiz OutputBufferingIndentSniff
    - Errors now thrown for all missing member variable comments in Squiz VariableCommentSniff
   </notes>
  </release>
  <release>
   <version>
    <release>0.4.0</release>
    <api>0.4.0</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2007-02-19</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Standard name specified with --standard command line argument is no longer case sensitive
    - Long error and warning messages are now wrapped to 80 characters in the full error report (thanks Endre Czirbesz)
    - Shortened a lot of error and warning messages so they don't take up so much room
    - Squiz FunctionCommentSniff now checks that param comments start with a capital letter and end with a full stop
    - Squiz FunctionSpacingSniff now reports incorrect lines below function on closing brace, not function keyword
    - Squiz FileCommentSniff now checks that there are no blank lines between the open PHP tag and the comment
    - PHP_CodeSniffer_File::isReference() now returns correctly when checking refs on right side of =>
    - Fixed incorrect error with switch closing brace in Squiz SwitchDeclarationSniff
    - Fixed missing error when multiple statements are not aligned correctly with object operators
    - Fixed incorrect errors for some PHP special variables in Squiz ValidVariableNameSniff
    - Fixed incorrect errors for arrays that only contain other arrays in Squiz ArrayDeclarationSniff
    - Fixed bug #9844 : throw new Exception(\n accidentally reported as error but it ain't
   </notes>
  </release>
  <release>
   <version>
    <release>0.3.0</release>
    <api>0.3.0</api>
   </version>
   <stability>
    <release>beta</release>
    <api>beta</api>
   </stability>
   <date>2007-01-11</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Updated package.xml to version 2
    - Specifying coding standard on command line is now optional, even if you have multiple standards installed
      - PHP_CodeSniffer uses the PEAR coding standard by default if no standard is specified
    - New command line option, --extensions, to specify a comma separated list of file extensions to check
    - Converted all unit tests to PHPUnit 3 format
    - Added new coding standard, Squiz, that can be used as an alternative to PEAR
      - also contains more examples of sniffs
      - some may be moved into the Generic coding standard if required
    - Added MultipleStatementAlignmentSniff to Generic standard
    - Added ScopeIndentSniff to Generic standard
    - Added ForbiddenFunctionsSniff to Generic standard
    - Added FileCommentSniff to PEAR standard
    - Added ClassCommentSniff to PEAR standard
    - Added FunctionCommentSniff to PEAR standard
    - Change MultipleStatementSniff to MultipleStatementAlignmentSniff in PEAR standard
    - Replaced Methods directory with Functions directory in Generic and PEAR standards
      - also renamed some of the sniffs in those directories
    - Updated file, class and method comments for all files
    - Fixed bug #9274 : nested_parenthesis element not set for open and close parenthesis tokens
    - Fixed bug #9411 : too few pattern characters cause incorrect error report
   </notes>
  </release>
  <release>
   <version>
    <release>0.2.1</release>
    <api>0.2.1</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2006-11-09</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Fixed bug #9274 : nested_parenthesis element not set for open and close parenthesis tokens
   </notes>
  </release>
  <release>
   <version>
    <release>0.2.0</release>
    <api>0.2.0</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2006-10-13</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added a generic standards package that will contain generic sniffs to be used in specific coding standards
      - thanks to Frederic Poeydomenge for the idea
    - Changed PEAR standard to use generic sniffs where available
    - Added LowerCaseConstantSniff to Generic standard
    - Added UpperCaseConstantSniff to Generic standard
    - Added DisallowShortOpenTagSniff to Generic standard
    - Added LineLengthSniff to Generic standard
    - Added UpperCaseConstantNameSniff to Generic standard
    - Added OpeningMethodBraceBsdAllmanSniff to Generic standard (contrib by Frederic Poeydomenge)
    - Added OpeningMethodBraceKernighanRitchieSniff to Generic standard (contrib by Frederic Poeydomenge)
    - Added framework for core PHP_CodeSniffer unit tests
    - Added unit test for PHP_CodeSniffer:isCamelCaps method
    - ScopeClosingBraceSniff now checks indentation of BREAK statements
    - Added new command line arg (-vv) to show developer debug output
    - Fixed some coding standard errors
    - Fixed bug #8834 : Massive memory consumption
    - Fixed bug #8836 : path case issues in package.xml
    - Fixed bug #8843 : confusion on nested switch()
    - Fixed bug #8841 : comments taken as whitespace
    - Fixed bug #8884 : another problem with nested switch() statements
   </notes>
  </release>
  <release>
   <version>
    <release>0.1.1</release>
    <api>0.1.1</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2006-09-25</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added unit tests for all PEAR sniffs
    - Exception class now extends from PEAR_Exception
    - Fixed summary report so files without errors but with warnings are not shown when warnings are hidden
   </notes>
  </release>
  <release>
   <version>
    <release>0.1.0</release>
    <api>0.1.0</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2006-09-19</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Reorganised package contents to conform to PEAR standards
    - Changed version numbering to conform to PEAR standards
    - Removed duplicate require_once() of Exception.php from CodeSniffer.php
   </notes>
  </release>
  <release>
   <version>
    <release>0.0.5</release>
    <api>0.0.5</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2006-09-18</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Fixed .bat file for situation where php.ini cannot be found so include_path is not set
   </notes>
  </release>
  <release>
   <version>
    <release>0.0.4</release>
    <api>0.0.4</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2006-08-28</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added .bat file for easier running of PHP_CodeSniffer on Windows
    - Sniff that checks method names now works for PHP4 style code where there is no scope keyword
    - Sniff that checks method names now works for PHP4 style constructors
    - Sniff that checks method names no longer incorrectly reports error with magic methods
    - Sniff that checks method names now reports errors with non-magic methods prefixed with __
    - Sniff that checks for constant names no longer incorrectly reports errors with heredoc strings
    - Sniff that checks for constant names no longer incorrectly reports errors with created objects
    - Sniff that checks indentation no longer incorrectly reports errors with heredoc strings
    - Sniff that checks indentation now correctly reports errors with improperly indented multi-line strings
    - Sniff that checks function declarations now checks for spaces before and after an equals sign for default values
    - Sniff that checks function declarations no longer incorrectly reports errors with multi-line declarations
    - Sniff that checks included code no longer incorrectly reports errors when return value is used conditionally
    - Sniff that checks opening brace of function no longer incorrectly reports errors with multi-line declarations
    - Sniff that checks spacing after commas in function calls no longer reports too many errors for some code
    - Sniff that checks control structure declarations now gives more descriptive error message
   </notes>
  </release>
  <release>
   <version>
    <release>0.0.3</release>
    <api>0.0.3</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2006-08-22</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Added sniff to check for invalid class and interface names
    - Added sniff to check for invalid function and method names
    - Added sniff to warn if line is greater than 85 characters
    - Added sniff to check that function calls are in the correct format
    - Fixed error where comments were not allowed on the same line as a control structure declaration
    - Added command line arg to print current version (--version)
   </notes>
  </release>
  <release>
   <version>
    <release>0.0.2</release>
    <api>0.0.2</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2006-07-25</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>
    - Removed the including of checked files to stop errors caused by parsing them
    - Removed the use of reflection so checked files do not have to be included
    - Memory usage has been greatly reduced
    - Much faster tokenising and checking times
    - Reworked the PEAR coding standard sniffs (much faster now)
    - Fix some bugs with the PEAR scope indentation standard
    - Better checking for installed coding standards
    - Can now accept multiple files and dirs on the command line
    - Added an option to list installed coding standards
    - Added an option to print a summary report (number of errors and warnings shown for each file)
    - Added an option to hide warnings from reports
    - Added an option to print verbose output (so you know what is going on)
    - Reordered command line args to put switches first (although order is not enforced)
    - Switches can now be specified together (eg. php -nv) as well as separately (phpcs -n -v)
   </notes>
  </release>
  <release>
   <version>
    <release>0.0.1</release>
    <api>0.0.1</api>
   </version>
   <stability>
    <release>alpha</release>
    <api>alpha</api>
   </stability>
   <date>2006-07-19</date>
   <license uri="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt">BSD License</license>
   <notes>Initial preview release.</notes>
  </release>
 </changelog>
</package>
