php-parallel-lint / PHP-Parallel-Lint

This tool check syntax of PHP files faster than serial check with fancier output.
Other
282 stars 21 forks source link

SyntaxError::getNormalizedMessage(): improve tests + 2 bug fixes #118

Closed jrfnl closed 2 years ago

jrfnl commented 2 years ago

SyntaxErrorGetNormalizeMessageTest: refactor to dataprovider

Refactor the tests in the SyntaxErrorGetNormalizeMessageTest class to use data providers, which allow for adding more tests in a straight forward manner.

Note: this is a 1-on-1 refactor of the test with all existing test cases still being tested but no other changes.

SyntaxError::getNormalizedMessage(): bug fix - file name containing regex delimiter

If a file name would contain the delimiter used in the replacement regex, it would cause a PHP error like preg_replace(): Unknown modifier 'f'.

Fixed by telling preg_quote() explicitly which delimiter is being used.

Includes unit test.

Ref: https://www.php.net/manual/en/function.preg-quote.php

SyntaxError::getNormalizedMessage(): bug fix - "in file on line" doesn't always get stripped

In certain cases, PHP puts the full file name in the error message. In those cases the "in filename.php on line .." trailing part of the error message did not get stripped off.

Also, in some cases, when Windows slashes are used in the file path, the "in filename.php on line .." trailing part of the error message may not get stripped off. This last case will be exceedingly rare as on Windows, those file paths are handled correctly and the chances of a non-Windows user passing a path using Windows slashes will be minuscule.

Even so, I've fixed both cases by making the path handling in the function more robust.

Includes unit tests.

Fixes #94

SyntaxErrorGetNormalizeMessageTest: add some additional test cases

Including documenting that a Deprecated: prefix will not be removed.

SyntaxError::getNormalizedMessage(): minor regex tweak

By using ?: at the start of a parenthesis group, the group will not be "remembered"/saved to memory.

As this regex does not use the subgroups anyway, we don't need to remember them.