@thethracian/oxlint-config 0.3.1 → 0.3.2

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 (204) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/codemods/arrow-body-style.d.ts.map +1 -1
  3. package/dist/codemods/arrow-body-style.js +29 -68
  4. package/dist/codemods/arrow-body-style.js.map +1 -1
  5. package/dist/codemods/comment-format.d.ts.map +1 -1
  6. package/dist/codemods/comment-format.js +22 -32
  7. package/dist/codemods/comment-format.js.map +1 -1
  8. package/dist/codemods/explicit-return-types.d.ts.map +1 -1
  9. package/dist/codemods/explicit-return-types.js +58 -167
  10. package/dist/codemods/explicit-return-types.js.map +1 -1
  11. package/dist/codemods/format-file-header.d.ts.map +1 -1
  12. package/dist/codemods/format-file-header.js +33 -72
  13. package/dist/codemods/format-file-header.js.map +1 -1
  14. package/dist/codemods/format-jsdoc-comments.d.ts.map +1 -1
  15. package/dist/codemods/format-jsdoc-comments.js +58 -66
  16. package/dist/codemods/format-jsdoc-comments.js.map +1 -1
  17. package/dist/codemods/function-declarations.d.ts.map +1 -1
  18. package/dist/codemods/function-declarations.js +45 -80
  19. package/dist/codemods/function-declarations.js.map +1 -1
  20. package/dist/codemods/inline-export-lists.d.ts.map +1 -1
  21. package/dist/codemods/inline-export-lists.js +60 -108
  22. package/dist/codemods/inline-export-lists.js.map +1 -1
  23. package/dist/codemods/internal-export-docs.d.ts.map +1 -1
  24. package/dist/codemods/internal-export-docs.js +21 -59
  25. package/dist/codemods/internal-export-docs.js.map +1 -1
  26. package/dist/codemods/no-ternary-branch-initializers.d.ts.map +1 -1
  27. package/dist/codemods/no-ternary-branch-initializers.js +72 -144
  28. package/dist/codemods/no-ternary-branch-initializers.js.map +1 -1
  29. package/dist/codemods/no-ternary-variable-initializers.d.ts.map +1 -1
  30. package/dist/codemods/no-ternary-variable-initializers.js +69 -152
  31. package/dist/codemods/no-ternary-variable-initializers.js.map +1 -1
  32. package/dist/codemods/no-ternary.d.ts.map +1 -1
  33. package/dist/codemods/no-ternary.js +44 -108
  34. package/dist/codemods/no-ternary.js.map +1 -1
  35. package/dist/codemods/rename-acronyms.d.ts.map +1 -1
  36. package/dist/codemods/rename-acronyms.js +73 -99
  37. package/dist/codemods/rename-acronyms.js.map +1 -1
  38. package/dist/codemods/run.d.ts.map +1 -1
  39. package/dist/codemods/run.js +15 -7
  40. package/dist/codemods/run.js.map +1 -1
  41. package/dist/codemods/sort-imports.d.ts.map +1 -1
  42. package/dist/codemods/sort-imports.js +52 -94
  43. package/dist/codemods/sort-imports.js.map +1 -1
  44. package/dist/rules/acronym-case.d.ts.map +1 -1
  45. package/dist/rules/acronym-case.js +68 -141
  46. package/dist/rules/acronym-case.js.map +1 -1
  47. package/dist/rules/acronyms-1.d.ts +1 -1
  48. package/dist/rules/acronyms-1.d.ts.map +1 -1
  49. package/dist/rules/acronyms-1.js +2 -402
  50. package/dist/rules/acronyms-1.js.map +1 -1
  51. package/dist/rules/acronyms-2.d.ts +1 -1
  52. package/dist/rules/acronyms-2.d.ts.map +1 -1
  53. package/dist/rules/acronyms-2.js +2 -402
  54. package/dist/rules/acronyms-2.js.map +1 -1
  55. package/dist/rules/acronyms-3.d.ts +1 -1
  56. package/dist/rules/acronyms-3.d.ts.map +1 -1
  57. package/dist/rules/acronyms-3.js +2 -402
  58. package/dist/rules/acronyms-3.js.map +1 -1
  59. package/dist/rules/acronyms-4.d.ts +1 -1
  60. package/dist/rules/acronyms-4.d.ts.map +1 -1
  61. package/dist/rules/acronyms-4.js +2 -372
  62. package/dist/rules/acronyms-4.js.map +1 -1
  63. package/dist/rules/acronyms.d.ts.map +1 -1
  64. package/dist/rules/acronyms.js +3 -6
  65. package/dist/rules/acronyms.js.map +1 -1
  66. package/dist/rules/boolean-prefix.d.ts.map +1 -1
  67. package/dist/rules/boolean-prefix.js +25 -71
  68. package/dist/rules/boolean-prefix.js.map +1 -1
  69. package/dist/rules/camel-case-identifiers.d.ts.map +1 -1
  70. package/dist/rules/camel-case-identifiers.js +15 -54
  71. package/dist/rules/camel-case-identifiers.js.map +1 -1
  72. package/dist/rules/char-class.d.ts +1 -1
  73. package/dist/rules/char-class.d.ts.map +1 -1
  74. package/dist/rules/char-class.js +16 -16
  75. package/dist/rules/char-class.js.map +1 -1
  76. package/dist/rules/diagnostic-guidance.d.ts.map +1 -1
  77. package/dist/rules/diagnostic-guidance.js +11 -20
  78. package/dist/rules/diagnostic-guidance.js.map +1 -1
  79. package/dist/rules/effect-default-ast.d.ts.map +1 -1
  80. package/dist/rules/effect-default-ast.js +35 -116
  81. package/dist/rules/effect-default-ast.js.map +1 -1
  82. package/dist/rules/effect-default-compat-rules.d.ts.map +1 -1
  83. package/dist/rules/effect-default-compat-rules.js +41 -79
  84. package/dist/rules/effect-default-compat-rules.js.map +1 -1
  85. package/dist/rules/effect-default-env-rules.d.ts.map +1 -1
  86. package/dist/rules/effect-default-env-rules.js +23 -29
  87. package/dist/rules/effect-default-env-rules.js.map +1 -1
  88. package/dist/rules/effect-default-fiber-helpers.d.ts.map +1 -1
  89. package/dist/rules/effect-default-fiber-helpers.js +12 -26
  90. package/dist/rules/effect-default-fiber-helpers.js.map +1 -1
  91. package/dist/rules/effect-default-floating-helpers.d.ts.map +1 -1
  92. package/dist/rules/effect-default-floating-helpers.js +59 -67
  93. package/dist/rules/effect-default-floating-helpers.js.map +1 -1
  94. package/dist/rules/effect-default-resource-helpers.d.ts.map +1 -1
  95. package/dist/rules/effect-default-resource-helpers.js +36 -44
  96. package/dist/rules/effect-default-resource-helpers.js.map +1 -1
  97. package/dist/rules/effect-default-safety-helpers.d.ts.map +1 -1
  98. package/dist/rules/effect-default-safety-helpers.js +29 -68
  99. package/dist/rules/effect-default-safety-helpers.js.map +1 -1
  100. package/dist/rules/effect-default-scan-helpers.d.ts.map +1 -1
  101. package/dist/rules/effect-default-scan-helpers.js +51 -70
  102. package/dist/rules/effect-default-scan-helpers.js.map +1 -1
  103. package/dist/rules/effect-default-schema-helpers.d.ts.map +1 -1
  104. package/dist/rules/effect-default-schema-helpers.js +32 -43
  105. package/dist/rules/effect-default-schema-helpers.js.map +1 -1
  106. package/dist/rules/effect-default-test-helpers.d.ts.map +1 -1
  107. package/dist/rules/effect-default-test-helpers.js +13 -25
  108. package/dist/rules/effect-default-test-helpers.js.map +1 -1
  109. package/dist/rules/effect-default-workflow-helpers.d.ts.map +1 -1
  110. package/dist/rules/effect-default-workflow-helpers.js +53 -113
  111. package/dist/rules/effect-default-workflow-helpers.js.map +1 -1
  112. package/dist/rules/effect-exported-declarations.d.ts.map +1 -1
  113. package/dist/rules/effect-exported-declarations.js +90 -177
  114. package/dist/rules/effect-exported-declarations.js.map +1 -1
  115. package/dist/rules/effect-path-options.d.ts.map +1 -1
  116. package/dist/rules/effect-path-options.js +48 -58
  117. package/dist/rules/effect-path-options.js.map +1 -1
  118. package/dist/rules/effect-rule-aliases.d.ts.map +1 -1
  119. package/dist/rules/effect-rule-aliases.js +43 -101
  120. package/dist/rules/effect-rule-aliases.js.map +1 -1
  121. package/dist/rules/effect-rule-core.d.ts.map +1 -1
  122. package/dist/rules/effect-rule-core.js +42 -78
  123. package/dist/rules/effect-rule-core.js.map +1 -1
  124. package/dist/rules/effect-rule-names.d.ts +2 -2
  125. package/dist/rules/effect-rule-names.d.ts.map +1 -1
  126. package/dist/rules/effect-rule-names.js +3 -145
  127. package/dist/rules/effect-rule-names.js.map +1 -1
  128. package/dist/rules/effect-source-comments.d.ts.map +1 -1
  129. package/dist/rules/effect-source-comments.js +112 -167
  130. package/dist/rules/effect-source-comments.js.map +1 -1
  131. package/dist/rules/effect-source-navigation.d.ts.map +1 -1
  132. package/dist/rules/effect-source-navigation.js +103 -185
  133. package/dist/rules/effect-source-navigation.js.map +1 -1
  134. package/dist/rules/effect-source-regex-scan.d.ts +13 -0
  135. package/dist/rules/effect-source-regex-scan.d.ts.map +1 -0
  136. package/dist/rules/effect-source-regex-scan.js +126 -0
  137. package/dist/rules/effect-source-regex-scan.js.map +1 -0
  138. package/dist/rules/effect-source-scan.d.ts +1 -12
  139. package/dist/rules/effect-source-scan.d.ts.map +1 -1
  140. package/dist/rules/effect-source-scan.js +93 -239
  141. package/dist/rules/effect-source-scan.js.map +1 -1
  142. package/dist/rules/effect-strict-ast-specs.d.ts.map +1 -1
  143. package/dist/rules/effect-strict-ast-specs.js +11 -8
  144. package/dist/rules/effect-strict-ast-specs.js.map +1 -1
  145. package/dist/rules/effect-strict-boundary-helpers.d.ts.map +1 -1
  146. package/dist/rules/effect-strict-boundary-helpers.js +51 -87
  147. package/dist/rules/effect-strict-boundary-helpers.js.map +1 -1
  148. package/dist/rules/effect-strict-core-specs.d.ts.map +1 -1
  149. package/dist/rules/effect-strict-core-specs.js +8 -6
  150. package/dist/rules/effect-strict-core-specs.js.map +1 -1
  151. package/dist/rules/effect-strict-external-helpers.d.ts.map +1 -1
  152. package/dist/rules/effect-strict-external-helpers.js +20 -40
  153. package/dist/rules/effect-strict-external-helpers.js.map +1 -1
  154. package/dist/rules/effect-strict-helpers.d.ts.map +1 -1
  155. package/dist/rules/effect-strict-helpers.js +47 -72
  156. package/dist/rules/effect-strict-helpers.js.map +1 -1
  157. package/dist/rules/effect-strict-internals.d.ts.map +1 -1
  158. package/dist/rules/effect-strict-internals.js +46 -101
  159. package/dist/rules/effect-strict-internals.js.map +1 -1
  160. package/dist/rules/effect-strict-segment-helpers.d.ts.map +1 -1
  161. package/dist/rules/effect-strict-segment-helpers.js +103 -174
  162. package/dist/rules/effect-strict-segment-helpers.js.map +1 -1
  163. package/dist/rules/effect-strict.d.ts.map +1 -1
  164. package/dist/rules/effect-strict.js +3 -2
  165. package/dist/rules/effect-strict.js.map +1 -1
  166. package/dist/rules/max-import-depth.d.ts +2 -1
  167. package/dist/rules/max-import-depth.d.ts.map +1 -1
  168. package/dist/rules/max-import-depth.js +13 -15
  169. package/dist/rules/max-import-depth.js.map +1 -1
  170. package/dist/rules/max-line-length.d.ts.map +1 -1
  171. package/dist/rules/max-line-length.js +26 -39
  172. package/dist/rules/max-line-length.js.map +1 -1
  173. package/dist/rules/no-commented-out-code.d.ts.map +1 -1
  174. package/dist/rules/no-commented-out-code.js +53 -156
  175. package/dist/rules/no-commented-out-code.js.map +1 -1
  176. package/dist/rules/pascal-case-types.d.ts.map +1 -1
  177. package/dist/rules/pascal-case-types.js +16 -70
  178. package/dist/rules/pascal-case-types.js.map +1 -1
  179. package/dist/rules/plugin-commented-out-code-rule.d.ts.map +1 -1
  180. package/dist/rules/plugin-commented-out-code-rule.js +50 -77
  181. package/dist/rules/plugin-commented-out-code-rule.js.map +1 -1
  182. package/dist/rules/plugin.d.ts.map +1 -1
  183. package/dist/rules/plugin.js +14 -35
  184. package/dist/rules/plugin.js.map +1 -1
  185. package/dist/rules/private-underscore.d.ts +3 -1
  186. package/dist/rules/private-underscore.d.ts.map +1 -1
  187. package/dist/rules/private-underscore.js +7 -9
  188. package/dist/rules/private-underscore.js.map +1 -1
  189. package/dist/rules/require-file-doc.d.ts.map +1 -1
  190. package/dist/rules/require-file-doc.js +28 -94
  191. package/dist/rules/require-file-doc.js.map +1 -1
  192. package/dist/rules/require-function-doc-ignored-text.d.ts.map +1 -1
  193. package/dist/rules/require-function-doc-ignored-text.js +6 -9
  194. package/dist/rules/require-function-doc-ignored-text.js.map +1 -1
  195. package/dist/rules/require-function-doc-local-exports.d.ts.map +1 -1
  196. package/dist/rules/require-function-doc-local-exports.js +16 -58
  197. package/dist/rules/require-function-doc-local-exports.js.map +1 -1
  198. package/dist/rules/require-function-doc.d.ts.map +1 -1
  199. package/dist/rules/require-function-doc.js +87 -196
  200. package/dist/rules/require-function-doc.js.map +1 -1
  201. package/dist/rules/source-cache.d.ts.map +1 -1
  202. package/dist/rules/source-cache.js +23 -33
  203. package/dist/rules/source-cache.js.map +1 -1
  204. package/package.json +3 -1
