fuko-php/open

生成直接在您的IDE或编辑器中打开引用文件的链接,或者将其链接到在线仓库

1.1.1 2021-09-10 19:05 UTC

This package is auto-updated.

Last update: 2024-09-11 01:35:21 UTC


README

Fuko\Open 是一个小的PHP库,帮助您生成链接以直接在您的IDE或编辑器中打开引用文件,或者将其链接到在线仓库。

基本用法

其核心是 \Fuko\Open\Link 类,它非常简单:它在其构造函数中接受一个格式,然后使用该格式创建一个格式化的链接,该链接指向通过其 文件 标识的代码引用

include __DIR__ . '/vendor/autoload.php';
use \Fuko\Open\Link;

$link = new Link('source-code://%s:%d');
$href = $link->link(__FILE__, __LINE__);

该格式基于 sprintf(),包含两个占位符:第一个是 %s 用于文件,第二个是 %d 用于行。就是这样,很简单。

路径转换

有时必须将文件名的开头部分“转换”为不同的内容,例如

  • 例如,在某个父文件夹是一个已解析到其实际源链接的情况下,您在获得文件的真正路径之后

  • 例如,当您使用网络共享卷与您的Web服务器机器挂载时,您想要使用本地挂载的名称,而不是远程名称

  • 或者,当您使用Docker并且您想要将基于Docker的文件名转换为本地可访问的文件名时

对于所有这些情况,\Fuko\Open\Link 对象都有替换开头文件名前缀的能力。您可以通过这种方式添加新的前缀以转换文件路径

include __DIR__ . '/vendor/autoload.php';
use \Fuko\Open\Link;

$link = new Link('source-code://%s#%05d');
$link->addPrefix(getcwd() . '/', '/upside/down/');
$href = $link->link(__FILE__, __LINE__);
// source-code://%2Fupside%2Fdown%2Fdemo.php#00023

您可以添加多个前缀,因为在大多数项目中通常有多个符号链接文件夹。

include __DIR__ . '/vendor/autoload.php';
use \Fuko\Open\{Link, Editor};

$href = (new Link(Editor::ATOM))
	->addPrefix(getcwd() . '/', '/upside/down/')
	->addPrefix('/private/tmp', 'tmp')
	->link(__FILE__, __LINE__);

编辑器链接

有几个IDE和编辑器支持本地文件的特殊URL格式,目的是允许它们直接打开它们。此功能仅在您在本地上运行代码时才会生效,这样您的源代码文件就可以被编辑器访问。

要生成此类URL,您必须使用与该编辑器关联的格式

include __DIR__ . '/vendor/autoload.php';
use \Fuko\Open\Editor;
use \Fuko\Open\Link;

/* I have Atom installed locally, so this is what I want to use */
$editor = new Link(Editor::ATOM);

一旦创建了 \Fuko\Open\Link 对象,您就可以调用其 link() 方法来获取生成的和格式化的URL

echo $editor->link('/var/www/html/index.html', 2);
// atom://core/open/file?filename=%2Fvar%2Fwww%2Fhtml%2Findex.html&line=2

\Fuko\Open\Link::link() 方法在您调用 \Fuko\Open\Link::__invoke() 时也会被调用,因此您也可以这样做

echo $editor('/var/www/html/index.html', 2);

编辑器嗅探

您可以使用 \Fuko\Open\Sniff::detect()嗅探 本地安装的编辑器。它将返回找到的编辑器链接格式,如果没有找到,则返回 NULL

include __DIR__ . '/vendor/autoload.php';
use \Fuko\Open\{Link, Sniff};

/* I have Atom installed locally, so this is how you can detect it */
$format = (new Sniff)->detect();
if ($format)
{
	echo (new Link($format))->link('/var/www/html/index.html', 2);
	// atom://core/open/file?filename=%2Fvar%2Fwww%2Fhtml%2Findex.html&line=2
}

嗅探是通过“嗅探”函数/方法完成的。其中一些是内置的,但您可以使用 \Fuko\Open\Sniff::addSniffer() 添加自己的嗅探器。嗅探器必须返回用于 \Fuko\Open\Link 构造函数的格式,如果没有匹配项,则返回空字符串。

$sniff->addSniffer(function()
{
	return getenv('EDITOR') === 'subl -w'
		? \Fuko\Open\Editor::SUBLIME
		: '';
});

支持的编辑器

以下是 Fuko\Open 支持的IDE和编辑器列表

仓库链接

在某些情况下,您不想创建指向本地源代码文件的链接,而是想链接到您的代码仓库。代码仓库源链接通常不仅包含工作区/帐户/项目,还包括您正在审查代码的分支/标签/提交。要创建仓库链接,请使用 Fuko\Open\Repo 类,它将帮助您获得一个设置有仓库链接格式的新的 \Fuko\Open\Link 对象

include __DIR__ . '/vendor/autoload.php';
use \Fuko\Open\Repo;

$repo = new Repo(Repo::GITHUB,
	getcwd() . '/',	// cloned repo root folder which must be stripped from the link
	'fuko-php',	// workspace (aka project or account)
	'open',		// name of the repository
	'master'	// branch, tag or commit
	);

echo $repo->getLink()->link(__FILE__, 42);
// https://github.com/fuko-php/open/blob/master/tests%2FRepoTest.php#L42

Fuko\Open\Repo 类内部有一些常量,可以帮助您处理不同源代码托管网站的格式