@ 集体智能/ lint
集体情报规则,作为一个Oxlint插件。 每一个线人
规则住在这个包裹。 插件已命名 ci-solution因此,每个规则是
启用为 ci-solution/<rule>。 。 。 .
安装
bun add -d oxlint @collective-intelligence/lint
插件需要 oxlint 1.82.0 或后来.
使用
所有规则
扩展 recommended 配置为 oxlint.config.ts。它装入插件和
允许作为错误的每条规则 :
import { recommended } from "@collective-intelligence/lint"
import { defineConfig } from "oxlint"
export default defineConfig({
extends: [recommended]
})
要改变一条规则,请在扩展后设置:
export default defineConfig({
extends: [recommended],
rules: { "ci-solution/subpath-index": "warn" }
})
选定规则
装入插件并只启用您想要的规则 :
import { defineConfig } from "oxlint"
export default defineConfig({
jsPlugins: ["@collective-intelligence/lint"],
rules: {
"ci-solution/package-entrypoint": "error",
"ci-solution/subpath-imports": "error"
}
})
JSON 配置同样有效:
{
"jsPlugins": ["@collective-intelligence/lint"],
"rules": { "ci-solution/package-entrypoint": "error" }
}
这个 RuleName 类型列出每个规则名称.
代理技能
包裹上装的是代理技能 ci-solution-structure 时间
skills/ci-solution-structure/SKILL.md在哈尼斯情报库里,
页:1 collective-intelligence 包装技能并添加插件
ci-solution/package-entrypoint 切入到管理配置中.
规则
| 规则 | 强制执行 | 组 |
|---|---|---|
ci-solution/package-entrypoint | 进口另一套件,目标是在其 package.json 出口. | 软件包边界 |
ci-solution/subpath-imports | 子路径文件夹之间的导入遵循允许的方向 . | 解决方案布局 |
ci-solution/subpath-entrypoint | 从另一个子路径文件夹导入目标为文件夹或其索引文件 . | 解决方案布局 |
ci-solution/subpath-index | 每个子路径文件夹都有一个 index.ts 或者说 index.tsx。 。 。 . | 解决方案布局 |
ci-solution/effect-subpath | 一个SDK效应API来自SDK的 /effect 子路径; 已删除的 SDK 路径被报告 . | 效果公约 |
ci-solution/no-run-in-view | 查看模块调用否 fetch 没有效果. | 效果公约 |
ci-solution/effect-actors | X 国家副作用行为者是: fromEffect 演员. | 效果公约 |
ci-solution/effect-writes | 没有模块需要 TanStack 查询 useMutation; 写入 fromEffect 演员. | 效果公约 |
软件包边界
一个工作空间持有互相导入的软件包 。 这些规则都保留 其公布的公开入境点后面的包.
package-entrypoint
通过其根导入另一个软件包( E)@scope/pkg)或列于
联合国 package.json exports (单位:千美元)@scope/pkg/views) (中文(简体) ). * 模式和模式 null
排除遵循节点解析。 规则是,通过
node_modules 从导入文件开始,所以工作空间包必须链接到
包管理器.
import { invoiceTotal } from "@acme/billing" // valid
import { invoiceTable } from "@acme/billing/views" // valid when "./views" is exported
import { rate } from "@acme/billing/src/domain/rates" // reported
import { rate } from "../../billing/src/domain/rates" // reported: relative path into another package
没有包 exports 字段接受除 src/。 。 。 .
无法找到的软件包不检查 .
解决方案布局
解决方案包可以将其来源分割为子路径文件夹:
src/
ci/ Collective Intelligence entity and capability declarations
domain/ domain model, free of runtime concerns
api/ API contracts
server/ server handlers and runtime wiring
headless/ UI state without rendering
views/ rendered UI
这些规则将那些文件夹分开.
subpath-imports
| 文件夹 | 不得导入 |
|---|---|
domain/ | server/, (中文(简体) ), views/, (中文(简体) ), headless/, (中文(简体) ), ci/ |
ci/ | views/, (中文(简体) ), headless/ |
headless/ | server/ |
views/ | server/ |
api/ | 无限制 |
server/ | 无限制 |
规则通过包名检查相对进出口
(单位:千美元)@acme/billing/server 从 src/views/) (中文(简体) ).
subpath-entrypoint
从另一个子路径文件夹导入目标为文件夹或其索引文件 . 一个子路径文件夹中的导入是免费的 .
// src/views/table.ts
import { invoiceTotal } from "../domain" // valid
import { invoiceTotal } from "../domain/index.ts" // valid
import { rate } from "../domain/rates" // reported
subpath-index
每个子路径文件夹下方 src/ 有一个 index.ts 或者说 index.tsx 进入点.
规则在文件夹中报告每个文件 .
效果公约
应用程序在 XState 机器中保留其副作用: 每一个副作用都是一个
fromEffect 角色,通过 TanStack 查询查看数据,并刷新
那些通过SDK读取 QueryCache这些规则
检查进口和呼叫的公约部分.
effect-subpath
集体情报系统@collective-intelligence/*暴露其影响
API 时间 <sdk>/effect 财务报告和审定财务报表 <sdk>/effect/<adapter>。规则报告 SDK 路径
名称 <sdk>-effect 软件包,或 effect 部分
在另一个子路径之下。 它还报告每条SDK路径,0.2.0后发布
删除,并替换:
| 删除路径 | 替换 |
|---|---|
@collective-intelligence/external-apps-server-sdk/runtime/effect | @collective-intelligence/external-apps-server-sdk/effect |
@collective-intelligence/external-apps-server-sdk/persistence/drizzle/effect | @collective-intelligence/external-apps-server-sdk/effect· ; layerNodePostgres 财务报告和审定财务报表 NodePostgresLayerOptions 从 @collective-intelligence/external-apps-server-sdk/effect/node-postgres |
@collective-intelligence/external-apps-server-sdk/runtime/next | @collective-intelligence/external-apps-server-sdk/next |
@collective-intelligence/extensions-sdk-backend-effect | @collective-intelligence/extensions-sdk-backend/effect |
import { CiClient } from "@collective-intelligence/external-apps-client-sdk/effect" // valid
import { createClient } from "@collective-intelligence/external-apps-client-sdk" // valid
import { Realtime } from "@collective-intelligence/external-apps-client-sdk/realtime/effect" // reported
import { CiRuntime } from "@collective-intelligence/external-apps-server-sdk/runtime/effect" // reported: removed
no-run-in-view
视图模块是 .tsx 或者说 .jsx 文件,或文件中的文件 views/ 子路径 a
解决方案包。 该规则报告了全球 fetch (另见:
globalThis.fetch 财务报告和审定财务报表 window.fetch)和每次使用效果运行函数
(单位:千美元)runPromise, (中文(简体) ), runSync, (中文(简体) ), runFork 以及其它问题 run* 职能 Effect
财务报告和审定财务报表 ManagedRuntime:
- a 从任何物体读取、调用或传递为值:
Effect.runPromise(x), (中文(简体) ),runtime.runSync(x), (中文(简体) ),x.pipe(Effect.runPromise)· ; - 解结构模式中的密钥 :
const { runFork } = runtime· ; - 从
effect, (中文(简体) ),effect/*或者说@effect/*数字 :import { runPromise } from "effect/Effect"。 。 。 .
括号或引文中的常数也算: window["fetch"](url), (中文(简体) ),
Effect[`runSync`](x) 财务报告和审定财务报表 const { "runFork": fork } = runtime 报告.
本地绑定名称 fetch, (中文(简体) ), globalThis 或者说 window,如
cache.fetch,括号中的名称,该名称只能运行时间给出(Effect[key]和一个
对象字元键, 如 { runPromise: run } 未报告。 允许
在视图测试中调用, 关闭测试文件的规则 overrides
输入.
effect-actors
规则逐一报告 fromPromise, (中文(简体) ), fromCallback, (中文(简体) ), fromObservable 财务报告和审定财务报表
fromEventObservable 输入、再出口或命名空间导入
(单位:千美元)XState.fromPromise, (中文(简体) ), XState["fromPromise"], (中文(简体) ),
const { fromPromise } = XState从 xstate 或者说 xstate/*。使副作用行为者 fromEffect 从
@collective-intelligence/external-apps-client-sdk-react/effect 在离散中
应用程序,或来自 @collective-intelligence/extensions-sdk-frontend-react/effect 内
一个主机工作室部件。 机器和
fromTransition 行为者没有副作用,也没有报告。 本地名称
阴影化命名空间导入,例如一个命名的参数 XState,没有
报告.
effect-writes
规则逐一报告 useMutation 导入、再导出或命名空间
导入( e)ReactQuery.useMutation, (中文(简体) ), ReactQuery["useMutation"], (中文(简体) ),
const { useMutation } = ReactQuery从 @tanstack/react-query。通过一个 fromEffect 演员来自
@collective-intelligence/external-apps-client-sdk-react/effect 在离散中
应用程序,或来自 @collective-intelligence/extensions-sdk-frontend-react/effect 内
a 主机 Studio 部件; 写入后, 演员刷新读取
QueryCache 同一入境点的invalidate, (中文(简体) ), setData) (中文(简体) ).
规则检查每个模块. useMutation 只在反应渲染时运行,
因此,一个模块 取它是一个视图, 钩或帮助其中之一.
useQuery 而其他的则不报告
useMutationState 财务报告和审定财务报表 useIsMutating: 他们只读到一个状态
useMutationA级 useMutation 从另一个图书馆,例如
@apollo/client,未报告。 实体钩
@collective-intelligence/external-apps-client-sdk-react/resources
(单位:千美元)useEntityCreate, (中文(简体) ), useEntityUpdate, (中文(简体) ), useEntityDelete未报告 :
sDK 书写并刷新它自己的实体读取.
规则检查没有查询密钥 。 SDK的应用程序 "ci-entities"
键,例如 invalidateQueries未报告: SDK
拥有用于实体读取的密钥,但没有导出用于
因此,报告将没有任何支持性的解决办法.
添加规则
每条规则都是Oxlint在自己的文件夹里的规则, src/rules/<rule>/数字 :
-
写入
src/rules/<rule>/<rule>.ts导出 aLintRule(单位:千美元)src/rule.ts(中文(简体) ) 改为:group: 上表中的规则组(添加一组为RuleGroup当没有一组人适合的时候;rule: 规则从defineRule联 合 国@oxlint/plugins,带有messages输入meta每一个发现.src/rule.ts拿着 共享帮助 :moduleSpecifiers建立一个访问者 检查每一个 模块指定符,staticPropertyName读取一个恒定属性名称,并且declaredVariable查找一个名称所指的变量.
一个规则读取工作空间通过
src/workspace/数字 :packageOf财务报告和审定财务报表installedPackage找到包裹清单,declaresEntrypoint检查exports,以及layoutFile找到文件的子路径 . -
在登记册上添加一行,
src/rules/index.ts插件、 插件recommended配置和配置RuleName类型从它. -
写入
src/rules/<rule>/<rule>.test.ts相对于固定的工作空间test/fixtures/workspace/,并添加新案件的固定文件。 添加 满足人们期望的新诊断src/index.test.ts。 。 。 . -
将规则添加到上表
CHANGELOG.md。 。 。 .
Oxlint同步调用规则访问者,所以规则读取文件与
同步 node:fs API:它不能等待承诺或计时器. 这个
工作区搜索缓存每个文件夹,所以每个软件包
每个插件装入一次.