@ai-i18n/eslint-plugin 1.0.0-alpha.2 → 1.0.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,29 +1,77 @@
1
1
  # @ai-i18n/eslint-plugin
2
2
 
3
- 用于提前报告无法被 Vite/Yuku 静态提取的 `t()` 参数。规则检查解析到
4
- `virtual:ai-i18n` `t` binding,以及 Vue/React 模式下 `useI18n()` 解构或对象成员得到的
5
- `t`。其他库或局部同名函数不受影响。
3
+ 用于提前报告无法被 Vite/Yuku 静态提取、内嵌静态 markup、不符合推荐语法,或不会随语言
4
+ 切换刷新的 Runtime 用法。规则检查解析到 `virtual:ai-i18n` 的翻译与状态 API,以及 Vue/React 模式下
5
+ `useI18n()` 返回的订阅状态。其他库或局部同名函数不受影响。
6
+
7
+ alpha 阶段请安装 `@ai-i18n/eslint-plugin@alpha`;peer 支持 ESLint 9 和 10。
8
+
9
+ 官方 preset 与 Vite 源码范围一致,覆盖 `.js`、`.mjs`、`.ts`、`.mts` 以及当前框架支持的
10
+ `.jsx`、`.tsx`、`.vue`。它们会排除 `.cjs` 与 `.cts`,也不会为这些文件声明自动导入全局。
6
11
 
7
12
  ## 按模式配置
8
13
 
9
- 显式 import Vanilla 项目可以使用 `recommended`。启用 ai-i18n 按需导入时,选择与
10
- Vite `framework` 一致的 preset;它会声明对应只读全局并启用同一条静态参数规则:
14
+ 显式 import 时,Vanilla / React 使用 `recommended`,Vue 使用覆盖 SFC 的 `vue`:
11
15
 
12
16
  ```js
13
17
  import aiI18n from '@ai-i18n/eslint-plugin';
14
18
 
15
19
  export default [
16
- ...aiI18n.configs.vanilla, // .vue / .react
20
+ ...aiI18n.configs.recommended, // Vue 改用 .vue
21
+ ];
22
+ ```
23
+
24
+ 启用 `aiI18n({ autoImport: true })` 时,改用与 Vite 框架模式一致的自动导入 preset:
25
+
26
+ ```js
27
+ export default [
28
+ ...aiI18n.configs['vanilla-auto-import'],
29
+ // Vue:...aiI18n.configs['vue-auto-import']
30
+ // React:...aiI18n.configs['react-auto-import']
17
31
  ];
18
32
  ```
19
33
 
20
- 这些 preset 只负责 ai-i18n `t`/`useI18n`。宿主 Auto Import 插件管理的其他 API 仍由
21
- 它自己的 ESLint 集成负责。
34
+ 只有 `*-auto-import` preset 会声明 Runtime 全局。所有 preset 都声明只读的
35
+ `defineI18nMessages` 编译宏。
36
+
37
+ 希望在自动导入模式中禁止残留的同名显式 import 时,可以按需启用:
38
+
39
+ ```js
40
+ export default [
41
+ ...aiI18n.configs['vue-auto-import'],
42
+ {
43
+ rules: {
44
+ 'ai-i18n/no-redundant-auto-import': [
45
+ 'warn',
46
+ {
47
+ autoImport: [
48
+ 'useI18n',
49
+ 't',
50
+ 'setLang',
51
+ 'getLang',
52
+ 'getLangs',
53
+ 'getLangLoadState',
54
+ 'subscribe',
55
+ 'tRef',
56
+ 'i18nComputed',
57
+ 'tComputed',
58
+ ],
59
+ },
60
+ ],
61
+ },
62
+ },
63
+ ];
64
+ ```
65
+
66
+ React 使用上面的完整列表并移除 `tRef`、`i18nComputed` 与 `tComputed`;Vanilla 再移除
67
+ `useI18n`。该规则不在 preset 中默认启用。它只检查来自 `virtual:ai-i18n` 的未改名值导入,
68
+ 保留改名导入、namespace import、type import 和当前模式不会自动注入的 API,并支持
69
+ `eslint --fix`。import 内部有注释时只报告,不自动修改。
22
70
 
