新的介绍内容:
Smarty Peek是一款专为Smarty模板开发者设计的Visual Studio Code扩展,旨在提升在DanDomain等平台上的开发体验。它通过提供悬停信息帮助开发者更好地理解Smarty变量的结构,尽管目前这些信息是基于常见变量名称的模拟数据。
开发中的注意事项:
- 模拟数据: 请注意,目前Smarty Peek提供的悬停信息是模拟的,基于常见的变量名称(特别是在DanDomain中使用),尚未对您的PHP后端代码进行实际分析。未来目标是实现实时的Smarty分析。
当前功能:
- DanDomain特定悬停信息: 对于不匹配预设变量名称的其他检测到的变量模式,它会显示一个通用的消息,表示类型未知。
- 悬停信息提供者: 在.tpl文件中鼠标悬停时激活悬停信息。
- 模拟悬停信息(预设): 对于特定常见变量名称(如user, general, page, settings, text, contactdata, currency, access),它会显示预定义的Markdown,展示猜测的结构和类型信息,通常标记为"Smarty Object"或类似。
- Smarty语言识别: 识别.tpl文件为Smarty语言。
- 变量语法检测: 使用正则表达式检测常用于Smarty变量的模式(例如{$var}, $var.prop, $var->prop, $var[key], $smarty.const.X)。
要求:
- Visual Studio Code(版本在package.json中指定,目前为^1.85.0)
- Node.js和npm(用于本地开发和安装依赖)
安装(市场):
(注意:此部分假设将来会发布到VS Code市场。目前,请使用本地开发步骤。)
- 打开VS Code。
- 进入扩展视图(Ctrl Shift X)。
- 搜索"Smarty Peek"。
- 点击"安装"。
本地开发与测试:
遵循这些步骤从源代码中运行和测试扩展:
克隆仓库:
git clone
cd smarty-peek
安装依赖:
npm install
这将安装必要的库,包括php-parser。
编译扩展:
启动扩展开发主机:
- 在VS Code中按F5。
- 这将打开一个新的VS Code窗口([扩展开发主机]),其中加载了smarty-peek扩展。
测试:
- 在[扩展开发主机]窗口中,打开包含Smarty .tpl文件的工作区,可能还包括相应的PHP后端代码(取决于您的设置)。
- 打开一个.tpl文件。
- 将鼠标悬停在不同的Smarty变量上(例如{$user}, {$product->name}, $items[0])。
- 观察提供的悬停信息。检查输出面板(从下拉菜单中选择"Smarty Peek")以获取详细的日志和可能的错误。
发布扩展:
要将Smarty Peek扩展发布到VS Code市场,请遵循这些步骤。这确保您可以与他人共享并保持更新:
安装vsce
- 确保已安装Node.js。
- 在终端中运行以下命令:```
npm install -g @vscode/vsce
获取个人访问令牌(PAT)
- 使用您的Microsoft账户登录dev.azure.com。
- 创建一个具有"Marketplace (manage)"范围的新令牌。
创建发布者配置文件
准备您的扩展
- 确保所有更改已提交到仓库。
- 更新package.json,包含您的发布者ID、仓库URL和相关关键词。
- 在项目根目录中包含一个LICENSE文件。
- 确保README.md是最新的且准确的。
打包并发布
- 将扩展打包成.vsix文件:```
vsce package
- 发布到市场:```
vsce publish
- 或者,通过市场网站手动上传.vsix文件。
更新您的扩展
管理发布后
- 使用市场管理页面监控统计数据、编辑详细信息或根据需要取消发布。
注意: 如果您最初手动上传了.vsix文件,您仍然可以使用vsce publish minor进行后续更新,前提是发布者ID和扩展ID保持一致。
快速参考表
步骤 | 操作 | 工具/命令 |
---|
安装vsce | 运行npm install -g @vscode/vsce | npm |
获取PAT | 通过Azure DevOps创建,选择"Marketplace (manage)"范围 | Azure DevOps UI |
创建发布者 | 在marketplace设置,然后运行vsce login | Marketplace UI, vsce |
准备扩展 | 编辑package.json,添加LICENSE,提交更改 | 手动编辑 |
打包和发布 | 运行vsce package然后vsce publish,或手动上传.vsix | vsce |
更新版本 | 使用vsce publish minor进行版本控制 | vsce |
管理发布后 | 通过管理页面查看/编辑 | Marketplace UI |
工作原理(extension.ts见解)
核心逻辑位于src/extension.ts:
激活(activate函数):
- 当VS Code为.tpl文件激活扩展时运行。
- 创建并注册SmartyHoverProvider。
悬停提供者(SmartyHoverProvider):
- provideHover方法在悬停时触发。
- 变量检测: 使用正则表达式(smartyVariablePattern)查找可能的Smarty语法。
- 变量清理: 规范化找到的文本(例如,去除{, }, $)。
- 模拟逻辑: 将cleanVariableName与一系列if/else if条件进行比较,匹配预设名称(例如user, general, settings)。
- 预设输出: 如果名称匹配,则附加预定义的MarkdownString,包含模拟的结构/类型信息。
- 回退: 如果没有特定的名称匹配,则生成一个通用的"未知类型"悬停消息。
停用(deactivate函数):
- 目前较少,主要记录停用。(之前提到的astCache在本版本中不再相关)。
配置
目前,扩展没有通过settings.json暴露任何特定的配置设置。
已知问题与限制(当前状态)
- 基本类型推断: 通常对变量、对象属性和方法调用结果显示mixed,因为它尚未追踪变量来源或分析类定义。
- 复杂路径分析: 无法分析嵌套属性或方法调用,如{$user->address->getCity()}。
- 预设识别: 仅对预定义变量名称列表提供详细(模拟)的信息。所有其他变量都会得到一个通用的"未知"消息。
- 不准确的PHP文件发现: findRelevantPhpFiles函数过于宽泛,可能会分析不相关的文件或错过正确的文件。它需要更有针对性(例如,搜索$smarty->display/fetch调用)。
- 无上下文感知: 缺乏对所使用特定框架或项目结构的任何理解。
- 无PHP分析: 不读取、解析或分析任何PHP文件。注释或以前README版本中提到的PHP分析已在此当前代码中过时。
- 正则表达式限制: 变量检测正则表达式可能无法覆盖所有可能的有效(或无效)Smarty语法排列,或者可能错误地将非变量代码识别为变量。
- 简化的assign检测: 对$object->assign()的检查会找到任何名为assign的方法,这可能会导致如果其他类使用同名方法而产生错误结果。
- 仅模拟数据: 主要限制是所有悬停信息都是模拟的。它不反映您在特定PHP后端中定义的实际数据类型或结构。目前它包含DanDomain特定数据。
贡献
欢迎贡献!请随时在仓库中打开问题或提交拉取请求。
本站所有资源都是由网友投稿发布,或转载各大下载站,
请自行检测软件的完整性!
本站所有资源仅供学习与参考,请勿用于商业用途,否则
产生的一切后果将由您自己承担!
如有侵权请联系我们删除下架,联系方式:study_golang@163.com