itrocks/class-use

"这个类在哪里使用,用途是什么?" 的索引和查询库

dev-master 2023-10-06 13:03 UTC

This package is auto-updated.

Last update: 2024-09-06 14:48:17 UTC


README

这个 it.rocks 库给你的软件提供了快速回答 "这个类在哪里使用,用途是什么?" 问题的能力。

它提供编程 API 和命令行来扫描你的 PHP 项目中的类引用,将它们存储到文件系统中的索引类使用缓存中,然后允许你在整个项目中搜索类的使用情况。

它旨在简单易用于任何 PHP 项目,且执行速度快。其代码旨在简单和轻量:无库依赖,我尽量将其限制在尽可能少的抽象层,以便代码易于理解和更新。

先决条件

命令行使用

命令行可用于演示用途和基准测试:它显示操作持续时间、内存使用量和计数器。这使得在不编写源代码的情况下测试库变得容易。

安装

git clone itrocks/class-use

# make it available from any directory (Linux systems):
sudo ln -s `pwd`/class-use/bin/run /usr/local/bin/class-use

更新缓存

从你的 PHP 项目的任何子目录(例如,从项目根目录这里)

class-use vendor

# OR: if you did not add a direct link to the console script, you can do the same with (Linux systems):
/path/to/your/clone/of/itrocks/class-use/bin/run vendor

# OR: if you have php installed on a non-Linux system (e.g. Windows):
php /path/to/your/clone/of/itrocks/class-use/bin/run.php vendor

选项

  • reset:完全重新计算你的类使用缓存。如果不设置,则仅扫描自上次更新以来修改的文件进行更新。
  • pretty:类使用缓存 json 文件将是可读的,包括空格和换行符;尽管如此,缓存文件会更大。
  • vendor:更新 vendor 目录中的 PHP 文件类使用情况。如果不设置,则仅扫描你的项目文件,这将非常快,且仅在你不需要第三方 PHP 脚本类使用信息的情况下才足够。

搜索出现次数

从你的 PHP 项目的任何目录(例如,从项目根目录这里)

class-use type=declare-class use=ITRocks/Class_Use/Index data

此示例将输出所有脚本中对类使用 Index 的所有使用。

如果你喜欢转义反斜杠,请随意输入它们以匹配 PHP 类路径命名规则

class-use type=declare-class use=ITRocks\\Class_Use\\Index data

搜索关键字

你可以使用一个或多个搜索标准,由以下关键字标识

  • class:仅在类源代码中搜索类使用
  • use:搜索此类使用的类使用
  • type:搜索此类类型的类使用(类型列表如下)

选项

这些选项可以添加到你的命令行

  • associative:结果记录键将是文本而不是任意数字计数器。
  • benchmark:显示搜索速度和内存消耗的基准测量。
  • data:以紧凑的 json 格式显示找到的类使用。
  • total:显示结果总数,例如 "2 results"。
  • pretty:以漂亮的 json 格式显示找到的类使用。

如果没有设置 associative/data/pretty/total 选项,则默认应用 total 选项。

关联结果键是

  • class:使用此使用的类上下文名称
  • type:使用类型(类型列表如下)
  • use:使用的类名
  • file:使用所在的文件名
  • line:行号
  • token:用于源代码中具有类名的标记的索引

编程API使用

安装

要将此添加到您的项目中

composer require itrocks/class-use

更新缓存

当您的项目需要更新缓存时,请按照以下步骤进行更新

use ITRocks\Class_Use\Index;

$index = new Index(Index::VENDOR);
$index->scanDirectory();
$index->classify();
$index->save();

选项标志

  • Index::VENDOR:更新有关vendor目录中php文件的类使用缓存。如果不设置,则仅扫描您的项目文件,这将更快,并且如果您不需要第三方PHP脚本类使用信息,则足够。
  • Index::RESET:完全重新计算您的类使用缓存。如果不设置,则仅扫描自上次更新以来修改的文件以进行更新。
  • Index::PRETTY:类使用缓存json文件将是可读的,包括空格和换行符;然而,缓存文件会更大。

Index的构造函数有一个第二个参数$home,用于强制指定扫描类和保存类使用缓存的目录。如果不设置,则将从当前工作目录中找到的项目文件进行扫描。

搜索出现次数

use ITRocks\Class_Use\Index;

echo "These are where the Index class is used:\n";
$index = new Index();
foreach ($index->search([T_USE => Index::class]) as $reference) {
  [$class, $type, $use, $file, $line, $token] = $reference;
	echo "#$key. $type into $file";
	if ($class) echo " class $class";
	echo " token $token line $line";
	echo "\n";
}

此示例将输出项目中所有脚本中对类使用Index的所有引用。

您可以在examples目录中运行脚本,以查看多个示例的实际运行情况。例如:

php examples/complete.php

tests/scanner.references.proviverScanner_Test.php中的单元测试包含大量其他示例及其预期结果。

搜索关键字

你可以使用一个或多个搜索标准,由以下关键字标识

  • T_CLASS:在类源代码中搜索类使用
  • T_TYPE:搜索此类型的类使用(以下列出类型)
  • T_USE:在所有地方搜索此类使用

类使用类型

如果是数值,则每个找到的类使用引用都将与以下类使用类型标识符之一相匹配

  • T_ARGUMENT:类用作函数参数类型
  • T_ATTRIBUTE:类用作#[...]语句中的属性
  • T_CLASS:在源代码中显式使用类的名称,即Class_Name::class
  • T_DECLARE_CLASS:类声明
  • T_DECLARE_INTERFACE:接口声明
  • T_DECLARE_TRAIT:特性声明
  • T_EXTENDS:类出现在另一个类声明中的extends语句中
  • T_IMPLEMENTS:类出现在另一个类声明中的implements语句中
  • T_INSTANCEOF:类出现在instanceof语句之后
  • T_INSTEADOF:类出现在insteadof语句之后
  • T_NEW:类用于实例化对象
  • T_RETURN:类用于函数返回类型
  • T_STATIC:类用于静态调用,例如Class_Name::staticClass_Name::CONSTANT
  • T_USE:类出现在类use语句中
  • T_VARIABLE:类用于类属性类型定义

从命令行调用:类型名称几乎与类型列表常量名称相同:在命令行中传递T_DECLARE_CLASS而不是传递declare-classdeclare_class。所有这些变体都将正常工作,如果您更喜欢,还可以传递与常量名称匹配的整数值。

如果是字符串,则使用属性名称作为类型:每个属性中的类使用都将使用属性名称作为类型进行引用。只有当::class作为参数传递,或者作为数组参数中的值时,才会考虑。