Skip to content

Commit

Permalink
Fixed bug #2848 : PSR12.Files.FileHeader false positive for file with…
Browse files Browse the repository at this point in the history
… mixed PHP and HTML and no file header
  • Loading branch information
gsherwood committed Feb 2, 2020
1 parent dceec07 commit 1cfba97
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 58 deletions.
60 changes: 5 additions & 55 deletions package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,68 +17,16 @@ http://pear.php.net/dtd/package-2.0.xsd">
<date>2020-01-31</date>
<time>09:20:00</time>
<version>
<release>3.5.4</release>
<api>3.5.4</api>
<release>3.5.5</release>
<api>3.5.5</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>
- 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
- Fixed bug #2848 : PSR12.Files.FileHeader false positive for file with mixed PHP and HTML and no file header
</notes>
<contents>
<dir name="/">
Expand Down Expand Up @@ -1145,6 +1093,8 @@ http://pear.php.net/dtd/package-2.0.xsd">
<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.php" role="test" />
<file baseinstalldir="PHP/CodeSniffer" name="ImportStatementUnitTest.inc" role="test" />
<file baseinstalldir="PHP/CodeSniffer" name="ImportStatementUnitTest.inc.fixed" role="test" />
Expand Down
2 changes: 1 addition & 1 deletion src/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class Config
*
* @var string
*/
const VERSION = '3.5.4';
const VERSION = '3.5.5';

/**
* Package stability; either stable, beta or alpha.
Expand Down
18 changes: 16 additions & 2 deletions src/Standards/PSR12/Sniffs/Files/FileHeaderSniff.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,22 @@ public function process(File $phpcsFile, $stackPtr)
} while ($openTag !== false);

if ($openTag === false) {
// We never found a proper file header
// so use the first one as the header.
// We never found a proper file header.
// If the file has multiple PHP open tags, we know
// that it must be a mix of PHP and HTML (or similar)
// so the header rules do not apply.
if (count($possibleHeaders) > 1) {
return $phpcsFile->numTokens;
}

// There is only one possible header.
// If it is the first content in the file, it technically
// serves as the file header, and the open tag needs to
// have a newline after it. Otherwise, ignore it.
if ($stackPtr > 0) {
return $phpcsFile->numTokens;
}

$openTag = $stackPtr;
} else if (count($possibleHeaders) > 1) {
// There are other PHP blocks before the file header.
Expand Down
7 changes: 7 additions & 0 deletions src/Standards/PSR12/Tests/Files/FileHeaderUnitTest.14.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php if (array_key_exists('user', $_SESSION)) : ?>
<li><a href="/user/update.php">My page</a></li>
<li><a href="/post/write.php">Write</a></li>
<li><a href="/auth/logout.php">Sign out</a></li>
<?php else : ?>
<li><a href="/auth/login.php">Sign in</a></li>
<?php endif; ?>
5 changes: 5 additions & 0 deletions src/Standards/PSR12/Tests/Files/FileHeaderUnitTest.15.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<html>
<?php
echo $html;
?>
</html>

0 comments on commit 1cfba97

Please sign in to comment.