Fix PSR-4 warnings when using exclude-from-classmap with symlinked directories #12480
+98
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #12478 in 2.8
Description
This PR fixes an issue where Composer generates incorrect PSR-4 compliance warnings when using
exclude-from-classmappatterns with directories that are symlinks.The Problem
When a PSR-4 autoload path is a symlink (either relative or absolute) and the project uses
exclude-from-classmappatterns (e.g.,**/vendor/), Composer incorrectly reports that classes in the excluded directories don't comply with PSR-4 standards.Example warning:
Root Cause
The issue occurs because:
buildExclusionRegexmethod was only matching exclude patterns against the real path of directoriesThe Solution
The fix updates
buildExclusionRegexto also check exclude patterns against the normalized (non-realpath) version of the directory being scanned. This ensures that exclude patterns work correctly whether the directory is accessed via its symlink path or its real path.Testing
Added a new test case
testAbsoluteSymlinkWithPsr4DoesNotGenerateWarningsthat:exclude-from-classmapto exclude vendor directoriesAll existing tests continue to pass.
Reproducing the Issue
Before this fix:
After this fix: No warnings are generated for excluded paths.