您的位置:首页 > 教育 > 培训 > php质量工具系列之paslm

php质量工具系列之paslm

2025/8/8 6:57:15 来源:https://blog.csdn.net/made4971/article/details/139166603  浏览:    关键词:php质量工具系列之paslm

Psalm是一个静态分析工具,深入程序,尽可能多地找到与类型相关的bug
混合类型警告
Intelligent logic checks
属性初始化检查
Taint analysis
Language Server
Automatic fixes
Automatic refactoring

安装

composer global require --dev vimeo/psalm 
# 当使用这个方式安装时,如果psalm的依赖和项目依赖有冲突,可使用phar安装
composer global require --dev psalm/phar

注意:
linux上,需要将全局composer的可执行目录加入环境变量,目录路径一般是/tmp/composer/vendor/bin
环境变量配置

windows上,只需在环境变量path中加上composer路径,目录路径一般是
%APPDATA%\Composer\vendor\bin

初始化

./vendor/bin/psalm --init

psalm扫描你的项目,评估适合项目的错误级别,并生成psalm.xml文件用于后续的扫描配置

执行

./vendor/bin/psalm#或者扫描某个或某些文件
./vendor/bin/psalm file1.php [file2.php...]
./vendor/bin/psalm --show-info=true

参数解释:
–show-info 显示非异常的分析结果

#针对特定问题给出psalm的解决方案,可参考其结果进行代码修复
./vendor/bin/psalm --alter --issues=MissingReturnType --dry-run

参数解释:
–issues all 显示全部问题解决方案;其他问题type,多个间以逗号分隔,如 MissingReturnType,InvalidArgument

插件

查看可用插件列表

composer search -t psalm-plugin '.'

安装

composer global require --dev <plugin-vendor/plugin-package>

启用

vendor/bin/psalm-plugin enable plugin-vendor/plugin-package

禁用

vendor/bin/psalm-plugin disable plugin-vendor/plugin-package

显示已安装列表

vendor/bin/psalm-plugin show

配置

以下是我的配置,大家可以根据情况选择配置

<?xml version="1.0"?>
<psalmerrorLevel="4"resolveFromConfigFile="true"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="https://getpsalm.org/schema/config"xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"findUnusedBaselineEntry="true"findUnusedCode="true"autoloader="psalm_autoloader.php"allowStringToStandInForClass="true"
><!-- 添加错误忽略配置 --><issueHandlers><DocblockTypeContradiction><errorLevel type="suppress"><directory name="app"/><!--<file name="path/to/file_with_unused_methods.php"/>--></errorLevel></DocblockTypeContradiction><NonInvariantDocblockPropertyType><errorLevel type="suppress"><directory name="app"/></errorLevel></NonInvariantDocblockPropertyType><PossiblyUndefinedArrayOffset><errorLevel type="suppress"><directory name="app"/></errorLevel></PossiblyUndefinedArrayOffset><PossiblyInvalidOperand><errorLevel type="suppress"><directory name="app"/></errorLevel></PossiblyInvalidOperand><PossiblyUndefinedVariable><errorLevel type="suppress"><directory name="app"/></errorLevel></PossiblyUndefinedVariable><RiskyTruthyFalsyComparison><errorLevel type="suppress"><directory name="app"/></errorLevel></RiskyTruthyFalsyComparison><PossiblyInvalidMethodCall><errorLevel type="suppress"><directory name="app/model"/></errorLevel></PossiblyInvalidMethodCall><MissingReturnType><errorLevel type="suppress"><directory name="app/model"/></errorLevel></MissingReturnType><PossiblyNullOperand><errorLevel type="suppress"><directory name="app/model"/></errorLevel></PossiblyNullOperand><PossiblyNullArgument><errorLevel type="suppress"><directory name="app/model"/></errorLevel></PossiblyNullArgument><PropertyNotSetInConstructor><errorLevel type="suppress"><directory name="app"/></errorLevel></PropertyNotSetInConstructor><UnusedClass><errorLevel type="suppress"><directory name="app"/></errorLevel></UnusedClass><PossiblyUnusedMethod><errorLevel type="suppress"><directory name="app"/></errorLevel></PossiblyUnusedMethod><UndefinedConstant><errorLevel type="suppress"><directory name="app"/><directory name="config"/></errorLevel></UndefinedConstant><UnusedConstructor><errorLevel type="suppress"><file name="app/redis"/></errorLevel></UnusedConstructor><UnusedMethod><errorLevel type="suppress"><file name="app/common"/></errorLevel></UnusedMethod><UnusedFunctionCall><errorLevel type="suppress"><file name="app/common.php"/></errorLevel></UnusedFunctionCall><PossiblyUnusedProperty><errorLevel type="suppress"><file name="app/BaseController.php"/></errorLevel></PossiblyUnusedProperty><InvalidArrayOffset><errorLevel type="suppress"><file name="app/common.php"/></errorLevel></InvalidArrayOffset><InvalidArgument><errorLevel type="suppress"><file name="config/database.php"/></errorLevel></InvalidArgument></issueHandlers><!-- 配置需要扫描的范围,以及需要忽略的目录和文件 --><projectFiles><directory name="app" /><directory name="config" /><ignoreFiles><directory name="vendor" /><directory name="test" /><file name="app/command/Swagger.php" /></ignoreFiles></projectFiles>
</psalm>

文档解释:
issueHandlers 中是扫描问题的类型,其中directory 是需要忽略问题的目录,file是需要忽略问题的文件

自动化构建(Jenkins)中使用

参考文章 jenkins插件之Warnings 项目配置一章中的psalm章节

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com