作者

Sales Engineer at Intersystems
文章 Jeff Liu · 7 小时 前 7m read

ObjectScript Search —— 即刻在 VS Code 中体验 IRIS 全文本服务器端搜索

ObjectScript搜索图标 

如果您曾经在一个大型的IRIS命名空间中查找某个字符串、方法调用或模式的使用位置,您就会知道其中的痛苦:没有内置的方法可以在VS代码中对服务器端的ObjectScript代码进行grep式搜索--至少不需要跳过一些障碍。 

这就是ObjectScript搜索要解决的问题。今天就从VS代码市场中简单安装一下试试吧。

如果不喜欢,卸载也很简单。但我认为你会喜欢它的--对于任何在 VS Code 中进行 ObjectScript 开发的人来说,它都是生活质量的巨大提升。

为何存在此扩展

官方的 vscode-objectscript 扩展确实包含搜索功能。不过,要启用该功能,目前需要等待拟议中的 VS Code API 最终确定,或者手动安装扩展的自定义构建并启用拟议中的 VS Code API。这两种方法对于希望开箱即用的开发人员来说都不理想。 

ObjectScript Search 是一个临时、独立的扩展,目前弥补了这一缺陷。它通过 InterSystems 活动栏中的专用面板提供全文服务器端搜索,无需特殊构建或拟议的 API。一旦官方扩展将搜索作为头等功能发布,该扩展将达到其目的,但在此之前,它在这里,它可以工作。 

功能概述

ObjectScript Search 的作用 ObjectScript Search 在 InterSystems 侧边栏中直接添加了搜索视图。您可以在其中搜索: 

  • (.cls
  • 例程 (.mac, .bas, .int
  • 包含文件 (.inc
  • Web / CSP 文件

您可以在任何已连接的 IRIS 命名空间中,对以下文件类型进行搜索:

以下是该功能详情的中文翻译,采用了清晰的功能清单格式:

功能特性 详细说明
全文检索 匹配文件内容中的字符,而不仅仅是文件名。
匹配选项 支持区分大小写全词匹配以及正则表达式模式。
类型筛选 可独立开启或关闭各类文档类型的搜索(如仅搜类文件或仅搜例程)。
流式结果 结果随服务器返回批次逐步显示,无需等待全部检索完成。
实时预览 在搜索输入框中打字时,选择器会即时显示匹配的文件名。
点击打开 点击任意结果,即可在 ObjectScript 编辑器中以只读模式打开文件。
光标定位 打开文件后,编辑器会自动滚动并定位到精确匹配的代码行。
高亮显示 查询结果文本会在文件名和匹配行中均进行高亮标注
搜索历史 每个工作区自动保存最近 20 条查询记录。
复制结果 可将完整的结果列表以 Markdown 格式导出到剪贴板。
状态栏 每次搜索结束后,显示匹配项数量文件数量
多命名空间 当连接多个工作区文件夹时,可通过命名空间选择器指定目标服务器

 

底层实现原理

该扩展通过 InterSystems Atelier REST API​ 直接与服务端通信:

 

  • IRIS API v6+ 上,它通过 POST /api/atelier/v6/{ns}/work 队列异步搜索任务,并轮询直至完成,逐步生成结果批次,因此用户界面不会被阻塞。
  • 较老的服务器上,它会退回到 "GET /api/atelier/v2/{ns}/action/search" 模式,为每个选定的文档类型掩码发出一个请求。 在正则表达式模式下,查询会自动封装,以符合 IRIS 的 regex 语义,因此你输入什么,就会匹配什么。

正则表达式适配:在启用正则模式时,查询语句会自动进行封装,以适配 IRIS 的正则语义规则,确保“所见即所得”的匹配结果。

 

只读预览:搜索结果通过 vscode-objectscript插件提供的 objectscript://协议链接打开,文件将以只读模式加载,既保留了完整的语法高亮,又能直接跳转到匹配的代码行。

 

查询结果通过 vscode-objectscript 提供的 objectscript://URI 方案以只读方式打开,因此您可以获得完整的语法高亮显示并直接跳转到匹配的行。

截图说明

未连接状态​ —— 面板会引导您配置 objectscript.conn连接信息。

No active connection  

准备搜索​ —— 连接成功后,点击此处即可打开搜索选择器:

Active connection

 

带历史记录的搜索选择器​ —— 历史查询即时显示;结果随输入实时流式加载

 

 

带历史记录的搜索选取器 选项面板 - 切换文档类型和匹配行为: 搜索选项 搜索结果 - 按文件匹配计数和突出显示片段的类和例程: 搜索结果 点击转到行 - 直接跳转到文件中匹配的行: 点击转到行

 

快速入门

前置条件

请安装以下两个必需的配套扩展(它们已被列为依赖项,通常会自动安装):

扩展 用途
intersystems-community.servermanager 管理 IRIS 服务器连接及密钥链认证
intersystems-community.vscode-objectscript 提供 objectscript://文档协议支持

配置您的服务器 

 

// .vscode/settings.json
{
"intersystems.servers": {
"my-iris": {
"webServer": {
"host": "localhost",
"port": 52773,
"scheme": "http"
},
"username": "SuperUser"
}
},
"objectscript.conn": {
"active": true,
"server": "my-iris",
// Or
"host":"localhost",
"port":52773,
"username": "IRIS_USERNAME",
"password": "IRIS_PASSWORD",
// Or
"docker-compose": {
"service": "iris",
"internalPort": 52773
},
"ns": "USER"
}
}

然后点击活动栏(Activity Bar)中的 InterSystems 图标,展开 Search(搜索)​ 面板即可。

 

扩展设置

 

设置项 默认值 说明
objectscriptSearch.maxResults 100 单次搜索的最大结果数(范围:1–1000)
objectscriptSearch.includeSystem false 是否包含以 %开头的系统文档
objectscriptSearch.allowSelfSignedCertificates false 是否接受自签名的 TLS 证书

 

以下是该 GitHub 仓库 README 文档中 “安装 (Install)”​ 与 “致谢 (Acknowledgements)”​ 部分的中文翻译:


安装 (Install)

该扩展已在 VS Code Marketplace​ 和 Open VSX​ 市场上线。

致谢 (Acknowledgements)

衷心感谢 @John Murray, @Dmitry Konnov Maslennikov , 和 @Brett Saviano构建并维护了官方的 vscode-objectscript 扩展 —— 没有他们的工作,这一切都无从谈起。本扩展所依托的 objectscript://文档协议、服务器连接基础设施以及整体架构,全部归功于他们。

特别要额外感谢 John Murray​ 提供的行匹配算法,正是该算法使得点击搜索结果时能够将光标精准定位到匹配的代码行。

本扩展可谓是站在巨人的肩膀上。一旦官方扩展原生支持了搜索功能,请务必迁移过去 —— 那才是该功能的长期归宿。