Skip to content

Commit

Permalink
Add rule about file double extension (.html.twig) (#173)
Browse files Browse the repository at this point in the history
  • Loading branch information
smnandre authored Jan 27, 2024
1 parent c8f4521 commit 546fc3c
Show file tree
Hide file tree
Showing 10 changed files with 89 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,4 @@
- Twig
- DirectoryNameRule
- FileNameRule
- FileExtensionRule
38 changes: 38 additions & 0 deletions src/Rules/File/FileExtensionRule.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

declare(strict_types=1);

namespace TwigCsFixer\Rules\File;

use TwigCsFixer\File\FileHelper;
use TwigCsFixer\Rules\AbstractRule;

/**
* Ensures file name uses two extensions (e.g. index.html.twig).
*/
final class FileExtensionRule extends AbstractRule
{
protected function process(int $tokenPosition, array $tokens): void
{
if (0 !== $tokenPosition) {
return;
}

$token = $tokens[$tokenPosition];
$fileName = FileHelper::getFileName($token->getFilename());
$fileParts = explode('.', $fileName ?? '');

$fileExtension = array_pop($fileParts);
if ('twig' !== $fileExtension) {
return;
}

$formatExtension = array_pop($fileParts);
if ([] === $fileParts || null === $formatExtension) {
$this->addFileError(
sprintf('The file must use two extensions; found ".%s".', $fileExtension),
$token,
);
}
}
}
2 changes: 2 additions & 0 deletions src/Standard/Symfony.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace TwigCsFixer\Standard;

use TwigCsFixer\Rules\File\DirectoryNameRule;
use TwigCsFixer\Rules\File\FileExtensionRule;
use TwigCsFixer\Rules\File\FileNameRule;

/**
Expand All @@ -21,6 +22,7 @@ public function getRules(): array
...(new Twig())->getRules(),
new FileNameRule(baseDirectory: 'templates', ignoredSubDirectories: ['bundles']),
new DirectoryNameRule(baseDirectory: 'templates', ignoredSubDirectories: ['bundles']),
new FileExtensionRule(),
];
}
}
1 change: 1 addition & 0 deletions tests/Rules/File/FileExtension/.dotfile.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Nothing
1 change: 1 addition & 0 deletions tests/Rules/File/FileExtension/.dotfile.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Nothing
41 changes: 41 additions & 0 deletions tests/Rules/File/FileExtension/FileExtensionRuleTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

declare(strict_types=1);

namespace Rules\File\FileExtension;

use TwigCsFixer\Rules\File\FileExtensionRule;
use TwigCsFixer\Tests\Rules\AbstractRuleTestCase;

final class FileExtensionRuleTest extends AbstractRuleTestCase
{
public function testRule(): void
{
$this->checkRule(new FileExtensionRule(), ['FileExtension.Error']);
}

public function testRuleIgnoredFile(): void
{
$this->checkRule(new FileExtensionRule(), [], __DIR__.'/FileExtensionRuleTest.php');
}

public function testRuleValidFile(): void
{
$this->checkRule(new FileExtensionRule(), [], __DIR__.'/file_extension_rule_test.html.twig');
}

public function testRuleValidDotFile(): void
{
$this->checkRule(new FileExtensionRule(), [], __DIR__.'/.dotfile.twig');
}

public function testRuleValidDotFileWithFormatExtension(): void
{
$this->checkRule(new FileExtensionRule(), [], __DIR__.'/.dotfile.html.twig');
}

public function testRuleMissingFormatExtension(): void
{
$this->checkRule(new FileExtensionRule(), ['FileExtension.Error'], __DIR__.'/file_extension_rule_test_missing.twig');
}
}
1 change: 1 addition & 0 deletions tests/Rules/File/FileExtension/FileExtensionRuleTest.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Nothing
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Nothing
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Nothing
2 changes: 2 additions & 0 deletions tests/Standard/SymfonyTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use PHPUnit\Framework\TestCase;
use TwigCsFixer\Rules\Delimiter\DelimiterSpacingRule;
use TwigCsFixer\Rules\File\DirectoryNameRule;
use TwigCsFixer\Rules\File\FileExtensionRule;
use TwigCsFixer\Rules\File\FileNameRule;
use TwigCsFixer\Rules\Operator\OperatorNameSpacingRule;
use TwigCsFixer\Rules\Operator\OperatorSpacingRule;
Expand All @@ -28,6 +29,7 @@ public function testGetRules(): void
new VariableNameRule(),
new FileNameRule(baseDirectory: 'templates', ignoredSubDirectories: ['bundles']),
new DirectoryNameRule(baseDirectory: 'templates', ignoredSubDirectories: ['bundles']),
new FileExtensionRule(),
], $standard->getRules());
}
}

0 comments on commit 546fc3c

Please sign in to comment.