@trebired/code-discipline 2.2.0 → 3.0.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 (195) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +77 -4
  3. package/dist/checks/fix-folderization.d.ts.map +1 -1
  4. package/dist/checks/fix-folderization.js +3 -1
  5. package/dist/checks/fix-folderization.js.map +1 -1
  6. package/dist/checks/index.d.ts.map +1 -1
  7. package/dist/checks/index.js +97 -60
  8. package/dist/checks/index.js.map +1 -1
  9. package/dist/checks/rule-slugs.d.ts +4 -3
  10. package/dist/checks/rule-slugs.d.ts.map +1 -1
  11. package/dist/checks/rule-slugs.js +15 -8
  12. package/dist/checks/rule-slugs.js.map +1 -1
  13. package/dist/checks/rules/comments/ranges.d.ts +10 -0
  14. package/dist/checks/rules/comments/ranges.d.ts.map +1 -0
  15. package/dist/checks/rules/comments/ranges.js +210 -0
  16. package/dist/checks/rules/comments/ranges.js.map +1 -0
  17. package/dist/checks/rules/comments/stripping.d.ts +12 -0
  18. package/dist/checks/rules/comments/stripping.d.ts.map +1 -0
  19. package/dist/checks/rules/comments/stripping.js +81 -0
  20. package/dist/checks/rules/comments/stripping.js.map +1 -0
  21. package/dist/checks/rules/dry/candidates.d.ts +8 -0
  22. package/dist/checks/rules/dry/candidates.d.ts.map +1 -0
  23. package/dist/checks/rules/dry/candidates.js +98 -0
  24. package/dist/checks/rules/dry/candidates.js.map +1 -0
  25. package/dist/checks/rules/dry/fingerprint.d.ts +15 -0
  26. package/dist/checks/rules/dry/fingerprint.d.ts.map +1 -0
  27. package/dist/checks/rules/dry/fingerprint.js +80 -0
  28. package/dist/checks/rules/dry/fingerprint.js.map +1 -0
  29. package/dist/checks/rules/dry/fix.d.ts +5 -0
  30. package/dist/checks/rules/dry/fix.d.ts.map +1 -0
  31. package/dist/checks/rules/dry/fix.js +252 -0
  32. package/dist/checks/rules/dry/fix.js.map +1 -0
  33. package/dist/checks/rules/dry/helpers.d.ts +5 -0
  34. package/dist/checks/rules/dry/helpers.d.ts.map +1 -0
  35. package/dist/checks/rules/dry/helpers.js +99 -0
  36. package/dist/checks/rules/dry/helpers.js.map +1 -0
  37. package/dist/checks/rules/dry/index.d.ts +7 -0
  38. package/dist/checks/rules/dry/index.d.ts.map +1 -0
  39. package/dist/checks/rules/dry/index.js +14 -0
  40. package/dist/checks/rules/dry/index.js.map +1 -0
  41. package/dist/checks/rules/dry/model.d.ts +37 -0
  42. package/dist/checks/rules/dry/model.d.ts.map +1 -0
  43. package/dist/checks/rules/dry/model.js +16 -0
  44. package/dist/checks/rules/dry/model.js.map +1 -0
  45. package/dist/checks/rules/dry/serialize/bindings.d.ts +8 -0
  46. package/dist/checks/rules/dry/serialize/bindings.d.ts.map +1 -0
  47. package/dist/checks/rules/dry/serialize/bindings.js +62 -0
  48. package/dist/checks/rules/dry/serialize/bindings.js.map +1 -0
  49. package/dist/checks/rules/dry/serialize/context.d.ts +18 -0
  50. package/dist/checks/rules/dry/serialize/context.d.ts.map +1 -0
  51. package/dist/checks/rules/dry/serialize/context.js +103 -0
  52. package/dist/checks/rules/dry/serialize/context.js.map +1 -0
  53. package/dist/checks/rules/dry/serialize/expressions.d.ts +10 -0
  54. package/dist/checks/rules/dry/serialize/expressions.d.ts.map +1 -0
  55. package/dist/checks/rules/dry/serialize/expressions.js +161 -0
  56. package/dist/checks/rules/dry/serialize/expressions.js.map +1 -0
  57. package/dist/checks/rules/dry/serialize/node.d.ts +5 -0
  58. package/dist/checks/rules/dry/serialize/node.d.ts.map +1 -0
  59. package/dist/checks/rules/dry/serialize/node.js +43 -0
  60. package/dist/checks/rules/dry/serialize/node.js.map +1 -0
  61. package/dist/checks/rules/dry/serialize/statements.d.ts +7 -0
  62. package/dist/checks/rules/dry/serialize/statements.d.ts.map +1 -0
  63. package/dist/checks/rules/dry/serialize/statements.js +99 -0
  64. package/dist/checks/rules/dry/serialize/statements.js.map +1 -0
  65. package/dist/checks/rules/evasion-guards/functions.d.ts +14 -0
  66. package/dist/checks/rules/evasion-guards/functions.d.ts.map +1 -0
  67. package/dist/checks/rules/evasion-guards/functions.js +83 -0
  68. package/dist/checks/rules/evasion-guards/functions.js.map +1 -0
  69. package/dist/checks/rules/evasion-guards/index.d.ts +6 -0
  70. package/dist/checks/rules/evasion-guards/index.d.ts.map +1 -0
  71. package/dist/checks/rules/evasion-guards/index.js +126 -0
  72. package/dist/checks/rules/evasion-guards/index.js.map +1 -0
  73. package/dist/checks/rules/evasion-guards/runtime.d.ts +6 -0
  74. package/dist/checks/rules/evasion-guards/runtime.d.ts.map +1 -0
  75. package/dist/checks/rules/evasion-guards/runtime.js +51 -0
  76. package/dist/checks/rules/evasion-guards/runtime.js.map +1 -0
  77. package/dist/checks/rules/evasion-guards/strip.d.ts +11 -0
  78. package/dist/checks/rules/evasion-guards/strip.d.ts.map +1 -0
  79. package/dist/checks/rules/evasion-guards/strip.js +89 -0
  80. package/dist/checks/rules/evasion-guards/strip.js.map +1 -0
  81. package/dist/checks/rules/folderize/compound-files.d.ts +6 -0
  82. package/dist/checks/rules/folderize/compound-files.d.ts.map +1 -0
  83. package/dist/checks/rules/{folderize-compound-files.js → folderize/compound-files.js} +10 -2
  84. package/dist/checks/rules/folderize/compound-files.js.map +1 -0
  85. package/dist/checks/rules/{folderize-plan.d.ts → folderize/plan.d.ts} +3 -3
  86. package/dist/checks/rules/folderize/plan.d.ts.map +1 -0
  87. package/dist/checks/rules/{folderize-plan.js → folderize/plan.js} +2 -2
  88. package/dist/checks/rules/folderize/plan.js.map +1 -0
  89. package/dist/checks/rules/max/file-lines.d.ts +6 -0
  90. package/dist/checks/rules/max/file-lines.d.ts.map +1 -0
  91. package/dist/checks/rules/{max-file-lines.js → max/file-lines.js} +9 -1
  92. package/dist/checks/rules/max/file-lines.js.map +1 -0
  93. package/dist/checks/rules/max/function-lines.d.ts +6 -0
  94. package/dist/checks/rules/max/function-lines.d.ts.map +1 -0
  95. package/dist/checks/rules/{max-function-lines.js → max/function-lines.js} +79 -61
  96. package/dist/checks/rules/max/function-lines.js.map +1 -0
  97. package/dist/checks/rules/remove-comments.d.ts +7 -0
  98. package/dist/checks/rules/remove-comments.d.ts.map +1 -0
  99. package/dist/checks/rules/remove-comments.js +67 -0
  100. package/dist/checks/rules/remove-comments.js.map +1 -0
  101. package/dist/checks/types.d.ts +30 -2
  102. package/dist/checks/types.d.ts.map +1 -1
  103. package/dist/cli/run-cli.d.ts.map +1 -1
  104. package/dist/cli/run-cli.js +123 -36
  105. package/dist/cli/run-cli.js.map +1 -1
  106. package/dist/config/index.d.ts.map +1 -1
  107. package/dist/config/index.js +68 -62
  108. package/dist/config/index.js.map +1 -1
  109. package/dist/config/{normalize-check-options.d.ts → normalize/check-options.d.ts} +2 -2
  110. package/dist/config/normalize/check-options.d.ts.map +1 -0
  111. package/dist/config/{normalize-check-options.js → normalize/check-options.js} +7 -5
  112. package/dist/config/normalize/check-options.js.map +1 -0
  113. package/dist/config/normalize/rule-options.d.ts +31 -0
  114. package/dist/config/normalize/rule-options.d.ts.map +1 -0
  115. package/dist/config/{normalize-rule-options.js → normalize/rule-options.js} +51 -4
  116. package/dist/config/normalize/rule-options.js.map +1 -0
  117. package/dist/config/{normalize-source-options.d.ts → normalize/source-options.d.ts} +2 -2
  118. package/dist/config/normalize/source-options.d.ts.map +1 -0
  119. package/dist/config/{normalize-source-options.js → normalize/source-options.js} +5 -5
  120. package/dist/config/normalize/source-options.js.map +1 -0
  121. package/dist/config/{normalize-sync-imports-options.d.ts → normalize/sync-imports-options.d.ts} +2 -2
  122. package/dist/config/normalize/sync-imports-options.d.ts.map +1 -0
  123. package/dist/config/{normalize-sync-imports-options.js → normalize/sync-imports-options.js} +5 -5
  124. package/dist/config/normalize/sync-imports-options.js.map +1 -0
  125. package/dist/imports/check-sync-imports.js +1 -1
  126. package/dist/imports/check-sync-imports.js.map +1 -1
  127. package/dist/imports/scan.d.ts.map +1 -1
  128. package/dist/imports/scan.js +10 -0
  129. package/dist/imports/scan.js.map +1 -1
  130. package/dist/imports/sync-imports.d.ts.map +1 -1
  131. package/dist/imports/sync-imports.js +59 -47
  132. package/dist/imports/sync-imports.js.map +1 -1
  133. package/dist/index.d.ts +4 -3
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +3 -2
  136. package/dist/index.js.map +1 -1
  137. package/dist/native/native.d.ts +18 -0
  138. package/dist/native/native.d.ts.map +1 -0
  139. package/dist/native/native.js +78 -0
  140. package/dist/native/native.js.map +1 -0
  141. package/dist/run.d.ts.map +1 -1
  142. package/dist/run.js +2 -0
  143. package/dist/run.js.map +1 -1
  144. package/dist/runtime/gate-command.d.ts +13 -0
  145. package/dist/runtime/gate-command.d.ts.map +1 -0
  146. package/dist/runtime/gate-command.js +51 -0
  147. package/dist/runtime/gate-command.js.map +1 -0
  148. package/dist/runtime/{runtime-imports-sync.d.ts → imports-sync.d.ts} +1 -1
  149. package/dist/runtime/imports-sync.d.ts.map +1 -0
  150. package/dist/runtime/{runtime-imports-sync.js → imports-sync.js} +33 -21
  151. package/dist/runtime/imports-sync.js.map +1 -0
  152. package/dist/shared/discipline-types.d.ts +1 -1
  153. package/dist/shared/discipline-types.d.ts.map +1 -1
  154. package/dist/shared/languages.d.ts +2 -1
  155. package/dist/shared/languages.d.ts.map +1 -1
  156. package/dist/shared/languages.js +4 -1
  157. package/dist/shared/languages.js.map +1 -1
  158. package/dist/shared/logging.d.ts.map +1 -1
  159. package/dist/shared/logging.js +28 -13
  160. package/dist/shared/logging.js.map +1 -1
  161. package/dist/shared/utils.d.ts +4 -4
  162. package/dist/shared/utils.d.ts.map +1 -1
  163. package/dist/shared/utils.js +4 -4
  164. package/dist/shared/utils.js.map +1 -1
  165. package/native/darwin-arm64.node +0 -0
  166. package/native/darwin-x64.node +0 -0
  167. package/native/linux-arm64-gnu.node +0 -0
  168. package/native/linux-x64-gnu.node +0 -0
  169. package/package.json +11 -4
  170. package/dist/checks/rules/dry.d.ts +0 -7
  171. package/dist/checks/rules/dry.d.ts.map +0 -1
  172. package/dist/checks/rules/dry.js +0 -905
  173. package/dist/checks/rules/dry.js.map +0 -1
  174. package/dist/checks/rules/folderize-compound-files.d.ts +0 -6
  175. package/dist/checks/rules/folderize-compound-files.d.ts.map +0 -1
  176. package/dist/checks/rules/folderize-compound-files.js.map +0 -1
  177. package/dist/checks/rules/folderize-plan.d.ts.map +0 -1
  178. package/dist/checks/rules/folderize-plan.js.map +0 -1
  179. package/dist/checks/rules/max-file-lines.d.ts +0 -6
  180. package/dist/checks/rules/max-file-lines.d.ts.map +0 -1
  181. package/dist/checks/rules/max-file-lines.js.map +0 -1
  182. package/dist/checks/rules/max-function-lines.d.ts +0 -6
  183. package/dist/checks/rules/max-function-lines.d.ts.map +0 -1
  184. package/dist/checks/rules/max-function-lines.js.map +0 -1
  185. package/dist/config/normalize-check-options.d.ts.map +0 -1
  186. package/dist/config/normalize-check-options.js.map +0 -1
  187. package/dist/config/normalize-rule-options.d.ts +0 -29
  188. package/dist/config/normalize-rule-options.d.ts.map +0 -1
  189. package/dist/config/normalize-rule-options.js.map +0 -1
  190. package/dist/config/normalize-source-options.d.ts.map +0 -1
  191. package/dist/config/normalize-source-options.js.map +0 -1
  192. package/dist/config/normalize-sync-imports-options.d.ts.map +0 -1
  193. package/dist/config/normalize-sync-imports-options.js.map +0 -1
  194. package/dist/runtime/runtime-imports-sync.d.ts.map +0 -1
  195. package/dist/runtime/runtime-imports-sync.js.map +0 -1
