
编程语言编译器语言运行时【免费下载链接】imba The friendly full-stack language项目地址https://gitcode.com/gh_mirrors/im/imba点击查看免费下载vscode-imba-next是 Imba 仓库中一套下一代工具链的预览型 VS Code 扩展Preview其使命是在 Volar 架构上重建 Imba 的语言工具最终取代沿用多年的typescript-imba-pluginvscode-imba老方案。本文以 packages/vscode-imba-next/readme.md 为骨架结合扩展清单、语言服务器与语言核心包的源码实现讲解它的双通道架构LSP 语言服务器 tsserver 插件、如何在开发宿主中与旧扩展并行运行、当前已具备的能力、尚未补齐的缺口以及每个配置项的语义。读完本文你将能够在本地仓库中一键启动这套预览工具链并理解.imba文件在 LSP 与 TypeScript 两个通道之间是如何被分工服务的。为什么需要 Imba Next从补丁式插件到 Volar 架构旧版工具链packages/typescript-imba-plugin与packages/vscode-imba通过对 tsserver 内部 API 打补丁ScriptInfo/TextStorage 改写、System 补丁、编译器选项注入等来让 TypeScript 认识.imba文件。这套方案的维护成本高且存在已知缺陷——例如多 tsconfig 项目下last-project-wins最后一个项目覆盖全局的问题。Imba Next 所在的路线图记录在 packages/imba-language-core/PLAN.md其核心思路是采用 Volar 架构把.imba源文件作为身份映射identity mapping的根虚拟文档ImbaVirtualCode编译生成的 TypeScript 作为嵌入式文档embeddedCodes[0]由 Volar 的映射机制负责 imba 坐标与 TS 坐标之间的双向换算Imba 专属的智能标签、样式、事件、修饰符、语义 Token、折叠等以 Volar service plugin 的形式实现集中在packages/imba-language-core/src/plugins/语言核心以纯 LSP 服务器形式对外提供服务任何一个支持 LSP 的编辑器都能复用仓库中的 Zed 扩展即由此架构红利派生。整体架构LSP 语言服务器与 TypeScript 插件的双通道分工根据 readme.md 的说明预览扩展采用双通道设计两条通道各司其职通道服务对象实现载体职责LSP 通道.imba文件imba-language-server基于volar/language-server诊断、悬停、跳转、引用、重命名、语义高亮、大纲、补全等全部 Imba 智能tsserver 插件通道普通.ts/.js文件imba-typescript-plugin基于volar/typescript让内置 TypeScript 扩展看见.imba导入——模块解析、跨文件类型、重命名、自动导入关键约束是普通的 ts/js 文件通过imba-typescript-plugin看到.imba导入.imba文件本身则完全由语言服务器通过 LSP 提供服务tsserver 绝不直接处理 imba 文档。这一点在扩展清单的typescriptServerPlugins.languages: []中体现——插件仍然加载用于 ts/js 侧的类型互操作但languages为空数组因此 tsserver 不会参与.imba文档的语言服务。语言核心imba-language-core是两层共同依赖的底座其导出面见 packages/imba-language-core/src/index.ts覆盖了编译compileImba、映射spansToMappings、虚拟文档ImbaVirtualCode、语言插件createImbaLanguagePlugin、服务插件createImbaServicePlugins、诊断规则filterTsDiagnostic、标识符转换toImbaIdentifier/toImbaString以及编译缓存compileCacheKey/clearCompileMemoryCache等基础设施。在开发宿主中运行预览扩展预览扩展目前仅在开发宿主Extension Development Host中运行尚未用vsce打包发布。仓库提供了两种启动方式。一键脚本dev.sh最简单的方式是直接运行仓库内的一键脚本./packages/vscode-imba-next/dev.sh [/path/to/your/imba/project] # 默认: apps/imba.io不传参数时默认打开本仓库的apps/imba.ioImba 官网应用也是整套工具链的 dogfood 语料库。脚本的逻辑见 packages/vscode-imba-next/dev.sh核心步骤为在仓库根目录执行npx tsc -b增量编译四个包packages/imba-language-core、packages/imba-language-server、packages/imba-typescript-plugin、packages/vscode-imba-next选择 VS Code 可执行文件——优先code-insiders命令其次 macOS 上的 Insiders 应用路径最后回退到稳定版code以--extensionDevelopmentPath挂载本扩展并通过--disable-extension scrimba.vsimba单独禁用旧版 Imba 扩展然后打开指定项目。优先使用 Insiders 的设计意图很明确稳定版 VS Code 旧版 Imba 扩展可以继续正常使用而预览扩展在 Insiders 中独立验证两者互不干扰。手动启动Insiders 示例不依赖脚本时手动等效命令为/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/bin/code \ --extensionDevelopmentPath$PWD/packages/vscode-imba-next \ --disable-extension scrimba.vsimba \ /path/to/your/imba/project其中--extensionDevelopmentPath指向扩展源码目录--disable-extension scrimba.vsimba单数形式只禁用旧版 Imba 扩展。运行注意事项来自 readme.md 的几条实操要点为何必须禁用旧扩展scrimba.vsimba在 Insiders 中同样被安装它也会为.imba文件提供服务若不禁用会造成双重服务double-serving。--disable-extension只关掉它其他扩展与内置 TypeScript 扩展保持启用让code-insiders进入 PATH在 Insiders 中执行CmdShiftP→ 运行 Shell Command: Install code-insiders command in PATH改完工具链源码后直接重跑dev.sh脚本会重新构建或手动重新构建后在开发宿主中执行 Developer: Reload Window 重载窗口。开发期扩展依赖仓库工作区的符号链接解析模块require.resolve(imba-language-server)走 node_modules 软链因此改代码后必须重载或重启。当前已实现的功能预览扩展已可用的能力见 readme.md 的 What works in this preview 一节实时诊断Live diagnostics输入过程中即时给出 imba 解析错误同时由 Imba 的宽容规则forgiveness rules约 25 条 TS 诊断抑制规则表驱动实现在 packages/imba-language-core/src/plugins/tsDiagnosticRules.ts过滤掉 TS 对 imba 代码的误报悬停、跳转定义、查找引用、重命名不仅在 imba 文件内部可用还能跨越 ts↔imba 边界——即从.ts文件导航进.imba导出的符号反之亦然语义高亮与大纲/面包屑由 monarch 解析器imba-monarch驱动标准 LSP 语义 Token 与 DocumentSymbols扩展名省略与.web.imba平台变体导入./foo与./foo.web.imba均可解析imba模块正确解析到真实的标准库类型TS 支撑的补全在映射后的位置提供基于 TypeScript 的代码补全。已知缺口与路线图预览版明确列出尚未完成的事项均可在 packages/imba-language-core/PLAN.md 中追踪按里程碑编号标注Imba 专属补全样式、标签、事件——对应 M2.2 里程碑跨文件的extend tag/ 自定义事件修饰符类型——对应 M2.6 的 A9 设计项这是 PLAN 中标注的最大的 M2 难关涉及编译器改动在 tsc 目标里为 extend-class 输出declare global块与工具侧 dts 旁车文件两种路线的取舍状态栏 UX、配置、格式化——属于更靠后的里程碑首次打开大型项目时会对每个文件编译一次磁盘缓存content-hash 缓存见 packages/imba-language-core/src/cache.ts会让后续打开显著变快尚未用vsce打包——目前仅限开发宿主使用。从 PLAN 的 parity matrix 看架构基础A 系列虚拟化与解析、诊断B 系列、悬停C 系列已大体完成补全D 系列、导航E 系列、编辑器表层F 系列多数完成或进行中性能与健壮性G 系列中的编译缓存预热G1/G2、增量快照G3、编译失败 keep-last-goodG4等均已落地。扩展清单逐项解读packages/vscode-imba-next/package.json 展示了预览扩展的完整清单重点包括语言贡献注册imba语言别名Imba/imba扩展名.imba语法文件指向./syntaxes/imba.tmLanguage从旧扩展 vscode-imba 复制而来作用域名source.imbatsserver 插件imba-typescript-pluginenableForWorkspaceTypeScriptVersions: true且languages: []如前所述保证 tsserver 不直接服务 imba 文档命令imba-next.restartServerImba Next: Restart Language Server用于重启语言服务器激活事件onLanguage:imba入口./dist/extension.js构建脚本tsc -b/tsc -b -w依赖imba-language-server与imba-typescript-plugin均为仓库内file:本地依赖外加typescript ^5.8.0与vscode-languageclient ^9.0.1语言配置见 packages/vscode-imba-next/language-configuration.json包含#行注释、/* */块注释、括号配对、/自动闭合字符串与注释内除外、缩进折叠offSide等。三个配置项扩展贡献的imba.*配置段默认值、可选值与语义均来自 package.json 的contributes.configuration配置项类型默认值可选值语义imba.useImbaFromProjectbooleanfalse—是否使用项目内安装的 imba 版本编译而非扩展自带的编译版本对应 A10 里程碑受 PLAN 中项目内编译器、版本键控缓存、崩溃回退机制支撑imba.debugLevelnumber00/1/2工具链调试级别0正常运行1冗余服务器日志预留2把被抑制的 TS 诊断以警告形式显示source 标记为imba-suppressed用于排查是检查器错了还是被我们抑制了imba.workspaceSymbolsScopestringprojectimba/project工作区符号搜索cmd-T的覆盖范围imba仅 imba 文件project包含项目内 ts/js 文件语言服务器与状态栏源码级调用链客户端启动逻辑扩展客户端在 packages/vscode-imba-next/src/extension.ts 中实现关键链路如下activate中通过require.resolve(imba-language-server)解析服务器模块开发期走 node_modules 工作区软链以TransportKind.ipc启动debug 模式额外带--inspect6019便于调试documentSelector限定只监听language: imba的文档initializationOptions携带两块初始化数据typescript.tsdkTypeScript SDK 路径与imba段配置synchronize.configurationSection: imba把imba.*配置变更以didChangeConfiguration形式转发给服务器注册imba-next.restartServer命令 → 调用client.restart()。resolveTsdk()的实现细节优先读取typescript.tsdk设置绝对路径直接用相对路径拼接首个工作区目录否则回退到扩展依赖里捆绑的 TypeScript。服务器端响应服务器端在 packages/imba-language-server/src/index.ts 中初始化时取 tsdk 路径来自initializationOptions.typescript.tsdk缺省用捆绑 TypeScriptapplyImbaConfig(initializationOptions?.imba)应用配置createTypeScriptProject装配createImbaLanguagePlugin()与setupImbaProject——后者负责向每个项目注入 imba 必需的编译器选项与全局类型resolveImbaTypings优先使用项目自身安装的 imba 类型回退到工具链副本响应自定义请求imba/fileStatus返回当前活动 imba 文件的编译状态{ imba, recovered, crashed }——recovered对应 G4 keep-last-good文件暂时无法解析时用最后一次成功编译的模块维持工程内聚同时保留当前解析错误诊断crashed对应编译器崩溃收到didChangeConfiguration时重新应用配置并project.reload()让打开的文档按新规则重新检查。状态栏的拉取模型状态栏条目imba-next.status右侧对齐优先级 99采用拉取模型而非逐次按键推送在编辑器切换、诊断变更、服务器状态变化时客户端主动发送一次imba/fileStatus请求。显示规则$(check) Imba服务器正常运行$(warning) Imba当前文件正由最后一次成功编译keep-last-good兜底服务$(error) Imba编译器崩溃或服务器未运行——点击状态栏即可执行imba-next.restartServer重启。与旧扩展的共存原则预览扩展刻意与旧扩展隔离vscode-imba发布名vsimba见 packages/vscode-imba/package.json保持原封不动并继续正常发布Imba Next 是取而代之运行runs instead of it, never alongside it——这正是为什么开发宿主必须用--disable-extension scrimba.vsimba精确禁掉旧扩展。按 PLAN 的 M4 里程碑将来会在旧扩展中增加imba.tooling: next | legacy开关、经历一个双版本并行发布周期后把默认切换到新工具链并最终弃用旧插件。从仓库继续深入完整路线图与 parity matrixpackages/imba-language-core/PLAN.mdA1–A11 虚拟化与解析、B 诊断、C 悬停、D 补全、E 导航、F 编辑器表层、G 性能均带完成状态语言核心包导出面packages/imba-language-core/src/index.ts语言服务器实现packages/imba-language-server/src/index.tstsserver 插件说明packages/imba-typescript-plugin/readme.md 与 packages/imba-typescript-plugin/package.json扩展客户端packages/vscode-imba-next/src/extension.ts、启动脚本 packages/vscode-imba-next/dev.sh、清单 packages/vscode-imba-next/package.json。需要提醒的是当前预览扩展只面向开发宿主、依赖仓库内工作区符号链接解析模块尚未达到vsce打包发布的状态。如果你希望在实际项目中试用请在仓库内运行./packages/vscode-imba-next/dev.sh并配合 VS Code Insiders同时确保仅禁用scrimba.vsimba而保留内置 TypeScript 扩展。赞分享编程语言编译器语言运行时【免费下载链接】imba The friendly full-stack language项目地址https://gitcode.com/gh_mirrors/im/imba点击查看免费下载相关推荐如何彻底卸载 vscode-dark-islands 主题3 分钟恢复 VS Code 默认设置如何彻底卸载 vscode dark islands 主题3 分钟恢复 VS Code 默认设置 装了一段时间的 vscode dark islands 深色编程语言编译器语言运行时Imba工具链配置VS Code插件、TypeScript服务深度集成Imba工具链配置VS Code插件、TypeScript服务深度集成 Imba作为友好的全栈Web编程语言其强大的工具链配置为开发者提供了无缝的开发体验。编程语言编译器语言运行时Imba 命令行完全指南imba / imba build / imba serve / npm create imba 实战详解Imba 命令行完全指南imba / imba build / imba serve / npm create imba 实战详解 Imba 是一款友好的全栈编程语言编译器语言运行时上一篇PotPlayer字幕翻译3步让外文视频实时弹出中文字幕的保姆级教程下一篇Open edX Studio 内容搜索迁移 MeilisearchADR 决策解读与 content/search 应用源码剖析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考