1{
2 lib,
3 fetchurl,
4 fetchFromGitHub,
5 php,
6 versionCheckHook,
7 runCommand,
8}:
9
10let
11 version = "6.13.1";
12
13 # The PHAR file is only required to get the `composer.lock` file
14 psalm-phar = fetchurl {
15 url = "https://github.com/vimeo/psalm/releases/download/${version}/psalm.phar";
16 hash = "sha256-bOxm5LYiQDCY0hU998Wnnp2+x44sidfCf/OqlQ+1gvA=";
17 };
18in
19php.buildComposerProject2 (finalAttrs: {
20 pname = "psalm";
21 inherit version;
22
23 src = fetchFromGitHub {
24 owner = "vimeo";
25 repo = "psalm";
26 tag = finalAttrs.version;
27 hash = "sha256-QsANvg/QXJucjxwM6IF20mZu4DPw/RcBJV6+5tJkZB0=";
28 };
29
30 composerLock = runCommand "composer.lock" { } ''
31 ${lib.getExe php} -r '$phar = new Phar("${psalm-phar}"); $phar->extractTo(".", "composer.lock");'
32 cp composer.lock $out
33 '';
34 vendorHash = "sha256-18FAMuOO6rWAQEIJOLGxj/Avr5ZQRuI4ao2RL2nJlYc=";
35
36 doInstallCheck = true;
37 nativeInstallCheckInputs = [ versionCheckHook ];
38 versionCheckProgramArg = "--version";
39
40 meta = {
41 broken = lib.versionOlder php.version "8.2";
42 changelog = "https://github.com/vimeo/psalm/releases/tag/${finalAttrs.version}";
43 description = "Static analysis tool for finding errors in PHP applications";
44 homepage = "https://github.com/vimeo/psalm";
45 license = lib.licenses.mit;
46 mainProgram = "psalm";
47 maintainers = [ lib.maintainers.patka ];
48 };
49})