Skip to content

Commit

Permalink
Merge pull request #7182 from SMAtaurRahman/config-typeStats-and-stri…
Browse files Browse the repository at this point in the history
…ctTypes-fix

Fixed ignoreTypeStats & useStrictTypes flag value detection for directories in config
  • Loading branch information
orklah committed Dec 18, 2021
2 parents e9ad61e + e408abf commit eca1cc3
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 13 deletions.
17 changes: 4 additions & 13 deletions src/Psalm/Config/FileFilter.php
Expand Up @@ -111,12 +111,8 @@ public static function loadFromArray(
/** @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;
Expand Down Expand Up @@ -350,13 +346,8 @@ public static function loadFromXMLElement(
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',
];
}
}
Expand Down
66 changes: 66 additions & 0 deletions tests/Config/ConfigTest.php
Expand Up @@ -1483,4 +1483,70 @@ public function pluginRegistersScannerAndAnalyzer(int $flags, ?int $expectedExce
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));
}
}

0 comments on commit eca1cc3

Please sign in to comment.