Skip to content

Commit

Permalink
Add else and elseif statement as forbidden (#95)
Browse files Browse the repository at this point in the history
* Add else and elseif statement as forbidden
  • Loading branch information
dominikvoda authored Sep 11, 2024
1 parent 291077d commit 2b9fdfa
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 0 deletions.
3 changes: 3 additions & 0 deletions default-ecs.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use BrandEmbassyCodingStandard\Sniffs\Classes\TraitUsePositionSniff;
use BrandEmbassyCodingStandard\Sniffs\Classes\TraitUseSpacingSniff;
use BrandEmbassyCodingStandard\Sniffs\Commenting\FunctionCommentSniff;
use BrandEmbassyCodingStandard\Sniffs\ForbiddenElseStatementSniff;
use BrandEmbassyCodingStandard\Sniffs\NamingConvention\CamelCapsFunctionNameSniff;
use BrandEmbassyCodingStandard\Sniffs\WhiteSpace\BlankLineBeforeReturnSniff;
use BrandEmbassyCodingStandard\Sniffs\WhiteSpace\BlankLineBeforeThrowSniff;
Expand Down Expand Up @@ -948,6 +949,8 @@
],
);

$ecsConfig->rule(ForbiddenElseStatementSniff::class);

return [
// Checked by BrandEmbassyCodingStandard.NamingConvention.CamelCapsFunctionName
CamelCapsMethodNameSniff::class,
Expand Down
1 change: 1 addition & 0 deletions ecs.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
__DIR__ . '/src/BrandEmbassyCodingStandard/Sniffs/WhiteSpace/BlankLineBeforeThrowSniff.php',
],
__DIR__ . '/*/__fixtures__/*',
__DIR__ . '/*/__fixtures/*',
];

$ecsConfig->skip(array_merge($defaultSkipList, $skipList));
Expand Down
1 change: 1 addition & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ parameters:
excludePaths:
- src/BrandEmbassyCodingStandard/Sniffs/TypeHints/TypeHintDeclarationSniff.php
- src/BrandEmbassyCodingStandard/*/__fixtures__/*
- src/BrandEmbassyCodingStandard/*/__fixtures/*

Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php declare(strict_types = 1);

namespace BrandEmbassyCodingStandard\Sniffs;

use PHP_CodeSniffer\Files\File;
use PHP_CodeSniffer\Sniffs\Sniff;
use function strtolower;
use const T_ELSE;
use const T_ELSEIF;

/**
* @final
*/
class ForbiddenElseStatementSniff implements Sniff
{
public const CODE_FORBIDDEN_ELSE_STATEMENT_SNIFF = 'ForbiddenElseStatement';


/**
* @return int[]|string[]
*/
public function register(): array
{
return [
T_ELSE,
T_ELSEIF,
];
}


/**
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
*
* @param int $stackPtr
*/
public function process(File $phpcsFile, $stackPtr): void
{
$tokens = $phpcsFile->getTokens();

$statement = strtolower($tokens[$stackPtr]['content']);

$error = 'Use of ' . $statement . ' is forbidden. See: https://github.com/BrandEmbassy/developers-manifest/issues/365.';

$phpcsFile->addError($error, $stackPtr, self::CODE_FORBIDDEN_ELSE_STATEMENT_SNIFF);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php declare(strict_types = 1);

namespace BrandEmbassyCodingStandard\Sniffs;

use SlevomatCodingStandard\Sniffs\TestCase;

/**
* @final
*/
class ForbiddenElseStatementSniffTest extends TestCase
{
public function testErrorIsAdded(): void
{
$file = __DIR__ . '/__fixtures/codeWithElseStatement.php';
require_once $file;

$report = self::checkFile($file);

self::assertSniffError(
$report,
13,
'ForbiddenElseStatement',
'Use of elseif is forbidden.',
);

self::assertSniffError(
$report,
15,
'ForbiddenElseStatement',
'Use of else is forbidden.',
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php declare(strict_types = 1);

namespace BrandEmbassyCodingStandard\Sniffs\__fixtures;

use Mockery\MockInterface;

class CreateMockFunctions
{
private function withNoPhpDoc(): void
{
if (true) {
echo 'bar';
} elseif (true) {
echo 'lol';
} else {
echo 'foo';
}
}
}

0 comments on commit 2b9fdfa

Please sign in to comment.