Skip to content

Re-organize RemovedExtensions checks #1022

@jrfnl

Description

@jrfnl

As discussed in a call today.

Related #150, #207, #509, #582

Problem outline

A PHP extension can offer various functionality:

  • Classes, including class methods, class constants etc
  • Interfaces
  • (Global) Functions
  • (Global) Constants
  • Ini directives

The existing RemovedExtensions sniff checks for use of removed extensions, but is:

  • incomplete
    The sniff basically only checks for function calls, it does not check for the use of classes, constants or ini directives.
  • imprecise
    The function call check is prefix based and doesn't check the prefix with enough precision leading to false positives.

On top of that, there are three other, related sniffs which also cover removed functionality:

  • RemovedConstants
  • RemovedIniDirectives
  • RemovedFunctions

PHPCompatibility currently does not contain a RemovedClasses or a RemovedInterfaces sniff, but those can (and should) be added, if necessary.

Solution to be implemented

After discussing this at length, we have decided to solve this as follows:

  • For those extensions where the details about functions/constants/etc can be verified, it will be verified that the functions/constants etc are listed in the sniffs addressing the individual features and that those lists are complete.
  • The list entries in the individual sniffs will get an extra array key extension with the name of the PHP Extension as removed.
  • A RemovedExtensionsTrait will be created which lists the names of the fully verified extensions, the version in which the extension was removed and a possible alternative.
    The trait will contain a function to adjust the error message of a sniff.
    This trait will then be used by the sniffs addressing individual features to add information to the error message about the extension being completely removed from PHP and what alternative is available (if any).
  • The entry for a fully verified extension will be removed from the list in the RemovedExtensions sniff when it is moved to the trait.
  • For those extensions where the details about functions/constants/etc can no longer be found, the sniff will remain.

Prerequisites

For each and every extension which has been removed, it needs to be verified that the RemovedConstants, RemovedIniDirectives, RemovedFunctions and potential RemovedClasses and RemovedInterfaces sniffs cover all parts of the extension.

The below is an action list for this verification.
Please either edit this issue or leave a comment when starting on the verification of an extension to prevent duplicate work). Checkboxes should be checked off when that part of an extension has been fully verified.

Work for this issue will be done in the (dirty) https://github.com/PHPCompatibility/PHPCompatibility/tree/WIP/feature/207-509-582-removed-extension-recognition-precision branch, which will be cleaned up before it is pulled once the work is complete.

Sources which can be used to find the needed information:

  • activescript
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • cpdf (PHP 5.1) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • crack (PHP 5.0) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • dbase (PHP 5.3) - @wimg
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • dbx (PHP 5.1) - @wimg
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • dio (PHP 5.1) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • ereg (PHP 7.0) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • fam (PHP 5.1) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • fbsql (PHP 5.3) - @wimg
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • fdf (PHP 5.3) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • filepro (PHP 5.2) - @wimg
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • hw_api (PHP 5.2) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • ibase (PHP 7.4) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • ifx (PHP 5.2.1) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • ingres (PHP 5.1) - @wimg
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • ircg (PHP 5.1) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • mcrypt (PHP 7.2) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • mcve (PHP 5.1) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • mimetype (PHP 5.3) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • ming (PHP 5.3) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • mnogosearch (PHP 5.1) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • msession (PHP 5.1.3) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • msql (PHP 5.3) - @wimg
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • mssql (PHP 7.0) - @wimg
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • mysql (PHP 7.0) - @wimg & @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • ncurses (PHP 5.3) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • oracle (PHP 5.1) - @wimg
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • ovrimos (PHP 5.1) - @wimg & @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • pfpro (PHP 5.1) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • recode (PHP 7.4) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • sqlite (PHP 5.4) - @wimg
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • sybase_ct (PHP 7.0) - @wimg
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • sybase (PHP 5.3) - @wimg
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • w32api (PHP 5.1) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • wddx (PHP 7.4) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added
  • yp (PHP 5.1) - @jrfnl
    • Ini directives complete & extension index added
    • Constants complete & extension index added
    • Interfaces complete & extension index added
    • Classes complete & extension index added
    • Functions complete & extension index added

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions