sn1054 / psalm-for-moodle
Moodle 的 vimeo/psalm 分支
dev-master / 5.x-dev
2023-01-25 17:25 UTC
Requires
- php: ^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0
- ext-ctype: *
- ext-dom: *
- ext-json: *
- ext-libxml: *
- ext-mbstring: *
- ext-simplexml: *
- ext-tokenizer: *
- amphp/amp: ^2.4.2
- amphp/byte-stream: ^1.5
- composer/package-versions-deprecated: ^1.10.0
- composer/semver: ^1.4 || ^2.0 || ^3.0
- composer/xdebug-handler: ^2.0 || ^3.0
- dnoegel/php-xdg-base-dir: ^0.1.1
- felixfbecker/advanced-json-rpc: ^3.1
- felixfbecker/language-server-protocol: ^1.5.2
- fidry/cpu-core-counter: ^0.4.0
- netresearch/jsonmapper: ^1.0 || ^2.0 || ^3.0 || ^4.0
- nikic/php-parser: ^4.13
- sebastian/diff: ^4.0 || ^5.0
- spatie/array-to-xml: ^2.17.0
- symfony/console: ^4.1.6 || ^5.0 || ^6.0
- symfony/filesystem: ^5.4 || ^6.0
Requires (Dev)
- ext-curl: *
- bamarni/composer-bin-plugin: ^1.4
- brianium/paratest: ^6.0
- mockery/mockery: ^1.5
- nunomaduro/mock-final-classes: ^1.1
- php-parallel-lint/php-parallel-lint: ^1.2
- phpstan/phpdoc-parser: ^1.6
- phpunit/phpunit: ^9.5
- psalm/plugin-mockery: ^1.1
- psalm/plugin-phpunit: ^0.18
- slevomat/coding-standard: ^8.4
- squizlabs/php_codesniffer: ^3.6
- symfony/process: ^4.4 || ^5.0 || ^6.0
Suggests
- ext-curl: In order to send data to shepherd
- ext-igbinary: ^2.0.5 is required, used to serialize caching data
Provides
- psalm/psalm: dev-master
This package is not auto-updated.
Last update: 2024-09-19 23:46:14 UTC
README
Psalm 是一个静态分析工具,旨在深入分析您的程序并尽可能多地找到类型相关的错误。
它具有一些其他类似工具所没有的特性
-
混合类型警告
如果 Psalm 无法推断表达式的类型,则使用mixed
占位符类型。有时mixed
类型会掩盖错误,因此跟踪它们可以帮助您避免许多常见陷阱。 -
智能逻辑检查
Psalm 会跟踪您代码中提出的逻辑断言,因此if ($a && $a) {}
和if ($a && !$a) {}
都会被视为问题。Psalm 还会跟踪先前代码路径中提出的逻辑断言,防止出现if ($a) {} elseif ($a) {}
这样的问题。 -
属性初始化检查
Psalm 会检查在调用构造函数后给定对象的全部属性是否都有值。 -
污点分析
Psalm 可以 检测代码中的安全漏洞。 -
自动修复
Psalm 可以 自动修复它找到的许多问题。
示例输出
给定文件 implode_strings.php
<?php $a = ['foo', 'bar']; echo implode($a, ' ');
> ./vendor/bin/psalm implode_strings.php ERROR: InvalidArgument - somefile.php:3:14 - Argument 1 of implode expects `string`, `array` provided (see https://psalm.dev/004)
灵感
Psalm 有两个主要的灵感来源
- Etsy 的 Phan,它使用 nikic 的 php-ast 扩展来创建抽象语法树
- Facebook 的 Hack,一种支持许多原生高级类型功能的类似 PHP 的语言,因此不需要 docblocks。
索引
- 运行 Psalm
- 安装
- 配置
- 插件
- 命令行使用
- IDE 支持
- 处理错误
- 检查非 PHP 文件
- 注释代码
- 操作代码