Compares two source sets and determines the appropriate semantic versioning to apply.

Overview

PHP Semantic Versioning Checker

License Latest Stable Version Latest Unstable Version Build Status Code Coverage Total Downloads

PHP Semantic Versioning Checker is a console/library which allows you to inspect a set of before and after source code.

After the inspection is completed, you are given a list of changes that have occurred between the two changesets following Semantic Versioning 2.0.0. For each of these changes, the level of the change (MAJOR, MINOR, PATCH) will be given, as well as the location of the change (file and line number) and a reason as to why this level change is suggested.

Semantic Versioning 2.0.0 Overview

Given a version number MAJOR.MINOR.PATCH, increment the:

  • MAJOR version when you make incompatible API changes,
  • MINOR version when you add functionality in a backwards-compatible manner, and
  • PATCH version when you make backwards-compatible bug fixes.

Getting started

As this is still an alpha package, it is not suggested to include php-semver-checker directly in your composer.json. There are however a couple ways to use the tool:

  1. Preferred method Download the latest .phar build. Note that the .phar build is generally less bleeding edge than the following methods.
  2. php composer.phar create-project tomzx/php-semver-checker --stability=dev will clone to a new php-semver-checker folder in your current working directory
  3. git clone https://github.com/tomzx/php-semver-checker.git and php composer.phar install in the newly cloned directory.

See the example section for examples of how to use the tool.

Building php-semver-checker.phar

First, make sure you have box installed. Then, in the base directory, you can run the following command which will generate the php-semver-checker.phar file.

box build

Current ruleset & verification codes

See docs/Ruleset.md for an exhaustive list of currently supported (and to come) ruleset.

Verification codes are a mean to uniquely identify a semantic versioning trigger (a condition which upon detection, requires your code changes to be versioned).

Example

php bin/php-semver-checker compare tests/fixtures/before tests/fixtures/after

Suggested semantic versioning change: MAJOR

