@nx-lang/language-core

中文文档
0.10.0发布于 2026/11/02MITTypeScriptES Module构建来源已验证

无传输的NX语言查询回答:主机上下文、快照缓存和进程内的NxLanguageService。

中文使用文档
文档目录5 节
  1. 进程内服务
  2. 快照和缓存
  3. 主机环境
  4. 迁移从 prelude
  5. 构建和测试

@nx-lang /语言核心

NX语言服务的那一半与传输无关:主机上下文 内容键控快照缓存、查询调度程序和的进程内实现 @nx-lang/language-protocol的 NxLanguageService.

它上面有两个东西,任何一个都不能和另一个在行号上有分歧,因为 dispatcher只有一个副本,查询的文本被准确地分析,因为它被发送:

包不从 node:。它运行在浏览器、Web Worker和Node中。

进程内服务

import { createSnapshotLanguageService } from "@nx-lang/language-core";

const service = createSnapshotLanguageService({
  createSnapshot: (documents, { implicitImports }) =>
    host.createLanguageSnapshot(documents, { implicitImports }),
  context: {
    documents: [{ uri: "nx://host/catalog.nx", identity: "catalog.nx", source: catalogSource }],
    implicitImports: ["catalog.nx"]
  },
  cacheSize: 8
});

const hover = await service.hover({ documents, uri, position }, signal);

结果实现 NxLanguageService,所以 @nx-lang/monaco 还有其他的客户 Interface在不知道分析发生在哪里的情况下获取它。

sourceTree 将文档的每个部分作为类型化节点进行应答,并将声明作为节点 指的是;协议的README描述了答案。它是 不稳定它的形状可能会改变 任何版本,直到下一个版本提交到它。 sourceEdit 回答文本编辑,使一个 改变读者在树的一个节点上的要求,或者为什么不能做;它也不稳定。 dispose() 释放所有缓存 分析;服务人员随后再次回答,重新分析。

答案在调用线程上同步产生,因此只能观察到取消 在工作开始之前:一个已经流产的 signal 拒绝。 AbortError 什么也不要求 快照。无论谁在调用者的线程上运行服务- playground都在 Worker -是使cancel抢占的原因。

快照和缓存

一、 SnapshotLike 是调度员需要的小平面: hover, completions, diagnostics, documentSymbols, sourceTree, sourceEdit, dispose。这两个sdk的快照都满足它,并且可以进行测试 就因为一个假的。

documentSetKey 按文档集自己的内容(URI、标识和源)进行分析 前面加上它的长度,所以没有两个集合可以连接成同一个字符串。文档的 version 剩下的 这是故意的:它是编辑器的计数器,而不是内容,并且同一文本下的新数字有 同样的分析。调度程序将当前请求的版本放回应答中,因此a 丢弃版本答案的客户端仍然看到自己的版本。

SnapshotCache 保存最近使用的分析并处理它驱逐的内容。盘旋的风暴 一秒钟内多次发送相同的文本;保留最后几套是让答录机变得便宜的原因 一个线程。

主机环境

具有自己声明的主机(例如外部组件的目录)将它们作为 context: documents 连接每个查询的文档集,而不需要客户端发送它们 implicitImports,每个查询文档导入的标识,就好像它以通配符开头一样 每个的导入。

没有任何内容被添加,也没有任何位置被重写:

  • 被查询的位置是客户端发送的位置,快照被准确地询问;
  • 悬停范围、文档符号范围和诊断范围将返回所查询的范围 文件本身的行、列;
  • 位于上下文文档中的诊断在下面报告 文档的 URI,有它自己的 坐标,因此宿主声明中的错误永远不会显示在作者编写的行中;
  • 相关位置不需要调整,无论它指向哪里。

文档中包含上下文文档的URI或标识的查询被拒绝:客户端 不能替换主机的上下文。 contextCollision(documents, context) 是check, HTTP 处理程序的答案 400 invalid-request 命名身份。

迁移从 prelude

这个 prelude 选项将主机的文本置于所查询的文档之前,并移动每个位置。 它被删除,并且仍然通过它的调用在使用消息命名构建时失败 context. 替换的是两行:

// Before
createSnapshotLanguageService({ createSnapshot, prelude: { source: catalogSource } });

// After
createSnapshotLanguageService({
  createSnapshot,
  context: {
    documents: [{ uri: "nx://host/catalog.nx", identity: "catalog.nx", source: catalogSource }],
    implicitImports: ["catalog.nx"]
  }
});

preludeOffsets, withPrelude, shiftPositionIn, shiftRangeOut 和 PRELUDE_ORIGIN 被删除 用它;再也没有什么变化了,所以他们没有什么可做的。

构建和测试

pnpm --filter @nx-lang/language-core build
pnpm --filter @nx-lang/language-core test

版本与发布记录

@nx-lang/language-core 共发布 10 个版本,首次发布于 2026/09/15;过去 12 个月发布了 10 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.10.0latest2026/11/021 天前
0.9.02026/10/268 天前
0.8.02026/10/1816 天前
0.7.02026/10/1024 天前
0.6.02026/10/0628 天前
0.5.02026/09/291 个月前

关于 @nx-lang/language-core 的常见问题

@nx-lang/language-core 是什么?

无传输的NX语言查询回答:主机上下文、快照缓存和进程内的NxLanguageService。

如何安装 @nx-lang/language-core?

在项目目录运行 npm install @nx-lang/language-core,或使用 pnpm add / yarn add / bun add。

@nx-lang/language-core 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@nx-lang/language-core 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@nx-lang/language-core 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@nx-lang/language-core 可以商用吗?

@nx-lang/language-core 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@nx-lang/language-core 还在维护吗?

最新版本 0.10.0 发布于 2026/11/02(1 天前);至今共发布 10 个版本,其中过去 12 个月发布了 10 个;首次发布于 2026/09/15。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。