23
71
  ## Vue SFC
24
72
 
25
73
  `.vue` 是可选文件格式。Vue 项目应先通过 `eslint-plugin-vue` 配置
26
- `vue-eslint-parser`,再展开 `configs.vue`:
74
+ `vue-eslint-parser`,再按 Vite 的 `autoImport` 值选择 preset:
27
75
 
28
76
  ```js
29
77
  import aiI18n from '@ai-i18n/eslint-plugin';
@@ -38,34 +86,319 @@ export default [
38
86
  parserOptions: { parser: tseslint.parser },
39
87
  },
40
88
  },
41
- ...aiI18n.configs.vue,
89
+ ...aiI18n.configs.vue, // autoImport: false
90
+ // ...aiI18n.configs['vue-auto-import'], // autoImport: true
42
91
  ];
43
92
  ```
44
93
 
45
- `configs.vue` 复用宿主的 Vue parser,只启用同一条 `t-static-args` 规则。语义分析使用
46
- Vue 项目已有的 `@vue/compiler-sfc`,与 Vite 提取器共享编译结果和 source map,覆盖
47
- `<script>`、`<script setup>`、模板插值和指令表达式。两个 Vue 依赖均为可选 peer,
48
- 不会安装到 React/Vanilla 项目。
94
+ 两个 Vue preset 都复用宿主的 Vue parser,并启用六条适用规则。语义分析使用
95
+ Vue 项目已有的 `vue/compiler-sfc` Node 入口,与 Vite 提取器复用相同分析语义和
96
+ source-map 映射,覆盖 `<script>`、`<script setup>`、模板插值和指令表达式。Vue
97
+ TypeScript 与 SFC 编译相关依赖均为可选 peer,不会安装到 React/Vanilla 项目。
98
+
99
+ Vue SFC 可在 `<script>`、`<script setup>`、Options API 的 `computed` / `methods` 与
100
+ template 中直接调用 Runtime `t`。显式导入和自动导入都支持;自动导入只处理未绑定且未被
101
+ 模板局部变量或组件自身 prop、data、computed、普通同名 method、inject、setup 返回值遮挡的
102
+ `t`。自动导入模式下,纯 Options template 不需要 `methods: { t }`;关闭自动导入时,普通
103
+ Options `<script>` 仍需通过真实 method binding 把显式导入的 Runtime 函数暴露给 template。
104
+
105
+ 纯 Options API 可在 `computed` 中展开 `...i18nComputed()` 获得响应式语言和加载状态,
106
+ 并把 `tComputed()` 直接写成 computed 属性值。`watch.currentLang` 可使用 Vue 原生 watcher
107
+ 监听语言变化:
108
+
109
+ ```ts
110
+ import { defineComponent } from 'vue';
111
+ import { i18nComputed, t, tComputed } from 'virtual:ai-i18n';
112
+
113
+ export default defineComponent({
114
+ computed: {
115
+ ...i18nComputed(),
116
+ saveLabel: tComputed('保存'),
117
+ },
118
+ methods: {
119
+ t, // 让 Volar 与 template 都能识别 t()
120
+ notify() {
121
+ return t('保存成功'); // script 内继续使用 lexical t
122
+ },
123
+ },
124
+ watch: {
125
+ currentLang(next: string, previous: string) {
126
+ console.log(previous, next);
127
+ },
128
+ },
129
+ });
130
+ ```
131
+
132
+ 使用 `defineComponent()` 后,`this.currentLang` 等展开后的 computed 字段可被 IDE 准确推断。
133
+ Vue 3.5 的 Options `watch` 回调参数不会按 key 推断,TypeScript 项目应显式标注
134
+ `next` / `previous`。
135
+
136
+ 上例展示关闭自动导入时的显式 import。开启 `autoImport` 后,应同时删除 ai-i18n import 和
137
+ `methods: { t }`,script 与 template 直接使用裸 `t()`;本地 `t() {}` 或本地变量仍然
138
+ 遮挡。显式模式的改名导入可写成 `methods: { t: translate }`,只有能证明值来自
139
+ `virtual:ai-i18n` 的 bridge 才参与 template 提取。两种模式都不支持 script 内的
140
+ `this.t()`、`this.$t()`、mixin 与 `globalProperties`。
49
141
 
50
142
  Vue preset 同时覆盖 Vue JSX/TSX,但宿主仍需用 `@vitejs/plugin-vue-jsx` 编译这些文件。
51
- React 项目使用 React preset;同一个 Vite build 不支持两种框架模式混用。
143
+ 同一个 Vite build 不支持两种框架模式混用。
144
+
145
+ ## 生命周期检查
146
+
147
+ 静态提取成功不代表字符串会自动刷新。所有 preset 都启用
148
+ `ai-i18n/no-eager-translation`:在模块或 `<script setup>` 初始化期间保存 `t()` 结果会
149
+ 收到 warning。Vue SFC 的 `export default { setup() {} }`,以及 `.vue` / `.ts` / `.tsx`
150
+ 中从 `vue` 导入的 `defineComponent({ setup() {} })` 和函数签名也按一次性 setup
151
+ 初始化检查。纯 Options `data()` 保存的译文同样只是初始化快照,规则会提示改用
152
+ `tComputed()` 或在 getter / method 执行时调用 `t()`。
153
+
154
+ ```ts
155
+ // 以下各行是相互独立的示例
156
+ export const label = t('保存'); // warning:只保存初始化时的译文
157
+ export const getLabel = () => t('保存'); // 允许:每次调用重新读取当前语言
158
+ export const label = tRef('保存'); // Vue:允许,返回响应式 ComputedRef
159
+ export default { computed: { label: tComputed('保存') } }; // 纯 Options:允许
160
+ export default { data: () => ({ label: t('保存') }) }; // warning:Options data 快照
161
+ ```
162
+
163
+ 配置对象也要按生命周期选择写法。模块顶层直接保存图表或菜单配置会得到初始化快照;改成工厂函数,
164
+ 并在首次渲染和语言变化后重新创建配置:
165
+
166
+ ```ts
167
+ // warning
168
+ export const chartOptions = { title: { text: t('销量') } };
169
+
170
+ // 允许:调用时读取当前语言
171
+ export const createChartOptions = () => ({
172
+ title: { text: t('销量') },
173
+ });
174
+ ```
175
+
176
+ 集中管理有限标题时,使用 `defineI18nMessages()` 声明静态集合,并在 getter 或普通函数执行时
177
+ 调用 `t(ROUTE_TITLES[name])`。这样既能完整提取,也不会长期保存初始化译文。
178
+
179
+ 第三方配置明确支持函数值时,可以把翻译放进该回调。例如 async-validator 的校验消息:
180
+
181
+ ```ts
182
+ const rules = {
183
+ password: {
184
+ required: true,
185
+ message: () => t('请输入旧密码'),
186
+ },
187
+ };
188
+ ```
189
+
190
+ 规则只判断 `t()` 的执行位置,不会推断某个第三方字段是否接受函数。API 不支持延迟回调时,
191
+ 使用工厂函数或框架提供的响应式 API;不要改回固定的源语言字面量。
192
+
193
+ `recommended`、`vue`、`vue-auto-import` 与 `react-auto-import` 还启用
194
+ `ai-i18n/no-unsubscribed-t`。Vue template、render 与 JSX / TSX 中的 Runtime `t` 会追踪
195
+ adapter revision,可以直接使用。React JSX / TSX 的组件渲染函数仍应从 `useI18n()` 获取
196
+ `t`;React Compiler 的 `"use memo"` 与 `"use no memo"` 都不会替代订阅。两个 Vue preset
197
+ 还会报告 `this.t` 与 `this.$t`,避免 Vue template 类型桥让实例成员写法被误认为受支持;
198
+ Options script 应直接调用词法作用域中的 `t()`。
199
+
200
+ ```tsx
201
+ function SaveButton() {
202
+ return <button>{t('保存')}</button>; // warning
203
+ }
204
+
205
+ function SaveButton() {
206
+ const { t } = useI18n();
207
+ return <button>{t('保存')}</button>; // 允许
208
+ }
209
+ ```
210
+
211
+ 事件回调和普通延迟函数中的 Runtime `t` 允许,独立的 `console.log` / `warn` / `error` /
212
+ `info` / `debug` 调用也视为即时消费。其他未知调用仍会 warning。第一版不追踪跨函数、
213
+ 跨文件或 `useMemo` / `useState` 等任意数据流,因此规则提示的是可以确定的常见问题,
214
+ 不代表覆盖所有译文生命周期错误。
215
+
216
+ 所有 preset 还启用 `ai-i18n/no-unsubscribed-runtime-state`。模块顶层不能缓存
217
+ `getLang()` 或 `getLangLoadState()` 的初始化快照;普通 Vue `setup()` 与纯 Options
218
+ `data()` 也不能保存这些快照。Vue Composition API 使用 `useI18n()` 返回的状态,纯 Options
219
+ API 把 `...i18nComputed()` 直接展开到根 `computed`;setup、data、methods、render 与
220
+ template 中直接调用该工厂会提示错误位置。事件处理器、action、普通工具函数和即时 console
221
+ 调用允许按需读取。规则只分析当前文件,不追踪跨文件 store 数据流。
52
222
 
53
- 规则与 Vite 共用静态参数语义,包括 `i18n.t()`、`i18n['t']()` 和省略式
54
- `t('source', undefined)`。未绑定到 ai-i18n 的 template-only `t()` 不参与检查。
223
+ 七条规则可独立启用。五条静态分析规则无法启动时,同一文件只报告一次双语错误;官方 preset
224
+ `t-static-args` 优先报告,避免次级规则重复提示。
55
225
 
56
- 需要解析 `tsconfig` 路径别名时,可以显式配置规则:
226
+ `ai-i18n/no-embedded-markup` 是 Vanilla、Vue 和 React 共用的 warning。它检查 Analyzer
227
+ 最终提取的 source,因此覆盖直接字符串、tagged template、静态 `const`、条件候选和文案树。
228
+ 静态 HTML/SVG 应留在翻译调用外,或作为占位符传入。规则不限制文案长度、行数或占位符数量,
229
+ 也不提供自动修复。
230
+
231
+ 规则与 Vite 共用静态参数语义,包括从 `useI18n()` 获得的对象成员调用
232
+ `i18n.t()`、`i18n['t']()`、省略式 `t('source', undefined)` 和 tagged template。
233
+ 整棵可静态求值的纯文案对象或数组可以直接传给 `t()`、Vue `tRef()` 或 `tComputed()`,不要求
234
+ `defineI18nMessages()` 或 `as const`;规则会按去重后的字符串叶子计算静态候选数。
235
+ Vue 模板可以直接调用显式导入或自动导入的 `t()`,包括只有 template 的 SFC。模板局部变量
236
+ 和组件自身同名 binding 会遮挡自动导入,ESLint 与 Vite 使用相同判断。
237
+ 在 template 或 JSX/TSX 渲染期间调用 `tRef()` 会重复创建 `computed`,同一规则会提示在
238
+ Vue setup 中只创建一次并使用返回的 Ref。`tComputed()` 只能直接作为纯 Options API 的
239
+ Vue 组件根对象 `computed` 属性值;普通模块对象与 `data` 中嵌套的同名对象不属于组件
240
+ computed。模块变量、`data/setup/methods`、template 与 render 中的调用都会提示改用对应的
241
+ `tRef()` 或 `t()`。反过来,纯 Options 的 `computed/data/methods` 不应创建 `tRef()`:
242
+ computed 使用 `tComputed()`,methods 在执行时调用 `t()`;`tRef()` 留给 setup/composable。
243
+
244
+ 对象或数组的成员级引用只有在根集合由 `defineI18nMessages()` 标记后才属于推荐写法。
245
+ 动态生成的树、非普通对象以及带第二参数的整树调用会报错。字符串拼接、
246
+ 逻辑表达式、`let` 文案、普通集合成员、`const tr = t`、命名空间调用、二次 Hook 解构、
247
+ `useI18n().t()` 与 `require()` 都会报错。
248
+
249
+ ## Monorepo 子包
250
+
251
+ 被应用消费的本地源码子包不需要再次注册 `@ai-i18n/vite`。仓库根 ESLint 配置已经覆盖
252
+ `packages/**` 时,只在根配置引入一次与消费应用一致的 preset;子包拥有独立
253
+ `eslint.config.*` 或独立 lint 命令时,也必须引入该 preset,并确保
254
+ `@ai-i18n/eslint-plugin` 能从该配置解析到。
255
+
256
+ 应用私有子包使用自动导入时,选择与消费它的 Vite build 相同的 `*-auto-import` preset,
257
+ 并让子包 TypeScript 项目包含该 build 生成的 dts。会被多个应用复用的子包优先显式导入
258
+ `virtual:ai-i18n`,使用显式导入 preset,避免依赖单个应用的全局声明。
259
+
260
+ ## alias、tsconfig 与 jsconfig
261
+
262
+ `settings['ai-i18n'].alias` 拥有最高解析优先级。纯 JavaScript 项目可以与 Vite 共享同一个
263
+ 本地源码 alias 对象,无需为了 ESLint 额外创建 `tsconfig.json`:
57
264
 
58
265
  ```js
266
+ // aliases.js
267
+ import { fileURLToPath } from 'node:url';
268
+
269
+ export const alias = {
270
+ '@': fileURLToPath(new URL('./src', import.meta.url)),
271
+ };
272
+ ```
273
+
274
+ ```js
275
+ // vite.config.js
276
+ import { defineConfig } from 'vite';
277
+ import { alias } from './aliases.js';
278
+
279
+ export default defineConfig({ resolve: { alias } });
280
+ ```
281
+
282
+ ```js
283
+ // eslint.config.js
59
284
  import aiI18n from '@ai-i18n/eslint-plugin';
285
+ import { alias } from './aliases.js';
60
286
 
61
287
  export default [
288
+ ...aiI18n.configs.recommended,
62
289
  {
290
+ settings: {
291
+ 'ai-i18n': { alias },
292
+ },
293
+ },
294
+ ];
295
+ ```
296
+
297
+ 第一版只承诺字符串到字符串的对象形式。replacement 必须使用绝对路径,并指向项目本地源码。
298
+ Vite 的数组形式、正则 `find`、`customResolver` 与 resolver plugin 不在支持范围内。插件不会
299
+ 加载或执行 `vite.config.*`。
300
+
301
+ 显式 alias 未匹配当前导入时,静态分析规则从 importer 向上寻找最近的 `tsconfig.json` 或
302
+ `jsconfig.json`;同一目录同时存在两者时优先使用 `tsconfig.json`。插件解析 `extends`,
303
+ 递归读取 `references`,再按 importer 是否满足各项目的 `files`、`include`、`exclude`
304
+ 选择实际配置。因此常见的 `@/*` paths alias 不需要额外选项。Vue 文件必须由项目显式包含,
305
+ 例如 `include: ['src/**/*.ts', 'src/**/*.vue']`。
306
+
307
+ `tsconfigPath` 是自动发现入口的可选覆盖项,适用于非标准配置名或希望固定从某个 solution
308
+ config 开始解析的项目。相对路径按 ESLint 进程的工作目录解析;指向带 `references` 的根
309
+ 配置后,仍会执行相同的递归与项目选择逻辑。该选项沿用现有名称,也可以直接指向
310
+ `jsconfig.json`。
311
+
312
+ TypeScript 6 的编译器仍执行已有的 `baseUrl` 解析,但会报告弃用诊断;TypeScript 7 将
313
+ 不再支持该选项。插件兼容 TypeScript 5/6 的 `baseUrl + paths`;新项目推荐省略
314
+ `baseUrl`,写成 `"paths": { "@/*": ["./src/*"] }`。若旧项目还依赖 `baseUrl` 的未匹配
315
+ bare import 查找,则用 `"*": ["./src/*"]` 显式保留。只存在于 Vite `resolve.alias`
316
+ 的别名应通过共享对象传入 `settings['ai-i18n'].alias`。
317
+
318
+ 需要覆盖自动发现入口时,可以显式配置规则:
319
+
320
+ ```js
321
+ import aiI18n from '@ai-i18n/eslint-plugin';
322
+
323
+ export default [
324
+ {
325
+ languageOptions: {
326
+ globals: {
327
+ t: 'readonly',
328
+ setLang: 'readonly',
329
+ getLang: 'readonly',
330
+ getLangs: 'readonly',
331
+ getLangLoadState: 'readonly',
332
+ subscribe: 'readonly',
333
+ useI18n: 'readonly',
334
+ tRef: 'readonly',
335
+ i18nComputed: 'readonly',
336
+ tComputed: 'readonly',
337
+ defineI18nMessages: 'readonly',
338
+ },
339
+ },
63
340
  plugins: { 'ai-i18n': aiI18n },
64
341
  rules: {
342
+ 'ai-i18n/no-embedded-markup': [
343
+ 'warn',
344
+ {
345
+ autoImport: ['t', 'tRef', 'tComputed', 'useI18n'],
346
+ tsconfigPath: './tsconfig.json', // 可选:覆盖自动发现入口
347
+ },
348
+ ],
349
+ 'ai-i18n/no-eager-translation': [
350
+ 'warn',
351
+ {
352
+ autoImport: ['t', 'tRef', 'tComputed', 'useI18n'],
353
+ framework: 'vue',
354
+ tsconfigPath: './tsconfig.json', // 可选:覆盖自动发现入口
355
+ },
356
+ ],
357
+ 'ai-i18n/no-unsubscribed-t': [
358
+ 'warn',
359
+ {
360
+ autoImport: ['t', 'tRef', 'tComputed', 'useI18n'],
361
+ framework: 'vue',
362
+ tsconfigPath: './tsconfig.json', // 可选:覆盖自动发现入口
363
+ },
364
+ ],
365
+ 'ai-i18n/no-unsubscribed-runtime-state': [
366
+ 'warn',
367
+ {
368
+ autoImport: ['getLang', 'getLangLoadState', 'i18nComputed'],
369
+ framework: 'vue',
370
+ },
371
+ ],
372
+ 'ai-i18n/static-candidate-limit': [
373
+ 'warn',
374
+ {
375
+ autoImport: ['t', 'tRef', 'tComputed', 'useI18n'],
376
+ tsconfigPath: './tsconfig.json', // 可选:覆盖自动发现入口
377
+ maxStaticCandidates: 2_000,
378
+ },
379
+ ],
65
380
  'ai-i18n/t-static-args': [
66
381
  'error',
67
382
  {
68
- tsconfigPath: './tsconfig.json',
383
+ autoImport: ['t', 'tRef', 'tComputed', 'useI18n'],
384
+ tsconfigPath: './tsconfig.json', // 可选:覆盖自动发现入口
385
+ },
386
+ ],
387
+ 'ai-i18n/no-redundant-auto-import': [
388
+ 'warn',
389
+ {
390
+ autoImport: [
391
+ 'useI18n',
392
+ 't',
393
+ 'setLang',
394
+ 'getLang',
395
+ 'getLangs',
396
+ 'getLangLoadState',
397
+ 'subscribe',
398
+ 'tRef',
399
+ 'i18nComputed',
400
+ 'tComputed',
401
+ ],
69
402
  },
70
403
  ],
71
404
  },
@@ -73,4 +406,17 @@ export default [
73
406
  ];
74
407
  ```
75
408
 
409
+ 上例匹配 Vue 模式;React 应移除 `tRef`、`i18nComputed` 与 `tComputed`,Vanilla 再移除
410
+ `useI18n`。翻译静态分析规则的 `autoImport` 只列 `t`、`tRef`、`tComputed` 与
411
+ `useI18n`,状态快照规则只列 `getLang` 与 `getLangLoadState`。日常接入优先使用预设,
412
+ 避免 Vite 与 ESLint 的 API 集合不一致。
413
+
414
+ `ai-i18n/static-candidate-limit` 默认在单个 `t()` 的 source 与 options 组合超过 1000 个
415
+ 时警告。`maxStaticCandidates` 必须是正整数,只改变 ESLint 的提示阈值;Vite 提取不设
416
+ 上限,也没有对应插件选项。
417
+
76
418
  插件不会自动修改宿主 ESLint 配置。
419
+
420
+ 诊断默认按 Node 时区选择语言:`Asia/Shanghai` 与 `Asia/Urumqi` 使用中文,其他时区使用
421
+ 英文。设置 `AI_I18N_DIAGNOSTIC_LOCALE=zh-CN` 或 `en-US` 可以固定语言,`auto` 恢复自动
422
+ 检测。
package/dist/index.d.ts CHANGED
@@ -1,9 +1,27 @@
1
1
  import { ESLint, Rule } from "eslint";