Class (MAJOR)
+-------+--------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------+------+
| Level | Location                                                     | Target                                                     | Reason                                     | Code |
+-------+--------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------+------+
| MAJOR | tests\fixtures\before\ClassRemoved.php:5                     | fixtures\ClassRemoved                                      | Class was removed.                         | V005 |
| MAJOR | tests\fixtures\after\ClassMethodAdded.php:7                  | fixtures\ClassMethodAdded::publicMethod                    | [public] Method has been added.            | V015 |
| MAJOR | tests\fixtures\after\ClassMethodAdded.php:12                 | fixtures\ClassMethodAdded::protectedMethod                 | [protected] Method has been added.         | V016 |
| MAJOR | tests\fixtures\after\ClassMethodParameterChanged.php:7       | fixtures\ClassMethodParameterChanged::publicMethod         | [public] Method parameter changed.         | V010 |
| MAJOR | tests\fixtures\after\ClassMethodParameterChanged.php:12      | fixtures\ClassMethodParameterChanged::protectedMethod      | [protected] Method parameter changed.      | V011 |
| MAJOR | tests\fixtures\before\ClassMethodRemoved.php:7               | fixtures\ClassMethodRemoved::publicMethod                  | [public] Method has been removed.          | V006 |
| MAJOR | tests\fixtures\before\ClassMethodRemoved.php:12              | fixtures\ClassMethodRemoved::protectedMethod               | [protected] Method has been removed.       | V007 |
| MAJOR | tests\fixtures\after\ClassPropertyAdded.php:7                | fixtures\ClassPropertyAdded::$a                            | [public] Property has been added.          | V019 |
| MAJOR | tests\fixtures\after\ClassPropertyAdded.php:9                | fixtures\ClassPropertyAdded::$b                            | [protected] Property has been added.       | V020 |
| MAJOR | tests\fixtures\before\ClassPropertyRemoved.php:7             | fixtures\ClassPropertyRemoved::$a                          | [public] Property has been removed.        | V008 |
| MAJOR | tests\fixtures\before\ClassPropertyRemoved.php:9             | fixtures\ClassPropertyRemoved::$b                          | [protected] Property has been removed.     | V009 |
| MINOR | tests\fixtures\after\ClassAdded.php:5                        | fixtures\ClassAdded                                        | Class was added.                           | V014 |
| PATCH | tests\fixtures\after\ClassMethodAdded.php:17                 | fixtures\ClassMethodAdded::privateMethod                   | [private] Method has been added.           | V028 |
| PATCH | tests\fixtures\after\ClassMethodImplementationChanged.php:7  | fixtures\ClassMethodImplementationChanged::publicMethod    | [public] Method implementation changed.    | V023 |
| PATCH | tests\fixtures\after\ClassMethodImplementationChanged.php:12 | fixtures\ClassMethodImplementationChanged::protectedMethod | [protected] Method implementation changed. | V024 |
| PATCH | tests\fixtures\after\ClassMethodImplementationChanged.php:17 | fixtures\ClassMethodImplementationChanged::privateMethod   | [private] Method implementation changed.   | V025 |
| PATCH | tests\fixtures\after\ClassMethodParameterChanged.php:17      | fixtures\ClassMethodParameterChanged::privateMethod        | [private] Method parameter changed.        | V031 |
| PATCH | tests\fixtures\after\ClassMethodParameterNameChanged.php:7   | fixtures\ClassMethodParameterNameChanged::publicMethod     | [public] Method parameter name changed.    | V060 |
| PATCH | tests\fixtures\after\ClassMethodParameterNameChanged.php:12  | fixtures\ClassMethodParameterNameChanged::protectedMethod  | [protected] Method parameter name changed. | V061 |
| PATCH | tests\fixtures\after\ClassMethodParameterNameChanged.php:17  | fixtures\ClassMethodParameterNameChanged::privateMethod    | [private] Method parameter name changed.   | V062 |
| PATCH | tests\fixtures\before\ClassMethodRemoved.php:17              | fixtures\ClassMethodRemoved::privateMethod                 | [private] Method has been removed.         | V029 |
| PATCH | tests\fixtures\after\ClassPropertyAdded.php:11               | fixtures\ClassPropertyAdded::$c                            | [private] Property has been added.         | V026 |
| PATCH | tests\fixtures\before\ClassPropertyRemoved.php:11            | fixtures\ClassPropertyRemoved::$c                          | [private] Property has been removed.       | V027 |
+-------+--------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------+------+

Function (MAJOR)
+-------+----------------------------------------------------------+-----------------------------------------------------------------------+----------------------------------+------+
| Level | Location                                                 | Target                                                                | Reason                           | Code |
+-------+----------------------------------------------------------+-----------------------------------------------------------------------+----------------------------------+------+
| MAJOR | tests\fixtures\before\FunctionRemoved.php:5              | fixtures\functionRemoved::functionRemoved                             | Function has been removed.       | V001 |
| MAJOR | tests\fixtures\before\FunctionParameterChanged.php:5     | fixtures\functionParameterChanged::functionParameterChanged           | Function parameter changed.      | V002 |
| MINOR | tests\fixtures\after\FunctionAdded.php:5                 | fixtures\functionAdded::functionAdded                                 | Function has been added.         | V003 |
| PATCH | tests\fixtures\after\FunctionImplementationChanged.php:5 | fixtures\functionImplementationChanged::functionImplementationChanged | Function implementation changed. | V004 |
| PATCH | tests\fixtures\before\FunctionParameterNameChanged.php:5 | fixtures\functionParameterNameChanged::functionParameterNameChanged   | Function parameter name changed. | V067 |
+-------+----------------------------------------------------------+-----------------------------------------------------------------------+----------------------------------+------+

