Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: split phpstan-baseline into smaller files #9299

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from

Conversation

paulbalandan
Copy link
Member

@paulbalandan paulbalandan commented Dec 2, 2024

Description
This PR splits our existing enormous phpstan-baseline.php into smaller baseline files named by their identifiers, thanks to https://github.com/shipmonk-rnd/phpstan-baseline-per-identifier/tree/2.0.0. Currently, the baseline contains 4,052 errors. That's very overwhelming to fix. TBH, when looking at the baseline I cannot continue further because of the bulk of technical debt we have.

The pro of this approach is that we can attack the baseline by identifier, making the cleanup less overwhelming. The cleanup would be bite-sized. The con of this approach is that we have too many baselines now, but that is the consequence of having 4k+ errors.

Same command to generate the baseline: composer phpstan:baseline

P.S I have fixed some of the files as PHPStan complains of No error to ignore stuff.

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@paulbalandan paulbalandan marked this pull request as draft December 2, 2024 14:19
@paulbalandan paulbalandan force-pushed the split-phpstan-baseline branch 4 times, most recently from 4f170cf to 823f364 Compare December 6, 2024 18:13
@paulbalandan paulbalandan marked this pull request as ready for review December 6, 2024 18:36
Copy link
Member

@michalsn michalsn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like this idea. Smaller baseline files seem like easier to deal with.

@kenjis kenjis added the github_actions Pull requests that update Github_actions code label Dec 9, 2024
@@ -15,6 +15,8 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you explain why fetch-depth: 0 is needed?

It gets all commits, so it takes long time.
We should not use it as possible.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure what happened to composer, but it could no longer resolve codeigniter4/codeigniter4 as the same as codeigniter4/framework. Upon checking, it seems composer needs to have the develop branch also checked out. By default, Github only checks out the head branch on PRs.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have pushed a different approach by fetching the base branch alongside the PR branch.

@kenjis kenjis added the refactor Pull requests that refactor code label Dec 9, 2024
@ddevsr
Copy link
Collaborator

ddevsr commented Dec 10, 2024

@paulbalandan By the way, i see this another error. Can you update rector to RC3? cc @samsonasik

