Add Larastan static analysis at level 5 with baseline

This commit is contained in:
myrmidex 2026-03-19 01:06:02 +01:00
parent 5614fc3915
commit 2a149e73c0
4 changed files with 927 additions and 2 deletions

View file

@ -18,11 +18,13 @@
},
"require-dev": {
"fakerphp/faker": "^1.23",
"larastan/larastan": "^3.9",
"laravel/pail": "^1.2.2",
"laravel/pint": "^1.24",
"laravel/sail": "^1.41",
"mockery/mockery": "^1.6",
"nunomaduro/collision": "^8.6",
"phpstan/phpstan-mockery": "^2.0",
"phpunit/phpunit": "^11.5.3"
},
"autoload": {

237
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "3c79e040a3570288a4004f205416801a",
"content-hash": "1fb421bd376d40ce4b1e241d0805c5ed",
"packages": [
{
"name": "bacon/bacon-qr-code",
@ -6660,6 +6660,137 @@
},
"time": "2025-04-30T06:54:44+00:00"
},
{
"name": "iamcal/sql-parser",
"version": "v0.7",
"source": {
"type": "git",
"url": "https://github.com/iamcal/SQLParser.git",
"reference": "610392f38de49a44dab08dc1659960a29874c4b8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/iamcal/SQLParser/zipball/610392f38de49a44dab08dc1659960a29874c4b8",
"reference": "610392f38de49a44dab08dc1659960a29874c4b8",
"shasum": ""
},
"require-dev": {
"php-coveralls/php-coveralls": "^1.0",
"phpunit/phpunit": "^5|^6|^7|^8|^9"
},
"type": "library",
"autoload": {
"psr-4": {
"iamcal\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Cal Henderson",
"email": "cal@iamcal.com"
}
],
"description": "MySQL schema parser",
"support": {
"issues": "https://github.com/iamcal/SQLParser/issues",
"source": "https://github.com/iamcal/SQLParser/tree/v0.7"
},
"time": "2026-01-28T22:20:33+00:00"
},
{
"name": "larastan/larastan",
"version": "v3.9.3",
"source": {
"type": "git",
"url": "https://github.com/larastan/larastan.git",
"reference": "64a52bcc5347c89fdf131cb59f96ebfbc8d1ad65"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/larastan/larastan/zipball/64a52bcc5347c89fdf131cb59f96ebfbc8d1ad65",
"reference": "64a52bcc5347c89fdf131cb59f96ebfbc8d1ad65",
"shasum": ""
},
"require": {
"ext-json": "*",
"iamcal/sql-parser": "^0.7.0",
"illuminate/console": "^11.44.2 || ^12.4.1 || ^13",
"illuminate/container": "^11.44.2 || ^12.4.1 || ^13",
"illuminate/contracts": "^11.44.2 || ^12.4.1 || ^13",
"illuminate/database": "^11.44.2 || ^12.4.1 || ^13",
"illuminate/http": "^11.44.2 || ^12.4.1 || ^13",
"illuminate/pipeline": "^11.44.2 || ^12.4.1 || ^13",
"illuminate/support": "^11.44.2 || ^12.4.1 || ^13",
"php": "^8.2",
"phpstan/phpstan": "^2.1.32"
},
"require-dev": {
"doctrine/coding-standard": "^13",
"laravel/framework": "^11.44.2 || ^12.7.2 || ^13",
"mockery/mockery": "^1.6.12",
"nikic/php-parser": "^5.4",
"orchestra/canvas": "^v9.2.2 || ^10.0.1 || ^11",
"orchestra/testbench-core": "^9.12.0 || ^10.1 || ^11",
"phpstan/phpstan-deprecation-rules": "^2.0.1",
"phpunit/phpunit": "^10.5.35 || ^11.5.15 || ^12.5.8"
},
"suggest": {
"orchestra/testbench": "Using Larastan for analysing a package needs Testbench",
"phpmyadmin/sql-parser": "Install to enable Larastan's optional phpMyAdmin-based SQL parser automatically"
},
"type": "phpstan-extension",
"extra": {
"phpstan": {
"includes": [
"extension.neon"
]
},
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"psr-4": {
"Larastan\\Larastan\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Can Vural",
"email": "can9119@gmail.com"
}
],
"description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel",
"keywords": [
"PHPStan",
"code analyse",
"code analysis",
"larastan",
"laravel",
"package",
"php",
"static analysis"
],
"support": {
"issues": "https://github.com/larastan/larastan/issues",
"source": "https://github.com/larastan/larastan/tree/v3.9.3"
},
"funding": [
{
"url": "https://github.com/canvural",
"type": "github"
}
],
"time": "2026-02-20T12:07:12+00:00"
},
{
"name": "laravel/pail",
"version": "v1.2.4",
@ -7229,6 +7360,108 @@
},
"time": "2022-02-21T01:04:05+00:00"
},
{
"name": "phpstan/phpstan",
"version": "2.1.42",
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/1279e1ce86ba768f0780c9d889852b4e02ff40d0",
"reference": "1279e1ce86ba768f0780c9d889852b4e02ff40d0",
"shasum": ""
},
"require": {
"php": "^7.4|^8.0"
},
"conflict": {
"phpstan/phpstan-shim": "*"
},
"bin": [
"phpstan",
"phpstan.phar"
],
"type": "library",
"autoload": {
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHPStan - PHP Static Analysis Tool",
"keywords": [
"dev",
"static analysis"
],
"support": {
"docs": "https://phpstan.org/user-guide/getting-started",
"forum": "https://github.com/phpstan/phpstan/discussions",
"issues": "https://github.com/phpstan/phpstan/issues",
"security": "https://github.com/phpstan/phpstan/security/policy",
"source": "https://github.com/phpstan/phpstan-src"
},
"funding": [
{
"url": "https://github.com/ondrejmirtes",
"type": "github"
},
{
"url": "https://github.com/phpstan",
"type": "github"
}
],
"time": "2026-03-17T14:58:32+00:00"
},
{
"name": "phpstan/phpstan-mockery",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-mockery.git",
"reference": "89a949d0ac64298e88b7c7fa00caee565c198394"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan-mockery/zipball/89a949d0ac64298e88b7c7fa00caee565c198394",
"reference": "89a949d0ac64298e88b7c7fa00caee565c198394",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0",
"phpstan/phpstan": "^2.0"
},
"require-dev": {
"mockery/mockery": "^1.6.11",
"php-parallel-lint/php-parallel-lint": "^1.2",
"phpstan/phpstan-phpunit": "^2.0",
"phpstan/phpstan-strict-rules": "^2.0",
"phpunit/phpunit": "^9.6"
},
"type": "phpstan-extension",
"extra": {
"phpstan": {
"includes": [
"extension.neon"
]
}
},
"autoload": {
"psr-4": {
"PHPStan\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHPStan Mockery extension",
"support": {
"issues": "https://github.com/phpstan/phpstan-mockery/issues",
"source": "https://github.com/phpstan/phpstan-mockery/tree/2.0.0"
},
"time": "2024-10-14T03:18:12+00:00"
},
{
"name": "phpunit/php-code-coverage",
"version": "11.0.12",
@ -8844,7 +9077,7 @@
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": "^8.2"
"php": "^8.3"
},
"platform-dev": {},
"plugin-api-version": "2.9.0"

673
phpstan-baseline.neon Normal file
View file

@ -0,0 +1,673 @@
parameters:
ignoreErrors:
-
message: '#^Method App\\Actions\\CreateBucketAction\:\:execute\(\) should return App\\Models\\Bucket but returns Illuminate\\Database\\Eloquent\\Model\.$#'
identifier: return.type
count: 1
path: app/Actions/CreateBucketAction.php
-
message: '#^Access to undefined constant App\\Models\\Bucket\:\:TYPE_FIXED_LIMIT\.$#'
identifier: classConstant.notFound
count: 2
path: app/Http/Controllers/BucketController.php
-
message: '#^Access to undefined constant App\\Models\\Bucket\:\:TYPE_PERCENTAGE\.$#'
identifier: classConstant.notFound
count: 2
path: app/Http/Controllers/BucketController.php
-
message: '#^Access to undefined constant App\\Models\\Bucket\:\:TYPE_UNLIMITED\.$#'
identifier: classConstant.notFound
count: 3
path: app/Http/Controllers/BucketController.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:orderedBySortOrder\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Http/Controllers/BucketController.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:FREQUENCY_BIWEEKLY\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/StoreStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:FREQUENCY_MONTHLY\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/StoreStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:FREQUENCY_ONCE\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/StoreStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:FREQUENCY_QUARTERLY\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/StoreStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:FREQUENCY_WEEKLY\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/StoreStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:FREQUENCY_YEARLY\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/StoreStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:TYPE_EXPENSE\.$#'
identifier: classConstant.notFound
count: 2
path: app/Http/Requests/StoreStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:TYPE_INCOME\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/StoreStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:FREQUENCY_BIWEEKLY\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/UpdateStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:FREQUENCY_MONTHLY\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/UpdateStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:FREQUENCY_ONCE\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/UpdateStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:FREQUENCY_QUARTERLY\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/UpdateStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:FREQUENCY_WEEKLY\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/UpdateStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:FREQUENCY_YEARLY\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/UpdateStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:TYPE_EXPENSE\.$#'
identifier: classConstant.notFound
count: 2
path: app/Http/Requests/UpdateStreamRequest.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:TYPE_INCOME\.$#'
identifier: classConstant.notFound
count: 1
path: app/Http/Requests/UpdateStreamRequest.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Model\:\:buckets\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Http/Requests/UpdateStreamRequest.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\BucketResource\:\:\$allocation_type\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/BucketResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\BucketResource\:\:\$allocation_value\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/BucketResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\BucketResource\:\:\$id\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/BucketResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\BucketResource\:\:\$name\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/BucketResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\BucketResource\:\:\$priority\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/BucketResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\BucketResource\:\:\$sort_order\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/BucketResource.php
-
message: '#^Call to an undefined method App\\Http\\Resources\\BucketResource\:\:getAllocationTypeLabel\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Http/Resources/BucketResource.php
-
message: '#^Call to an undefined method App\\Http\\Resources\\BucketResource\:\:getAvailableSpace\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Http/Resources/BucketResource.php
-
message: '#^Call to an undefined method App\\Http\\Resources\\BucketResource\:\:getCurrentBalance\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Http/Resources/BucketResource.php
-
message: '#^Call to an undefined method App\\Http\\Resources\\BucketResource\:\:getFormattedAllocationValue\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Http/Resources/BucketResource.php
-
message: '#^Call to an undefined method App\\Http\\Resources\\BucketResource\:\:hasAvailableSpace\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Http/Resources/BucketResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\DrawResource\:\:\$amount_currency\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/DrawResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\DrawResource\:\:\$bucket_id\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/DrawResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\DrawResource\:\:\$date\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/DrawResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\DrawResource\:\:\$description\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/DrawResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\DrawResource\:\:\$formatted_amount\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/DrawResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\DrawResource\:\:\$id\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/DrawResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\DrawResource\:\:\$is_projected\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/DrawResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\InflowResource\:\:\$amount_currency\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/InflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\InflowResource\:\:\$date\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/InflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\InflowResource\:\:\$description\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/InflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\InflowResource\:\:\$formatted_amount\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/InflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\InflowResource\:\:\$id\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/InflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\InflowResource\:\:\$is_projected\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/InflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\InflowResource\:\:\$stream_id\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/InflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\OutflowResource\:\:\$amount_currency\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/OutflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\OutflowResource\:\:\$bucket_id\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/OutflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\OutflowResource\:\:\$date\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/OutflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\OutflowResource\:\:\$description\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/OutflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\OutflowResource\:\:\$formatted_amount\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/OutflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\OutflowResource\:\:\$id\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/OutflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\OutflowResource\:\:\$is_projected\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/OutflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\OutflowResource\:\:\$stream_id\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/OutflowResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\ScenarioResource\:\:\$created_at\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/ScenarioResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\ScenarioResource\:\:\$description\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/ScenarioResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\ScenarioResource\:\:\$id\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/ScenarioResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\ScenarioResource\:\:\$name\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/ScenarioResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\ScenarioResource\:\:\$updated_at\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/ScenarioResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\StreamResource\:\:\$amount\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\StreamResource\:\:\$bucket\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\StreamResource\:\:\$bucket_id\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\StreamResource\:\:\$description\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\StreamResource\:\:\$end_date\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\StreamResource\:\:\$frequency\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\StreamResource\:\:\$id\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\StreamResource\:\:\$is_active\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\StreamResource\:\:\$name\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\StreamResource\:\:\$start_date\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\StreamResource\:\:\$type\.$#'
identifier: property.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Call to an undefined method App\\Http\\Resources\\StreamResource\:\:getFrequencyLabel\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Call to an undefined method App\\Http\\Resources\\StreamResource\:\:getMonthlyEquivalent\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Call to an undefined method App\\Http\\Resources\\StreamResource\:\:getTypeLabel\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Http/Resources/StreamResource.php
-
message: '#^Method App\\Models\\Bucket\:\:getCurrentBalance\(\) should return int but returns float\.$#'
identifier: return.type
count: 1
path: app/Models/Bucket.php
-
message: '#^Property App\\Models\\Draw\:\:\$casts \(array\<string, string\>\) on left side of \?\? is not nullable\.$#'
identifier: nullCoalesce.property
count: 1
path: app/Models/Draw.php
-
message: '#^Property App\\Models\\Draw\:\:\$fillable \(list\<string\>\) on left side of \?\? is not nullable\.$#'
identifier: nullCoalesce.property
count: 1
path: app/Models/Draw.php
-
message: '#^Property App\\Models\\Inflow\:\:\$casts \(array\<string, string\>\) on left side of \?\? is not nullable\.$#'
identifier: nullCoalesce.property
count: 1
path: app/Models/Inflow.php
-
message: '#^Property App\\Models\\Inflow\:\:\$fillable \(list\<string\>\) on left side of \?\? is not nullable\.$#'
identifier: nullCoalesce.property
count: 1
path: app/Models/Inflow.php
-
message: '#^Property App\\Models\\Outflow\:\:\$casts \(array\<string, string\>\) on left side of \?\? is not nullable\.$#'
identifier: nullCoalesce.property
count: 1
path: app/Models/Outflow.php
-
message: '#^Property App\\Models\\Outflow\:\:\$fillable \(list\<string\>\) on left side of \?\? is not nullable\.$#'
identifier: nullCoalesce.property
count: 1
path: app/Models/Outflow.php
-
message: '#^Expression on left side of \?\? is not nullable\.$#'
identifier: nullCoalesce.expr
count: 2
path: app/Models/Stream.php
-
message: '#^Negated boolean expression is always false\.$#'
identifier: booleanNot.alwaysFalse
count: 1
path: app/Models/Stream.php
-
message: '#^Using nullsafe method call on non\-nullable type App\\Enums\\StreamFrequencyEnum\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Models/Stream.php
-
message: '#^Using nullsafe method call on non\-nullable type App\\Enums\\StreamTypeEnum\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Models/Stream.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:TYPE_EXPENSE\.$#'
identifier: classConstant.notFound
count: 1
path: app/Repositories/StreamRepository.php
-
message: '#^Access to undefined constant App\\Models\\Stream\:\:TYPE_INCOME\.$#'
identifier: classConstant.notFound
count: 1
path: app/Repositories/StreamRepository.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:byType\(\)\.$#'
identifier: method.notFound
count: 2
path: app/Repositories/StreamRepository.php
-
message: '#^Method App\\Repositories\\StreamRepository\:\:create\(\) should return App\\Models\\Stream but returns Illuminate\\Database\\Eloquent\\Model\.$#'
identifier: return.type
count: 1
path: app/Repositories/StreamRepository.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$id\.$#'
identifier: property.notFound
count: 1
path: app/Services/Projection/PipelineAllocationService.php
-
message: '#^Match arm comparison between App\\Enums\\BucketAllocationTypeEnum\:\:UNLIMITED and App\\Enums\\BucketAllocationTypeEnum\:\:UNLIMITED is always true\.$#'
identifier: match.alwaysTrue
count: 1
path: app/Services/Projection/PipelineAllocationService.php
-
message: '#^Parameter \#1 \$bucket of method App\\Services\\Projection\\PipelineAllocationService\:\:calculateBucketAllocation\(\) expects App\\Models\\Bucket, Illuminate\\Database\\Eloquent\\Model given\.$#'
identifier: argument.type
count: 1
path: app/Services/Projection/PipelineAllocationService.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$amount\.$#'
identifier: property.notFound
count: 2
path: app/Services/Projection/ProjectionGeneratorService.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$bucket_id\.$#'
identifier: property.notFound
count: 1
path: app/Services/Projection/ProjectionGeneratorService.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$id\.$#'
identifier: property.notFound
count: 2
path: app/Services/Projection/ProjectionGeneratorService.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$name\.$#'
identifier: property.notFound
count: 3
path: app/Services/Projection/ProjectionGeneratorService.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$type\.$#'
identifier: property.notFound
count: 1
path: app/Services/Projection/ProjectionGeneratorService.php
-
message: '#^Parameter \#1 \$stream of method App\\Services\\Projection\\ProjectionGeneratorService\:\:streamFiresOnDate\(\) expects App\\Models\\Stream, Illuminate\\Database\\Eloquent\\Model given\.$#'
identifier: argument.type
count: 1
path: app/Services/Projection/ProjectionGeneratorService.php
-
message: '#^Parameter \#2 \$amount of method App\\Services\\Projection\\PipelineAllocationService\:\:allocateInflow\(\) expects int, float given\.$#'
identifier: argument.type
count: 1
path: app/Services/Projection/ProjectionGeneratorService.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Model\:\:getMonthlyEquivalent\(\)\.$#'
identifier: method.notFound
count: 2
path: app/Services/Streams/StatsService.php
-
message: '#^Unreachable statement \- code above always terminates\.$#'
identifier: deadCode.unreachable
count: 4
path: tests/Feature/Auth/AuthenticationTest.php
-
message: '#^Unreachable statement \- code above always terminates\.$#'
identifier: deadCode.unreachable
count: 4
path: tests/Feature/Auth/PasswordResetTest.php
-
message: '#^Unreachable statement \- code above always terminates\.$#'
identifier: deadCode.unreachable
count: 1
path: tests/Feature/Auth/RegistrationTest.php
-
message: '#^Unreachable statement \- code above always terminates\.$#'
identifier: deadCode.unreachable
count: 1
path: tests/Feature/Auth/TwoFactorChallengeTest.php
-
message: '#^Unreachable statement \- code above always terminates\.$#'
identifier: deadCode.unreachable
count: 2
path: tests/Feature/Auth/VerificationNotificationTest.php
-
message: '#^Unreachable statement \- code above always terminates\.$#'
identifier: deadCode.unreachable
count: 2
path: tests/Feature/Settings/PasswordUpdateTest.php
-
message: '#^Unreachable statement \- code above always terminates\.$#'
identifier: deadCode.unreachable
count: 4
path: tests/Feature/Settings/ProfileUpdateTest.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$allocation_type\.$#'
identifier: property.notFound
count: 3
path: tests/Unit/Actions/CreateBucketActionTest.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$allocation_value\.$#'
identifier: property.notFound
count: 3
path: tests/Unit/Actions/CreateBucketActionTest.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$name\.$#'
identifier: property.notFound
count: 5
path: tests/Unit/Actions/CreateBucketActionTest.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$priority\.$#'
identifier: property.notFound
count: 3
path: tests/Unit/Actions/CreateBucketActionTest.php
-
message: '#^Call to method PHPUnit\\Framework\\Assert\:\:assertNull\(\) with float will always evaluate to false\.$#'
identifier: method.impossibleType
count: 2
path: tests/Unit/Actions/CreateBucketActionTest.php

17
phpstan.neon Normal file
View file

@ -0,0 +1,17 @@
includes:
- vendor/larastan/larastan/extension.neon
- vendor/phpstan/phpstan-mockery/extension.neon
- phpstan-baseline.neon
parameters:
level: 5
paths:
- app/
- tests/
excludePaths:
- bootstrap/*.php
- storage/*
ignoreErrors:
- identifier: method.alreadyNarrowedType