From aaffdbcc670c4cbff8efbac6c9e37aaf343625c4 Mon Sep 17 00:00:00 2001 From: Brian Henry Date: Thu, 10 Oct 2024 13:16:48 -0700 Subject: [PATCH] =?UTF-8?q?Fix=20#119=20=E2=80=93=20only=20discover=20symb?= =?UTF-8?q?ols=20in=20PHP=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/FileScanner.php | 4 +++ tests/Issues/StraussIssue119Test.php | 50 ++++++++++++++++++++++++++++ tests/Unit/FileScannerTest.php | 20 +++++++++++ 3 files changed, 74 insertions(+) create mode 100644 tests/Issues/StraussIssue119Test.php diff --git a/src/FileScanner.php b/src/FileScanner.php index fd6c2b24..d201177d 100644 --- a/src/FileScanner.php +++ b/src/FileScanner.php @@ -58,6 +58,10 @@ public function __construct(StraussConfig $config) public function findInFiles(DiscoveredFiles $files): DiscoveredSymbols { foreach ($files->getFiles() as $file) { + if (!$file->isPhpFile()) { + continue; + } + $this->find($file->getContents(), $file); } diff --git a/tests/Issues/StraussIssue119Test.php b/tests/Issues/StraussIssue119Test.php new file mode 100644 index 00000000..0100cf93 --- /dev/null +++ b/tests/Issues/StraussIssue119Test.php @@ -0,0 +1,50 @@ +testsWorkingDir); + + file_put_contents($this->testsWorkingDir . '/composer.json', $composerJsonString); + + exec('composer install'); + + $this->runStrauss(); + + $php_string = file_get_contents($this->testsWorkingDir . '/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/Attribute.php'); + + self::assertStringNotContainsString('Company_Project_final class Attribute', $php_string); + } +} diff --git a/tests/Unit/FileScannerTest.php b/tests/Unit/FileScannerTest.php index e1364985..77ddd3bb 100644 --- a/tests/Unit/FileScannerTest.php +++ b/tests/Unit/FileScannerTest.php @@ -43,6 +43,7 @@ class MyClass { $sut = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($validPhp); $file->shouldReceive('getTargetRelativePath'); @@ -77,6 +78,7 @@ class MyClass { $sut = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($validPhp); $file->shouldReceive('getTargetRelativePath'); @@ -112,6 +114,7 @@ class MyClass { $sut = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($validPhp); $file->shouldReceive('getTargetRelativePath'); @@ -155,6 +158,7 @@ class MyOtherClass { $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($validPhp); $file->shouldReceive('getTargetRelativePath'); @@ -212,6 +216,7 @@ public function render($config, $allowed = true, $render_controls = true) try { $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($validPhp); $file->shouldReceive('getTargetRelativePath'); @@ -250,6 +255,7 @@ class MyOtherClass { $sut = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($validPhp); $file->shouldReceive('getTargetRelativePath'); @@ -285,6 +291,7 @@ class Whatever { $fileScanner = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($contents); $file->shouldReceive('getTargetRelativePath'); @@ -321,6 +328,7 @@ class Whatever { $fileScanner = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($contents); $file->shouldReceive('getTargetRelativePath'); @@ -360,6 +368,7 @@ class Whatever { $fileScanner = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($contents); $file->shouldReceive('getTargetRelativePath'); @@ -394,6 +403,7 @@ public function test_it_does_not_treat_multiline_comments_on_one_line_as_classes $fileScanner = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($contents); $file->shouldReceive('getTargetRelativePath'); @@ -431,6 +441,7 @@ class Whatever_Ever { $fileScanner = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($contents); $file->shouldReceive('getTargetRelativePath'); @@ -462,6 +473,7 @@ public function test_it_parses_classes_after_semicolon() $fileScanner = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($contents); $file->shouldReceive('getTargetRelativePath'); @@ -496,6 +508,7 @@ class WP_Dependency_Installer { $fileScanner = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($contents); $file->shouldReceive('getTargetRelativePath'); @@ -539,6 +552,7 @@ class B_Class { } $fileScanner = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($contents); $file->shouldReceive('getTargetRelativePath'); @@ -566,6 +580,7 @@ public function testExcludePackagesFromPrefix() $composerPackage->method('getPackageName')->willReturn('brianhenryie/pdfhelpers'); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn(''); $files = \Mockery::mock(DiscoveredFiles::class)->makePartial(); @@ -590,6 +605,7 @@ public function testExcludeFilePatternsFromPrefix() // $file = new File($composerPackage, 'path/to/file', 'irrelevantPath'); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn(''); $files = \Mockery::mock(DiscoveredFiles::class)->makePartial(); @@ -624,6 +640,7 @@ class A_Class { } $fileScanner = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($contents); $file->shouldReceive('getTargetRelativePath'); @@ -676,6 +693,7 @@ public static function objclone($object) $fileScanner = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($contents); $file->shouldReceive('getTargetRelativePath'); @@ -717,6 +735,7 @@ class FPDF $fileScanner = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($contents); $file->shouldReceive('getTargetRelativePath'); @@ -762,6 +781,7 @@ final class WPGraphQL { $fileScanner = new FileScanner($config); $file = \Mockery::mock(File::class); + $file->shouldReceive('isPhpFile')->andReturnTrue(); $file->shouldReceive('getContents')->andReturn($contents); $file->shouldReceive('getTargetRelativePath');