Skip to content

Commit 18ff2e2

Browse files
authored
Merge pull request #15 from sirbrillig/add/interface-support
Treat Interfaces as classes
2 parents 32eb3ee + 28e3c41 commit 18ff2e2

File tree

4 files changed

+46
-3
lines changed

4 files changed

+46
-3
lines changed

ImportDetection/SniffHelpers.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ public function isSymbolADefinition(File $phpcsFile, Symbol $symbol): bool {
208208
public function isTokenADefinition(array $token): bool {
209209
// Note: this does not handle use or define
210210
$type = $token['type'] ?? '';
211-
$definitionTypes = ['T_CLASS', 'T_FUNCTION', 'T_CONST'];
211+
$definitionTypes = ['T_CLASS', 'T_FUNCTION', 'T_CONST', 'T_INTERFACE'];
212212
return in_array($type, $definitionTypes, true);
213213
}
214214

ImportDetection/Sniffs/Imports/RequireImportsSniff.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,13 +190,13 @@ private function isClassImported(File $phpcsFile, string $name): bool {
190190
}
191191

192192
private function isClassDefined(File $phpcsFile, string $className): bool {
193-
$classPtr = $phpcsFile->findNext([T_CLASS], 0);
193+
$classPtr = $phpcsFile->findNext([T_CLASS, T_INTERFACE], 0);
194194
while ($classPtr) {
195195
$thisClassName = $phpcsFile->getDeclarationName($classPtr);
196196
if ($className === $thisClassName) {
197197
return true;
198198
}
199-
$classPtr = $phpcsFile->findNext([T_CLASS], $classPtr + 1);
199+
$classPtr = $phpcsFile->findNext([T_CLASS, T_INTERFACE], $classPtr + 1);
200200
}
201201
return false;
202202
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
// Declare the interface 'iTemplate'
4+
interface iTemplate
5+
{
6+
public function setVariable($name, $var);
7+
public function getHtml($template);
8+
}
9+
10+
// Implement the interface
11+
// This will work
12+
class Template implements iTemplate
13+
{
14+
private $vars = array();
15+
16+
public function setVariable($name, $var)
17+
{
18+
$this->vars[$name] = $var;
19+
}
20+
21+
public function getHtml($template)
22+
{
23+
foreach($this->vars as $name => $value) {
24+
$template = str_replace('{' . $name . '}', $value, $template);
25+
}
26+
27+
return $template;
28+
}
29+
}
30+
31+
class BadClass implements BadTemplate {
32+
}

tests/Sniffs/Imports/RequireImportsSniffTest.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,17 @@ public function testRequireImportsSniffCountsTraitUseAsUsage() {
100100
$this->assertEquals($expectedLines, $lines);
101101
}
102102

103+
public function testRequireImportsSniffWorksWithInterfaces() {
104+
$fixtureFile = __DIR__ . '/InterfaceFixture.php';
105+
$sniffFile = __DIR__ . '/../../../ImportDetection/Sniffs/Imports/RequireImportsSniff.php';
106+
$helper = new SniffTestHelper();
107+
$phpcsFile = $helper->prepareLocalFileForSniffs($sniffFile, $fixtureFile);
108+
$phpcsFile->process();
109+
$lines = $helper->getWarningLineNumbersFromFile($phpcsFile);
110+
$expectedLines = [31];
111+
$this->assertEquals($expectedLines, $lines);
112+
}
113+
103114
public function testRequireImportsDoesNotBleedToMultipleFiles() {
104115
$fixtureFile = __DIR__ . '/MultipleFilesFixtures';
105116
$sniffFile = __DIR__ . '/../../../ImportDetection/Sniffs/Imports/RequireImportsSniff.php';

0 commit comments

Comments
 (0)