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

Cache issue when checking modified files #11093

Open
Vitamin4iK-afk opened this issue Sep 9, 2024 · 10 comments
Open

Cache issue when checking modified files #11093

Vitamin4iK-afk opened this issue Sep 9, 2024 · 10 comments

Comments

@Vitamin4iK-afk
Copy link

I encountered a problem with Psalm cache when checking modified files.

During code inspection Psalm reported error: ERROR: PossiblyInvalidMethodCall - file:line:position - Cannot call method on possible array<array-key, int> variable (see https://psalm.dev/113). I fixed this error and re-run code inspection, but Psalm still reports this error. Only when I cleared cache with psalm --clear-cache the error stopped appearing on further inspections.

Steps to Reproduce:
I managed to make a minimal repository to reproduce this problem: https://github.com/Vitamin4iK-afk/psalm-test.

  1. Checkout initial commit.
  2. Clear Psalm cache with psalm --clear-cache.
  3. Run code inspection. This correctly reports error.
  4. Checkout latest commit.
  5. Run code inspection again. This falsely reports already fixed error.

System Information:
Operating System: Ubuntu 22.04.4 LTS
PHP Version: 8.2.22, 8.3.11
Psalm Version: 5.25.0

Additional Information:
Clearing Psalm cache resolves the problem but significantly increases inspection time and is not suitable for large repositories.

Copy link

Hey @Vitamin4iK-afk, can you reproduce the issue on https://psalm.dev? These will be used as phpunit tests when implementing the feature or fixing this bug.

@Vitamin4iK-afk
Copy link
Author

Vitamin4iK-afk commented Sep 9, 2024

Hey @Vitamin4iK-afk, can you reproduce the issue on https://psalm.dev? These will be used as phpunit tests when implementing the feature or fixing this bug.

No. This issue can`t be reproduced on https://psalm.dev/ because to reproduce it you need to follow certain steps described in the issue.

@weirdan
Copy link
Collaborator

weirdan commented Sep 9, 2024

Reproduced as described.

@theodorejb
Copy link
Contributor

I encounter this issue so frequently when switching between branches/commits, that I can rarely run Psalm successfully without manually clearing the cache.

@Robert-Bartel
Copy link

We have the same issue. Exactly as described above.

Is there any solution without clearing the cache?

@fenKss
Copy link

fenKss commented Oct 15, 2024

Faced the same problem. I'm looking forward to being corrected, I'm tired of constantly watching her, because checks usually take far from a couple of seconds

@Tory495
Copy link

Tory495 commented Oct 15, 2024

Fix that plz

aunzat added a commit to aunzat/psalm that referenced this issue Oct 30, 2024
@aunzat
Copy link

aunzat commented Oct 30, 2024

I think that the problem is that location of the old issue from the cache is not updated.

In the second commit the function Test::getId() is moved (character offset of -64) to cover the original location of the issue in Test::__construct().
The analysis for the method Test::getId() in ClassAnalyzer::analyzeClassMethod() skips the "pre-analyzed method" and gets the cached issues with Analyzer::getExistingIssuesForFile() using the file offsets of the method. But Analyzer::shiftFileOffets() has kept the offset for the issue since it is neither included in the $diff_map nor $deletion_ranges. Thus it is added to the issues of Test::getId() leading to the observed error.

I have managed create a phpunit test case in CacheTest.php. It is unclear to me how to best fix this; e.g. should the issue be in $deletion_ranges or maybe remove issues for changed functions?

@M-E-M-F-I-S
Copy link

Encountered same issue on our project, is this planned to be fixed?

@danog
Copy link
Collaborator

danog commented Nov 28, 2024

I would recommend using --no-cache with JIT enabled for the time being, will probably work more on cache in the coming months.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

9 participants