fuko-php / open
生成直接在您的IDE或编辑器中打开引用文件的链接,或者将其链接到在线仓库
Requires
- php: >=7.1
Requires (Dev)
- phpunit/phpunit: ^7.5 || ^8.5
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
类内部有一些常量,可以帮助您处理不同源代码托管网站的格式
Fuko\Open\Repo::BITBUCKET
用于 Bitbucket CloudFuko\Open\Repo::GITHUB
用于 GitHub