Interface (MAJOR)
+-------+---------------------------------------------------------------+------------------------------------------------------------+-----------------------------------------+------+
| Level | Location                                                      | Target                                                     | Reason                                  | Code |
+-------+---------------------------------------------------------------+------------------------------------------------------------+-----------------------------------------+------+
| MAJOR | tests\fixtures\before\InterfaceRemoved.php:5                  | fixtures\InterfaceRemoved                                  | Interface was removed.                  | V033 |
| MAJOR | tests\fixtures\after\InterfaceMethodAdded.php:7               | fixtures\InterfaceMethodAdded::newMethod                   | [public] Method has been added.         | V034 |
| MAJOR | tests\fixtures\after\InterfaceMethodParameterChaged.php:7     | fixtures\InterfaceMethodParameterChanged::newMethod        | [public] Method parameter changed.      | V036 |
| MAJOR | tests\fixtures\before\InterfaceMethodRemoved.php:7            | fixtures\InterfaceMethodRemoved::newMethod                 | [public] Method has been removed.       | V035 |
| MINOR | tests\fixtures\after\InterfaceAdded.php:5                     | fixtures\InterfaceAdded                                    | Interface was added.                    | V032 |
| PATCH | tests\fixtures\after\InterfaceMethodParameterNameChaged.php:7 | fixtures\InterfaceMethodParameterNameChanged::publicMethod | [public] Method parameter name changed. | V063 |
+-------+---------------------------------------------------------------+------------------------------------------------------------+-----------------------------------------+------+

Trait (MAJOR)
+-------+--------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------+------+
| Level | Location                                                     | Target                                                     | Reason                                     | Code |
+-------+--------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------+------+
| MAJOR | tests\fixtures\before\TraitRemoved.php:5                     | fixtures\TraitRemoved                                      | Trait was removed.                         | V037 |
| MAJOR | tests\fixtures\after\TraitMethodAdded.php:7                  | fixtures\TraitMethodAdded::publicMethod                    | [public] Method has been added.            | V047 |
| MAJOR | tests\fixtures\after\TraitMethodAdded.php:12                 | fixtures\TraitMethodAdded::protectedMethod                 | [protected] Method has been added.         | V048 |
| MAJOR | tests\fixtures\after\TraitMethodAdded.php:17                 | fixtures\TraitMethodAdded::privateMethod                   | [private] Method has been added.           | V057 |
| MAJOR | tests\fixtures\after\TraitMethodParameterChanged.php:7       | fixtures\TraitMethodParameterChanged::publicMethod         | [public] Method parameter changed.         | V042 |
| MAJOR | tests\fixtures\after\TraitMethodParameterChanged.php:12      | fixtures\TraitMethodParameterChanged::protectedMethod      | [protected] Method parameter changed.      | V043 |
| MAJOR | tests\fixtures\after\TraitMethodParameterChanged.php:17      | fixtures\TraitMethodParameterChanged::privateMethod        | [private] Method parameter changed.        | V059 |
| MAJOR | tests\fixtures\before\TraitMethodRemoved.php:7               | fixtures\TraitMethodRemoved::publicMethod                  | [public] Method has been removed.          | V038 |
| MAJOR | tests\fixtures\before\TraitMethodRemoved.php:12              | fixtures\TraitMethodRemoved::protectedMethod               | [protected] Method has been removed.       | V039 |
| MAJOR | tests\fixtures\before\TraitMethodRemoved.php:17              | fixtures\TraitMethodRemoved::privateMethod                 | [private] Method has been removed.         | V058 |
| MAJOR | tests\fixtures\after\TraitPropertyAdded.php:7                | fixtures\TraitPropertyAdded::$a                            | [public] Property has been added.          | V049 |
| MAJOR | tests\fixtures\after\TraitPropertyAdded.php:9                | fixtures\TraitPropertyAdded::$b                            | [protected] Property has been added.       | V050 |
| MAJOR | tests\fixtures\after\TraitPropertyAdded.php:11               | fixtures\TraitPropertyAdded::$c                            | [private] Property has been added.         | V055 |
| MAJOR | tests\fixtures\before\TraitPropertyRemoved.php:7             | fixtures\TraitPropertyRemoved::$a                          | [public] Property has been removed.        | V040 |
| MAJOR | tests\fixtures\before\TraitPropertyRemoved.php:9             | fixtures\TraitPropertyRemoved::$b                          | [protected] Property has been removed.     | V041 |
| MAJOR | tests\fixtures\before\TraitPropertyRemoved.php:11            | fixtures\TraitPropertyRemoved::$c                          | [private] Property has been removed.       | V056 |
| MINOR | tests\fixtures\after\TraitAdded.php:5                        | fixtures\TraitAdded                                        | Trait was added.                           | V046 |
| PATCH | tests\fixtures\after\TraitMethodImplementationChanged.php:7  | fixtures\TraitMethodImplementationChanged::publicMethod    | [public] Method implementation changed.    | V052 |
| PATCH | tests\fixtures\after\TraitMethodImplementationChanged.php:12 | fixtures\TraitMethodImplementationChanged::protectedMethod | [protected] Method implementation changed. | V053 |
| PATCH | tests\fixtures\after\TraitMethodImplementationChanged.php:17 | fixtures\TraitMethodImplementationChanged::privateMethod   | [private] Method implementation changed.   | V054 |
| PATCH | tests\fixtures\after\TraitMethodParameterNameChanged.php:7   | fixtures\TraitMethodParameterNameChanged::publicMethod     | [public] Method parameter name changed.    | V064 |
| PATCH | tests\fixtures\after\TraitMethodParameterNameChanged.php:12  | fixtures\TraitMethodParameterNameChanged::protectedMethod  | [protected] Method parameter name changed. | V065 |
| PATCH | tests\fixtures\after\TraitMethodParameterNameChanged.php:17  | fixtures\TraitMethodParameterNameChanged::privateMethod    | [private] Method parameter name changed.   | V066 |
+-------+--------------------------------------------------------------+------------------------------------------------------------+--------------------------------------------+------+