@@ -1,6 +1,7 @@
1
1
  /* -------------------------------------------------------------------------- */
2
2
  /* Helper predicates for opt-in strict Effect lint rules. */
3
3
  /* -------------------------------------------------------------------------- */
4
+ import { Array, String, pipe } from 'effect';
4
5
  import { findStatementEnd, stripCommentsAndStrings } from './effect-source-helpers.js';
5
6
  import { lineAround, localEffectCallSegment, localStatementSegment, testSegments, } from './effect-strict-segment-helpers.js';
6
7
  import { hasEffectSignal } from './effect-rule-core.js';
@@ -8,24 +9,23 @@ export { hasBoundaryDataWithoutSchema, hasCommandHandlerWithoutSchema, hasHTTPSe
8
9
  export { hasExternalEffectWithoutSpan, hasExternalEffectWithoutTimeout, hasIdempotentExternalEffectWithoutRetry, } from './effect-strict-external-helpers.js';
9
10
  export { hasDuplicateLayerInstance, hasLayerFactory, hasLiveTestService, hasRealTestService, hasUnscopedResourceLayer, hasUnscopedResourceLoop, hasUnsafeResourceStream, } from './effect-strict-segment-helpers.js';
10
11
  const RESOURCE_CONTEXT_WINDOW = 180;
12
+ const sourceIncludes = (needle) => (source) => pipe(source, String.includes(needle));
13
+ const matchesIn = (source, pattern) => pipe(source.matchAll(pattern), Array.fromIterable);
11
14
  /**
12
15
  * Internal helper exported for package-local composition.
13
16
  *
14
17
  * @internal
15
18
  */
16
19
  export const hasOutputBoundaryWithoutSchema = (source) => {
17
- if (!source.includes('Response.json') && !source.includes('return json')) {
20
+ if (!sourceIncludes('Response.json')(source) && !sourceIncludes('return json')(source)) {
18
21
  return false;
19
22
  }
20
23
  const code = stripCommentsAndStrings(source);
21
- for (const match of code.matchAll(/\breturn\s+(?:Response\.json|json)\s*\(/g)) {
24
+ return pipe(matchesIn(code, /\breturn\s+(?:Response\.json|json)\s*\(/g), Array.some((match) => {
22
25
  const callOffset = match[0].search(/(?:Response\.json|json)\s*\(/);
23
26
  const segment = localEffectCallSegment(source, match.index + callOffset);
24
- if (!/Schema\.(?:encode|decode)/.test(segment)) {
25
- return true;
26
- }
27
- }
28
- return false;
27
+ return !/Schema\.(?:encode|decode)/.test(segment);
28
+ }));
29
29
  };
30
30
  /**
31
31
  * Internal helper exported for package-local composition.
@@ -33,17 +33,14 @@ export const hasOutputBoundaryWithoutSchema = (source) => {
33
33
  * @internal
34
34
  */
35
35
  export const hasHTTPClientResponseWithoutSchema = (source) => {
36
- if (!source.includes('HttpClient.') || !source.includes('response.json')) {
36
+ if (!sourceIncludes('HttpClient.')(source) || !sourceIncludes('response.json')(source)) {
37
37
  return false;
38
38
  }
39
39
  const code = stripCommentsAndStrings(source);
40
- for (const match of code.matchAll(/\bHttpClient\.[\s\S]*?\bresponse\.json\s*\(/g)) {
40
+ return pipe(matchesIn(code, /\bHttpClient\.[\s\S]*?\bresponse\.json\s*\(/g), Array.some((match) => {
41
41
  const segment = localStatementSegment(source, match.index);
42
- if (!/Schema\.decode/.test(segment)) {
43
- return true;
44
- }
45
- }
46
- return false;
42
+ return !/Schema\.decode/.test(segment);
43
+ }));
47
44
  };
48
45
  /**
49
46
  * Internal helper exported for package-local composition.
@@ -51,19 +48,16 @@ export const hasHTTPClientResponseWithoutSchema = (source) => {
51
48
  * @internal
52
49
  */
53
50
  export const hasSharedResourceForEachWithoutSemaphore = (source) => {
54
- if (!source.includes('Effect.forEach')) {
51
+ if (!sourceIncludes('Effect.forEach')(source)) {
55
52
  return false;
56
53
  }
57
54
  const code = stripCommentsAndStrings(source);
58
- for (const match of code.matchAll(/\bEffect\.forEach\s*\(/g)) {
55
+ return pipe(matchesIn(code, /\bEffect\.forEach\s*\(/g), Array.some((match) => {
59
56
  const localStart = Math.max(0, match.index - RESOURCE_CONTEXT_WINDOW);
60
57
  const segment = code.slice(localStart, findStatementEnd(code, match.index) + 1);
61
- if (/\b(?:pool|connection|client|browser|worker)\b/.test(segment) &&
62
- !/\bSemaphore\b/.test(segment)) {
63
- return true;
64
- }
65
- }
66
- return false;
58
+ return (/\b(?:pool|connection|client|browser|worker)\b/.test(segment) &&
59
+ !/\bSemaphore\b/.test(segment));
60
+ }));
67
61
  };
68
62
  /**
69
63
  * Internal helper exported for package-local composition.
@@ -71,17 +65,14 @@ export const hasSharedResourceForEachWithoutSemaphore = (source) => {
71
65
  * @internal
72
66
  */
73
67
  export const hasEnsuringCleanupWithoutOnExit = (source) => {
74
- if (!source.includes('Effect.ensuring') || !source.includes('cleanup')) {
68
+ if (!sourceIncludes('Effect.ensuring')(source) || !sourceIncludes('cleanup')(source)) {
75
69
  return false;
76
70
  }
77
71
  const code = stripCommentsAndStrings(source);
78
- for (const match of code.matchAll(/\bEffect\.ensuring\s*\(/g)) {
72
+ return pipe(matchesIn(code, /\bEffect\.ensuring\s*\(/g), Array.some((match) => {
79
73
  const segment = localEffectCallSegment(source, match.index);
80
- if (/\bcleanup\b/.test(segment) && !/\bonExit\b/.test(segment)) {
81
- return true;
82
- }
83
- }
84
- return false;
74
+ return /\bcleanup\b/.test(segment) && !/\bonExit\b/.test(segment);
75
+ }));
85
76
  };
86
77
  /**
87
78
  * Internal helper exported for package-local composition.
@@ -89,17 +80,14 @@ export const hasEnsuringCleanupWithoutOnExit = (source) => {
89
80
  * @internal
90
81
  */
91
82
  export const hasUnterminatedLongRunningStream = (source) => {
92
- if (!source.includes('Stream.')) {
83
+ if (!sourceIncludes('Stream.')(source)) {
93
84
  return false;
94
85
  }
95
86
  const code = stripCommentsAndStrings(source);
96
- for (const match of code.matchAll(/\bStream\.(?:repeat|forever|async|fromQueue)\s*\(/g)) {
87
+ return pipe(matchesIn(code, /\bStream\.(?:repeat|forever|async|fromQueue)\s*\(/g), Array.some((match) => {
97
88
  const segment = localEffectCallSegment(source, match.index);
98
- if (!/\b(?:takeUntil|interruptWhen|timeout)\b/.test(segment)) {
99
- return true;
100
- }
101
- }
102
- return false;
89
+ return !/\b(?:takeUntil|interruptWhen|timeout)\b/.test(segment);
90
+ }));
103
91
  };
104
92
  /**
105
93
  * Internal helper exported for package-local composition.
@@ -107,17 +95,14 @@ export const hasUnterminatedLongRunningStream = (source) => {
107
95
  * @internal
108
96
  */
109
97
  export const hasAsyncPushWithoutBuffer = (source) => {
110
- if (!source.includes('Stream.asyncPush')) {
98
+ if (!sourceIncludes('Stream.asyncPush')(source)) {
111
99
  return false;
112
100
  }
113
101
  const code = stripCommentsAndStrings(source);
114
- for (const match of code.matchAll(/\bStream\.asyncPush\s*\(/g)) {
102
+ return pipe(matchesIn(code, /\bStream\.asyncPush\s*\(/g), Array.some((match) => {
115
103
  const segment = localEffectCallSegment(source, match.index);
116
- if (!/\b(?:buffer|Queue\.bounded|Queue\.sliding)\b/.test(segment)) {
117
- return true;
118
- }
119
- }
120
- return false;
104
+ return !/\b(?:buffer|Queue\.bounded|Queue\.sliding)\b/.test(segment);
105
+ }));
121
106
  };
122
107
  /**
123
108
  * Internal helper exported for package-local composition.
@@ -125,17 +110,14 @@ export const hasAsyncPushWithoutBuffer = (source) => {
125
110
  * @internal
126
111
  */
127
112
  export const hasUnbatchedResolver = (source) => {
128
- if (!source.includes('RequestResolver.make')) {
113
+ if (!sourceIncludes('RequestResolver.make')(source)) {
129
114
  return false;
130
115
  }
131
116
  const code = stripCommentsAndStrings(source);
132
- for (const match of code.matchAll(/\bRequestResolver\.make\s*\(/g)) {
117
+ return pipe(matchesIn(code, /\bRequestResolver\.make\s*\(/g), Array.some((match) => {
133
118
  const segment = localEffectCallSegment(source, match.index);
134
- if (!/\b(?:makeBatched|batchN|grouped)\b/.test(segment)) {
135
- return true;
136
- }
137
- }
138
- return false;
119
+ return !/\b(?:makeBatched|batchN|grouped)\b/.test(segment);
120
+ }));
139
121
  };
140
122
  /**
141
123
  * Internal helper exported for package-local composition.
@@ -143,18 +125,14 @@ export const hasUnbatchedResolver = (source) => {
143
125
  * @internal
144
126
  */
145
127
  export const hasNPlusOneWithoutBatchedResolver = (source) => {
146
- if (!source.includes('Effect.forEach')) {
128
+ if (!sourceIncludes('Effect.forEach')(source)) {
147
129
  return false;
148
130
  }
149
131
  const code = stripCommentsAndStrings(source);
150
- for (const match of code.matchAll(/\bEffect\.forEach\s*\(/g)) {
132
+ return pipe(matchesIn(code, /\bEffect\.forEach\s*\(/g), Array.some((match) => {
151
133
  const segment = localEffectCallSegment(source, match.index);
152
- if (/\b(?:findById|getById|loadById)\s*\(/.test(segment) &&
153
- !/\bRequestResolver\b/.test(segment)) {
154
- return true;
155
- }
156
- }
157
- return false;
134
+ return (/\b(?:findById|getById|loadById)\s*\(/.test(segment) && !/\bRequestResolver\b/.test(segment));
135
+ }));
158
136
  };
159
137
  /**
160
138
  * Internal helper exported for package-local composition.
@@ -162,11 +140,13 @@ export const hasNPlusOneWithoutBatchedResolver = (source) => {
162
140
  * @internal
163
141
  */
164
142
  export const hasUnprovidedServiceInEffectTest = (source) => {
165
- if (!source.includes('Service') && !source.includes('Repo') && !source.includes('Client')) {
143
+ if (!sourceIncludes('Service')(source) &&
144
+ !sourceIncludes('Repo')(source) &&
145
+ !sourceIncludes('Client')(source)) {
166
146
  return false;
167
147
  }
168
- return testSegments(source).some((segment) => /yield\*\s+[A-Z][\w$]*(?:Service|Repo|Client)\b/.test(segment) &&
169
- !/\b(?:Effect\.)?provide[A-Za-z_$]*\s*\(/.test(segment));
148
+ return pipe(testSegments(source), Array.some((segment) => /yield\*\s+[A-Z][\w$]*(?:Service|Repo|Client)\b/.test(segment) &&
149
+ !/\b(?:Effect\.)?provide[A-Za-z_$]*\s*\(/.test(segment)));
170
150
  };
171
151
  /**
172
152
  * Internal helper exported for package-local composition.
@@ -174,12 +154,12 @@ export const hasUnprovidedServiceInEffectTest = (source) => {
174
154
  * @internal
175
155
  */
176
156
  export const hasTimeCodeWithoutTestClock = (source) => {
177
- if (!source.includes('Effect.timeout') &&
178
- !source.includes('Effect.delay') &&
179
- !source.includes('Clock.')) {
157
+ if (!sourceIncludes('Effect.timeout')(source) &&
158
+ !sourceIncludes('Effect.delay')(source) &&
159
+ !sourceIncludes('Clock.')(source)) {
180
160
  return false;
181
161
  }
182
- return testSegments(source).some((segment) => /Effect\.(?:timeout|delay)|Clock\./.test(segment) && !/TestClock/.test(segment));
162
+ return pipe(testSegments(source), Array.some((segment) => /Effect\.(?:timeout|delay)|Clock\./.test(segment) && !/TestClock/.test(segment)));
183
163
  };
184
164
  /**
185
165
  * Internal helper exported for package-local composition.
@@ -187,18 +167,13 @@ export const hasTimeCodeWithoutTestClock = (source) => {
187
167
  * @internal
188
168
  */
189
169
  export const hasMutableStateWithoutRef = (source) => {
190
- if (!source.includes('let ')) {
170
+ if (!sourceIncludes('let ')(source)) {
191
171
  return false;
192
172
  }
193
173
  if (!hasEffectSignal(source)) {
194
174
  return false;
195
175
  }
196
- for (const match of source.matchAll(/\blet\s+[A-Za-z_$][\w$]*\s*=/g)) {
197
- if (!/\bRef\./.test(lineAround(source, match.index))) {
198
- return true;
199
- }
200
- }
201
- return false;
176
+ return pipe(matchesIn(source, /\blet\s+[A-Za-z_$][\w$]*\s*=/g), Array.some((match) => !/\bRef\./.test(lineAround(source, match.index))));
202
177
  };
203
178
  /**
204
179
  * Internal helper exported for package-local composition.
@@ -1 +1 @@
1
- {"version":3,"file":"effect-strict-helpers.js","sourceRoot":"","sources":["../../src/rules/effect-strict-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"effect-strict-helpers.js","sourceRoot":"","sources":["../../src/rules/effect-strict-helpers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"effect-strict-internals.d.ts","sourceRoot":"","sources":["../../src/rules/effect-strict-internals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"effect-strict-internals.d.ts","sourceRoot":"","sources":["../../src/rules/effect-strict-internals.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,14 @@
1
1
  /* -------------------------------------------------------------------------- */
2
2
  /* AST and source predicates for opt-in strict Effect lint rules. */
3
3
  /* -------------------------------------------------------------------------- */
4
+ import { Array, HashSet, Option, pipe } from 'effect';
4
5
  import { effectAPIAliases, effectFunctionAliases, effectImportAliases } from './effect-rule-core.js';
5
6
  import { exportedDeclarationTexts, findBalancedCallEnd, findMatchingBrace, findStatementEnd, stripComments, stripCommentsAndStrings, } from './effect-source-helpers.js';
6
7
  import { isConfiguredPath } from './effect-path-options.js';
7
8
  export { hasEffectSignal, hasRuntimeCall } from './effect-rule-core.js';
9
+ const astValueTypes = HashSet.make('boolean', 'number', 'object', 'string');
10
+ const matchesIn = (source, pattern) => pipe(source.matchAll(pattern), Array.fromIterable);
11
+ const matchIndexOrFalse = (match) => pipe(Option.fromNullable(match), Option.map((value) => value.index), Option.getOrElse(() => false));
8
12
  /**
9
13
  * Internal helper exported for package-local composition.
10
14
  *
@@ -13,9 +17,7 @@ export { hasEffectSignal, hasRuntimeCall } from './effect-rule-core.js';
13
17
  export const reportAST = (context, message, node) => {
14
18
  context.report({ message, node });
15
19
  };
16
- const isASTValue = (value) => value === undefined ||
17
- value === null ||
18
- ['boolean', 'number', 'object', 'string'].includes(typeof value);
20
+ const isASTValue = (value) => value === undefined || value === null || HashSet.has(astValueTypes, typeof value);
19
21
  /**
20
22
  * Internal helper exported for package-local composition.
21
23
  *
@@ -37,8 +39,8 @@ export const objectValue = (node, key) => {
37
39
  * @internal
38
40
  */
39
41
  export const arrayValue = (node) => {
40
- if (Array.isArray(node)) {
41
- return node.filter(isASTValue);
42
+ if (globalThis.Array.isArray(node)) {
43
+ return pipe(node, Array.filter(isASTValue));
42
44
  }
43
45
  return [];
44
46
  };
@@ -118,7 +120,7 @@ export const isSchemaMember = (node, source, propertyName) => {
118
120
  const parts = memberParts(node);
119
121
  return Boolean(parts.objectName &&
120
122
  parts.propertyName === propertyName &&
121
- effectAPIAliases(source, 'Schema').includes(parts.objectName));
123
+ pipe(effectAPIAliases(source, 'Schema'), Array.contains(parts.objectName)));
122
124
  };
123
125
  /**
124
126
  * Internal helper exported for package-local composition.
@@ -126,16 +128,16 @@ export const isSchemaMember = (node, source, propertyName) => {
126
128
  * @internal
127
129
  */
128
130
  export const effectCallPredicate = (source, names) => {
129
- const memberNames = new Set(names);
130
- const importAliases = new Set(effectImportAliases(source));
131
- const functionAliases = new Set(names.flatMap((name) => effectFunctionAliases(source, 'Effect', name)));
131
+ const memberNames = HashSet.fromIterable(names);
132
+ const importAliases = pipe(effectImportAliases(source), HashSet.fromIterable);
133
+ const functionAliases = pipe(names, Array.flatMap((name) => effectFunctionAliases(source, 'Effect', name)), HashSet.fromIterable);
132
134
  return (callee) => {
133
135
  const { objectName, propertyName } = memberParts(callee);
134
136
  if (objectName && propertyName) {
135
- return importAliases.has(objectName) && memberNames.has(propertyName);
137
+ return HashSet.has(importAliases, objectName) && HashSet.has(memberNames, propertyName);
136
138
  }
137
139
  const calleeName = identifierName(callee);
138
- return Boolean(calleeName && functionAliases.has(calleeName));
140
+ return Boolean(calleeName && HashSet.has(functionAliases, calleeName));
139
141
  };
140
142
  };
141
143
  const literalStringValue = (node) => {
@@ -145,14 +147,8 @@ const literalStringValue = (node) => {
145
147
  }
146
148
  return undefined;
147
149
  };
148
- const contextTagServiceKey = (innerArguments) => {
149
- const [firstInnerArgument] = arrayValue(innerArguments);
150
- return literalStringValue(firstInnerArgument);
151
- };
152
- const effectServiceKey = (outerArguments) => {
153
- const [firstOuterArgument] = arrayValue(outerArguments);
154
- return literalStringValue(firstOuterArgument);
155
- };
150
+ const contextTagServiceKey = (innerArguments) => pipe(arrayValue(innerArguments), Array.head, Option.flatMapNullable(literalStringValue), Option.getOrUndefined);
151
+ const effectServiceKey = (outerArguments) => pipe(arrayValue(outerArguments), Array.head, Option.flatMapNullable(literalStringValue), Option.getOrUndefined);
156
152
  const contextTagKeyFromMember = (member, innerArguments) => {
157
153
  if (member.objectName === 'Context' &&
158
154
  (member.propertyName === 'Tag' || member.propertyName === 'GenericTag')) {
@@ -162,7 +158,7 @@ const contextTagKeyFromMember = (member, innerArguments) => {
162
158
  };
163
159
  const effectServiceKeyFromMember = (source, member, outerArguments) => {
164
160
  if (member.objectName &&
165
- effectImportAliases(source).includes(member.objectName) &&
161
+ pipe(effectImportAliases(source), Array.contains(member.objectName)) &&
166
162
  member.propertyName === 'Service') {
167
163
  return effectServiceKey(outerArguments);
168
164
  }
@@ -205,16 +201,11 @@ export const serviceKeyFromClass = (node, source) => {
205
201
  *
206
202
  * @internal
207
203
  */
208
- export const hasRetryScheduleWithoutJitter = (source) => {
209
- for (const match of source.matchAll(/\bEffect\.retry\s*\(/g)) {
210
- const openParenIndex = source.indexOf('(', match.index);
211
- const callBody = source.slice(openParenIndex + 1, findBalancedCallEnd(source, openParenIndex));
212
- if (/\bSchedule\./.test(callBody) && !/\bjitter(?:ed)?\b/.test(callBody)) {
213
- return true;
214
- }
215
- }
216
- return false;
217
- };
204
+ export const hasRetryScheduleWithoutJitter = (source) => pipe(matchesIn(source, /\bEffect\.retry\s*\(/g), Array.some((match) => {
205
+ const openParenIndex = source.indexOf('(', match.index);
206
+ const callBody = source.slice(openParenIndex + 1, findBalancedCallEnd(source, openParenIndex));
207
+ return /\bSchedule\./.test(callBody) && !/\bjitter(?:ed)?\b/.test(callBody);
208
+ }));
218
209
  const declarationBeforeBody = (declaration) => {
219
210
  const bodyStart = declaration.indexOf('{');
220
211
  if (bodyStart === -1) {
@@ -258,7 +249,7 @@ const hasClassPromiseReturningPublicMember = (declaration) => {
258
249
  *
259
250
  * @internal
260
251
  */
261
- export const hasPromiseReturningPublicAPI = (source) => exportedDeclarationTexts(source).some((declaration) => {
252
+ export const hasPromiseReturningPublicAPI = (source) => pipe(exportedDeclarationTexts(source), Array.some((declaration) => {
262
253
  if (/^\s*(?:export\s+)?(?:default\s+)?(?:abstract\s+)?class\b/.test(declaration)) {
263
254
  return hasClassPromiseReturningPublicMember(declaration);
264
255
  }
@@ -266,13 +257,13 @@ export const hasPromiseReturningPublicAPI = (source) => exportedDeclarationTexts
266
257
  return (/\bPromise\s*</.test(signature) ||
267
258
  /^\s*(?:export\s+)?async\s+function\b/.test(signature) ||
268
259
  /=\s*async\b/.test(signature));
269
- });
260
+ }));
270
261
  /**
271
262
  * Internal helper exported for package-local composition.
272
263
  *
273
264
  * @internal
274
265
  */
275
- export const hasExportedRunPromiseAPI = (source) => exportedDeclarationTexts(source).some((declaration) => /\bEffect\.runPromise\s*\(/.test(stripCommentsAndStrings(declaration)));
266
+ export const hasExportedRunPromiseAPI = (source) => pipe(exportedDeclarationTexts(source), Array.some((declaration) => /\bEffect\.runPromise\s*\(/.test(stripCommentsAndStrings(declaration))));
276
267
  const functionBodySegment = (code, matchIndex) => {
277
268
  const bodyStart = code.indexOf('{', matchIndex);
278
269
  if (bodyStart === -1) {
@@ -291,29 +282,18 @@ const functionBodySegment = (code, matchIndex) => {
291
282
  */
292
283
  export const hasRunSyncInServerRequestHandler = (source) => {
293
284
  const code = stripCommentsAndStrings(source);
294
- for (const match of code.matchAll(/\b(?:handler|route|loader|action)\s*=/g)) {
285
+ return (pipe(matchesIn(code, /\b(?:handler|route|loader|action)\s*=/g), Array.some((match) => {
295
286
  const segment = code.slice(match.index, findStatementEnd(code, match.index) + 1);
296
- if (/\bEffect\.runSync\s*\(/.test(segment)) {
297
- return true;
298
- }
299
- }
300
- for (const match of code.matchAll(/\bfunction\s+(?:handler|route|loader|action)\s*\(/g)) {
301
- const body = functionBodySegment(code, match.index);
302
- if (body && /\bEffect\.runSync\s*\(/.test(body)) {
303
- return true;
304
- }
305
- }
306
- return false;
287
+ return /\bEffect\.runSync\s*\(/.test(segment);
288
+ })) ||
289
+ pipe(matchesIn(code, /\bfunction\s+(?:handler|route|loader|action)\s*\(/g), Array.some((match) => pipe(Option.fromNullable(functionBodySegment(code, match.index)), Option.exists((body) => /\bEffect\.runSync\s*\(/.test(body))))));
307
290
  };
308
291
  /**
309
292
  * Internal helper exported for package-local composition.
310
293
  *
311
294
  * @internal
312
295
  */
313
- export const hasCryptoRandomUUID = (source) => {
314
- const match = /\bcrypto\.randomUUID\s*\(/.exec(stripCommentsAndStrings(source));
315
- return match?.index ?? false;
316
- };
296
+ export const hasCryptoRandomUUID = (source) => matchIndexOrFalse(/\bcrypto\.randomUUID\s*\(/.exec(stripCommentsAndStrings(source)));
317
297
  /**
318
298
  * Internal helper exported for package-local composition.
319
299
  *
@@ -321,36 +301,24 @@ export const hasCryptoRandomUUID = (source) => {
321
301
  */
322
302
  export const hasSchemaInstanceof = (source) => {
323
303
  const code = stripCommentsAndStrings(source);
324
- const match = /\binstanceof\s+[A-Z][\w$]*(?:Schema|Request)\b/.exec(code);
325
- return match?.index ?? false;
304
+ return matchIndexOrFalse(/\binstanceof\s+[A-Z][\w$]*(?:Schema|Request)\b/.exec(code));
326
305
  };
327
306
  /**
328
307
  * Internal helper exported for package-local composition.
329
308
  *
330
309
  * @internal
331
310
  */
332
- export const hasSchemaStructWithTag = (source) => {
333
- const match = /\bSchema\.Struct\s*\(\s*{[\s\S]*?_tag\s*:\s*Schema\.Literal\s*\(/.exec(stripCommentsAndStrings(source));
334
- return match?.index ?? false;
335
- };
311
+ export const hasSchemaStructWithTag = (source) => matchIndexOrFalse(/\bSchema\.Struct\s*\(\s*{[\s\S]*?_tag\s*:\s*Schema\.Literal\s*\(/.exec(stripCommentsAndStrings(source)));
336
312
  /**
337
313
  * Internal helper exported for package-local composition.
338
314
  *
339
315
  * @internal
340
316
  */
341
- export const hasSchemaUnionOfLiterals = (source) => {
342
- const match = /\bSchema\.Union\s*\(\s*Schema\.Literal\s*\([^)]*\)\s*,\s*Schema\.Literal\s*\(/.exec(stripCommentsAndStrings(source));
343
- return match?.index ?? false;
344
- };
345
- const nonDeterministicServiceKeyIndex = (code, pattern) => {
346
- for (const match of code.matchAll(pattern)) {
347
- const [, className, key] = match;
348
- if (className !== key && !key.endsWith(`/${className}`)) {
349
- return match.index;
350
- }
351
- }
352
- return undefined;
353
- };
317
+ export const hasSchemaUnionOfLiterals = (source) => matchIndexOrFalse(/\bSchema\.Union\s*\(\s*Schema\.Literal\s*\([^)]*\)\s*,\s*Schema\.Literal\s*\(/.exec(stripCommentsAndStrings(source)));
318
+ const nonDeterministicServiceKeyIndex = (code, pattern) => pipe(matchesIn(code, pattern), Array.findFirst((match) => {
319
+ const [, className, key] = match;
320
+ return className !== key && !key.endsWith(`/${className}`);
321
+ }), Option.map((match) => match.index), Option.getOrUndefined);
354
322
  /**
355
323
  * Internal helper exported for package-local composition.
356
324
  *
@@ -373,8 +341,7 @@ export const hasNonDeterministicServiceKey = (source) => {
373
341
  */
374
342
  export const hasMultipleProvideChain = (source) => {
375
343
  const code = stripCommentsAndStrings(source);
376
- const match = /\.pipe\s*\([\s\S]*?Effect\.provide\s*\([\s\S]*?Effect\.provide\s*\(/.exec(code);
377
- return match?.index ?? false;
344
+ return matchIndexOrFalse(/\.pipe\s*\([\s\S]*?Effect\.provide\s*\([\s\S]*?Effect\.provide\s*\(/.exec(code));
378
345
  };
379
346
  /**
380
347
  * Internal helper exported for package-local composition.
@@ -383,18 +350,14 @@ export const hasMultipleProvideChain = (source) => {
383
350
  */
384
351
  export const hasLayerEffectWithScope = (source) => {
385
352
  const code = stripCommentsAndStrings(source);
386
- const match = /\bLayer\.effect\s*\([\s\S]*?\b(?:Scope\.Scope|Scope)\b/.exec(code);
387
- return match?.index ?? false;
353
+ return matchIndexOrFalse(/\bLayer\.effect\s*\([\s\S]*?\b(?:Scope\.Scope|Scope)\b/.exec(code));
388
354
  };
389
355
  /**
390
356
  * Internal helper exported for package-local composition.
391
357
  *
392
358
  * @internal
393
359
  */
394
- export const hasNodeBuiltinImport = (source) => {
395
- const match = /\bfrom\s+['"]node:(?:fs|fs\/promises|path|child_process|crypto|stream|http|https)['"]/.exec(stripComments(source));
396
- return match?.index ?? false;
397
- };
360
+ export const hasNodeBuiltinImport = (source) => matchIndexOrFalse(/\bfrom\s+['"]node:(?:fs|fs\/promises|path|child_process|crypto|stream|http|https)['"]/.exec(stripComments(source)));
398
361
  /**
399
362
  * Internal helper exported for package-local composition.
400
363
  *
@@ -405,41 +368,26 @@ export const hasGlobalFetch = (source, context) => {
405
368
  if (isConfiguredPath(context, 'adapterLayers')) {
406
369
  return false;
407
370
  }
408
- for (const match of code.matchAll(/\bfetch\s*\(/g)) {
409
- const wrappedFetch = Boolean(effectWrapperStatement(code, match.index));
410
- if (wrappedFetch) {
411
- return match.index;
412
- }
413
- }
414
- return false;
371
+ return pipe(matchesIn(code, /\bfetch\s*\(/g), Array.findFirst((match) => Boolean(effectWrapperStatement(code, match.index))), Option.map((match) => match.index), Option.getOrElse(() => false));
415
372
  };
416
373
  /**
417
374
  * Internal helper exported for package-local composition.
418
375
  *
419
376
  * @internal
420
377
  */
421
- export const hasEffectSucceedWithVoid = (source) => {
422
- const match = /\bEffect\.succeed\s*\(\s*(?:undefined|void\s+0)?\s*\)/.exec(stripCommentsAndStrings(source));
423
- return match?.index ?? false;
424
- };
378
+ export const hasEffectSucceedWithVoid = (source) => matchIndexOrFalse(/\bEffect\.succeed\s*\(\s*(?:undefined|void\s+0)?\s*\)/.exec(stripCommentsAndStrings(source)));
425
379
  /**
426
380
  * Internal helper exported for package-local composition.
427
381
  *
428
382
  * @internal
429
383
  */
430
- export const hasMapToVoid = (source) => {
431
- const match = /\bEffect\.map\s*\(\s*\(\s*\)\s*=>\s*(?:undefined|void\s+0|\{\s*\})\s*\)/.exec(stripCommentsAndStrings(source));
432
- return match?.index ?? false;
433
- };
384
+ export const hasMapToVoid = (source) => matchIndexOrFalse(/\bEffect\.map\s*\(\s*\(\s*\)\s*=>\s*(?:undefined|void\s+0|\{\s*\})\s*\)/.exec(stripCommentsAndStrings(source)));
434
385
  /**
435
386
  * Internal helper exported for package-local composition.
436
387
  *
437
388
  * @internal
438
389
  */
439
- export const hasMapFlatten = (source) => {
440
- const match = /\bEffect\.map\s*\([\s\S]*?\)\s*,\s*Effect\.flatten\b|\bEffect\.map\s*\([\s\S]*?\)\.pipe\s*\(\s*Effect\.flatten\b/.exec(stripCommentsAndStrings(source));
441
- return match?.index ?? false;
442
- };
390
+ export const hasMapFlatten = (source) => matchIndexOrFalse(/\bEffect\.map\s*\([\s\S]*?\)\s*,\s*Effect\.flatten\b|\bEffect\.map\s*\([\s\S]*?\)\.pipe\s*\(\s*Effect\.flatten\b/.exec(stripCommentsAndStrings(source)));
443
391
  /**
444
392
  * Internal helper exported for package-local composition.
445
393
  *
@@ -464,14 +412,11 @@ export const hasDirectPlatformAccess = (source, context) => {
464
412
  return false;
465
413
  }
466
414
  const code = stripCommentsAndStrings(source);
467
- for (const match of code.matchAll(/\b(?:fetch|readFileSync|writeFileSync|createReadStream)\s*\(/g)) {
415
+ return pipe(matchesIn(code, /\b(?:fetch|readFileSync|writeFileSync|createReadStream)\s*\(/g), Array.some((match) => {
468
416
  if (!match[0].startsWith('fetch')) {
469
417
  return true;
470
418
  }
471
- if (!effectWrapperStatement(code, match.index)) {
472
- return true;
473
- }
474
- }
475
- return false;
419
+ return !effectWrapperStatement(code, match.index);
420
+ }));
476
421
  };
477
422
  //# sourceMappingURL=effect-strict-internals.js.map