{"id":21194425,"url":"https://github.com/cspray/phinal","last_synced_at":"2025-07-10T03:33:39.950Z","repository":{"id":44156779,"uuid":"511974664","full_name":"cspray/phinal","owner":"cspray","description":"A Psalm plugin to ensure your classes are marked final!","archived":false,"fork":false,"pushed_at":"2023-01-26T13:37:05.000Z","size":9,"stargazers_count":13,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-11-16T13:23:39.122Z","etag":null,"topics":["php","psalm-plugin"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cspray.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-07-08T17:26:27.000Z","updated_at":"2024-09-27T16:56:04.000Z","dependencies_parsed_at":"2023-02-14T17:46:18.058Z","dependency_job_id":null,"html_url":"https://github.com/cspray/phinal","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":"psalm/psalm-plugin-skeleton","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cspray%2Fphinal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cspray%2Fphinal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cspray%2Fphinal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cspray%2Fphinal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cspray","download_url":"https://codeload.github.com/cspray/phinal/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225616378,"owners_count":17497157,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["php","psalm-plugin"],"created_at":"2024-11-20T19:22:07.571Z","updated_at":"2025-07-10T03:33:39.943Z","avatar_url":"https://github.com/cspray.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Phinal\n\nDo you like final? _Really_ like it? Then enforce it on all your classes! When you have to fallback to inheritance you can do so by explicitly marking your class with an Attribute and explaining why it should be inherited.\n\n## Installation\n\n### Running Psalm 6\n\n```\ncomposer require --dev cspray/phinal\nvendor/bin/psalm-plugin enable cspray/phinal\n```\n\n### Running Psalm 5\n\n```\ncomposer require --dev cspray/phinal:2.1\nvendor/bin/psalm-plugin enable cspray/phinal\n```\n\n### Running Psalm 4\n\n```\ncomposer require --dev cspray/phinal:1.0.0\nvendor/bin/psalm-plugin enable cspray/phinal\n```\n\n## Code Examples\n\nGood! :+1:\n\n```php\n\u003c?php declare(strict_types=1);\n\nuse Cspray\\Phinal\\AllowInheritance;\n\nfinal class ProperlyMarkedFinal {}\n\n#[AllowInheritance('Explain why you would need to inherit this.')]\nclass YouCanInheritThis {}\n```\n\nBad! :-1:\n\n```php\n\u003c?php declare(strict_types=1);\n\nclass NotMarkedFinal {}\n```\n\nWhy do you need to inherit this? You probably don't need to and should mark it final!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcspray%2Fphinal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcspray%2Fphinal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcspray%2Fphinal/lists"}