sn1054/psalm-for-moodle

Moodle 的 vimeo/psalm 分支

dev-master / 5.x-dev 2023-01-25 17:25 UTC

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 的语言服务器与多种不同的 IDE 兼容

  • 自动修复
    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。

索引