# @elaraai/east-diagnostics 中文文档

规范地址：https://npmcn.com/package/%40elaraai/east-diagnostics/

版本：1\.0\.107
npm 元数据更新时间：2026-11-13T06:53:02.808Z
中文译文更新时间：2026-11-13T12:55:19.774Z
软件包许可：AGPL-3\.0-or-later

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40elaraai/east-diagnostics
原文对照：https://npmcn.com/package/%40elaraai/east-diagnostics/?lang=original
项目主页：https://github.com/elaraai/east-workspace#readme
源码仓库：https://github.com/elaraai/east-workspace

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：587 kB，211 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.0\.0
- 运行依赖：0 个
- peer 依赖：typescript \>=5\.0\.0 \<7
- 首次发布：2026-06-09T01:26:19.273Z
- 最新版本发布：2026-11-13T06:53:02.402Z
- 近 30 天下载量：3723（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：104（近 12 个月 104 个）

## 中文简介

东意识诊断规则关于TypeScript检查器——一个共享引擎,用于编辑器(tserver插件),代理(无头守护进程),和CI.

## 安装

```sh
npm install @elaraai/east-diagnostics
```

也可以使用：`pnpm add @elaraai/east-diagnostics`、`yarn add @elaraai/east-diagnostics`、`bun add @elaraai/east-diagnostics`

## README

# 东方诊断

> 关于类型脚本检查器的东意识诊断规则

[![License](https://img.shields.io/badge/license-AGPL--3.0-blue.svg)](https://npmcn.com/package/%40elaraai/east-diagnostics/LICENSE.md) [![Node Version](https://img.shields.io/badge/node-%3E%3D22.0.0-brightgreen.svg)](https://nodejs.org/)

**东方诊断** 是共享规则引擎,可以捕获东方特有 纯类型脚本无法读取的错误—— 相同的检查浮出到代理服务器 写入时间( Claude 插件守护进程) 以及编辑器和 CI 中的开发者 (单位:千美元)[`@elaraai/eslint-plugin-east`](https://npmcn.com/package/%40elaraai/eslint-plugin-east)) (中文(简体) ). 规则与 真实 `ts.Program`,因此它们具有类型意识,而不是正电子热能.

每一个规则 **东-内自有门** 它只在有真正的东方的地方开火 代码( 东类型/ 块, a) `e3` 构造,或 `@elaraai/*` 输入),所以该集 在平版Script上通过安装和惰性选择。 没有 软件包标识允许/拒绝列表;每个项目压制是 `disabled` 选项, 喜欢任何linter.

## 特征

-   **共享规则集** - 一个引擎, `runEastRules(ts, program, sourceFile, checker)`,在每一个表面重复使用.
-   **类型意识** - 规则参考TypeScript检查器(例如解决) `BlockBuilder`,变体上下文类型).
-   **没有捆绑的编译器** - 说吧 `typescript` 是一个对等依赖; 主机的版本被注入.
-   **诊断服务** - 说吧 `createDiagnosticsService()` 解决最近的 tsconfig, 持有温暖 `LanguageService`,然后将本地类型错误与文件的 East 规则合并。 支持未保存的缓冲器的嵌入式覆盖 .
-   **可读的东方类型出错** - 东部类型的本地TS可分配性错误通过东部的结构类型diff重写(`diffTypes`)),因此一个递归型内部深处的不匹配读取为一行本地化行,而不是被重报的通名的页面. 这个项目是自己的 `@elaraai/east` 在运行时解决,所以 diff 总是匹配项目的类型语义.
-   **LSP 服务器** - 说吧 `runEastLsp()` 服务于语言服务器协议上的相同诊断(stdio, 零依赖性), Claude 代码插件可以使用 `lspServers`Neovim 或者任何LSP客户端.
-   **tserver 插件** - 那个 `@elaraai/east-diagnostics/tsserver-plugin` 条目装饰编辑器现有的 TypeScript 语言服务( 无第二程序), 通过 East UI 预览扩展发送到 VS 代码 `typescriptServerPlugins` 捐款.

## 规则

### 东侧平庸卫生

