Smarty Peek 0.1.1
分类: 下载/工具 · 工具软件 | 来源: 点击进入 | 版本: 0.1.1 |
日期: 2025-04-28 | 人气: | 大小: |
标签: template PHP Smarty IntelliSense hover __ext_tpl dandomain |
新的介绍内容:
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 <repository-url> cd smarty-peek
安装依赖:
npm install
这将安装必要的库,包括php-parser。
编译扩展:
单次构建:``` npm run compile
持续构建:``` npm run watch
这使用webpack将src/中的TypeScript代码编译到dist/中的JavaScript。
启动扩展开发主机:
- 在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)"范围的新令牌。
创建发布者配置文件
访问marketplace.visualstudio.com/manage。
使用唯一ID和名称创建发布者配置文件。
通过运行以下命令进行身份验证:``` vsce login
然后在提示时输入您的PAT。
准备您的扩展
- 确保所有更改已提交到仓库。
- 更新package.json,包含您的发布者ID、仓库URL和相关关键词。
- 在项目根目录中包含一个LICENSE文件。
- 确保README.md是最新的且准确的。
打包并发布
- 将扩展打包成.vsix文件:```
vsce package
- 发布到市场:```
vsce publish
- 或者,通过市场网站手动上传.vsix文件。
- 将扩展打包成.vsix文件:```
vsce package
更新您的扩展
对于未来的更新,增加版本号并发布:``` vsce publish minor
(您也可以根据更新类型使用patch或major。)
管理发布后
- 使用市场管理页面监控统计数据、编辑详细信息或根据需要取消发布。
注意: 如果您最初手动上传了.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特定数据。
贡献
欢迎贡献!请随时在仓库中打开问题或提交拉取请求。
-
- Golang云原生架构师课程
- Go是一门并发支持、垃圾回收的编译型系统编程语言;本课程转载自哔哩哔哩:https://www.bilibili.com/video/BV1Mh411M7A
- 204次学习
-
- MySQL数据管理之备份恢复案例解析视频教程
- 《MySQL数据管理之备份恢复案例解析视频教程》MySQL是一个开放源码的小型关联式数据库管理系统,目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
- 160次学习
-
- MySQL索引优化解决方案
- 本套课程是根据MySQL索引的设计理念与数据结构、索引使用场景、索引分类、索引运用场景、索引性能分析、查询优化、MySQL索引的慢查询等组成,主要讲述了MySQL索引优化的解决方案,非常适合有MySQL使用基础或者有一定工作经验的同学。课程讲解了解决大数量查询慢的问题、如何编写一个高效的SQL、查询语句应该如何优化、索引的实现原理是什么、索引又应该如何优化...等诸多SQL索引优化的难点和面试点。
- 182次学习
-
- 极客学院Docker视频教程
- Docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎,源代码托管在Github上,基于go语言并遵从Apache2.0协议开源。Docker自2013年以来非常火热,无论是从github上的代码活跃度,还是各大厂商的支持,都使Docker成为了时下最受关注的技术,甚至微软都声称在下一代WindowsServer中集成对Docker的支持。所以我们收集了《极客学院Docke
- 243次学习
-
- Golang进阶实战编程
- 本课程是在《Go语言基础视频》基础之上录制的,是Go语言基础的后半部分。包括包的管理,IO操作,Go语言最大的亮点:高并发,goroutine,channel,反射等。本视频主要为了帮助Go语言的初学者,从零到一的快速入门。学完本套课程,可以学会如果通过包管理Go项目,并发模型,以及并发实现,channel通道如何传递数据,反射等等。
- 127次学习
-
- JavaScript极速入门
- 本套课程将帮助大家迅速掌握JavaScript这门高端的、动态的、弱类型编程语言。知识点简单明了,让你学习0压力,适合新手观看学习......
- 431次学习
-
- Golangmap实践及实现原理解析
- 2022-12-28 505浏览
-
- GoLand调式动态执行代码
- 2023-01-13 502浏览
-
- 试了下Golang实现try catch的方法
- 2022-12-27 502浏览
-
- 用Nginx反向代理部署go写的网站。
- 2023-01-17 502浏览
-
- MySQL主从切换的超详细步骤
- 2023-01-01 501浏览
-
- Mysql-普通索引的 change buffer
- 2023-01-25 501浏览