diff --git a/app/DiscoverCategory.php b/app/DiscoverCategory.php index 5ecd0e291..618360b05 100644 --- a/app/DiscoverCategory.php +++ b/app/DiscoverCategory.php @@ -5,6 +5,14 @@ namespace App; use Illuminate\Database\Eloquent\Model; use App\{Status, StatusHashtag, Media}; +/** + * @property int $id + * @property string $slug + * @property int|null $media_id + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \App\Media|null $media + */ class DiscoverCategory extends Model { protected $fillable = ['slug']; diff --git a/app/FollowRequest.php b/app/FollowRequest.php index 3c72dc8b9..dffee0c30 100644 --- a/app/FollowRequest.php +++ b/app/FollowRequest.php @@ -5,6 +5,19 @@ namespace App; use Illuminate\Database\Eloquent\Model; use App\Profile; +/** + * @property int $id + * @property int $follower_id + * @property int $following_id + * @property array|null $activity + * @property \Illuminate\Support\Carbon|null $handled_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \App\Profile $target + * @property-read \App\Profile $actor + * @property-read \App\Profile $follower + * @property-read \App\Profile $following + */ class FollowRequest extends Model { protected $fillable = ['follower_id', 'following_id', 'activity', 'handled_at']; diff --git a/app/Follower.php b/app/Follower.php index 1fff27912..ff7f2d6de 100644 --- a/app/Follower.php +++ b/app/Follower.php @@ -5,6 +5,17 @@ namespace App; use Illuminate\Database\Eloquent\Model; use App\Profile; +/** + * @property int $id + * @property int $profile_id + * @property int $following_id + * @property bool|null $local_profile + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \App\Profile $actor + * @property-read \App\Profile $target + * @property-read \App\Profile $profile + */ class Follower extends Model { diff --git a/app/Http/Resources/Admin/AdminModeratedProfileResource.php b/app/Http/Resources/Admin/AdminModeratedProfileResource.php index d0ce5a617..152cda1a5 100644 --- a/app/Http/Resources/Admin/AdminModeratedProfileResource.php +++ b/app/Http/Resources/Admin/AdminModeratedProfileResource.php @@ -6,6 +6,20 @@ use App\Profile; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; +/** + * @property int $id + * @property string $domain + * @property int $profile_id + * @property string|null $profile_url + * @property string|null $note + * @property bool $is_banned + * @property bool $is_nsfw + * @property bool $is_unlisted + * @property bool $is_noautolink + * @property bool $is_nodms + * @property bool $is_notrending + * @property \Illuminate\Support\Carbon $created_at + */ class AdminModeratedProfileResource extends JsonResource { /** diff --git a/app/Http/Resources/AdminHashtag.php b/app/Http/Resources/AdminHashtag.php index 4ca164268..924481c72 100644 --- a/app/Http/Resources/AdminHashtag.php +++ b/app/Http/Resources/AdminHashtag.php @@ -4,6 +4,17 @@ namespace App\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; +/** + * @property int $id + * @property string $name + * @property string $slug + * @property bool|null $can_trend + * @property bool|null $can_search + * @property bool $is_nsfw + * @property bool $is_banned + * @property int|null $cached_count + * @property \Illuminate\Support\Carbon $created_at + */ class AdminHashtag extends JsonResource { /** diff --git a/app/Http/Resources/AdminInstance.php b/app/Http/Resources/AdminInstance.php index d534f4681..3d0d55889 100644 --- a/app/Http/Resources/AdminInstance.php +++ b/app/Http/Resources/AdminInstance.php @@ -4,6 +4,22 @@ namespace App\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; +/** + * @property int $id + * @property string $domain + * @property string|null $software + * @property bool $unlisted + * @property bool $auto_cw + * @property bool $banned + * @property int|null $user_count + * @property int|null $status_count + * @property \Illuminate\Support\Carbon|null $last_crawled_at + * @property string|null $notes + * @property string|null $base_domain + * @property bool|null $ban_subdomains + * @property \Illuminate\Support\Carbon|null $actors_last_synced_at + * @property \Illuminate\Support\Carbon $created_at + */ class AdminInstance extends JsonResource { /** diff --git a/app/Http/Resources/AdminProfile.php b/app/Http/Resources/AdminProfile.php index 50db2d5ca..befcc15cd 100644 --- a/app/Http/Resources/AdminProfile.php +++ b/app/Http/Resources/AdminProfile.php @@ -6,6 +6,14 @@ use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; use App\Services\AccountService; +/** + * @property int $id + * @property string|null $domain + * @property string|null $status + * @property bool $cw + * @property bool $unlisted + * @property bool $no_autolink + */ class AdminProfile extends JsonResource { /** diff --git a/app/Http/Resources/AdminRemoteReport.php b/app/Http/Resources/AdminRemoteReport.php index a726e25cc..c32167476 100644 --- a/app/Http/Resources/AdminRemoteReport.php +++ b/app/Http/Resources/AdminRemoteReport.php @@ -8,6 +8,16 @@ use App\Instance; use App\Services\AccountService; use App\Services\StatusService; +/** + * @property int $id + * @property string $uri + * @property int $account_id + * @property array|null $status_ids + * @property string|null $comment + * @property array|null $report_meta + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $action_taken_at + */ class AdminRemoteReport extends JsonResource { /** diff --git a/app/Http/Resources/AdminReport.php b/app/Http/Resources/AdminReport.php index 9b9681bcc..c74a520a4 100644 --- a/app/Http/Resources/AdminReport.php +++ b/app/Http/Resources/AdminReport.php @@ -8,6 +8,17 @@ use App\Story; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; +/** + * @property int $id + * @property int $profile_id + * @property string|null $type + * @property int $object_id + * @property string $object_type + * @property int $reported_profile_id + * @property string|null $message + * @property \Illuminate\Support\Carbon|null $admin_seen + * @property \Illuminate\Support\Carbon $created_at + */ class AdminReport extends JsonResource { /** diff --git a/app/Http/Resources/AdminSpamReport.php b/app/Http/Resources/AdminSpamReport.php index 6e2badd0f..fb872507a 100644 --- a/app/Http/Resources/AdminSpamReport.php +++ b/app/Http/Resources/AdminSpamReport.php @@ -7,6 +7,14 @@ use Illuminate\Http\Resources\Json\JsonResource; use App\Services\AccountService; use App\Services\StatusService; +/** + * @property int $id + * @property string $type + * @property int|null $item_id + * @property string|null $item_type + * @property \Illuminate\Support\Carbon|null $read_at + * @property \Illuminate\Support\Carbon $created_at + */ class AdminSpamReport extends JsonResource { /** diff --git a/app/Http/Resources/AdminUser.php b/app/Http/Resources/AdminUser.php index 390c5c00e..5bf41f307 100644 --- a/app/Http/Resources/AdminUser.php +++ b/app/Http/Resources/AdminUser.php @@ -5,6 +5,21 @@ namespace App\Http\Resources; use App\Services\AccountService; use Illuminate\Http\Resources\Json\JsonResource; +/** + * @property int $id + * @property int $profile_id + * @property string|null $name + * @property string $username + * @property bool $is_admin + * @property string $email + * @property \Illuminate\Support\Carbon|null $email_verified_at + * @property bool $2fa_enabled + * @property string|null $register_source + * @property string|null $app_register_ip + * @property bool $has_interstitial + * @property \Illuminate\Support\Carbon|null $last_active_at + * @property \Illuminate\Support\Carbon $created_at + */ class AdminUser extends JsonResource { /** diff --git a/app/Http/Resources/DirectoryProfile.php b/app/Http/Resources/DirectoryProfile.php index d5d4b5841..741128ce0 100644 --- a/app/Http/Resources/DirectoryProfile.php +++ b/app/Http/Resources/DirectoryProfile.php @@ -6,6 +6,11 @@ use Illuminate\Http\Resources\Json\JsonResource; use Cache; use App\Services\AccountService; +/** + * @property int $id + * @property string|null $name + * @property string $username + */ class DirectoryProfile extends JsonResource { /** diff --git a/app/Http/Resources/ImportStatus.php b/app/Http/Resources/ImportStatus.php index a5178f95b..cd6cf6678 100644 --- a/app/Http/Resources/ImportStatus.php +++ b/app/Http/Resources/ImportStatus.php @@ -6,6 +6,9 @@ use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; use App\Services\StatusService; +/** + * @property int $status_id + */ class ImportStatus extends JsonResource { /** diff --git a/app/Http/Resources/MastoApi/Admin/DomainBlockResource.php b/app/Http/Resources/MastoApi/Admin/DomainBlockResource.php index eeb3ddc09..77ea79d77 100644 --- a/app/Http/Resources/MastoApi/Admin/DomainBlockResource.php +++ b/app/Http/Resources/MastoApi/Admin/DomainBlockResource.php @@ -5,6 +5,15 @@ namespace App\Http\Resources\MastoApi\Admin; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; +/** + * @property int $id + * @property string $domain + * @property bool $banned + * @property bool $unlisted + * @property \Illuminate\Support\Carbon $updated_at + * @property array|null $notes + * @property string|null $limit_reason + */ class DomainBlockResource extends JsonResource { /** diff --git a/app/Http/Resources/MastoApi/FollowedTagResource.php b/app/Http/Resources/MastoApi/FollowedTagResource.php index 3c690d05a..f78010650 100644 --- a/app/Http/Resources/MastoApi/FollowedTagResource.php +++ b/app/Http/Resources/MastoApi/FollowedTagResource.php @@ -7,6 +7,9 @@ use Illuminate\Http\JsonResponse; use Cache; use App\Services\HashtagService; +/** + * @property int $hashtag_id + */ class FollowedTagResource extends JsonResource { /** diff --git a/app/Http/Resources/StoryView.php b/app/Http/Resources/StoryView.php index ca7d78297..bb6dc079a 100644 --- a/app/Http/Resources/StoryView.php +++ b/app/Http/Resources/StoryView.php @@ -6,6 +6,10 @@ use App\Services\AccountService; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; +/** + * @property int $profile_id + * @property \Illuminate\Support\Carbon $created_at + */ class StoryView extends JsonResource { /** diff --git a/app/Http/Resources/UserAppSettingsResource.php b/app/Http/Resources/UserAppSettingsResource.php index 814a8f55c..f7462564f 100644 --- a/app/Http/Resources/UserAppSettingsResource.php +++ b/app/Http/Resources/UserAppSettingsResource.php @@ -5,6 +5,11 @@ namespace App\Http\Resources; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; +/** + * @property int $profile_id + * @property \Illuminate\Support\Carbon $updated_at + * @property array|null $common + */ class UserAppSettingsResource extends JsonResource { diff --git a/app/Models/Group.php b/app/Models/Group.php index 508ed98c0..bb30b3d1a 100644 --- a/app/Models/Group.php +++ b/app/Models/Group.php @@ -9,6 +9,19 @@ use App\Profile; use App\Services\GroupService; use Illuminate\Database\Eloquent\SoftDeletes; +/** + * @property int $id + * @property int $profile_id + * @property string|null $name + * @property bool $is_private + * @property bool $local + * @property string|null $remote_url + * @property array|null $metadata + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property-read bool $is_local + */ class Group extends Model { use HasSnowflakePrimary, HasFactory, SoftDeletes; diff --git a/app/Models/ParentalControls.php b/app/Models/ParentalControls.php index 83d47c18a..f84d17beb 100644 --- a/app/Models/ParentalControls.php +++ b/app/Models/ParentalControls.php @@ -8,6 +8,20 @@ use Illuminate\Database\Eloquent\SoftDeletes; use App\User; use App\Services\AccountService; +/** + * @property int $id + * @property int $parent_id + * @property int $child_id + * @property array|null $permissions + * @property string|null $verify_code + * @property \Illuminate\Support\Carbon|null $email_sent_at + * @property \Illuminate\Support\Carbon|null $email_verified_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property-read \App\User $parent + * @property-read \App\User $child + */ class ParentalControls extends Model { use HasFactory, SoftDeletes; diff --git a/app/Profile.php b/app/Profile.php index 758ba311d..600577bc8 100644 --- a/app/Profile.php +++ b/app/Profile.php @@ -10,6 +10,25 @@ use App\Services\FollowerService; use App\Models\ProfileAlias; use App\Avatar; +/** + * @property int $id + * @property int|null $user_id + * @property string $username + * @property string|null $name + * @property string|null $domain + * @property string|null $remote_url + * @property bool $is_private + * @property int $status_count + * @property int $following_count + * @property int $followers_count + * @property \Illuminate\Support\Carbon|null $last_fetched_at + * @property \Illuminate\Support\Carbon|null $last_status_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property-read \App\User|null $user + * @property-read \App\Avatar $avatar + */ class Profile extends Model { use HasSnowflakePrimary, SoftDeletes; diff --git a/rector.php b/rector.php new file mode 100644 index 000000000..a54526a6b --- /dev/null +++ b/rector.php @@ -0,0 +1,71 @@ +withPaths([ + __DIR__ . '/app', + __DIR__ . '/bootstrap', + __DIR__ . '/config', + __DIR__ . '/public', + __DIR__ . '/resources', + __DIR__ . '/routes', + __DIR__ . '/tests', + ]) + ->withRules([ + // UNUSED PRIVATE METHODS & PROPERTIES + RemoveUnusedPrivateMethodRector::class, // Remove unused private methods + // RemoveUnusedPrivatePropertyRector::class, // Remove unused private properties + /// RemoveUnusedPromotedPropertyRector::class, // Remove unused promoted properties (PHP 8.0+) + + // UNUSED VARIABLES & ASSIGNMENTS + // RemoveUnusedVariableAssignRector::class, // Remove unused variable assignments + // RemoveJustPropertyFetchForAssignRector::class, // Remove property fetch that's only assigned but never used + /// RemoveUnusedForeachKeyRector::class, // Remove unused foreach keys + + // UNREACHABLE & DEAD CODE + // RemoveUnreachableStatementRector::class, // Remove unreachable statements after return/throw + /// RemoveDeadStmtRector::class, // Remove dead statements + /// RemoveDeadInstanceOfRector::class, // Remove dead instanceof checks + /// RemoveDeadConditionAboveReturnRector::class, // Remove dead conditions above return + /// RemoveDeadLoopRector::class, // Remove loops that never execute + /// RemoveDeadTryCatchRector::class, // Remove try-catch that never catches + + // USELESS ANNOTATIONS + // RemoveUselessParamTagRector::class, // Remove useless @param tags + /// RemoveUselessReturnTagRector::class, // Remove useless @return tags + /// RemoveNonExistingVarAnnotationRector::class, // Remove @var for non-existing variables + + // SIMPLIFY CONDITIONS + /// RemoveAlwaysTrueIfConditionRector::class, // Remove always-true if conditions + /// SimplifyIfElseWithSameContentRector::class, // Simplify if-else with same content + /// RemoveDuplicatedCaseInSwitchRector::class, // Remove duplicated switch cases + + + + // UNNECESSARY OPERATIONS + /// RemoveConcatAutocastRector::class, // Remove unnecessary string concatenation autocasts + /// RecastingRemovalRector::class, // Remove unnecessary type recasting + ]);