@@ -1,8 +1,9 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import ts from "typescript";
4
- import { parseSource } from "../../imports/module-specifiers.js";
5
- import { isGoExtension, isRustExtension, isTypeScriptFamilyExtension, supportsMaxFunctionLines } from "../../shared/languages.js";
4
+ import { loadNativeBinding } from "../../../native/native.js";
5
+ import { parseSource } from "../../../imports/module-specifiers.js";
6
+ import { isGoExtension, isRustExtension, isTypeScriptFamilyExtension, supportsMaxFunctionLines } from "../../../shared/languages.js";
6
7
  function isFunctionLikeWithBody(node) {
7
8
  return ((ts.isFunctionDeclaration(node) && node.body !== undefined)
8
9
  || (ts.isMethodDeclaration(node) && node.body !== undefined)
@@ -71,46 +72,47 @@ function collectTypeScriptFunctionDescriptors(sourceFile) {
71
72
  visit(sourceFile);
72
73
  return descriptors;
73
74
  }
75
+ function updateStripState(state, character) {
76
+ if (state.escaped) {
77
+ state.escaped = false;
78
+ return;
79
+ }
80
+ if ((state.inSingle || state.inDouble || state.inTemplate) && character === "\\") {
81
+ state.escaped = true;
82
+ return;
83
+ }
84
+ if (!state.inDouble && !state.inTemplate && character === "'")
85
+ state.inSingle = !state.inSingle;
86
+ if (!state.inSingle && !state.inTemplate && character === "\"")
87
+ state.inDouble = !state.inDouble;
88
+ if (!state.inSingle && !state.inDouble && character === "`")
89
+ state.inTemplate = !state.inTemplate;
90
+ }
91
+ function isInString(state) {
92
+ return state.inSingle || state.inDouble || state.inTemplate;
93
+ }
74
94
  function stripCommentsAndStrings(value) {
75
95
  let result = "";
76
- let inSingle = false;
77
- let inDouble = false;
78
- let inTemplate = false;
79
- let escaped = false;
96
+ const state = {
97
+ escaped: false,
98
+ inDouble: false,
99
+ inSingle: false,
100
+ inTemplate: false,
101
+ };
80
102
  for (let index = 0; index < value.length; index += 1) {
81
- const character = value[index];
103
+ const character = value[index] ?? "";
82
104
  const nextCharacter = value[index + 1];
83
- if (!inSingle && !inDouble && !inTemplate && character === "/" && nextCharacter === "/") {
105
+ if (!isInString(state) && character === "/" && nextCharacter === "/")
84
106
  break;
85
- }
86
- if (!inSingle && !inDouble && !inTemplate && character === "/" && nextCharacter === "*") {
107
+ if (!isInString(state) && character === "/" && nextCharacter === "*") {
87
108
  const closingIndex = value.indexOf("*/", index + 2);
88
109
  if (closingIndex < 0)
89
110
  break;
90
111
  index = closingIndex + 1;
91
112
  continue;
92
113
  }
93
- if (escaped) {
94
- escaped = false;
95
- continue;
96
- }
97
- if ((inSingle || inDouble || inTemplate) && character === "\\") {
98
- escaped = true;
99
- continue;
100
- }
101
- if (!inDouble && !inTemplate && character === "'") {
102
- inSingle = !inSingle;
103
- continue;
104
- }
105
- if (!inSingle && !inTemplate && character === "\"") {
106
- inDouble = !inDouble;
107
- continue;
108
- }
109
- if (!inSingle && !inDouble && character === "`") {
110
- inTemplate = !inTemplate;
111
- continue;
112
- }
113
- if (!inSingle && !inDouble && !inTemplate) {
114
+ updateStripState(state, character);
115
+ if (!isInString(state) && !state.escaped) {
114
116
  result += character;
115
117
  }
116
118
  }
@@ -127,6 +129,24 @@ function countBraceDelta(value) {
127
129
  }
128
130
  return delta;
129
131
  }
132
+ function createPendingBlockFunction() {
133
+ return {
134
+ braceDepth: 0,
135
+ header: "",
136
+ kind: "function",
137
+ name: "",
138
+ startLine: 0,
139
+ };
140
+ }
141
+ function createBlockFunctionDescriptor(pending, endLine) {
142
+ return {
143
+ kind: pending.kind,
144
+ lineCount: Math.max(1, endLine - pending.startLine + 1),
145
+ name: pending.name || "anonymous",
146
+ startLine: pending.startLine,
147
+ endLine,
148
+ };
149
+ }
130
150
  function collectBlockFunctionDescriptors(text, extension) {
131
151
  const descriptors = [];
132
152
  const lines = text.split(/\r?\n/);
@@ -137,46 +157,31 @@ function collectBlockFunctionDescriptors(text, extension) {
137
157
  const headerNamePattern = isGo
138
158
  ? /^\s*func(?:\s*\([^)]*\))?\s+([A-Za-z_]\w*)/u
139
159
  : /\bfn\s+([A-Za-z_]\w*)/u;
140
- let pendingHeader = "";
141
- let pendingStartLine = 0;
142
- let pendingBraceDepth = 0;
143
- let pendingName = "";
144
- let pendingKind = "function";
160
+ let pending = createPendingBlockFunction();
145
161
  for (let index = 0; index < lines.length; index += 1) {
146
162
  const line = lines[index] ?? "";
147
- if (!pendingHeader) {
163
+ if (!pending.header) {
148
164
  if (!headerStartPattern.test(line))
149
165
  continue;
150
- pendingHeader = line;
151
- pendingStartLine = index + 1;
152
- pendingKind = isGo && /\bfunc\s*\(/u.test(line) ? "method" : "function";
153
- pendingName = headerNamePattern.exec(line)?.[1] ?? "anonymous";
166
+ pending.header = line;
167
+ pending.startLine = index + 1;
168
+ pending.kind = isGo && /\bfunc\s*\(/u.test(line) ? "method" : "function";
169
+ pending.name = headerNamePattern.exec(line)?.[1] ?? "anonymous";
154
170
  }
155
171
  else {
156
- pendingHeader = `${pendingHeader}\n${line}`;
157
- if (!pendingName || pendingName === "anonymous") {
158
- pendingName = headerNamePattern.exec(pendingHeader)?.[1] ?? pendingName;
172
+ pending.header = `${pending.header}\n${line}`;
173
+ if (!pending.name || pending.name === "anonymous") {
174
+ pending.name = headerNamePattern.exec(pending.header)?.[1] ?? pending.name;
159
175
  }
160
176
  }
161
- if (pendingBraceDepth === 0 && !stripCommentsAndStrings(pendingHeader).includes("{")) {
177
+ if (pending.braceDepth === 0 && !stripCommentsAndStrings(pending.header).includes("{")) {
162
178
  continue;
163
179
  }
164
- pendingBraceDepth += countBraceDelta(line);
165
- if (pendingBraceDepth > 0) {
180
+ pending.braceDepth += countBraceDelta(line);
181
+ if (pending.braceDepth > 0)
166
182
  continue;
167
- }
168
- descriptors.push({
169
- kind: pendingKind,
170
- lineCount: Math.max(1, (index + 1) - pendingStartLine + 1),
171
- name: pendingName || "anonymous",
172
- startLine: pendingStartLine,
173
- endLine: index + 1,
174
- });
175
- pendingHeader = "";
176
- pendingStartLine = 0;
177
- pendingBraceDepth = 0;
178
- pendingName = "";
179
- pendingKind = "function";
183
+ descriptors.push(createBlockFunctionDescriptor(pending, index + 1));
184
+ pending = createPendingBlockFunction();
180
185
  }
181
186
  return descriptors;
182
187
  }
@@ -184,7 +189,20 @@ async function runMaxFunctionLinesRule(sourceFiles, options) {
184
189
  if (!options.rules.maxFunctionLines)
185
190
  return [];
186
191
  const violations = [];
192
+ const native = loadNativeBinding();
193
+ const nativeHandledPaths = new Set();
194
+ if (native) {
195
+ const nativeResult = JSON.parse(native.runMaxBlockFunctionLinesRule(JSON.stringify({
196
+ sourceFiles,
197
+ max: options.rules.maxFunctionLines.max,
198
+ })));
199
+ violations.push(...nativeResult.violations);
200
+ for (const filePath of nativeResult.handledPaths)
201
+ nativeHandledPaths.add(filePath);
202
+ }
187
203
  for (const file of sourceFiles) {
204
+ if (nativeHandledPaths.has(file.absolutePath))
205
+ continue;
188
206
  if (!supportsMaxFunctionLines(file.extension))
189
207
  continue;
190
208
  const text = await fs.readFile(file.absolutePath, "utf8");
@@ -216,4 +234,4 @@ async function runMaxFunctionLinesRule(sourceFiles, options) {
216
234
  return violations;
217
235
  }
218
236
  export { runMaxFunctionLinesRule };
219
- //# sourceMappingURL=max-function-lines.js.map
237
+ //# sourceMappingURL=function-lines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function-lines.js","sourceRoot":"","sources":["../../../../src/checks/rules/max/function-lines.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ScannedSourceFile } from "../../imports/types.js";
2
+ import type { CodeDisciplineViolation } from "../../shared/discipline-types.js";
3
+ import type { FixCodeDisciplineRuleResult, NormalizedCheckCodeDisciplineOptions } from "../types.js";
4
+ declare function collectRemoveCommentsViolations(sourceFiles: ScannedSourceFile[]): Promise<CodeDisciplineViolation[]>;
5
+ declare function fixRemoveCommentsRule(sourceFiles: ScannedSourceFile[], _options: NormalizedCheckCodeDisciplineOptions): Promise<FixCodeDisciplineRuleResult>;
6
+ export { collectRemoveCommentsViolations, fixRemoveCommentsRule };
7
+ //# sourceMappingURL=remove-comments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-comments.d.ts","sourceRoot":"","sources":["../../../src/checks/rules/remove-comments.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAGhF,OAAO,KAAK,EAAE,2BAA2B,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAC;AAsBrG,iBAAe,+BAA+B,CAC5C,WAAW,EAAE,iBAAiB,EAAE,GAC/B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAwBpC;AAED,iBAAe,qBAAqB,CAClC,WAAW,EAAE,iBAAiB,EAAE,EAChC,QAAQ,EAAE,oCAAoC,GAC7C,OAAO,CAAC,2BAA2B,CAAC,CA4BtC;AAED,OAAO,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,67 @@
1
+ import fs from "node:fs/promises";
2
+ import { loadNativeBinding } from "../../native/native.js";
3
+ import { supportsRemoveComments } from "../../shared/languages.js";
4
+ import { stripComments } from "./comments/stripping.js";
5
+ function createRemoveCommentsViolation(args) {
6
+ return {
7
+ rule: "remove-comments",
8
+ fix: true,
9
+ filePath: args.filePath,
10
+ message: `file contains ${args.commentCount} removable comment(s)`,
11
+ details: {
12
+ commentCount: args.commentCount,
13
+ lineComments: args.lineComments,
14
+ blockComments: args.blockComments,
15
+ },
16
+ };
17
+ }
18
+ async function collectRemoveCommentsViolations(sourceFiles) {
19
+ const native = loadNativeBinding();
20
+ if (native) {
21
+ return JSON.parse(native.collectRemoveCommentsViolations(JSON.stringify({ sourceFiles })));
22
+ }
23
+ const violations = [];
24
+ for (const file of sourceFiles) {
25
+ if (!supportsRemoveComments(file.extension))
26
+ continue;
27
+ const sourceText = await fs.readFile(file.absolutePath, "utf8");
28
+ const result = stripComments(sourceText, file.extension);
29
+ if (!result.changed)
30
+ continue;
31
+ violations.push(createRemoveCommentsViolation({
32
+ filePath: file.relativeFromProjectRoot,
33
+ commentCount: result.commentCount,
34
+ lineComments: result.lineComments,
35
+ blockComments: result.blockComments,
36
+ }));
37
+ }
38
+ return violations;
39
+ }
40
+ async function fixRemoveCommentsRule(sourceFiles, _options) {
41
+ const native = loadNativeBinding();
42
+ if (native) {
43
+ return JSON.parse(native.fixRemoveCommentsRule(JSON.stringify({ sourceFiles })));
44
+ }
45
+ let rewrittenFiles = 0;
46
+ let removedComments = 0;
47
+ for (const file of sourceFiles) {
48
+ if (!supportsRemoveComments(file.extension))
49
+ continue;
50
+ const sourceText = await fs.readFile(file.absolutePath, "utf8");
51
+ const result = stripComments(sourceText, file.extension);
52
+ if (!result.changed)
53
+ continue;
54
+ await fs.writeFile(file.absolutePath, result.text, "utf8");
55
+ rewrittenFiles += 1;
56
+ removedComments += result.commentCount;
57
+ }
58
+ return {
59
+ ok: true,
60
+ violationCount: 0,
61
+ violations: [],
62
+ rewritten_files: rewrittenFiles,
63
+ removed_comments: removedComments,
64
+ };
65
+ }
66
+ export { collectRemoveCommentsViolations, fixRemoveCommentsRule };
67
+ //# sourceMappingURL=remove-comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-comments.js","sourceRoot":"","sources":["../../../src/checks/rules/remove-comments.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { LoggingOptions } from "../shared/logging-types.js";
2
2
  import type { ExcludeDirsOptions, PackageJsonImportsSyncOptions, SourceScanOptions, SyncImportsRuleOptions } from "../imports/types.js";
3
3
  import type { CodeDisciplineResult, CodeDisciplineRuleName, CodeDisciplineViolation } from "../shared/discipline-types.js";
4
4
  type CodeDisciplineRuleSlug = CodeDisciplineRuleName;
5
- type FixableRuleSlug = "folderize-compound-files" | "sync-imports" | "dry";
5
+ type FixableRuleSlug = "folderize-compound-files" | "sync-imports" | "remove-comments" | "dry";
6
6
  type CodeDisciplineMode = "check" | "fix";
7
7
  type CodeDisciplineRuntimeMode = CodeDisciplineMode;
8
8
  type MaxFileLinesRuleOptions = {
@@ -11,9 +11,25 @@ type MaxFileLinesRuleOptions = {
11
11
  type MaxFunctionLinesRuleOptions = {
12
12
  max?: number;
13
13
  };
14
+ type PackedCodeGuardOptions = {
15
+ minPackedLineColumns?: number;
16
+ maxSemicolonsPerLine?: number;
17
+ maxStructuralTokensPerLine?: number;
18
+ maxPackedFunctionLines?: number;
19
+ maxPackedFunctionStatements?: number;
20
+ minPackedFunctionCharacters?: number;
21
+ maxPackedFileNonEmptyLines?: number;
22
+ minPackedFileCharacters?: number;
23
+ minPackedFileStructuralTokens?: number;
24
+ };
25
+ type EvasionGuardsOptions = boolean | {
26
+ packedCode?: boolean | PackedCodeGuardOptions;
27
+ runtimeCodeHiding?: boolean;
28
+ };
14
29
  type FolderizeCompoundFilesRuleOptions = {
15
30
  separators?: string[];
16
31
  };
32
+ type RemoveCommentsRuleOptions = Record<string, never>;
17
33
  type DryHelperReference = {
18
34
  from: string;
19
35
  exportName: string;
@@ -31,6 +47,7 @@ type CodeDisciplineRules = {
31
47
  maxFunctionLines?: MaxFunctionLinesRuleOptions;
32
48
  folderizeCompoundFiles?: FolderizeCompoundFilesRuleOptions;
33
49
  syncImports?: CodeDisciplineSyncImportsRuleOptions;
50
+ removeComments?: RemoveCommentsRuleOptions;
34
51
  dry?: DryRuleOptions;
35
52
  };
36
53
  type TsconfigPathsNormalizeMode = "relative-dot-prefix" | "strip-dot-prefix" | "none";
@@ -63,6 +80,7 @@ type CheckCodeDisciplineOptions = {
63
80
  gitignorePath?: string;
64
81
  logging?: LoggingOptions;
65
82
  rules?: CodeDisciplineRules;
83
+ evasionGuards?: EvasionGuardsOptions;
66
84
  lifecycle?: CodeDisciplineLifecycleHooks;
67
85
  tsconfigPaths?: CodeDisciplineTsconfigPathsOptions;
68
86
  onlyRules?: CodeDisciplineRuleSlug[];
@@ -83,6 +101,12 @@ type NormalizedFolderizeCompoundFilesRule = {
83
101
  type NormalizedDryRule = {
84
102
  helpers: DryHelperReference[];
85
103
  };
104
+ type NormalizedRemoveCommentsRule = Record<string, never>;
105
+ type NormalizedPackedCodeGuardOptions = Required<PackedCodeGuardOptions>;
106
+ type NormalizedEvasionGuardsOptions = {
107
+ packedCode?: NormalizedPackedCodeGuardOptions;
108
+ runtimeCodeHiding: boolean;
109
+ };
86
110
  type NormalizedCheckCodeDisciplineOptions = SourceScanOptions & {
87
111
  configPath?: string;
88
112
  sourceRootRelative: string;
@@ -93,8 +117,10 @@ type NormalizedCheckCodeDisciplineOptions = SourceScanOptions & {
93
117
  maxFunctionLines?: NormalizedMaxFunctionLinesRule;
94
118
  folderizeCompoundFiles?: NormalizedFolderizeCompoundFilesRule;
95
119
  syncImports?: CodeDisciplineSyncImportsRuleOptions;
120
+ removeComments?: NormalizedRemoveCommentsRule;
96
121
  dry?: NormalizedDryRule;
97
122
  };
123
+ evasionGuards?: NormalizedEvasionGuardsOptions;
98
124
  };
99
125
  type CheckCodeDisciplineResult = CodeDisciplineResult;
100
126
  type FixCodeDisciplineRuleResult = {
@@ -104,6 +130,7 @@ type FixCodeDisciplineRuleResult = {
104
130
  moved_files?: number;
105
131
  rewritten_files?: number;
106
132
  rewritten_imports?: number;
133
+ removed_comments?: number;
107
134
  removed_duplicates?: number;
108
135
  added_imports?: number;
109
136
  };
@@ -111,7 +138,8 @@ type FixCodeDisciplineResult = CodeDisciplineResult & {
111
138
  moved_files: number;
112
139
  rewritten_files: number;
113
140
  rewritten_imports: number;
141
+ removed_comments: number;
114
142
  ruleResults: Partial<Record<FixableRuleSlug, FixCodeDisciplineRuleResult>>;
115
143
  };
116
- export type { CheckCodeDisciplineOptions, CheckCodeDisciplineResult, CodeDisciplineConfig, CodeDisciplineLifecycleContext, CodeDisciplineLifecycleHookResult, CodeDisciplineLifecycleHooks, CodeDisciplineMode, CodeDisciplinePackageJsonImportsOptions, CodeDisciplineRuleSlug, CodeDisciplineRuntimeMode, CodeDisciplineRules, CodeDisciplineSyncImportsRuleOptions, CodeDisciplineTsconfigPathsOptions, DryHelperReference, DryRuleOptions, FixableRuleSlug, FixCodeDisciplineOptions, FixCodeDisciplineResult, FixCodeDisciplineRuleResult, FolderizeCompoundFilesRuleOptions, MaxFileLinesRuleOptions, MaxFunctionLinesRuleOptions, NormalizedCheckCodeDisciplineOptions, NormalizedDryRule, NormalizedFolderizeCompoundFilesRule, NormalizedMaxFileLinesRule, NormalizedMaxFunctionLinesRule, TsconfigPathsNormalizeMode, };
144
+ export type { CheckCodeDisciplineOptions, CheckCodeDisciplineResult, CodeDisciplineConfig, CodeDisciplineLifecycleContext, CodeDisciplineLifecycleHookResult, CodeDisciplineLifecycleHooks, CodeDisciplineMode, CodeDisciplinePackageJsonImportsOptions, CodeDisciplineRuleSlug, CodeDisciplineRuntimeMode, CodeDisciplineRules, CodeDisciplineSyncImportsRuleOptions, CodeDisciplineTsconfigPathsOptions, DryHelperReference, DryRuleOptions, EvasionGuardsOptions, FixableRuleSlug, FixCodeDisciplineOptions, FixCodeDisciplineResult, FixCodeDisciplineRuleResult, FolderizeCompoundFilesRuleOptions, MaxFileLinesRuleOptions, MaxFunctionLinesRuleOptions, RemoveCommentsRuleOptions, NormalizedCheckCodeDisciplineOptions, NormalizedDryRule, NormalizedEvasionGuardsOptions, NormalizedFolderizeCompoundFilesRule, NormalizedMaxFileLinesRule, NormalizedMaxFunctionLinesRule, NormalizedPackedCodeGuardOptions, NormalizedRemoveCommentsRule, PackedCodeGuardOptions, TsconfigPathsNormalizeMode, };
117
145
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/checks/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/checks/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/cli/run-cli.ts"],"names":[],"mappings":";AAWA,KAAK,aAAa,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AA+GF,iBAAe,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAsExF;AAOD,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/cli/run-cli.ts"],"names":[],"mappings":";AAYA,KAAK,aAAa,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AA6QF,iBAAe,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CA8CxF;AAOD,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
@@ -3,7 +3,37 @@ import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { codeDiscipline } from "../run.js";
5
5
  import { loadResolvedCodeDisciplineConfig } from "../config/index.js";
6
+ import { runGatedCommand } from "../runtime/gate-command.js";
6
7
  import { isDirectExecution } from "../shared/utils.js";
8
+ const LOADING_FRAMES = ["-", "\\", "|", "/"];
9
+ function createLoadingAnimation(label, enabled) {
10
+ if (!enabled) {
11
+ return {
12
+ stop() { },
13
+ };
14
+ }
15
+ let frameIndex = 0;
16
+ process.stderr.write(`${label} ${LOADING_FRAMES[frameIndex]}`);
17
+ const timer = setInterval(() => {
18
+ frameIndex = (frameIndex + 1) % LOADING_FRAMES.length;
19
+ process.stderr.write(`\r${label} ${LOADING_FRAMES[frameIndex]}`);
20
+ }, 120);
21
+ return {
22
+ stop() {
23
+ clearInterval(timer);
24
+ process.stderr.write(`\r${" ".repeat(label.length + 2)}\r`);
25
+ },
26
+ };
27
+ }
28
+ async function withLoadingAnimation(label, enabled, task) {
29
+ const animation = createLoadingAnimation(label, enabled);
30
+ try {
31
+ return await task();
32
+ }
33
+ finally {
34
+ animation.stop();
35
+ }
36
+ }
7
37
  function padDatePart(value) {
8
38
  return String(value).padStart(2, "0");
9
39
  }
@@ -19,28 +49,39 @@ function createSavedReportFilename(now) {
19
49
  function renderHelp() {
20
50
  return [
21
51
  "Usage: code-discipline <command> [rule-slug...] [save] [--config <path>]",
52
+ " code-discipline gate [rule-slug...] [save] [--config <path>] -- <command> [args...]",
22
53
  "",
23
54
  "Commands:",
24
55
  " check run read-only discipline validation",
25
56
  " fix apply configured discipline fixes",
57
+ " gate block a child command when discipline violations exist",
26
58
  " save optional token that writes the run output to a timestamped cd-report-YYYY-MM-DD-HH-mm-ss.txt file",
27
59
  "",
28
60
  "Rule Selectors:",
29
61
  " check <rule-slug>... narrows validation to the selected configured rules",
30
62
  " fix <rule-slug>... narrows fixes to the selected configured fixable rules",
63
+ " gate <rule-slug>... narrows the pre-start validation before the child command runs",
31
64
  "",
32
65
  "Config:",
33
66
  " --config <path> optionally points to a module that default-exports the config object.",
34
67
  " If omitted, code-discipline will auto-discover a config module in the current project root.",
35
68
  "",
69
+ "Gate:",
70
+ " gate requires -- before the child command so code-discipline can separate its own arguments.",
71
+ "",
36
72
  ].join("\n");
37
73
  }
38
74
  function parseArgs(args) {
39
75
  let configPath;
40
76
  let saveOutput = false;
41
77
  const selectors = [];
78
+ let commandArgs = [];
42
79
  for (let index = 0; index < args.length; index += 1) {
43
80
  const arg = args[index];
81
+ if (arg === "--") {
82
+ commandArgs = args.slice(index + 1);
83
+ break;
84
+ }
44
85
  if (arg === "--config") {
45
86
  const value = args[index + 1];
46
87
  if (!value) {
@@ -63,7 +104,7 @@ function parseArgs(args) {
63
104
  }
64
105
  selectors.push(arg);
65
106
  }
66
- return { configPath, saveOutput, selectors };
107
+ return { configPath, saveOutput, selectors, commandArgs };
67
108
  }
68
109
  function formatViolation(violation) {
69
110
  const suggested = violation.suggestedPath ? ` suggested=${violation.suggestedPath}` : "";
@@ -81,7 +122,7 @@ function renderCheckOutput(violations, violationCount) {
81
122
  function renderFixOutput(args) {
82
123
  return [
83
124
  ...args.violations.map((violation) => `${formatViolation(violation)}\n`),
84
- `Fix summary: moved ${args.movedFiles}, rewritten files ${args.rewrittenFiles}, rewritten imports ${args.rewrittenImports}, remaining violations ${args.violationCount}.\n`,
125
+ `Fix summary: moved ${args.movedFiles}, rewritten files ${args.rewrittenFiles}, rewritten imports ${args.rewrittenImports}, removed comments ${args.removedComments}, remaining violations ${args.violationCount}.\n`,
85
126
  ].join("");
86
127
  }
87
128
  async function saveCliOutput(cwd, reportText, now) {
@@ -90,11 +131,77 @@ async function saveCliOutput(cwd, reportText, now) {
90
131
  await fs.writeFile(reportPath, reportText, "utf8");
91
132
  return reportFilename;
92
133
  }
134
+ async function writeSavedReport(args) {
135
+ if (!args.saveOutput)
136
+ return;
137
+ const reportFilename = await saveCliOutput(args.cwd, args.reportText, args.now);
138
+ args.stdout(`Saved report to ${reportFilename}.\n`);
139
+ }
140
+ async function runCheckCommand(args) {
141
+ if (args.parsed.commandArgs.length > 0) {
142
+ throw new Error("Command separator -- is only supported with gate");
143
+ }
144
+ const result = await withLoadingAnimation("Scanning codebase", args.showLoadingAnimation, () => codeDiscipline({
145
+ ...args.config,
146
+ configPath: args.configPath,
147
+ mode: "check",
148
+ onlyRules: args.parsed.selectors,
149
+ projectRoot: args.cwd,
150
+ }));
151
+ const reportText = renderCheckOutput(result.violations, result.violationCount);
152
+ args.stdout(reportText);
153
+ await writeSavedReport({ ...args, reportText, saveOutput: args.parsed.saveOutput });
154
+ return { exitCode: result.ok ? 0 : 1 };
155
+ }
156
+ async function runFixCommand(args) {
157
+ if (args.parsed.commandArgs.length > 0) {
158
+ throw new Error("Command separator -- is only supported with gate");
159
+ }
160
+ const result = await withLoadingAnimation("Fixing codebase", args.showLoadingAnimation, () => codeDiscipline({
161
+ ...args.config,
162
+ configPath: args.configPath,
163
+ mode: "fix",
164
+ onlyRules: args.parsed.selectors,
165
+ projectRoot: args.cwd,
166
+ }));
167
+ const reportText = renderFixOutput({
168
+ movedFiles: result.moved_files,
169
+ rewrittenFiles: result.rewritten_files,
170
+ rewrittenImports: result.rewritten_imports,
171
+ removedComments: result.removed_comments ?? 0,
172
+ violationCount: result.violationCount,
173
+ violations: result.violations,
174
+ });
175
+ args.stdout(reportText);
176
+ await writeSavedReport({ ...args, reportText, saveOutput: args.parsed.saveOutput });
177
+ return { exitCode: result.ok ? 0 : 1 };
178
+ }
179
+ async function runGateCommand(args) {
180
+ if (args.parsed.commandArgs.length === 0) {
181
+ throw new Error("Missing child command after --");
182
+ }
183
+ const result = await withLoadingAnimation("Scanning codebase", args.showLoadingAnimation, () => codeDiscipline({
184
+ ...args.config,
185
+ configPath: args.configPath,
186
+ mode: "check",
187
+ onlyRules: args.parsed.selectors,
188
+ projectRoot: args.cwd,
189
+ }));
190
+ if (!result.ok) {
191
+ const reportText = renderCheckOutput(result.violations, result.violationCount);
192
+ args.stdout(reportText);
193
+ await writeSavedReport({ ...args, reportText, saveOutput: args.parsed.saveOutput });
194
+ return { exitCode: 1 };
195
+ }
196
+ const [childCommand, ...childArgs] = args.parsed.commandArgs;
197
+ return runGatedCommand({ args: childArgs, command: childCommand, cwd: args.cwd });
198
+ }
93
199
  async function runCli(argv, options = {}) {
94
200
  const cwd = options.cwd ?? process.cwd();
95
201
  const now = options.now ?? new Date();
96
202
  const stdout = options.stdout ?? ((text) => process.stdout.write(text));
97
203
  const stderr = options.stderr ?? ((text) => process.stderr.write(text));
204
+ const showLoadingAnimation = !options.stderr && Boolean(process.stderr.isTTY) && !process.env.CI;
98
205
  const [command, ...rest] = argv;
99
206
  if (!command || command === "help" || command === "--help" || command === "-h") {
100
207
  stdout(renderHelp());
@@ -103,43 +210,23 @@ async function runCli(argv, options = {}) {
103
210
  try {
104
211
  const parsed = parseArgs(rest);
105
212
  const { config, configPath } = await loadResolvedCodeDisciplineConfig(cwd, parsed.configPath);
213
+ const commandArgs = {
214
+ config,
215
+ configPath,
216
+ cwd,
217
+ now,
218
+ parsed,
219
+ showLoadingAnimation,
220
+ stdout,
221
+ };
106
222
  if (command === "check") {
107
- const result = await codeDiscipline({
108
- ...config,
109
- configPath,
110
- mode: "check",
111
- onlyRules: parsed.selectors,
112
- projectRoot: cwd,
113
- });
114
- const reportText = renderCheckOutput(result.violations, result.violationCount);
115
- stdout(reportText);
116
- if (parsed.saveOutput) {
117
- const reportFilename = await saveCliOutput(cwd, reportText, now);
118
- stdout(`Saved report to ${reportFilename}.\n`);
119
- }
120
- return { exitCode: result.ok ? 0 : 1 };
223
+ return await runCheckCommand(commandArgs);
121
224
  }
122
225
  if (command === "fix") {
123
- const result = await codeDiscipline({
124
- ...config,
125
- configPath,
126
- mode: "fix",
127
- onlyRules: parsed.selectors,
128
- projectRoot: cwd,
129
- });
130
- const reportText = renderFixOutput({
131
- movedFiles: result.moved_files,
132
- rewrittenFiles: result.rewritten_files,
133
- rewrittenImports: result.rewritten_imports,
134
- violationCount: result.violationCount,
135
- violations: result.violations,
136
- });
137
- stdout(reportText);
138
- if (parsed.saveOutput) {
139
- const reportFilename = await saveCliOutput(cwd, reportText, now);
140
- stdout(`Saved report to ${reportFilename}.\n`);
141
- }
142
- return { exitCode: result.ok ? 0 : 1 };
226
+ return await runFixCommand(commandArgs);
227
+ }
228
+ if (command === "gate") {
229
+ return await runGateCommand(commandArgs);
143
230
  }
144
231
  stderr(`Unknown command: ${command}\n`);
145
232
  stderr(renderHelp());