-   **`no-redundant-east-cast`** - 关于价值的冗余TS类型信息 `$.let`编号 :`$.const` 东方类型的论据已经支配着——一个铸造者(`as …`编号 :`<…>`, (中文(简体) ), `new Map<K,V>()` 通用词,或 `East.value(x, T)` 包装.
-   **`prefer-explicit-east-type`** - 单弧 `$.let`编号 :`$.const` 的数值(`[]`, (中文(简体) ), `{}`, (中文(简体) ), `new Map()`) (中文(简体) ).
-   **`prefer-some-none`** - 说吧 `variant("some"/"none", …)` 改为 `some()` 编号 : `none`。 。 。 .
-   **`no-handrolled-variant`** - 普通物体文字,其中需要东方变体/选项,或者在导入东方的文件中,a `{ type, value }` 在任意槽中带有字符串标记的字元, 但已公布的 API 自己类型( 声明文件, 如 East's) `Resolution`) (中文(简体) ). 字面上缺少"东方"的品牌 来形容一个变体.
-   **`no-east-namespaced-type`** - 说吧 `East.IntegerType` 等,而不是赤色导入.
-   **`prefer-let-const-over-east-value`** - 说吧 `East.value(…)` 已声明或返回 `East.function` 块.
-   **`no-relative-src-import`** - 进口 _又一个_ 包的内部通过 `../src/…` 或深处 `@elaraai/x/src` 路径而不是其已公布的名称。 (软件包导入其 **拥有** `src` 相对的——例如: spec's `../src/index.js` ——是免责的;它不能导入自己已公布的名称. )
-   **`no-let-const-in-expression`** - 说吧 `$.let`编号 :`$.const` 用于除a以外的任何地方 `const`编号 :`let` 初始化器, 一个赤裸的语句, a `return`,或简洁的箭头正文(例如:struct-field值、数组元素、调用参数,或链式目标在表达式中将声明掩埋).
-   **`no-unexecuted-east-expression`** - 一个赤裸的东方表达式声明,从未用过 `$( … )` 或约束。 声明对其具有约束力,转让也具有约束力(`keyFn = East.function(…)`,在两个函数之间作出选择).
-   **`no-reinlined-east-binding`** - 东边 `Expr` 受联署材料约束 `const`编号 :`let` 并在一个东体内读出两次, 或者在每个元素回调,a `$.for`编号 :`$.while` 身体或被窝 `East.function`,在每次读取时重新加注——并重新评价;将其绑定一次 `$.let`编号 :`$.const`单臂1个读取(`.ifElse`, (中文(简体) ), `$.if … .else`页:1 `match` (手)和(a)项 `$.const` 在任何地方读作保持沉默,在每一个东方机构之外所做的一项职能也是如此(`East.function`,或一个帮助者或一个条件给它:它捕捉到没有约束,所以在每次读取时再次使它重新评价无.
-   **`prefer-jsx-over-factory-call`** - 在一个 `.tsx` 档案,工厂的 `Foo.Root(...)` 其结果是JSX要素——作者: `<Foo>` 标记代替.
-   **`no-untracked-east-data`** - 一个赤裸的JS `const` 在一个区块内东型位置所消耗的文字——用 `$.const`编号 :`$.let`。 。 。 .

### 东方主机

这些原则有一个原则: **东区内部的代码必须是东区,主机语言可能 _声明_ 东/ E3 程序, 但从未 _计算_ 其数据依赖的IR、密钥或值.**

-   **`no-host-in-east-block`** - 东区内部,任何主机语言结构:主机呼叫(当地TS助手、JS内建、JS阵列方法)、TS关闭/功能 _声明_,东行运行器上的主办操作器(`a + b`, (中文(简体) ), `cond ? a : b`, (中文(简体) ), `&&`编号 :`||`),主机索引访问(`arr[i]` 联合来文的价值) `for`编号 :`while`编号 :`if` 发送 IR, 或主机字符串插值。 (东方方法链, `$.*`, (中文(简体) ), `East.*`编号 :`Expr.*`, (中文(简体) ), `variant`编号 :`some`编号 :`none`, (中文(简体) ), `East.str`,以及任意 `@elaraai/*` 电话是东方的 从来没有标记。 )
-   **`no-module-scope-east-macro`** - 模块范围TS帮助器,每次返回都建有东IR(a) `Expr` 链条, `East.value`, (中文(简体) ), `variant`编号 :`some` 超过一个 `Expr`),或复合字符串键(`(o, l) =>` ${o}|${l}\`\`} 输入 East 数据的${o}|${l}\`\`} — 使它成为真实 `East.function`,或以打入的键/嵌入的东结构来建模数据。 在主机数据(一个渲染器的处理器,一个测试的固定器)和主机存储密钥上,帮助构建解码值是主机代码,并且通过. 申报工厂也这样做——帮助者返回e3定义(`TaskDef`, (中文(简体) ), `RecordIndexDef`, (中文(简体) ), `MigrationDef`,.)或记录的部分作为其构建者起草(.)`index.on(…)`, (中文(简体) ), `mutation.patch()`, (中文(简体) ), `migration.value(…)`),它构成程序的结构——返回交还帮助者自己的参数,例如检查缩小(`return fn as FunctionExpr<I, O>`),它不建立;程序构建者,返回其程序的IR捆绑(`toIR()`),将它序列化;和一个函数厂,每个返回一个函数值来自主机数据(类型,声明)和其他函数,一个程序绑定和调用。 仍然检查一个使用函数以外的东值的帮助者:它返回的函数将捕获它.
-   **`no-compile-time-data-injection`** - 构建时间数据摄入(a) `node:fs` 进口/呼叫, `JSON.parse`, (中文(简体) ), `process.env`在模块范围——运行时通过 `e3.input` /数据集/平台任务. (一个没有东边读取器的真正的种子时靴子是可以接受的警告。 )
-   **`no-compile-time-seed-data`** - 主机计算数据作为第3个参数的种子传递 `e3.input(name, type, variant('value', seed))` a 包括: `new Map()`按东道方填入的/阵列 `for`\- loops,或主机调用的对象文字(`num(cfg.x)`, (中文(简体) ), `BigInt(...)`)——将构建时段快照烤入已部署程序. 默认必须是小的 _作者常数_ (字形,为空/字形) `Map`编号 :`Set`/阵列/结构,或东值 `variant`编号 :`some`编号 :`none`编号 :`East.value`)或省略;运行时装入真实/繁多的数据(a) `BlobType` 输入解析为 `blob.decodeCsv(…)` 在一个 `e3.task`,一个平台 `FileSystem.readFile`,或一个 `e3.record` 它的变异.

### 部署/运行时间-故障分类,进行打字检查

-   **`require-runner-platforms`** - 一个 `e3.task` 调用 PROJECT 宣布的平台功能(`East.platform("proj.x", …)` 其选项宣布不 `runner.platforms` `{ custom: … }` 条目 —— 仅在“ Platform 函数... 不可用” 的数据流运行时失败 .
-   **`no-cross-block-builder`** - 一个被窝住的东方回叫 排放约束 通过一个OEER块 `$` (单位:千美元)`xs.map((_$, x) => { $.let(…) })`)——错误地块中的束缚地.
-   **`no-state-outside-reactive`** -东来 `State.*` 外部a `<Reactive>` 构建器 — UI 函数在分析时变为同位素并被部署时拒绝.
-   **`prefer-const-ui-callbacks`** - 一个 `East.function` 操作员用JSX道具内写——重建每个道具 `equalFor` 无法区分函数值,因此被纪念的渲染器错过了互换. 捆绑一次 `$.const`。 。 。 .
-   **`no-dynamic-bind-path`** - 一个 `Data.bind` 编号 : `State.bind` 从东值计算出的密钥 — 绑定密钥必须是 IR- 构建常数, 或绑定从 `ui()` 显出.
-   **`no-build-time-clock`** - 说吧 `Date.now()` / 无标记 `new Date()` 在East/e3源的模块范围——BUILD时钟被烤入已部署的程序.
-   **`no-handrolled-value-type-mirror`** - 手写的 `interface Foo {…}` 镜像内镜的东向类型值 `FooType`,一个 `as { type: …; value: … }` 主张,或 `*Like` 介面或字面字面标注在 East 类型上 – 以 `ValueTypeOf<typeof FooType>` 因此它不能漂移, 并缩小一个解码的结合 在它的标签。 一个工厂的选项接口( Q)`SubtypeExprOrValue<…>` 成员)是输入而非镜子,并经过.
-   **`no-host-comparison-on-east-values`** - 说吧 `===`编号 :`<` ,并排序比较器,减去它们 ——使用 `equalFor(T)` 编号 : `compareFor(T)`,或 `Object.is(a, b)` ,指同一个对象(备忘录、缓存).
-   **`require-example-returns`** - 一个 `example()` 无 `returns` (对非`NullType`编号 :`UIComponentType` )——牵引装置运行fn作为赤裸的语句和断言假道.
-   **`no-duplicate-definition-name`** - 两个同种e3定义在一个文件中共享一个名称字符串——它们在部署时会碰撞.
-   **`no-inline-credentials`** - 字串证书(`password`, (中文(简体) ), `secretAccessKey`, (中文(简体) ), `token`直接或包裹在 `some(…)`编号 :`variant("some", …)`)在East/e3源中——IR是内容地址,输出,复制,因此其中的秘密实际上不可信赖. 使用 `Env.get("NAME")` (东-节点-std),提供每个环境的价值. 与本地主机/端点(测试容器)配对的证书免责.

### 主机代码持有解码后东方值

一旦东方解码出东方值, 渲染器、运行时间或测试会持有东方值, 这里的每个规则都标出JavaScript的站牌 代表东方的公用事业. 每个站台的打字检查都干净, 和几个隐藏真正的错误在渲染器中 (#960,#962) (中文(简体) ). 一种价值通过它的类型来源于:a `ValueTypeOf` 结构, a 成员携带 `[variant_symbol]`页:1 `SortedSet` 编号 : `SortedMap`,或一块地, 有效载荷或元素从一个清单中读出——从不列出姓名. `hostValueRuleNames` 名称集( 有 `no-host-comparison-on-east-values`, (中文(简体) ), `no-handrolled-value-type-mirror`, (中文(简体) ), `no-handrolled-variant`, (中文(简体) ), `prefer-some-none` 财务报告和审定财务报表 `no-struct-type-from-object`以便一个只奔跑的召唤者 带有 `only`。 。 。 .

-   **`no-host-print-of-east-values`** - 说吧 `String(x)`, (中文(简体) ), `x.toString()`, (中文(简体) ), `` `${x}` ``, (中文(简体) ), `JSON.stringify(x)`, (中文(简体) ), `x.toISOString()` 在一个值 JavaScript 上与 East 不同的打印——一个浮点,一个 DateTime,一个 Blob,一个struct,一个变体,一个收藏. 使用 `printFor(T)`,或个人的本地化格式。 字符串、整数和布尔打印方式相同,数字写作CSS长度(`` `${w}px` ``)是风格,不是指印.
-   **`no-host-parse-to-east-values`** - 说吧 `BigInt(s)`, (中文(简体) ), `Number(s)`, (中文(简体) ), `parseFloat(s)`, (中文(简体) ), `parseInt(s)`, (中文(简体) ), `new Date(s)`, (中文(简体) ), `Date.parse(s)` 或者说 `JSON.parse(s)` 将文本读入一个东槽——一个东函数值的参数,一个变体的有效载荷,一个struct的字段. 使用 `parseFor(T)` 并采取行动 `success`。在来源中写入的文本是其作者的,但保存一个无区日期时间,该时间 `new Date` 在当地时间读取.
-   **`no-js-type-dispatch-on-east-values`** - 说吧 `typeof x` 或者说 `x instanceof C` ——按其东类发送`isValueOf(x, T)`)或它的变体标记.
-   **`no-js-collection-for-east-collection`** - 一个Java脚本 `Set` 编号 : `Map` 由structs,变体或 DateTimes 在东集, Dict 或变体有效载荷中起落而来—— 它通过身份来找到一个密钥, 所以一个平等的密钥永远找不到它的入入. 使用 `SortedSet` 编号 : `SortedMap` 与 `compareFor(K)`弦,整数,花键和布尔键是东方自己的平和和通过.
-   **`no-struct-type-from-object`** - 东边的 `StructType` 给一个只在运行时才知道字段的物体—— `Object.fromEntries(…)`页:1 `Record<string, …>` 或一般结构 `fields`,一个分布,一个类型的计算名称 `string` − 或像整数一样命名字段的对象(`"10"`, (中文(简体) ), `2024`),写出或类型. 物体在所有其他物体之前都列出这样的名称,无论它在哪里写,所以它不能使这个字段保持原位,以及 `StructType` 拒绝(# 1574) 。 宣布田地为列表, `StructType([[name, type], …])`,保持任何命令; `Object.entries(T.fields)` 列出结构类型. `StructType(Object.fromEntries(list))` 固定为 `StructType(list)`名称已知且无一物像整数的物体——写出、记录、宣布的结晶 `fields` 或散取一分,一分一分.

## 使用量

```typescript
import * as ts from "typescript";
import { runEastRules, createDiagnosticsService, hostValueRuleNames } from "@elaraai/east-diagnostics";

// Pure: run the rules over one source file you already have a program + checker for.
const diagnostics = runEastRules(ts, program, sourceFile, checker, { disabled: ["prefer-some-none"] });

// Only the rules over host code holding decoded East values.
const hostValues = runEastRules(ts, program, sourceFile, checker, { only: hostValueRuleNames });

// Or let the service resolve the project and merge native + rule diagnostics.
const service = createDiagnosticsService();
const text = service.diagnoseText("/path/to/file.ts"); // "" when clean
```

## Claude 代码插件

东方生态系统也运载a [克劳德代码](https://claude.com/claude-code) 插件 — East 语言技能, 实例搜索, 以及 East 代码的先发制人诊断 `elaraai` 市场:

```text
# Inside Claude Code
/plugin marketplace add elaraai/east-workspace
/plugin install east@elaraai
```

```bash
# From a terminal
claude plugin marketplace add elaraai/east-workspace
claude plugin install east@elaraai
```

## 许可证

双重许可证:

-   **开源**数字 : [AGPL-3.0 导弹](https://npmcn.com/package/%40elaraai/east-diagnostics/LICENSE.md) - 免费开放源码使用
-   **商业**:可供专有用途-联系方式 [支助@elara.ai](mailto:support@elara.ai)

* * *

_开发者 [Elara AI Pty有限公司](https://elaraai.com/)_

## 常见问题

### @elaraai/east-diagnostics 是什么？

东意识诊断规则关于TypeScript检查器——一个共享引擎,用于编辑器\(tserver插件\),代理\(无头守护进程\),和CI\.

### 如何安装 @elaraai/east-diagnostics？

在项目目录运行 npm install @elaraai/east-diagnostics，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：typescript（\>=5\.0\.0 \<7）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @elaraai/east-diagnostics 支持 TypeScript 吗？

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

### @elaraai/east-diagnostics 支持 ESM 还是 CommonJS？

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

### @elaraai/east-diagnostics 需要什么版本的 Node\.js？

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

### @elaraai/east-diagnostics 可以商用吗？

@elaraai/east-diagnostics 使用 AGPL-3\.0-or-later 许可。最严格的 Copyleft：除分发外，通过网络向用户提供基于它的服务也需要开源对应源码。闭源 SaaS 使用前务必评估。以上为概括，不构成法律意见，请以许可原文为准。

### @elaraai/east-diagnostics 的下载量有多少？

根据 npm 官方下载统计，@elaraai/east-diagnostics 在 2026/10/13 – 2026/11/11 这 30 天内被下载 3,723 次，日均约 124 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @elaraai/east-diagnostics 还在维护吗？

最新版本 1\.0\.107 发布于 2026/11/13（今天）；至今共发布 104 个版本，其中过去 12 个月发布了 104 个；首次发布于 2026/06/09。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

