Invalidate the cache when a different set of PHP extensions are loaded #2982
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.
Basic justification:
PHPCS uses the
iconvextension, if available, to determine the length of tokens. The results of sniffs can be different if the length has changed.Additional use-case:
While not in use in PHPCS itself, external standards may use additional PHP extension which may or may not be loaded and can influence the results of a run.
Think: a sniff which checks the naming conventions of function/class/variable names and takes the file encoding into account. This sniff may be using the Mbstring PHP extension and the sniff could either be skipped if Mbstring is not available or fall back to a less reliable way of determining compliance with the naming conventions.
Solution
With the above in mind, I believe the cache should keep a hash of the loaded PHP extensions and invalidate the cache if the set of loaded extensions has changed.
As in reality, it will probably be a limited set of extensions which will ever be used in sniffs, a choice could be made to keep track of just those extensions instead of the complete list of loaded extensions.
I've decided against doing that though, as 1) this makes maintenance more fiddly as a list of "tracked extensions" would need to be maintained and 2) this may limit the imagination of sniff writers.
Invalidating the cache whenever the set of extensions loaded changes is the more stable solution.