8000 use an EOL-agnostic approach to parse class uses · symfony/symfony@e113bd2 · GitHub
[go: up one dir, main page]

Skip to content

Commit e113bd2

Browse files
committed
use an EOL-agnostic approach to parse class uses
1 parent 12ccba0 commit e113bd2

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace Symfony\Component\TypeInfo\Tests\Fixtures;
4+
5+
use Symfony\Component\TypeInfo\Type;
6+
use \DateTimeInterface;
7+
use \DateTimeImmutable as DateTime;
8+
9+
final class DummyWithUsesWindowsLineEndings
10+
{
11+
private DateTimeInterface $createdAt;
12+
13+
public function setCreatedAt(DateTime $createdAt): void
14+
{
15+
$this->createdAt = $createdAt;
16+
}
17+
18+
public function getType(): Type
19+
{
20+
throw new \LogicException('Should not be called.');
21+
}
22+
}

src/Symfony/Component/TypeInfo/Tests/TypeContext/TypeContextFactoryTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Symfony\Component\TypeInfo\Tests\Fixtures\Dummy;
1717
use Symfony\Component\TypeInfo\Tests\Fixtures\DummyWithTemplates;
1818
use Symfony\Component\TypeInfo\Tests\Fixtures\DummyWithUses;
19+
use Symfony\Component\TypeInfo\Tests\Fixtures\DummyWithUsesWindowsLineEndings;
1920
use Symfony\Component\TypeInfo\Type;
2021
use Symfony\Component\TypeInfo\TypeContext\TypeContextFactory;
2122
use Symfony\Component\TypeInfo\TypeResolver\StringTypeResolver;
@@ -82,6 +83,22 @@ public function testCollectUses()
8283
$this->assertEquals($uses, $this->typeContextFactory->createFromReflection(new \ReflectionParameter([DummyWithUses::class, 'setCreatedAt'], 'createdAt'))->uses);
8384
}
8485

86+
public function testCollectUsesWindowsLineEndings()
87+
{
88+
$uses = [
89+
'Type' => Type::class,
90+
\DateTimeInterface::class => '\\'.\DateTimeInterface::class,
91+
'DateTime' => '\\'.\DateTimeImmutable::class,
92+
];
93+
94+
$this->assertSame($uses, $this->typeContextFactory->createFromClassName(DummyWithUsesWindowsLineEndings::class)->uses);
95+
96+
$this->assertEquals($uses, $this->typeContextFactory->createFromReflection(new \ReflectionClass(DummyWithUsesWindowsLineEndings::class))->uses);
97+
$this->assertEquals($uses, $this->typeContextFactory->createFromReflection(new \ReflectionProperty(DummyWithUsesWindowsLineEndings::class, 'createdAt'))->uses);
98+
$this->assertEquals($uses, $this->typeContextFactory->createFromReflection(new \ReflectionMethod(DummyWithUsesWindowsLineEndings::class, 'setCreatedAt'))->uses);
99+
$this->assertEquals($uses, $this->typeContextFactory->createFromReflection(new \ReflectionParameter([DummyWithUsesWindowsLineEndings::class, 'setCreatedAt'], 'createdAt'))->uses);
100+
}
101+
85102
public function testCollectTemplates()
86103
{
87104
$this->assertEquals([], $this->typeContextFactory->createFromClassName(Dummy::class)->templates);

src/Symfony/Component/TypeInfo/TypeContext/TypeContextFactory.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ private function collectUses(\ReflectionClass $reflection): array
116116
return [];
117117
}
118118

119-
if (false === $lines = @file($fileName)) {
119+
if (false === $lines = @file($fileName, FILE_IGNORE_NEW_LINES)) {
120120
throw new RuntimeException(\sprintf('Unable to read file "%s".', $fileName));
121121
}
122122

@@ -126,7 +126,7 @@ private function collectUses(\ReflectionClass $reflection): array
126126
foreach ($lines as $line) {
127127
if (str_starts_with($line, 'use ')) {
128128
$inUseSection = true;
129-
$use = explode(' as ', substr($line, 4, -2), 2);
129+
$use = explode(' as ', substr($line, 4, -1), 2);
130130

131131
$alias = 1 === \count($use) ? substr($use[0], false !== ($p = strrpos($use[0], '\\')) ? 1 + $p : 0) : $use[1];
132132
$uses[$alias] = $use[0];

0 commit comments

Comments
 (0)
0