[Scanned files] Before: 26, After: 27, Identical: 0
Time: 1.43 seconds, Memory: 5.123 MB

Contributing

Adding new rules

  • Add the rules to the docs/Ruleset.md document
  • Run php scripts/extract-rules-from-ruleset.php to generate an up to date array to paste in the Configuration/LevelMapping.php file
  • Update the documentation @ https://github.com/tomzx/php-semver-checker-docs

License

The code is licensed under the MIT license. See LICENSE.

Comments
  • Why is adding a protected/public method considered MAJOR?

    Why is adding a protected/public method considered MAJOR?

    Semver 2.0 says:

    MINOR version when you add functionality in a backwards-compatible manner, and

    But currently PSC reports protected/public methods (or classes) added as a BC when I can't see why it would be. When one is removed yeah sure, but not added, no?

    question 
    opened by Anahkiasen 11
  • Please provide a PHAR

    Please provide a PHAR

    This tool is nice but it breaks projects which depend on stable releases.

    I have some requirements in the composer.json. To add php-semver-checker I need to enable the minimum-stability of "dev" versions. When composer installs it fetches dev-versions of all requirements.

    This breaks the application and dev can never be trusted or rolled out for end-users.

    So please provide a downloadable PHAR-File containing your tool. Many people like to use it as I see.

    enhancement 
    opened by ScreamingDev 10
  • Added compatibility with PHP 8.1

    Added compatibility with PHP 8.1

    Hello @tomzx

    We still have problems with class \PHPSemVerChecker\Report\Report. The problem looks like showed below when I run phpunit

    During inheritance of ArrayAccess: Uncaught PHPUnit\Framework\Exception: Deprecated: Return type of PHPSemVerChecker\Report\Report::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /Users/andrewbess/work/projects/my-project/vendor/tomzx/php-semver-checker/src/PHPSemVerChecker/Report/Report.php:161

    We should add attribute #[\ReturnTypeWillChange] above methods offsetExists, offsetGet, offsetSet, offsetUnset, getIterator or we should add return types (that is not BIC) because the return types have been added there in PHP >= 8.0.

    This pull request provides the fixes for the class \PHPSemVerChecker\Report\Report according to php.net ArrayAccess interface and php.net IteratorAggregate interface. Also, we fixed error reporting in src/PHPSemVerChecker/Console/Application.php. Finally, we checked these changes in PHP 7.4, 8.0, 8.1. It works well.

    Cloud you please check it?

    Thank you in advance.

    opened by andrewbess 7
  • Laravel

    Laravel

    A case analysis goal is to determine what work/doesn't work with php-semver-checker when it is applied on existing libraries/applications/frameworks. The purpose is to improve the quality of the output generated by php-semver-checker.

    case analysis 
    opened by tomzx 7
  • Support for PHP 7.4 Typed Properties

    Support for PHP 7.4 Typed Properties

    Per subject, it seems that using PHP 7.4's typed properties causes the Scanner class to blow up.

    So if you do something like:

        /**
         * @var EventContractLoader
         */
        private EventContractLoader $loader;
    

    Then you'll see an error like, this:

      [RuntimeException]
      Parse Error: Syntax error, unexpected T_STRING, expecting T_FUNCTION or T_CONST on line 14 in /src/
      Loader/EventContractLoader.php
    

    Note: I use the git version of the project, not sure if that matters.

    opened by mallardduck 6
  • Dont treat case changes in method names as breaking

    Dont treat case changes in method names as breaking

    Before this PR changing the case of a method would result in two warnings: method added (MINOR by default) and method removed (MAJOR by default). In reality PHP ignores the case of methods, and so this change should be PATCH at most.

    This PR completely ignores situations where the case of a method has been changed (but if you would prefer this to be a "method case changed" type with level PATCH that's ok with me, let me know and I'll make the change).

    Apologies for the formatting of tabs to spaces, if you'd like me to reset the formatting I can (although spaces are the PSR-2 standard)

    opened by emmetog 6
  • Removing method default parameter value should generate MAJOR level entry

    Removing method default parameter value should generate MAJOR level entry

    Removing method default parameter value should generate MAJOR level entry. Because if you remove default value, you are changing the signature of the method, effectively breaking backwards compatibility. Before the change, you were able to call the method without providing said parameter and after the change, you have to provide it. Am I missing anything?

    bug advanced 
    opened by ajant 6
  • Refactoring for easier reuse, merge CLI and config

    Refactoring for easier reuse, merge CLI and config

    See #72

    Mostly trying to shrink down all the boiler-plate in CompareCommand's execute method.

    What do you think so far? @tomzx

    See commit "Merge configuration and CLI input" for implementing #67.

    enhancement 
    opened by nochso 6
  • Change adding methods to MINOR

    Change adding methods to MINOR

    This PR changes adding new methods to classes to be MINOR instead of MAJOR.

    Discussions in favor of adding new methods not being MAJOR are here and here (Symfony say that "If you extend the class and... Add a new method... Then we guarantee BC... No").

    This thread is also related.

    opened by emmetog 5
  • Support of PHP 7.4

    Support of PHP 7.4

    Hi!

    I am wonder if you have plan to add support of PHP 7.3 and up to your tool? For now it is limited to PHP 7.2 by "nikic/php-parser": "^3.1" which seems to be unsupported version.

    Thanks, Maksym

    enhancement 
    opened by xmav 4
  • Case insensitive method names

    Case insensitive method names

    Description:

    This is a resurrection of https://github.com/tomzx/php-semver-checker/pull/96 with the same outcome but a different implementation. In https://github.com/tomzx/php-semver-checker/pull/96 we added logic to the ClassMethodAnalyzer, in this PR things are a lot cleaner.

    The end goal is to trigger case-changes in method names (which PHP ignores) as a PATCH change.

    Features:

    • Lots of tests
    • Added .editorconfig file to ensure coding standards are consistent across library (use tabs)

    Still to do:

    • [x] Allow case changes in Class names
    • [x] Allow case changes in Interface names
    • [x] Allow case changes in Trait names
    • [x] Allow case changes in Method & Function names
    opened by emmetog 4
  • Bump symfony/yaml from 5.4.16 to 5.4.17

    Bump symfony/yaml from 5.4.16 to 5.4.17

    Bumps symfony/yaml from 5.4.16 to 5.4.17.

    Release notes

    Sourced from symfony/yaml's releases.

    v5.4.17

    Changelog (https://github.com/symfony/yaml/compare/v5.4.16...v5.4.17)

    • bug #48331 fix dumping top-level tagged values (xabbuh)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump symfony/console from 5.4.16 to 5.4.17

    Bump symfony/console from 5.4.16 to 5.4.17

    Bumps symfony/console from 5.4.16 to 5.4.17.

    Release notes

    Sourced from symfony/console's releases.

    v5.4.17

    Changelog (https://github.com/symfony/console/compare/v5.4.16...v5.4.17)

    • bug #48784 Correctly overwrite progressbars with different line count per step (ncharalampidis)
    Commits
    • 58422fd [Console] Correctly overwrite progressbars with different line count per step
    • 9bd719e [Console] Fix a test when pcntl is not available (following #48329)
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Replace hassankhan/config dependency

    Replace hassankhan/config dependency

    hassankhan/config latest release is December 7, 2020. Since PHP 8 it is now returning deprecation warnings for Noodlehaus\AbstractConfig because it is not specifying its return types like its base class, making its interface incompatible.

    As of now there is no suggested replacement library. We have temporarily suppressed the errors when booting up the application.

    enhancement 
    opened by tomzx 0
  • Upload built phar to github

    Upload built phar to github

    As suggested by @temp in https://github.com/tomzx/php-semver-checker/issues/18#issuecomment-453148844, it would be get if built phar archives are available on the github release pages.

    Currently they are available at https://psvc.coreteks.org, but some users prefer github releases.

    With GitHub actions it's now possible to have an action that would create/update a release and add the generated phar.

    enhancement 
    opened by tomzx 0
Releases(v0.15.1)
Owner
Tom Rochette
AI Developer
Tom Rochette
PHPCheckstyle is an open-source tool that helps PHP programmers adhere to certain coding conventions.

PHPCheckstyle Overview PHPCheckstyle is an open-source tool that helps PHP programmers adhere to certain coding conventions. The tools checks the inpu

PHPCheckstyle 157 Dec 5, 2022
Library for counting the lines of code in PHP source code

sebastian/lines-of-code Library for counting the lines of code in PHP source code. Installation You can add this library as a local, per-project depen

Sebastian Bergmann 715 Jan 5, 2023
PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards.

About PHP_CodeSniffer is a set of two PHP scripts; the main phpcs script that tokenizes PHP, JavaScript and CSS files to detect violations of a define

Squiz Labs 9.9k Jan 4, 2023
Phan is a static analyzer for PHP. Phan prefers to avoid false-positives and attempts to prove incorrectness rather than correctness.

Phan is a static analyzer for PHP that prefers to minimize false-positives. Phan attempts to prove incorrectness rather than correctness. Phan looks f

null 5.4k Jan 7, 2023
Beautiful and understandable static analysis tool for PHP

PhpMetrics PhpMetrics provides metrics about PHP project and classes, with beautiful and readable HTML report. Documentation | Twitter | Contributing

PhpMetrics 2.3k Dec 22, 2022
PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD. PHPMD can be seen as an user friendly frontend application for the raw metrics stream measured by PHP Depend.

PHPMD PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD. PHPMD can be seen as an user friendly

PHP Mess Detector 2.1k Jan 8, 2023
:crystal_ball: Better Reflection is a reflection API that aims to improve and provide more features than PHP's built-in reflection API.

Better Reflection Better Reflection is a reflection API that aims to improve and provide more features than PHP's built-in reflection API. Why is it b

Roave, LLC 1.1k Dec 15, 2022
A set of tools for lexical and syntactical analysis written in pure PHP.

Welcome to Dissect! master - this branch always contains the last stable version. develop - the unstable development branch. Dissect is a set of tools

Jakub Lédl 221 Nov 29, 2022
PHP completion, refactoring, introspection tool and language server.

Phpactor This project aims to provide heavy-lifting refactoring and introspection tools which can be used standalone or as the backend for a text edit

Phpactor 882 Jan 1, 2023
Instant Upgrades and Instant Refactoring of any PHP 5.3+ code

Rector - Speedup Your PHP Development Rector helps you with 2 areas - major code changes and in daily work. Do you have a legacy code base? Do you wan

RectorPHP 6.5k Jan 8, 2023
PHP Functional Programming library. Monads and common use functions.

Functional PHP PHP Functional Programming library. Monads and common use functions. Documentation Functions Monads Installation Composer $ composer re

Alexander Sv. 169 Dec 27, 2022
Deptrac is a static code analysis tool for PHP that helps you communicate, visualize and enforce architectural decisions in your projects

Deptrac is a static code analysis tool for PHP that helps you communicate, visualize and enforce architectural decisions in your projects. You can freely define your architectural layers over classes and which rules should apply to them.

QOSSMIC GmbH 2.2k Dec 30, 2022
Symfony kafka bundle to produce and consume messages.

Technology stack Quick start Example project Basic Configuration Consuming messages Retrying failed messages Handling offsets Decoders Denormalizers V

STS Gaming Group 25 Oct 3, 2022
phpcs-security-audit is a set of PHP_CodeSniffer rules that finds vulnerabilities and weaknesses related to security in PHP code

phpcs-security-audit v3 About phpcs-security-audit is a set of PHP_CodeSniffer rules that finds vulnerabilities and weaknesses related to security in

Floe design + technologies 655 Jan 3, 2023
TypeResolver - A PSR-5 based resolver of Class names, Types and Structural Element Names

TypeResolver and FqsenResolver The specification on types in DocBlocks (PSR-5) describes various keywords and special constructs but also how to stati

phpDocumentor 9k Dec 29, 2022
Magento Semantic Versioning Checker

Magento Semantic Versioning Checker

Magento 28 Dec 5, 2022
Compares two directories and removes the duplicate files from the second directory.

How does the HRZ Duplicate Refiner work? 1- Compares two directories : patternDir: the directory used as the pattern & does not change. victimDir: A d

Hamidreza Zolfaghar 2 May 6, 2022
This prj we have two NODEMCU ( ESP8266) and two RFID_RC522 and some rfid tags we used ARDUINO IDE on NODEMCU and running server with XAMPP

This prj we have two NODEMCU ( ESP8266) and two RFID_RC522 and some rfid tags we used ARDUINO IDE on NODEMCU and running server with XAMPP

Mohammadamir Soltanzadeh 2 Mar 29, 2022
On International Talk Like a Pirate Day (September 19th), this filter changes all appropriate English phrases and words into pirate-speak.

Pirate This module is a simple filter that, when enabled, will change your posts to "Pirate talk" on September 19th for Talk like a Pirate Day Install

Backdrop CMS contributed projects 3 Oct 26, 2021
Analyze content to determine the appropriate Internet media type

Canal Content analysis for the purpose of determining Internet media types. Requirements PHP 5.3+ Installation Through Composer as dflydev/canal. Usag

dflydev 34 Feb 11, 2022