Run vendor/bin/rector process --dry-run --no-progress-bar
{
    "title": "_PHPStan_e6dc705b2\\Nette\\Schema\\ValidationException",
    "type": "_PHPStan_e6dc705b2\\Nette\\Schema\\ValidationException",
    "code": 500,
    "message": "Unexpected item 'parameters › shipmonkBaselinePerIdentifier'.",
    "file": "phar:///home/runner/work/CodeIgniter4/CodeIgniter4/vendor/phpstan/phpstan/phpstan.phar/vendor/nette/schema/src/Schema/Processor.php",
    "line": 75,
    "trace": [
        {
            "file": "phar:///home/runner/work/CodeIgniter4/CodeIgniter4/vendor/phpstan/phpstan/phpstan.phar/vendor/nette/schema/src/Schema/Processor.php",
            "line": 38,
            "function": "throwsErrors",
            "class": "_PHPStan_e6dc705b2\\Nette\\Schema\\Processor",
            "type": "->"
        },
        {
            "file": "phar:///home/runner/work/CodeIgniter4/CodeIgniter4/vendor/phpstan/phpstan/phpstan.phar/src/DependencyInjection/ContainerFactory.php",
            "line": 216,
            "function": "process",
            "class": "_PHPStan_e6dc705b2\\Nette\\Schema\\Processor",
            "type": "->"
        },
        {
            "file": "phar:///home/runner/work/CodeIgniter4/CodeIgniter4/vendor/phpstan/phpstan/phpstan.phar/src/DependencyInjection/ContainerFactory.php",
            "line": 104,
            "function": "validateParameters",
            "class": "PHPStan\\DependencyInjection\\ContainerFactory",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/src/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php",
            "line": 51,
            "function": "create",
            "class": "PHPStan\\DependencyInjection\\ContainerFactory",
            "type": "->"
        },
        {
            "function": "__construct",
            "class": "Rector\\NodeTypeResolver\\DependencyInjection\\PHPStanServicesFactory",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 844,
            "function": "newInstanceArgs",
            "class": "ReflectionClass",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 705,
            "function": "build",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 652,
            "function": "resolve",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/src/DependencyInjection/LazyContainerFactory.php",
            "line": 273,
            "function": "make",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 807,
            "function": "Rector\\DependencyInjection\\{closure}",
            "class": "Rector\\DependencyInjection\\LazyContainerFactory",
            "type": "::"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 705,
            "function": "build",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 652,
            "function": "resolve",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": [9](https://github.com/codeigniter4/CodeIgniter4/actions/runs/12204169604/job/34048691307?pr=9299#step:11:10)47,
            "function": "make",
            "class": "RectorPrefix2024[11](https://github.com/codeigniter4/CodeIgniter4/actions/runs/12204169604/job/34048691307?pr=9299#step:11:12)\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 873,
            "function": "resolveClass",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 838,
            "function": "resolveDependencies",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 705,
            "function": "build",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 652,
            "function": "resolve",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 947,
            "function": "make",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 873,
            "function": "resolveClass",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 838,
            "function": "resolveDependencies",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 705,
            "function": "build",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 652,
            "function": "resolve",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 947,
            "function": "make",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 873,
            "function": "resolveClass",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 838,
            "function": "resolveDependencies",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 277,
            "function": "build",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 807,
            "function": "RectorPrefix202411\\Illuminate\\Container\\{closure}",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 705,
            "function": "build",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 652,
            "function": "resolve",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 496,
            "function": "make",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "function": "RectorPrefix202411\\Illuminate\\Container\\{closure}",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/ContextualBindingBuilder.php",
            "line": 72,
            "function": "iterator_to_array"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Util.php",
            "line": 40,
            "function": "RectorPrefix202411\\Illuminate\\Container\\{closure}",
            "class": "RectorPrefix202411\\Illuminate\\Container\\ContextualBindingBuilder",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 923,
            "function": "unwrapIfClosure",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 873,
            "function": "resolvePrimitive",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 838,
            "function": "resolveDependencies",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 705,
            "function": "build",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 652,
            "function": "resolve",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/src/DependencyInjection/LazyContainerFactory.php",
            "line": 245,
            "function": "make",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 807,
            "function": "Rector\\DependencyInjection\\{closure}",
            "class": "Rector\\DependencyInjection\\LazyContainerFactory",
            "type": "::"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 705,
            "function": "build",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/vendor/illuminate/container/Container.php",
            "line": 662,
            "function": "resolve",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/bin/rector.php",
            "line": [12](https://github.com/codeigniter4/CodeIgniter4/actions/runs/12204169604/job/34048691307?pr=9299#step:11:13)9,
            "function": "get",
            "class": "RectorPrefix202411\\Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/bin/rector",
            "line": 5,
            "args": [
                "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/bin/rector.php"
            ],
            "function": "require_once"
        },
        {
            "file": "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/bin/rector",
            "line": 1[19](https://github.com/codeigniter4/CodeIgniter4/actions/runs/12204169604/job/34048691307?pr=9299#step:11:20),
            "args": [
                "/home/runner/work/CodeIgniter4/CodeIgniter4/vendor/rector/rector/bin/rector"
            ],
            "function": "include"
        }
    ]
}

Ref : https://github.com/codeigniter4/CodeIgniter4/actions/runs/12204169604/job/34048691307?pr=9299

@paulbalandan
Copy link
Member Author

Oh, I didn't notice that. But why does github actions not fail on that?

@ddevsr
Copy link
Collaborator

ddevsr commented Dec 10, 2024

Maybe shipmonk no catch exception, I think this related to shipmonk using nette/neon not tested with phpstan/phpstan v2

@paulbalandan paulbalandan force-pushed the split-phpstan-baseline branch from 83c8738 to 35b2a34 Compare December 10, 2024 16:21
@paulbalandan paulbalandan force-pushed the split-phpstan-baseline branch from 35b2a34 to 17ca6ee Compare December 10, 2024 17:14
Comment on lines +43 to +46
disallowedBacktick: true
disallowedEmpty: true
disallowedImplicitArrayCreation: true
disallowedShortTernary: true
Copy link
Member Author

@paulbalandan paulbalandan Dec 10, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In phpstan-strict-rules v2, the disallowedConstructs parameter was replaced by these toggles.
phpstan/phpstan-strict-rules@988fab9#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5R72

@github-actions github-actions bot added the stale Pull requests with conflicts label Dec 11, 2024
Copy link

👋 Hi, @paulbalandan!

We detected conflicts in your PR against the base branch 🙊
You may want to sync 🔄 your branch with upstream!

Ref: Syncing Your Branch

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
github_actions Pull requests that update Github_actions code refactor Pull requests that refactor code stale Pull requests with conflicts
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants