oxlint-plugin-arch 0.11.0 → 0.12.0

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.
Files changed (219) hide show
  1. package/CHANGELOG.md +215 -0
  2. package/README.md +52 -218
  3. package/dist/index.js +5201 -4073
  4. package/dist/preset/groups/backend.d.ts +2 -0
  5. package/dist/preset/groups/basics.d.ts +2 -0
  6. package/dist/preset/groups/comments.d.ts +2 -0
  7. package/dist/preset/groups/console.d.ts +2 -0
  8. package/dist/preset/groups/deny.d.ts +2 -0
  9. package/dist/preset/groups/expo.d.ts +2 -0
  10. package/dist/preset/groups/externals.d.ts +2 -0
  11. package/dist/preset/groups/forms.d.ts +2 -0
  12. package/dist/preset/groups/imports.d.ts +2 -0
  13. package/dist/preset/groups/layout.d.ts +2 -0
  14. package/dist/preset/groups/limits.d.ts +2 -0
  15. package/dist/preset/groups/naming.d.ts +2 -0
  16. package/dist/preset/groups/next.d.ts +2 -0
  17. package/dist/preset/groups/orpc.d.ts +2 -0
  18. package/dist/preset/groups/react.d.ts +2 -0
  19. package/dist/preset/groups/schemas.d.ts +2 -0
  20. package/dist/preset/groups/shadcn.d.ts +2 -0
  21. package/dist/preset/groups/sql.d.ts +2 -0
  22. package/dist/preset/groups/style.d.ts +2 -0
  23. package/dist/preset/groups/tailwind.d.ts +2 -0
  24. package/dist/preset/groups/tanstack.d.ts +2 -0
  25. package/dist/preset/groups/tests.d.ts +2 -0
  26. package/dist/preset/groups/types.d.ts +2 -0
  27. package/dist/preset/preset-detect.d.ts +4 -0
  28. package/dist/preset/preset-folders.d.ts +2 -0
  29. package/dist/preset/preset-recipes.d.ts +82 -0
  30. package/dist/preset/preset.constants.d.ts +77 -0
  31. package/dist/preset/preset.d.ts +89 -0
  32. package/dist/preset/preset.js +2071 -0
  33. package/dist/preset/preset.utils.d.ts +11 -0
  34. package/dist/rules/backend/backend-orpc-output.d.ts +1 -0
  35. package/dist/rules/backend/backend-registry.d.ts +1 -0
  36. package/dist/rules/backend/backend-service-functions.d.ts +1 -0
  37. package/dist/rules/backend/backend-sql-like.d.ts +1 -0
  38. package/dist/rules/boundaries/boundaries-deny.d.ts +1 -0
  39. package/dist/rules/boundaries/boundaries-imports.d.ts +1 -0
  40. package/dist/rules/boundaries/boundaries-next.d.ts +1 -0
  41. package/dist/rules/boundaries/boundaries-rpc-database.d.ts +1 -0
  42. package/dist/rules/boundaries/boundaries-tanstack.d.ts +1 -0
  43. package/dist/rules/boundaries/boundaries-token-owner.d.ts +1 -0
  44. package/dist/rules/code/code-constructor.d.ts +1 -0
  45. package/dist/rules/code/code-double-negation.d.ts +1 -0
  46. package/dist/rules/code/code-literal-in.d.ts +1 -0
  47. package/dist/rules/code/code-mutable-state.d.ts +1 -0
  48. package/dist/rules/code/code-object-params.d.ts +1 -0
  49. package/dist/rules/code/code-paired-call.d.ts +1 -0
  50. package/dist/rules/code/code-promise-mutation.d.ts +1 -0
  51. package/dist/rules/code/code-switch.d.ts +1 -0
  52. package/dist/rules/code/code-trivial-functions.d.ts +1 -0
  53. package/dist/rules/comments/comments-code.d.ts +1 -0
  54. package/dist/rules/comments/comments-directives.d.ts +1 -0
  55. package/dist/rules/copy/copy-dashes.d.ts +1 -0
  56. package/dist/rules/files/files-components-only.d.ts +1 -0
  57. package/dist/rules/files/files-constants-only.d.ts +1 -0
  58. package/dist/rules/files/files-domain-constants.d.ts +1 -0
  59. package/dist/rules/files/files-exports.d.ts +1 -0
  60. package/dist/rules/files/files-externals.d.ts +1 -0
  61. package/dist/rules/files/files-factory-keys.d.ts +1 -0
  62. package/dist/rules/files/files-helpers.d.ts +1 -0
  63. package/dist/rules/files/files-no-functions.d.ts +1 -0
  64. package/dist/rules/files/files-restricted.d.ts +1 -0
  65. package/dist/rules/files/files-route.d.ts +1 -0
  66. package/dist/rules/files/files-types-only.d.ts +1 -0
  67. package/dist/rules/layout/layout-call-arguments.d.ts +1 -0
  68. package/dist/rules/layout/layout-call-array.d.ts +1 -0
  69. package/dist/rules/layout/layout-chain.d.ts +1 -0
  70. package/dist/rules/layout/layout-jsx-attributes.d.ts +1 -0
  71. package/dist/rules/layout/layout-key-value.d.ts +1 -0
  72. package/dist/rules/layout/layout-object.d.ts +1 -0
  73. package/dist/rules/layout/layout-padding.d.ts +1 -0
  74. package/dist/rules/layout/layout-ternary.d.ts +1 -0
  75. package/dist/rules/naming/naming-declarations.d.ts +1 -0
  76. package/dist/rules/naming/naming-exports.d.ts +1 -0
  77. package/dist/rules/naming/naming-file.d.ts +1 -0
  78. package/dist/rules/naming/naming-folder.d.ts +1 -0
  79. package/dist/rules/naming/naming-types.d.ts +1 -0
  80. package/dist/rules/react/react-dynamic-classes.d.ts +1 -0
  81. package/dist/rules/react/react-empty-effect.d.ts +1 -0
  82. package/dist/rules/react/react-memo.d.ts +1 -0
  83. package/dist/rules/react/react-props.d.ts +1 -0
  84. package/dist/rules/schemas/schemas-inline.d.ts +1 -0
  85. package/dist/rules/schemas/schemas-local.d.ts +1 -0
  86. package/dist/rules/schemas/schemas-rederive.d.ts +1 -0
  87. package/dist/rules/schemas/schemas-single-use.d.ts +1 -0
  88. package/dist/rules/tests/tests-assertions.d.ts +1 -0
  89. package/dist/rules/tests/tests-concurrent-db.d.ts +1 -0
  90. package/dist/rules/tests/tests-modifiers.d.ts +1 -0
  91. package/dist/rules/tests/tests-titles.d.ts +1 -0
  92. package/dist/rules/types/types-declarations.d.ts +1 -0
  93. package/dist/rules/types/types-imported-alias.d.ts +1 -0
  94. package/dist/rules/types/types-inline.d.ts +1 -0
  95. package/dist/rules/types/types-local-alias.d.ts +1 -0
  96. package/dist/rules/types/types-namespace-import.d.ts +1 -0
  97. package/dist/rules/types/types-service.d.ts +1 -0
  98. package/dist/rules/types/types-unknown.d.ts +1 -0
  99. package/dist/types/ast.types.d.ts +2 -0
  100. package/dist/types/backend.types.d.ts +24 -0
  101. package/dist/types/boundaries.types.d.ts +72 -0
  102. package/dist/types/code.types.d.ts +59 -0
  103. package/dist/types/comments.types.d.ts +12 -0
  104. package/dist/types/copy.types.d.ts +4 -0
  105. package/dist/types/declarations.types.d.ts +20 -0
  106. package/dist/types/dillon-anti-slop.types.d.ts +55 -0
  107. package/dist/types/exports.types.d.ts +11 -0
  108. package/dist/types/files.types.d.ts +85 -0
  109. package/dist/types/layout.types.d.ts +55 -0
  110. package/dist/types/naming.types.d.ts +52 -0
  111. package/dist/types/options.types.d.ts +4 -0
  112. package/dist/types/preset.types.d.ts +242 -129
  113. package/dist/types/react.types.d.ts +14 -0
  114. package/dist/types/schemas.types.d.ts +20 -0
  115. package/dist/types/source.types.d.ts +1 -0
  116. package/dist/types/tests.types.d.ts +39 -0
  117. package/dist/types/types.types.d.ts +20 -0
  118. package/dist/utils/ast.utils.d.ts +19 -0
  119. package/dist/utils/boundaries.utils.d.ts +85 -0
  120. package/dist/utils/declarations.utils.d.ts +21 -0
  121. package/dist/utils/exports.utils.d.ts +6 -0
  122. package/dist/utils/naming.utils.d.ts +11 -0
  123. package/dist/utils/options.utils.d.ts +11 -0
  124. package/dist/utils/react.utils.d.ts +3 -0
  125. package/dist/utils/schemas.utils.d.ts +36 -0
  126. package/dist/utils/source.utils.d.ts +18 -0
  127. package/dist/vendor/dillon-anti-slop/index.js +1741 -0
  128. package/dist/vendor/dillon-anti-slop/rules/no-known-value-widening.d.ts +2 -0
  129. package/dist/vendor/dillon-anti-slop/rules/no-module-mocking.d.ts +2 -0
  130. package/dist/vendor/dillon-anti-slop/shared/dictionary-types.d.ts +5 -0
  131. package/dist/vendor/dillon-anti-slop/shared/expressions.d.ts +5 -0
  132. package/dist/vendor/dillon-anti-slop/shared/lexical-type-parameters.d.ts +2 -0
  133. package/dist/vendor/dillon-anti-slop/shared/reflect-method.d.ts +1 -0
  134. package/dist/vendor/dillon-anti-slop/shared/resolve-variable.d.ts +2 -0
  135. package/dist/vendor/dillon-anti-slop/shared/signatures.d.ts +15 -0
  136. package/dist/vendor/dillon-anti-slop/shared/type-aliases.d.ts +4 -0
  137. package/dist/vendor/dillon-anti-slop/shared/type-environment.d.ts +9 -0
  138. package/dist/vendor/dillon-anti-slop/shared/type-reference-name.d.ts +2 -0
  139. package/dist/vendor/dillon-anti-slop/shared/widening-targets.d.ts +3 -0
  140. package/package.json +51 -43
  141. package/src/{rules → vendor}/dillon-anti-slop/UPSTREAM.md +4 -6
  142. package/dist/configs/boundaries.d.ts +0 -2
  143. package/dist/configs/modules.d.ts +0 -2
  144. package/dist/configs/plugins.d.ts +0 -3
  145. package/dist/configs/react.d.ts +0 -2
  146. package/dist/configs/source.d.ts +0 -2
  147. package/dist/configs/tests.d.ts +0 -2
  148. package/dist/configs/types.d.ts +0 -2
  149. package/dist/constants/preset.constants.d.ts +0 -38
  150. package/dist/constants/test.constants.d.ts +0 -1
  151. package/dist/presets/index.d.ts +0 -4
  152. package/dist/presets/index.js +0 -1736
  153. package/dist/presets/next-react-modules-preset.d.ts +0 -4
  154. package/dist/presets/next-react-modules-preset.js +0 -1729
  155. package/dist/presets/react-modules-preset.d.ts +0 -4
  156. package/dist/presets/react-modules-preset.js +0 -1724
  157. package/dist/presets/tanstack-start-react-modules-preset.d.ts +0 -4
  158. package/dist/presets/tanstack-start-react-modules-preset.js +0 -1729
  159. package/dist/rules/dillon-anti-slop/index.js +0 -2719
  160. package/dist/rules/dillon-anti-slop/rules/no-known-value-widening.d.ts +0 -1
  161. package/dist/rules/dillon-anti-slop/rules/no-module-mocking.d.ts +0 -8
  162. package/dist/rules/dillon-anti-slop/shared/dictionary-types.d.ts +0 -19
  163. package/dist/rules/dillon-anti-slop/shared/lexical-type-parameters.d.ts +0 -4
  164. package/dist/rules/dillon-anti-slop/shared/reflect-method.d.ts +0 -2
  165. package/dist/rules/module-policy/domain-constants.d.ts +0 -2
  166. package/dist/rules/module-policy/import-boundaries.d.ts +0 -2
  167. package/dist/rules/module-policy/index.js +0 -2266
  168. package/dist/rules/module-policy/memoization.d.ts +0 -2
  169. package/dist/rules/module-policy/next-runtime.d.ts +0 -7
  170. package/dist/rules/module-policy/no-unknown.d.ts +0 -6
  171. package/dist/rules/module-policy/reasoned-directives.d.ts +0 -2
  172. package/dist/rules/module-policy/service-functions.d.ts +0 -2
  173. package/dist/rules/module-policy/service-types.d.ts +0 -2
  174. package/dist/rules/module-policy/tanstack-runtime.d.ts +0 -2
  175. package/dist/rules/module-policy/test-assertions.d.ts +0 -2
  176. package/dist/rules/module-policy/test-modifiers.d.ts +0 -2
  177. package/dist/services/preset-compose.d.ts +0 -3
  178. package/dist/services/preset-context.d.ts +0 -2
  179. package/dist/types/module-policy.types.d.ts +0 -39
  180. package/dist/types/test-analysis.types.d.ts +0 -11
  181. package/dist/utils/helpers/ast.d.ts +0 -12
  182. package/dist/utils/helpers/boundaries.d.ts +0 -3
  183. package/dist/utils/helpers/comments.d.ts +0 -6
  184. package/dist/utils/helpers/declarations.d.ts +0 -35
  185. package/dist/utils/helpers/exports.d.ts +0 -18
  186. package/dist/utils/helpers/factories.d.ts +0 -9
  187. package/dist/utils/helpers/guards.d.ts +0 -11
  188. package/dist/utils/helpers/index.d.ts +0 -18
  189. package/dist/utils/helpers/layout.d.ts +0 -15
  190. package/dist/utils/helpers/mocking.d.ts +0 -2
  191. package/dist/utils/helpers/naming.d.ts +0 -13
  192. package/dist/utils/helpers/options.d.ts +0 -22
  193. package/dist/utils/helpers/orpc.d.ts +0 -3
  194. package/dist/utils/helpers/preset.d.ts +0 -9
  195. package/dist/utils/helpers/react-components.d.ts +0 -13
  196. package/dist/utils/helpers/routes.d.ts +0 -5
  197. package/dist/utils/helpers/runtime.d.ts +0 -14
  198. package/dist/utils/helpers/sanitizers.d.ts +0 -3
  199. package/dist/utils/helpers/schemas.d.ts +0 -10
  200. package/dist/utils/helpers/syntax.d.ts +0 -1
  201. package/dist/utils/helpers/test-tables.d.ts +0 -8
  202. package/dist/utils/helpers/trivial.d.ts +0 -6
  203. package/dist/utils/index.d.ts +0 -1
  204. /package/dist/{rules/module-policy/index.d.ts → index.d.ts} +0 -0
  205. /package/dist/{rules → vendor}/dillon-anti-slop/index.d.ts +0 -0
  206. /package/dist/{rules → vendor}/dillon-anti-slop/rules/no-chained-type-assertions.d.ts +0 -0
  207. /package/dist/{rules → vendor}/dillon-anti-slop/rules/no-conditional-empty-object-spread.d.ts +0 -0
  208. /package/dist/{rules → vendor}/dillon-anti-slop/rules/no-object-parameters.d.ts +0 -0
  209. /package/dist/{rules → vendor}/dillon-anti-slop/rules/no-reflect-apply.d.ts +0 -0
  210. /package/dist/{rules → vendor}/dillon-anti-slop/rules/no-reflect-get.d.ts +0 -0
  211. /package/dist/{rules → vendor}/dillon-anti-slop/rules/no-runtime-typeof.d.ts +0 -0
  212. /package/dist/{rules → vendor}/dillon-anti-slop/rules/no-shape-in-symbol-names.d.ts +0 -0
  213. /package/dist/{rules → vendor}/dillon-anti-slop/rules/no-unknown-parameters.d.ts +0 -0
  214. /package/dist/{rules → vendor}/dillon-anti-slop/rules/no-unknown-returns.d.ts +0 -0
  215. /package/dist/{rules → vendor}/dillon-anti-slop/rules/no-unknown-type-aliases.d.ts +0 -0
  216. /package/dist/{rules → vendor}/dillon-anti-slop/rules/no-unsafe-dictionary-type.d.ts +0 -0
  217. /package/dist/{rules → vendor}/dillon-anti-slop/rules/no-widen-then-assert.d.ts +0 -0
  218. /package/dist/{rules → vendor}/dillon-anti-slop/rules/require-safety-comment-for-type-assertion.d.ts +0 -0
  219. /package/src/{rules → vendor}/dillon-anti-slop/LICENSE +0 -0
@@ -0,0 +1,55 @@
1
+ import type { OptionsPattern } from './options.types.ts';
2
+ import type { SourceIndent } from './source.types.ts';
3
+ import type { ESTree } from '@oxlint/plugins';
4
+ export interface LayoutEdit {
5
+ range: [number, number];
6
+ text: string;
7
+ }
8
+ export interface LayoutCallArgumentsOptions {
9
+ min?: number;
10
+ indent?: number;
11
+ }
12
+ export interface LayoutCallArrayOptions {
13
+ callees?: string[];
14
+ min?: number;
15
+ indent?: SourceIndent;
16
+ }
17
+ export interface LayoutChainGroup {
18
+ min: number;
19
+ methods?: string[];
20
+ only?: string[];
21
+ root?: OptionsPattern;
22
+ }
23
+ export interface LayoutChainOptions {
24
+ groups: LayoutChainGroup[];
25
+ indent?: SourceIndent;
26
+ }
27
+ export interface LayoutChainCompiledGroup {
28
+ min: number;
29
+ methods?: Set<string>;
30
+ only?: Set<string>;
31
+ rootPatterns: RegExp[];
32
+ }
33
+ export interface LayoutChainLink {
34
+ member: ESTree.MemberExpression;
35
+ methodName: string | undefined;
36
+ }
37
+ export interface LayoutJsxAttributesOptions {
38
+ min?: number;
39
+ indent?: SourceIndent;
40
+ }
41
+ export interface LayoutObjectOptions {
42
+ min?: number;
43
+ scope?: LayoutObjectScope;
44
+ indent?: SourceIndent;
45
+ }
46
+ export type LayoutObjectScope = 'call-args' | 'all';
47
+ export interface LayoutPaddingOptions {
48
+ min?: number;
49
+ multiline?: boolean;
50
+ }
51
+ export type LayoutPaddingKind = 'variable' | 'block' | 'control' | 'return' | 'other';
52
+ export interface LayoutTernaryOptions {
53
+ max?: number;
54
+ indent?: number;
55
+ }
@@ -0,0 +1,52 @@
1
+ import type { DeclarationsKind } from './declarations.types.ts';
2
+ import type { OptionsPattern } from './options.types.ts';
3
+ export type NamingStemMode = 'before-first-dot' | 'full-basename';
4
+ export interface NamingExportsStem {
5
+ stem?: NamingStemMode;
6
+ roles?: string[];
7
+ separators?: string[];
8
+ normalize?: 'remove-separators' | 'none';
9
+ singularize?: 'none' | 'trailing-s';
10
+ }
11
+ export interface NamingDeclarationsOptions extends NamingExportsStem {
12
+ kinds?: DeclarationsKind[];
13
+ pattern?: OptionsPattern;
14
+ flags?: string;
15
+ allow?: OptionsPattern;
16
+ }
17
+ interface NamingExportsBase {
18
+ scope?: 'exports' | 'functions' | 'declarations';
19
+ types?: boolean;
20
+ services?: boolean;
21
+ allow?: OptionsPattern;
22
+ }
23
+ export interface NamingExportsPrefixOptions extends NamingExportsBase, NamingExportsStem {
24
+ mode?: 'prefix';
25
+ }
26
+ export interface NamingExportsPatternOptions extends NamingExportsBase {
27
+ mode: 'pattern';
28
+ pattern: OptionsPattern;
29
+ flags?: string;
30
+ }
31
+ export interface NamingExportsTemplateOptions extends NamingExportsBase {
32
+ mode: 'template';
33
+ file: string;
34
+ export: string;
35
+ match?: 'all' | 'some';
36
+ placeholder?: string;
37
+ camelCase?: boolean;
38
+ }
39
+ export type NamingExportsOptions = NamingExportsPrefixOptions | NamingExportsPatternOptions | NamingExportsTemplateOptions;
40
+ export interface NamingFileOptions {
41
+ pattern: OptionsPattern;
42
+ message: string;
43
+ flags?: string;
44
+ unique?: string;
45
+ }
46
+ export interface NamingFolderOptions {
47
+ singularize?: 'none' | 'trailing-s';
48
+ separators?: string[];
49
+ prefixes?: string[];
50
+ after?: string;
51
+ }
52
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { RuleOptionsSchema } from '@oxlint/plugins';
2
+ export type OptionsPattern = string | string[];
3
+ export type OptionsSchema = Exclude<RuleOptionsSchema, false | unknown[]>;
4
+ export type OptionsSchemaProperties = NonNullable<OptionsSchema['properties']>;
@@ -1,181 +1,289 @@
1
1
  import type { OxlintConfig, OxlintOverride } from 'oxlint';
2
- export type PresetPolicy = boolean | ((current: OxlintOverride[]) => OxlintOverride[]);
3
- export type PresetPolicyName = 'typePlacement' | 'typeSafety' | 'serviceStructure' | 'fileLayout' | 'naming' | 'comments' | 'formatting' | 'statementLayout' | 'imports' | 'react' | 'effects' | 'memoization' | 'routes' | 'forms' | 'schemas' | 'boundaries' | 'tests' | 'trivialFunctions' | 'mutableState' | 'backend' | 'tailwind' | 'shadcn' | 'rpcClientOwnership';
4
- export type PresetRole = 'web' | 'server' | 'runner' | 'scripts' | 'packages';
5
- export type PresetFolderLayout = 'flat' | 'domain';
6
- export type PresetFramework = 'tanstack-start' | 'next';
7
- export interface PresetArchitectureEntry {
8
- role: PresetRole;
9
- layout?: Record<string, PresetFolderLayout>;
10
- /** Web roots only: selects the route and runtime-boundary policies. */
11
- framework?: PresetFramework;
12
- /** Web, server and runner roots only: the source folder inside the root; `src` when omitted, `.` for the root itself. */
13
- sourceDir?: string;
14
- }
15
- export type PresetArchitecture = Record<string, PresetRole | PresetArchitectureEntry>;
16
- export interface PresetResolvedRoot {
17
- role: PresetRole;
18
- layout: Record<string, PresetFolderLayout>;
19
- framework?: PresetFramework;
20
- sourceDir?: string;
2
+ export type PresetLevel = 'error' | 'warn';
3
+ export type PresetSwitch = boolean | 'warn';
4
+ export type PresetLayoutMode = 'flat' | 'domain';
5
+ export type PresetOperations = 'flat' | 'folders';
6
+ export interface PresetLayoutOptions {
7
+ services?: PresetLayoutMode | false;
8
+ hooks?: PresetLayoutMode | false;
9
+ components?: PresetLayoutMode | false;
10
+ suffixes?: string[];
11
+ strict?: boolean;
12
+ operations?: PresetOperations;
13
+ service?: string[];
21
14
  }
22
- export interface PresetFolderScope {
23
- path: string;
24
- folder: string;
25
- mode: PresetFolderLayout;
15
+ export interface PresetLimitsOptions {
16
+ lines?: number;
17
+ types?: number;
18
+ complexity?: number;
26
19
  }
27
- export interface PresetOptions {
28
- root?: string;
29
- /** Default framework for web roots that do not set their own; `tanstack-start` when omitted. */
30
- framework?: PresetFramework;
31
- architecture?: PresetArchitecture;
32
- severity?: 'error' | 'warn';
33
- /** Per-rule levels applied after `severity`, for rules the preset enables. */
34
- ruleSeverities?: Record<string, 'error' | 'warn' | 'off'>;
35
- formatting?: PresetFormattingOptions;
36
- limits?: PresetLimitsOptions;
37
- modules?: PresetModulesOptions;
38
- imports?: PresetImportsOptions;
39
- orpc?: PresetOrpcOptions;
40
- sql?: PresetSqlOptions;
41
- forms?: PresetFormsOptions;
42
- react?: PresetReactOptions;
43
- tests?: PresetTestsOptions;
44
- policies?: PresetPolicyOptions;
45
- ignorePatterns?: string[];
46
- ruleExclusions?: Record<string, string[]>;
47
- cliFiles?: string[];
48
- tanstackStart?: PresetTanstackStartOptions;
49
- next?: PresetNextOptions;
50
- tailwind?: false | PresetTailwindOptions;
51
- shadcn?: false | PresetShadcnOptions;
52
- }
53
- export interface PresetPolicyOptions extends Partial<Record<PresetPolicyName, PresetPolicy>> {
54
- }
55
- export interface PresetFormattingOptions {
56
- semi?: 'always' | 'never';
20
+ export interface PresetStyleOptions {
57
21
  quotes?: 'single' | 'double';
22
+ semicolons?: boolean;
23
+ multiline?: boolean;
24
+ padding?: boolean;
25
+ dashes?: boolean;
58
26
  }
59
- export interface PresetLimitsOptions {
60
- maxFileLines?: number;
61
- /** `max-lines` for `*.types.ts` files; defaults to 1000. */
62
- maxTypeFileLines?: number;
63
- maxFunctionComplexity?: number;
64
- }
65
- export interface PresetModulesOptions {
66
- customFileRoles?: string[];
67
- migrationFiles?: string[];
68
- /** Type files allowed outside `types/`; they follow the backend `types/` contract. */
69
- colocatedTypeFiles?: string[];
27
+ export interface PresetBasicsOptions {
28
+ trivial?: boolean;
29
+ state?: boolean;
30
+ switch?: boolean;
31
+ negation?: boolean;
70
32
  }
71
- export interface PresetTestsOptions {
72
- profile?: 'standard' | 'fixtures';
73
- additionalTestFunctions?: string[];
74
- additionalAssertionFunctions?: string[];
75
- /** Test-double APIs banned in test files; `modules` (module mocking only) when omitted. */
76
- mocking?: PresetTestMockingPreset | PresetTestMockingOptions;
77
- }
78
- export type PresetTestMockingPreset = 'modules' | 'strict';
79
- export interface PresetTestMockingApi {
80
- api: string;
81
- message?: string;
33
+ export interface PresetNamingOptions {
34
+ files?: boolean | string;
35
+ exports?: boolean | string;
36
+ folders?: boolean;
37
+ unique?: string;
82
38
  }
83
- export interface PresetTestMockingException {
84
- files: string[];
85
- /** API patterns allowed in these files; `*` allows every API. */
86
- apis: string[];
39
+ export interface PresetCommentsOptions {
40
+ directives?: boolean;
87
41
  }
88
- export interface PresetTestMockingOptions {
89
- preset?: PresetTestMockingPreset;
90
- /** API patterns added to the preset list, such as `vi.*` or `jest.spyOn`. */
91
- deny?: Array<string | PresetTestMockingApi>;
92
- /** Per-file exceptions, added after the preset's own. */
93
- allow?: PresetTestMockingException[];
42
+ export interface PresetTypesOptions {
43
+ placement?: boolean;
44
+ safety?: boolean;
45
+ colocated?: string[];
94
46
  }
95
47
  export interface PresetImportsOptions {
96
- backendEntryPoints?: string[];
48
+ sort?: boolean;
49
+ boundaries?: boolean;
97
50
  aliases?: Record<string, string>;
98
- internalSortPatterns?: string[];
51
+ internal?: string[];
99
52
  }
100
- export interface PresetOrpcOptions {
101
- publicProcedureFiles?: string[];
102
- outputSchemaComposers?: string[];
103
- clientOwnerFile?: string;
53
+ export interface PresetMockingApi {
54
+ api: string;
55
+ message?: string;
104
56
  }
105
- export interface PresetSqlOptions {
106
- likeSanitizers?: string[];
57
+ export interface PresetMockingException {
58
+ files: string[];
59
+ apis: string[];
107
60
  }
108
- export interface PresetFormsOptions {
109
- schemaResolver?: string;
61
+ export type PresetMockingPreset = 'modules' | 'strict';
62
+ export interface PresetMockingOptions {
63
+ preset?: PresetMockingPreset;
64
+ deny?: (string | PresetMockingApi)[];
65
+ allow?: PresetMockingException[];
66
+ }
67
+ export interface PresetTestsOptions {
68
+ assertions?: string[];
69
+ functions?: string[];
70
+ mocking?: PresetMockingPreset | PresetMockingOptions;
71
+ titles?: boolean;
72
+ fixtures?: boolean;
110
73
  }
111
74
  export interface PresetReactOptions {
75
+ a11y?: boolean;
76
+ effects?: boolean;
77
+ memo?: boolean;
78
+ props?: boolean;
79
+ perf?: boolean;
112
80
  compiler?: boolean;
113
- componentProps?: boolean;
114
81
  }
115
- export interface PresetTanstackStartOptions {
116
- additionalServerOnlyImports?: string[];
117
- additionalClientOnlyImports?: string[];
118
- computedImportAllowedFiles?: string[];
82
+ export interface PresetFrameworkOptions {
83
+ server?: string[];
84
+ client?: string[];
85
+ dynamic?: string[];
119
86
  }
120
- export interface PresetNextOptions {
121
- additionalServerOnlyImports?: string[];
122
- additionalClientOnlyImports?: string[];
123
- computedImportAllowedFiles?: string[];
87
+ export interface PresetExpoOptions {
88
+ server?: string[];
124
89
  }
125
90
  export interface PresetTailwindOptions {
126
- cssEntryPoint?: string;
127
- cssEntryPointsByRoot?: Record<string, string>;
128
- rootFontSize?: number;
91
+ css?: string;
92
+ rem?: number;
129
93
  }
130
94
  export interface PresetShadcnOptions {
131
- /** The components.json `ui` alias: a workspace package name or a tsconfig `paths` alias. It also sets the UI kit files. */
132
95
  ui?: string;
133
- /** Import sources treated as components, like the components.json `components` alias. */
134
96
  components?: string[];
135
97
  }
98
+ export interface PresetRegistryOptions {
99
+ file?: string;
100
+ skip?: string[];
101
+ object?: string;
102
+ }
103
+ export interface PresetBackendOptions {
104
+ exports?: string[];
105
+ registry?: false | string | PresetRegistryOptions;
106
+ writes?: string[];
107
+ }
108
+ export interface PresetDenyOptions {
109
+ imports?: Record<string, string | false>;
110
+ calls?: Record<string, string | false>;
111
+ }
112
+ export interface PresetExternalsOptions {
113
+ packages?: string[];
114
+ }
115
+ export interface PresetOrpcOptions {
116
+ public?: string[];
117
+ composers?: string[];
118
+ client?: string;
119
+ }
120
+ export interface PresetFormsOptions {
121
+ resolver?: string;
122
+ }
123
+ export interface PresetSqlOptions {
124
+ sanitizers?: string[];
125
+ }
126
+ export interface PresetGroups {
127
+ layout?: PresetSwitch | PresetLayoutOptions;
128
+ limits?: PresetSwitch | PresetLimitsOptions;
129
+ style?: PresetSwitch | PresetStyleOptions;
130
+ basics?: PresetSwitch | PresetBasicsOptions;
131
+ naming?: PresetSwitch | PresetNamingOptions;
132
+ comments?: PresetSwitch | PresetCommentsOptions;
133
+ types?: PresetSwitch | PresetTypesOptions;
134
+ imports?: PresetSwitch | PresetImportsOptions;
135
+ tests?: PresetSwitch | PresetTestsOptions;
136
+ react?: PresetSwitch | PresetReactOptions;
137
+ tanstack?: PresetSwitch | PresetFrameworkOptions;
138
+ next?: PresetSwitch | PresetFrameworkOptions;
139
+ expo?: PresetSwitch | PresetExpoOptions;
140
+ tailwind?: PresetSwitch | PresetTailwindOptions;
141
+ shadcn?: PresetSwitch | PresetShadcnOptions;
142
+ kit?: boolean;
143
+ backend?: PresetSwitch | PresetBackendOptions;
144
+ orpc?: PresetSwitch | PresetOrpcOptions;
145
+ schemas?: PresetSwitch;
146
+ forms?: PresetSwitch | PresetFormsOptions;
147
+ sql?: PresetSwitch | PresetSqlOptions;
148
+ console?: boolean;
149
+ deny?: PresetSwitch | PresetDenyOptions;
150
+ externals?: PresetSwitch | PresetExternalsOptions;
151
+ }
152
+ export type PresetGroupName = keyof PresetGroups;
153
+ export interface PresetFolder extends PresetGroups {
154
+ severity?: PresetLevel;
155
+ source?: string;
156
+ rules?: PresetRules;
157
+ }
158
+ export type PresetFolders = Record<string, boolean | PresetFolder>;
159
+ export interface PresetConfig {
160
+ root?: string;
161
+ folders?: PresetFolders;
162
+ detect?: boolean;
163
+ }
164
+ export type PresetRecipe = PresetGroups;
136
165
  export type PresetRules = NonNullable<OxlintConfig['rules']>;
137
- export type PresetPolicies = Partial<Record<PresetPolicyName, OxlintOverride[]>>;
138
- export interface PresetManifest {
139
- name?: string;
166
+ export type PresetJsPlugins = NonNullable<OxlintConfig['jsPlugins']>;
167
+ export type PresetSettings = NonNullable<OxlintConfig['settings']>;
168
+ export interface PresetResolvedGroups {
169
+ layout: PresetLayoutOptions & Required<Pick<PresetLayoutOptions, 'suffixes' | 'strict' | 'operations' | 'service'>>;
170
+ limits: Required<PresetLimitsOptions>;
171
+ style: Required<PresetStyleOptions>;
172
+ basics: Required<PresetBasicsOptions>;
173
+ naming: Required<Omit<PresetNamingOptions, 'unique'>> & Pick<PresetNamingOptions, 'unique'>;
174
+ comments: Required<PresetCommentsOptions>;
175
+ types: Required<PresetTypesOptions>;
176
+ imports: Omit<Required<PresetImportsOptions>, 'internal'> & Pick<PresetImportsOptions, 'internal'>;
177
+ tests: Required<PresetTestsOptions>;
178
+ react: Required<Pick<PresetReactOptions, 'a11y' | 'effects' | 'props' | 'compiler'>> & Pick<PresetReactOptions, 'memo' | 'perf'>;
179
+ tanstack: Required<PresetFrameworkOptions>;
180
+ next: Required<PresetFrameworkOptions>;
181
+ expo: Required<PresetExpoOptions>;
182
+ tailwind: Pick<PresetTailwindOptions, 'css'> & {
183
+ rem: number;
184
+ };
185
+ shadcn: Required<PresetShadcnOptions>;
186
+ kit: PresetEmptyOptions;
187
+ backend: PresetBackendOptions & Required<Pick<PresetBackendOptions, 'writes'>>;
188
+ orpc: PresetOrpcOptions;
189
+ schemas: PresetEmptyOptions;
190
+ forms: Required<PresetFormsOptions>;
191
+ sql: Required<PresetSqlOptions>;
192
+ console: PresetEmptyOptions;
193
+ deny: {
194
+ imports: Record<string, string>;
195
+ calls: Record<string, string>;
196
+ };
197
+ externals: Required<PresetExternalsOptions>;
198
+ }
199
+ export interface PresetEmptyOptions {
200
+ empty?: never;
201
+ }
202
+ export type PresetGroupSettings<K extends PresetGroupName> = PresetResolvedGroups[K] & {
203
+ level: PresetLevel;
204
+ };
205
+ export type PresetEffective = {
206
+ [K in PresetGroupName]?: PresetGroupSettings<K> | null;
207
+ };
208
+ export type PresetGroupDefaults = {
209
+ [K in PresetGroupName]: PresetGroupSettings<K>;
210
+ };
211
+ export type PresetKind = 'web' | 'backend' | 'library' | 'console';
212
+ export type PresetFramework = 'tanstack' | 'next' | 'expo';
213
+ export type PresetKindGroup = PresetFramework | 'backend' | 'console';
214
+ export interface PresetScope {
215
+ key: string;
216
+ parent: PresetScope | null;
217
+ depth: number;
218
+ folder: PresetFolder;
219
+ effective: PresetEffective;
220
+ }
221
+ export interface PresetUnit {
222
+ key: string;
223
+ scope: PresetScope;
224
+ kind: PresetKind;
225
+ framework?: PresetFramework;
226
+ source: string;
227
+ layout: Record<string, PresetLayoutMode>;
228
+ }
229
+ export interface PresetLayoutScope {
230
+ path: string;
231
+ folder: string;
232
+ mode: PresetLayoutMode;
233
+ }
234
+ export interface PresetRuntimeOptions {
235
+ web: string[];
236
+ backend: string[];
237
+ aliases: Record<string, string>;
238
+ backendPackages: string[];
239
+ server: string[];
240
+ client: string[];
241
+ dynamic: string[];
242
+ rpc?: string[];
140
243
  }
141
244
  export interface PresetImportRestriction {
142
245
  group: string[];
143
246
  message: string;
144
247
  }
145
- export interface PresetContext {
146
- options: PresetOptions;
147
- architecture: Record<string, PresetResolvedRoot>;
148
- folders: PresetFolderScope[];
248
+ export interface PresetManifest {
249
+ name?: string;
250
+ dependencies?: Record<string, string>;
251
+ devDependencies?: Record<string, string>;
252
+ workspaces?: string[] | {
253
+ packages?: string[];
254
+ };
255
+ imports?: Record<string, unknown>;
256
+ exports?: unknown;
257
+ }
258
+ export interface PresetProject {
259
+ root: string;
260
+ scopes: PresetScope[];
261
+ units: PresetUnit[];
262
+ suffixes: string[];
263
+ colocated: string[];
264
+ orpc: Required<PresetOrpcOptions>;
265
+ layouts: PresetLayoutScope[];
149
266
  rpcClients: string[];
267
+ operations: string[];
150
268
  packages: string[];
151
269
  scripts: string[];
152
- root: string;
153
- level: 'error' | 'warn';
154
- css: Record<string, string>;
155
- baseImports: PresetImportRestriction[];
156
270
  web: string[];
157
- /** Web `src` roots per framework. */
158
271
  tanstackWeb: string[];
159
272
  nextWeb: string[];
273
+ expoWeb: string[];
160
274
  backend: string[];
161
- /** Server and runner architecture roots, without their source folder. */
162
275
  backendRoots: string[];
163
- /** Source folders of packages roots: `src` of a package, or of each package in a folder of packages. */
164
276
  packageSources: string[];
165
- /** Backend and package source folders, whose services follow the backend contract. */
166
277
  serviceRoots: string[];
167
278
  app: string[];
168
279
  appFiles: string[];
169
280
  webFiles: string[];
170
- /** Web files plus React code in packages: `.tsx` files and the `components` and `hooks` folders. */
171
281
  reactFiles: string[];
172
282
  backendFiles: string[];
173
283
  services: string[];
174
284
  utilities: string[];
175
285
  types: string[];
176
- /** UI kit folders resolved from `shadcn.ui`. */
177
286
  uiRoots: string[];
178
- /** UI kit folders inside a web source. */
179
287
  webUiRoots: string[];
180
288
  ui: string[];
181
289
  generated: string[];
@@ -184,6 +292,11 @@ export interface PresetContext {
184
292
  components: string[];
185
293
  hooks: string[];
186
294
  publicEntrypoints: string[];
295
+ baseImports: PresetImportRestriction[];
296
+ css: Record<string, string>;
297
+ ignores: string[];
187
298
  }
188
- export type PresetJsPlugins = NonNullable<OxlintConfig['jsPlugins']>;
189
- export type PresetSettings = NonNullable<OxlintConfig['settings']>;
299
+ export type PresetBuilder<K extends PresetGroupName> = (project: PresetProject, settings: PresetGroupSettings<K>, scope: PresetScope) => OxlintOverride[];
300
+ export type PresetBuilders = {
301
+ [K in PresetGroupName]?: PresetBuilder<K>;
302
+ };
@@ -0,0 +1,14 @@
1
+ import type { AstFunction } from './ast.types.ts';
2
+ import type { DeclarationsCandidate } from './declarations.types.ts';
3
+ import type { ESTree } from '@oxlint/plugins';
4
+ export interface ReactPropsOptions {
5
+ prefix?: boolean;
6
+ }
7
+ export interface ReactPropsComponent {
8
+ candidate: DeclarationsCandidate;
9
+ index: number;
10
+ }
11
+ export interface ReactPropsTarget {
12
+ fn: AstFunction;
13
+ typeArgument?: ESTree.TSType;
14
+ }
@@ -0,0 +1,20 @@
1
+ export interface SchemasElementOptions {
2
+ namespaces: string[];
3
+ methods: string[];
4
+ structural: string[];
5
+ scalars: boolean;
6
+ }
7
+ export interface SchemasLocalOptions {
8
+ packages: string[];
9
+ namespaces: string[];
10
+ allow?: string[];
11
+ patterns?: string[];
12
+ message?: string;
13
+ importMessage?: string;
14
+ constructionMessage?: string;
15
+ }
16
+ export interface SchemasRederiveOptions {
17
+ from: string[];
18
+ namespaces?: string[];
19
+ operators?: string[];
20
+ }
@@ -0,0 +1 @@
1
+ export type SourceIndent = number | 'tab';
@@ -0,0 +1,39 @@
1
+ import type { AstFunction } from './ast.types.ts';
2
+ import type { OptionsPattern } from './options.types.ts';
3
+ import type { ESTree } from '@oxlint/plugins';
4
+ export interface TestsModifiersOptions {
5
+ functions?: string[];
6
+ }
7
+ export interface TestsAssertionsOptions extends TestsModifiersOptions {
8
+ assertions?: string[];
9
+ }
10
+ export interface TestsAssertionsRegistration {
11
+ call: ESTree.CallExpression;
12
+ callback: AstFunction;
13
+ table?: ESTree.Expression;
14
+ }
15
+ export interface TestsAssertionsRow {
16
+ bindings: Map<ESTree.Node, AstFunction>;
17
+ callbacks: AstFunction[];
18
+ }
19
+ export interface TestsAssertionsState {
20
+ tests: string[];
21
+ patterns: RegExp[];
22
+ assertionRoots: Set<string>;
23
+ functions: Map<ESTree.Node, AstFunction>;
24
+ values: Map<ESTree.Node, ESTree.Expression>;
25
+ aliases: Map<ESTree.Node, string>;
26
+ shadowed: Set<ESTree.Node>;
27
+ calls: ESTree.CallExpression[];
28
+ allowed: Set<AstFunction>;
29
+ }
30
+ export interface TestsTitlesOptions {
31
+ callees: string[];
32
+ deny?: OptionsPattern;
33
+ require?: OptionsPattern;
34
+ flags?: string;
35
+ }
36
+ export interface TestsTitlesPattern {
37
+ regex: RegExp;
38
+ pattern: string;
39
+ }
@@ -0,0 +1,20 @@
1
+ import type { OptionsPattern } from './options.types.ts';
2
+ import type { ESTree } from '@oxlint/plugins';
3
+ export interface TypesDeclarationsOptions {
4
+ allow?: OptionsPattern;
5
+ }
6
+ export type TypesDeclarationNode = ESTree.TSTypeAliasDeclaration | ESTree.TSInterfaceDeclaration;
7
+ export interface TypesImportedBinding {
8
+ name: string;
9
+ source: string;
10
+ }
11
+ export interface TypesInlineOptions {
12
+ parameters?: boolean;
13
+ returns?: boolean;
14
+ functions?: boolean;
15
+ min?: number;
16
+ }
17
+ export interface TypesNamespaceImportOptions {
18
+ max: number;
19
+ names: Record<string, string>;
20
+ }
@@ -0,0 +1,19 @@
1
+ import type { AstFunction } from '../types/ast.types.ts';
2
+ import type { ESTree } from '@oxlint/plugins';
3
+ export declare function astVisit(node: unknown, ancestors: ESTree.Node[], callback: (node: ESTree.Node, ancestors: ESTree.Node[]) => void): void;
4
+ export declare function astMatchesCallee(name: string | undefined, callees: readonly string[], modifiers: ReadonlySet<string>): boolean;
5
+ export declare function astIsTypeOnlyImport(node: ESTree.ImportDeclaration): boolean;
6
+ export declare function astStaticString(node: ESTree.Node): string | undefined;
7
+ export declare function astContainsJsx(node: unknown): boolean;
8
+ export declare function astNearestFunction(ancestors: readonly ESTree.Node[]): AstFunction | undefined;
9
+ export declare function astReturnExpressions(node: AstFunction): ESTree.Expression[];
10
+ export declare function astSingleExpression(node: AstFunction): ESTree.Expression | null;
11
+ export declare function astUnwrap(expression: ESTree.Expression): ESTree.Expression;
12
+ export declare function astIsForwarder(node: AstFunction, expression: ESTree.Expression): boolean;
13
+ export declare function astModuleName(node: ESTree.ModuleExportName): string;
14
+ export declare function astBindings(pattern: ESTree.BindingPattern | ESTree.BindingRestElement): ESTree.BindingIdentifier[];
15
+ export declare function astDeclaration(statement: ESTree.Program['body'][number]): ESTree.ArrayExpression | ESTree.ArrowFunctionExpression | ESTree.AssignmentExpression | ESTree.AwaitExpression | ESTree.BigIntLiteral | ESTree.BinaryExpression | ESTree.BlockStatement | ESTree.BooleanLiteral | ESTree.BreakStatement | ESTree.CallExpression | ESTree.ChainExpression | ESTree.Class | ESTree.ComputedMemberExpression | ESTree.ConditionalExpression | ESTree.ContinueStatement | ESTree.DebuggerStatement | ESTree.DoWhileStatement | ESTree.EmptyStatement | ESTree.ExportAllDeclaration | ESTree.ExpressionStatement | ESTree.ForInStatement | ESTree.ForOfStatement | ESTree.ForStatement | ESTree.Function | ESTree.IdentifierReference | ESTree.IfStatement | ESTree.ImportDeclaration | ESTree.ImportExpression | ESTree.JSXElement | ESTree.JSXFragment | ESTree.LabeledStatement | ESTree.LogicalExpression | ESTree.MetaProperty | ESTree.NewExpression | ESTree.NullLiteral | ESTree.NumericLiteral | ESTree.ObjectExpression | ESTree.ParenthesizedExpression | ESTree.PrivateFieldExpression | ESTree.PrivateInExpression | ESTree.RegExpLiteral | ESTree.ReturnStatement | ESTree.SequenceExpression | ESTree.StaticMemberExpression | ESTree.StringLiteral | ESTree.Super | ESTree.SwitchStatement | ESTree.TSAsExpression | ESTree.TSEnumDeclaration | ESTree.TSExportAssignment | ESTree.TSGlobalDeclaration | ESTree.TSImportEqualsDeclaration | ESTree.TSInstantiationExpression | ESTree.TSInterfaceDeclaration | ESTree.TSModuleDeclaration | ESTree.TSNamespaceExportDeclaration | ESTree.TSNonNullExpression | ESTree.TSSatisfiesExpression | ESTree.TSTypeAliasDeclaration | ESTree.TSTypeAssertion | ESTree.TaggedTemplateExpression | ESTree.TemplateLiteral | ESTree.ThisExpression | ESTree.ThrowStatement | ESTree.TryStatement | ESTree.UnaryExpression | ESTree.UpdateExpression | ESTree.V8IntrinsicExpression | ESTree.VariableDeclaration | ESTree.WhileStatement | ESTree.WithStatement | ESTree.YieldExpression | null;
16
+ export declare function astMemberName(node: ESTree.MemberExpression): string | undefined;
17
+ export declare function astDottedName(node: ESTree.Node): string | undefined;
18
+ export declare function astCallName(node: ESTree.CallExpression): string | undefined;
19
+ export declare function astSelectorRule(selector: string, message: string): import("@oxlint/plugins").Rule;