2
- //#region src/rules/t-static-args.d.ts
2
+ //#region src/rules/common/no-eager-translation.d.ts
3
+ declare const noEagerTranslation: Rule.RuleModule;
4
+ //#endregion
5
+ //#region src/rules/common/no-embedded-markup.d.ts
6
+ declare const noEmbeddedMarkup: Rule.RuleModule;
7
+ //#endregion
8
+ //#region src/rules/common/no-redundant-auto-import.d.ts
9
+ declare const noRedundantAutoImport: Rule.RuleModule;
10
+ //#endregion
11
+ //#region src/rules/common/no-unsubscribed-runtime-state.d.ts
12
+ declare const noUnsubscribedRuntimeState: Rule.RuleModule;
13
+ //#endregion
14
+ //#region src/rules/common/no-unsubscribed-t.d.ts
15
+ declare const noUnsubscribedT: Rule.RuleModule;
16
+ //#endregion
17
+ //#region src/rules/common/static-candidate-limit.d.ts
18
+ declare const staticCandidateLimit: Rule.RuleModule;
19
+ //#endregion
20
+ //#region src/rules/common/t-static-args.d.ts
3
21
  declare const tStaticArgs: Rule.RuleModule;
4
22
  //#endregion
5
23
  //#region src/index.d.ts
6
24
  declare const plugin: ESLint.Plugin;
7
25
  //#endregion
8
- export { plugin as default, tStaticArgs };
26
+ export { plugin as default, noEagerTranslation, noEmbeddedMarkup, noRedundantAutoImport, noUnsubscribedRuntimeState, noUnsubscribedT, staticCandidateLimit, tStaticArgs };
9
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/rules/t-static-args.ts","../src/index.ts"],"mappings":";;cASa,aAAa,KAAK;;;cCDzB,QAAQ,OAAO"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/rules/common/no-eager-translation.ts","../src/rules/common/no-embedded-markup.ts","../src/rules/common/no-redundant-auto-import.ts","../src/rules/common/no-unsubscribed-runtime-state.ts","../src/rules/common/no-unsubscribed-t.ts","../src/rules/common/static-candidate-limit.ts","../src/rules/common/t-static-args.ts","../src/index.ts"],"mappings":";;cAkBa,oBAAoB,KAAK;;;cCCzB,kBAAkB,KAAK;;;cCKvB,uBAAuB,KAAK;;;cCO5B,4BAA4B,KAAK;;;cCZjC,iBAAiB,KAAK;;;cCNtB,sBAAsB,KAAK;;;cCA3B,aAAa,KAAK;;;cCMzB,QAAQ,OAAO"}