1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-27 04:45:20 +01:00

Fixed ignoreTypeStats & useStrictTypes flag value detection for directories in config

This commit is contained in:
S.M. Ataur Rahman 2021-12-18 11:57:20 +06:00
parent e9ad61e269
commit e408abf119
2 changed files with 70 additions and 13 deletions

View File

@ -111,12 +111,8 @@ class FileFilter
/** @var array $directory */
foreach ($config['directory'] as $directory) {
$directory_path = (string) ($directory['name'] ?? '');
$ignore_type_stats = strtolower(
isset($directory['ignoreTypeStats']) ? (string) $directory['ignoreTypeStats'] : ''
) === 'true';
$declare_strict_types = strtolower(
isset($directory['useStrictTypes']) ? (string) $directory['useStrictTypes'] : ''
) === 'true';
$ignore_type_stats = (bool) ($directory['ignoreTypeStats'] ?? false);
$declare_strict_types = (bool) ($directory['useStrictTypes'] ?? false);
if ($directory_path[0] === '/' && DIRECTORY_SEPARATOR === '/') {
$prospective_directory_path = $directory_path;
@ -350,13 +346,8 @@ class FileFilter
foreach ($e->directory as $directory) {
$config['directory'][] = [
'name' => (string) $directory['name'],
'ignoreTypeStats' => strtolower(
isset($directory['ignoreTypeStats']) ? (string) $directory['ignoreTypeStats'] : ''
) === 'true',
'useStrictTypes' => strtolower(
isset($directory['useStrictTypes']) ? (string) $directory['useStrictTypes'] : ''
) === 'true',
'ignoreTypeStats' => strtolower((string) ($directory['ignoreTypeStats'] ?? '')) === 'true',
'useStrictTypes' => strtolower((string) ($directory['useStrictTypes'] ?? '')) === 'true',
];
}
}

View File

@ -1483,4 +1483,70 @@ class ConfigTest extends TestCase
self::assertSame(get_class($analyzerMock), $config->getFiletypeAnalyzers()[$extension] ?? null);
self::assertNull($expectedExceptionCode, 'Expected exception code was not thrown');
}
public function testTypeStatsForFileReporting(): void
{
$this->project_analyzer = $this->getProjectAnalyzerWithConfig(
Config::loadFromXML(
(string) getcwd(),
'<?xml version="1.0"?>
<psalm>
<projectFiles>
<directory ignoreTypeStats="true" name="src/Psalm/Config" />
<directory ignoreTypeStats="1" name="src/Psalm/Internal" />
<directory ignoreTypeStats="true1" name="src/Psalm/Issue" />
<directory ignoreTypeStats="false" name="src/Psalm/Node" />
<directory ignoreTypeStats="invalid" name="src/Psalm/Plugin" />
<directory ignoreTypeStats="0" name="src/Psalm/Progress" />
<directory ignoreTypeStats="" name="src/Psalm/Report" />
<directory name="src/Psalm/SourceControl" />
</projectFiles>
</psalm>'
)
);
$config = $this->project_analyzer->getConfig();
$this->assertFalse($config->reportTypeStatsForFile(realpath('src/Psalm/Config') . DIRECTORY_SEPARATOR));
$this->assertTrue($config->reportTypeStatsForFile(realpath('src/Psalm/Internal') . DIRECTORY_SEPARATOR));
$this->assertTrue($config->reportTypeStatsForFile(realpath('src/Psalm/Issue') . DIRECTORY_SEPARATOR));
$this->assertTrue($config->reportTypeStatsForFile(realpath('src/Psalm/Node') . DIRECTORY_SEPARATOR));
$this->assertTrue($config->reportTypeStatsForFile(realpath('src/Psalm/Plugin') . DIRECTORY_SEPARATOR));
$this->assertTrue($config->reportTypeStatsForFile(realpath('src/Psalm/Progress') . DIRECTORY_SEPARATOR));
$this->assertTrue($config->reportTypeStatsForFile(realpath('src/Psalm/Report') . DIRECTORY_SEPARATOR));
$this->assertTrue($config->reportTypeStatsForFile(realpath('src/Psalm/SourceControl') . DIRECTORY_SEPARATOR));
}
public function testStrictTypesForFileReporting(): void
{
$this->project_analyzer = $this->getProjectAnalyzerWithConfig(
Config::loadFromXML(
(string) getcwd(),
'<?xml version="1.0"?>
<psalm>
<projectFiles>
<directory useStrictTypes="true" name="src/Psalm/Config" />
<directory useStrictTypes="1" name="src/Psalm/Internal" />
<directory useStrictTypes="true1" name="src/Psalm/Issue" />
<directory useStrictTypes="false" name="src/Psalm/Node" />
<directory useStrictTypes="invalid" name="src/Psalm/Plugin" />
<directory useStrictTypes="0" name="src/Psalm/Progress" />
<directory useStrictTypes="" name="src/Psalm/Report" />
<directory name="src/Psalm/SourceControl" />
</projectFiles>
</psalm>'
)
);
$config = $this->project_analyzer->getConfig();
$this->assertTrue($config->useStrictTypesForFile(realpath('src/Psalm/Config') . DIRECTORY_SEPARATOR));
$this->assertFalse($config->useStrictTypesForFile(realpath('src/Psalm/Internal') . DIRECTORY_SEPARATOR));
$this->assertFalse($config->useStrictTypesForFile(realpath('src/Psalm/Issue') . DIRECTORY_SEPARATOR));
$this->assertFalse($config->useStrictTypesForFile(realpath('src/Psalm/Node') . DIRECTORY_SEPARATOR));
$this->assertFalse($config->useStrictTypesForFile(realpath('src/Psalm/Plugin') . DIRECTORY_SEPARATOR));
$this->assertFalse($config->useStrictTypesForFile(realpath('src/Psalm/Progress') . DIRECTORY_SEPARATOR));
$this->assertFalse($config->useStrictTypesForFile(realpath('src/Psalm/Report') . DIRECTORY_SEPARATOR));
$this->assertFalse($config->useStrictTypesForFile(realpath('src/Psalm/SourceControl') . DIRECTORY_SEPARATOR));
}
}