@cruchcrew/oxlint-plugin-import-access-qq) 互联网档案馆的存檔,存档日期2013-12-02
JSDoc 导入 TypeScript 的访问权限,由 奥克林特。仅限 @public 出口可以从任何地方进口,没有准入标签的出口是: @package:只有它自己的包(它的目录和子目录)中的文件才能导入. 标记导出 @public 与整个项目分享,或 @private 因此没有其它文件可以导入它. 做无标记的出口 @public 或者说 @private 相反,设置 defaultImportability。 。 。 .
本地牛林 JS 插件端口 埃斯林特-插头-进口-接入 这需要 无类型检查器: 无 typescript 依赖,无 tsconfig.json 工程加载, 没有键入林丁设置 .
访问标签
每个导出者的 JSDoc 访问标记决定哪些文件可以导入. 软件包是一个带有子目录的目录,默认每个目录都是一个(参见 packageDirectory) (中文(简体) ). 在图片中, sub/foo.ts 有三种出口:
api实值@public: 任何文件都可以导入它,sub/bar.ts以及src/main.ts。 。 。 .helper已经 无标签,所以这是@package: 文件在sub/及其子目录可以导入它,所以sub/bar.ts能够和src/main.ts没办法.secret实值@private: 没有文件可以导入, 甚至不能导入sub/bar.ts旁边.
从Node.js内建和任何进口 node_modules 从不检查.
为什么?
最大的封装单位 TypeScript 给了您一个文件. 一旦某物被出口,整个项目就可以导入. 保持事物的隐私意味着它们保存在一个文件中,文件会变得庞大.
此插件在文件与整个工程之间添加目录级别层: 导出保留在其目录内( )@package直到你标记它 @public标出项目其他部分可能使用的内容 @public,以及任何其他文件可能使用的内容 @private。 。 。 .
为什么这个包
| 这个包 | 埃斯林特-插头-进口-接入 | 牛林-插头-进口-接入 | |
|---|---|---|---|
| 线条 | 奥克林特 | ESLint 语录 | 奥克林特 |
| 需要类型信息 | ❌ | qq 已键入 | QQ TypeScript 7 不稳定 API |
typescript 依赖性 | ❌ | ✅ | ✅ ^7 |
无工作 tsconfig.json | ✅ | ❌ | ❌ |
| 检查编辑器中未保存的编辑 | ✅ | ✅ | qq 跳过直到保存 |
| 与原规则相同的结果 | 已核实1 | – 说吧 – | ✅ |
1个 defaultImportability: "public",它使出口没有访问标记 @public 就像原版一样 此插件的默认值是 "package"。该插件还检查了通过命名空间导入所使用的成员(import * as foo),原件不检查.
安装
选择你的格斗家
pnpm add -D oxlint @crutchcrew/oxlint-plugin-import-access
bun add -D oxlint @crutchcrew/oxlint-plugin-import-access
yarn add -D oxlint @crutchcrew/oxlint-plugin-import-access
npm add -D oxlint @crutchcrew/oxlint-plugin-import-access
需要节点.js ^20.19.0 || >=22.12.0 (同克克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克林特同为克 >=1.40.0。 。 。 .
配置
单位 .oxlintrc.json数字 :
{
"jsPlugins": ["@crutchcrew/oxlint-plugin-import-access"],
"rules": {
"import-access/jsdoc": "error"
}
}
或进入 oxlint.config.ts数字 :
import { defineConfig } from "oxlint"
export default defineConfig({
jsPlugins: ["@crutchcrew/oxlint-plugin-import-access"],
rules: {
// Untagged exports are @package; tag an export @public to import it from anywhere
"import-access/jsdoc": "error",
},
})
仅此而已:没有配置解析器或工程。 诊断也通过 oxc 扩展 (克林特的语言服务器).
选项
| 选项 | 默认 | 说明 |
|---|---|---|
indexLoophole | true | sub/index.ts 计数为 sub.ts,因此其包-私人出口可明显提升到一个水平 |
filenameLoophole | false | foo.ts 进口包-私人出口 foo/ |
defaultImportability | "package" | 没有标签的出口访问 : "package" (单位:千美元)@package, (中文(简体) ), "public" 或者说 "private" |
treatSelfReferenceAs | "external" | 是否检查通过您自己的包名导入( Q)"internal"或无 |
excludeSourcePatterns | [] | 要跳过的出口商文件的光标( 相对于工作目录), 例如生成的代码 |
packageDirectory | 每个目录 | 属于软件包边界的目录的光标, 例如 . ["**", "!**/_internal"] |
所有选项和访问标记( E)@public, (中文(简体) ), @package, (中文(简体) ), @private, (中文(简体) ), @access <level>)行为与原插件相同,但 defaultImportability 默认为 "package" 改为 "public"见 规则文档 详情和实例.
如何运作
原始规则询问 TypeScript 类型检查器, 声明导入指的是哪个 。 此插件单从语法中解答相同的问题 :
- 解析像 TypeScript () 这样的导入
tsconfigpaths, (中文(简体) ),package.jsonexports, (中文(简体) ),.js→.ts与 解氧化剂, (中文(简体) ), - 跳过内建和任何能达到的东西
node_modules, (中文(简体) ), - 读取目标文件的导出和 JSDoc 氧化- parser( x) ——模块记录和注释;语法树只用于有装饰器的少数文件,
export =,再出口进口或JSDoc在可变报表中——并缓存, - 跟着
export *,停止像上游那样直接再出口,并阅读带有TypeScript附件和标签规则的JSDoc, - 检查环境
declare module "…"和通配符declare module "*.svg"也声明.
对照原件核实: 上游测试套件没有改变(相同的线条、列条、消息),并将端口与上游的TypeScript对每个固定文件和选项组合的规则进行比较,包括用于再出口链、超载、enum、, export =,通配符模块和JSDoc放置,其在测试套件中的期望由原规则产生. 这个 已知差异 是边框,例如模块增强跨文件.
业绩
创建带有嵌入式特性目录的项目, export * 每个单元的桶和6个进口量(bun run bench在Apple M1上(8个核心,Asahi Linux),节点.js 26,克克林特 1.89:
| 模块(进口) | ESLint + eslint-plugin- 进口接入 | oxlint + 此插件 | 加速 |
|---|---|---|---|
| 1 000个(6 000个) | 1.90s (中文(简体) ) | 0.31关 | 6.1× (中文(简体) ) |
| 2 500 (15 000)美元 | 第4.89节,第1节 | 0.55 s (单位:千美元) | 8.9× (中文(简体) ) |
| 5 000(30 000)美元 | 524 s 2 失败 | 0.95 s (中文(简体) ) | – 说吧 – |
ESLint 10 有打字机-slint 8 有打字机-linting(projectService),单跑;克克林特最优秀为3. 两者都报告每个文件中基于TypeScript的规则可以分析的相同诊断. 在0.95 s中,大约0.33 s是克克林特自己运行超过5000个文件的任何JS插件的费用.
1 TypeScript在2,600个文件中的16个文件("最大调用堆栈大小已超过")上失败了,因此这些文件没有受到控制. 2 TypeScript在这个重循环项目的每个文件中都失败了.
在长期运行的编辑器会话中,文件会随着变化被重新检查:导出文件会根据大小和修改时间重新验证,只有在变化时才会重新分出.
从 Eslint-plugin- 进口进入
- 安装克林特和此软件包,并移除
eslint-plugin-import-access从你的ESLint配置. - 规则选项不变
"import-access/jsdoc"在牛林配置。 如果你没准备好defaultImportability,设置为"public"以保持原作的行为:这里,未标记的出口是@package默认. - 对于 IDE 自动导入过滤, 您可以继续使用原始软件包 TypeScript 语言服务插件 (它只需要TypeScript,而不是ESLint);这个软件包没有自己的语言服务插件.
捐款
bun install
bun run test # rule and unit tests (Node.js >= 22)
bun run build && bun run test:e2e
bun run check # format, lint + typecheck (oxlint, with this plugin on its own sources), lockfile
贷项
依据 埃斯林特-插头-进口-接入 以 哟,该端口所保存的规则设计、选项、文件和测试固定装置.