@rcrsr/rill-cli 0.7.2 → 0.8.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 (57) hide show
  1. package/dist/cli-shared.d.ts.map +1 -1
  2. package/dist/cli-shared.js +3 -1
  3. package/dist/cli-shared.js.map +1 -1
  4. package/package.json +16 -1
  5. package/src/check/config.ts +0 -202
  6. package/src/check/fixer.ts +0 -174
  7. package/src/check/index.ts +0 -39
  8. package/src/check/rules/anti-patterns.ts +0 -585
  9. package/src/check/rules/closures.ts +0 -445
  10. package/src/check/rules/collections.ts +0 -437
  11. package/src/check/rules/conditionals.ts +0 -155
  12. package/src/check/rules/flow.ts +0 -262
  13. package/src/check/rules/formatting.ts +0 -811
  14. package/src/check/rules/helpers.ts +0 -89
  15. package/src/check/rules/index.ts +0 -140
  16. package/src/check/rules/loops.ts +0 -372
  17. package/src/check/rules/naming.ts +0 -242
  18. package/src/check/rules/strings.ts +0 -104
  19. package/src/check/rules/types.ts +0 -213
  20. package/src/check/types.ts +0 -163
  21. package/src/check/validator.ts +0 -136
  22. package/src/check/visitor.ts +0 -338
  23. package/src/cli-check.ts +0 -456
  24. package/src/cli-error-enrichment.ts +0 -274
  25. package/src/cli-error-formatter.ts +0 -313
  26. package/src/cli-eval.ts +0 -145
  27. package/src/cli-exec.ts +0 -408
  28. package/src/cli-explain.ts +0 -76
  29. package/src/cli-lsp-diagnostic.ts +0 -132
  30. package/src/cli-module-loader.ts +0 -101
  31. package/src/cli-shared.ts +0 -187
  32. package/tests/check/cli-check.test.ts +0 -189
  33. package/tests/check/config.test.ts +0 -350
  34. package/tests/check/fixer.test.ts +0 -373
  35. package/tests/check/format-diagnostics.test.ts +0 -327
  36. package/tests/check/rules/anti-patterns.test.ts +0 -467
  37. package/tests/check/rules/closures.test.ts +0 -192
  38. package/tests/check/rules/collections.test.ts +0 -380
  39. package/tests/check/rules/conditionals.test.ts +0 -185
  40. package/tests/check/rules/flow.test.ts +0 -250
  41. package/tests/check/rules/formatting.test.ts +0 -755
  42. package/tests/check/rules/loops.test.ts +0 -334
  43. package/tests/check/rules/naming.test.ts +0 -336
  44. package/tests/check/rules/strings.test.ts +0 -129
  45. package/tests/check/rules/types.test.ts +0 -233
  46. package/tests/check/validator.test.ts +0 -444
  47. package/tests/check/visitor.test.ts +0 -171
  48. package/tests/cli/check.test.ts +0 -801
  49. package/tests/cli/error-enrichment.test.ts +0 -510
  50. package/tests/cli/error-formatter.test.ts +0 -631
  51. package/tests/cli/eval.test.ts +0 -85
  52. package/tests/cli/exec.test.ts +0 -537
  53. package/tests/cli-explain.test.ts +0 -249
  54. package/tests/cli-lsp-diagnostic.test.ts +0 -202
  55. package/tests/cli-shared.test.ts +0 -439
  56. package/tsconfig.json +0 -9
  57. package/tsconfig.tsbuildinfo +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cli-shared.d.ts","sourceRoot":"","sources":["../src/cli-shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAc,OAAO,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAElC;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAQrD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,KAAK,EACV,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,EAChC,KAAK,CAAC,EAAE,SAAS,GAChB,MAAM,CA6DR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAgCA;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EAAE,GACb;IAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,IAAI,CASrC;AAED;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"cli-shared.d.ts","sourceRoot":"","sources":["../src/cli-shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAA8B,OAAO,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAElC;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CASrD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,KAAK,EACV,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,EAChC,KAAK,CAAC,EAAE,SAAS,GAChB,MAAM,CA6DR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAgCA;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EAAE,GACb;IAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,IAAI,CASrC;AAED;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * CLI Shared Utilities
3
3
  * Common formatting functions for CLI tools
4
4
  */
5
- import { isCallable, VERSION } from '@rcrsr/rill';
5
+ import { isCallable, isRillIterator, VERSION } from '@rcrsr/rill';
6
6
  import { ParseError, RuntimeError } from '@rcrsr/rill';
7
7
  import { LexerError } from '@rcrsr/rill';
8
8
  import { enrichError } from './cli-error-enrichment.js';
@@ -23,6 +23,8 @@ export function formatOutput(value) {
23
23
  }
24
24
  if (isCallable(value))
25
25
  return '[closure]';
26
+ if (isRillIterator(value))
27
+ return '[iterator]';
26
28
  return JSON.stringify(value, null, 2);
27
29
  }
28
30
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"cli-shared.js","sourceRoot":"","sources":["../src/cli-shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-shared.js","sourceRoot":"","sources":["../src/cli-shared.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,17 @@
1
1
  {
2
2
  "name": "@rcrsr/rill-cli",
3
- "version": "0.7.2",
3
+ "version": "0.8.0",
4
4
  "description": "CLI tools for the rill scripting language",
5
5
  "license": "MIT",
6
+ "author": "Andre Bremer",
6
7
  "type": "module",
8
+ "keywords": [
9
+ "rill",
10
+ "cli",
11
+ "scripting",
12
+ "exec",
13
+ "eval"
14
+ ],
7
15
  "bin": {
8
16
  "rill-exec": "./dist/cli-exec.js",
9
17
  "rill-eval": "./dist/cli-eval.js",
@@ -20,11 +28,18 @@
20
28
  "@rcrsr/rill": "workspace:^",
21
29
  "yaml": "^2.8.2"
22
30
  },
31
+ "files": [
32
+ "dist"
33
+ ],
23
34
  "repository": {
24
35
  "type": "git",
25
36
  "url": "git+https://github.com/rcrsr/rill.git",
26
37
  "directory": "packages/cli"
27
38
  },
39
+ "homepage": "https://github.com/rcrsr/rill/tree/main/packages/cli#readme",
40
+ "bugs": {
41
+ "url": "https://github.com/rcrsr/rill/issues"
42
+ },
28
43
  "publishConfig": {
29
44
  "access": "public"
30
45
  }
@@ -1,202 +0,0 @@
1
- /**
2
- * Configuration Loader for rill-check
3
- * Loads and validates .rill-check.json configuration files.
4
- */
5
-
6
- import { readFileSync, existsSync } from 'node:fs';
7
- import { join } from 'node:path';
8
- import type { CheckConfig, RuleState, Severity } from './types.js';
9
- import { VALIDATION_RULES } from './rules/index.js';
10
-
11
- // ============================================================
12
- // CONSTANTS
13
- // ============================================================
14
-
15
- /** Configuration file name */
16
- const CONFIG_FILE_NAME = '.rill-check.json';
17
-
18
- // ============================================================
19
- // DEFAULT CONFIGURATION
20
- // ============================================================
21
-
22
- /**
23
- * Create default configuration with all rules enabled.
24
- * Returns configuration where all known rules are set to 'on'.
25
- */
26
- export function createDefaultConfig(): CheckConfig {
27
- const rules: Record<string, RuleState> = {};
28
- const severity: Record<string, Severity> = {};
29
-
30
- for (const rule of VALIDATION_RULES) {
31
- rules[rule.code] = 'on';
32
- severity[rule.code] = rule.severity;
33
- }
34
-
35
- return { rules, severity };
36
- }
37
-
38
- // ============================================================
39
- // VALIDATION
40
- // ============================================================
41
-
42
- /**
43
- * Validate that a value is a valid RuleState.
44
- */
45
- function isRuleState(value: unknown): value is RuleState {
46
- return value === 'on' || value === 'off' || value === 'warn';
47
- }
48
-
49
- /**
50
- * Validate that a value is a valid Severity.
51
- */
52
- function isSeverity(value: unknown): value is Severity {
53
- return value === 'error' || value === 'warning' || value === 'info';
54
- }
55
-
56
- /**
57
- * Validate configuration structure and values.
58
- * Throws Error if configuration is invalid.
59
- */
60
- function validateConfig(data: unknown): asserts data is {
61
- rules?: Record<string, unknown>;
62
- severity?: Record<string, unknown>;
63
- } {
64
- if (typeof data !== 'object' || data === null || Array.isArray(data)) {
65
- throw new Error('[RILL-C003] Invalid configuration: must be an object');
66
- }
67
-
68
- const config = data as Record<string, unknown>;
69
-
70
- // Validate rules field if present
71
- if ('rules' in config) {
72
- if (
73
- typeof config['rules'] !== 'object' ||
74
- config['rules'] === null ||
75
- Array.isArray(config['rules'])
76
- ) {
77
- throw new Error(
78
- '[RILL-C003] Invalid configuration: rules must be an object'
79
- );
80
- }
81
-
82
- const rules = config['rules'] as Record<string, unknown>;
83
- for (const [code, state] of Object.entries(rules)) {
84
- if (!isRuleState(state)) {
85
- throw new Error(
86
- `[RILL-C003] Invalid configuration: rule ${code} has invalid state "${state}" (must be 'on', 'off', or 'warn')`
87
- );
88
- }
89
- }
90
- }
91
-
92
- // Validate severity field if present
93
- if ('severity' in config) {
94
- if (
95
- typeof config['severity'] !== 'object' ||
96
- config['severity'] === null ||
97
- Array.isArray(config['severity'])
98
- ) {
99
- throw new Error(
100
- '[RILL-C003] Invalid configuration: severity must be an object'
101
- );
102
- }
103
-
104
- const severity = config['severity'] as Record<string, unknown>;
105
- for (const [code, sev] of Object.entries(severity)) {
106
- if (!isSeverity(sev)) {
107
- throw new Error(
108
- `[RILL-C003] Invalid configuration: rule ${code} has invalid severity "${sev}" (must be 'error', 'warning', or 'info')`
109
- );
110
- }
111
- }
112
- }
113
- }
114
-
115
- /**
116
- * Validate that all rule codes in config are known rules.
117
- * Throws Error if unknown rule code found.
118
- */
119
- function validateRuleCodes(config: CheckConfig): void {
120
- const knownRules = new Set(VALIDATION_RULES.map((r) => r.code));
121
-
122
- // Check rules field
123
- for (const code of Object.keys(config.rules)) {
124
- if (!knownRules.has(code)) {
125
- throw new Error(
126
- `[RILL-C003] Invalid configuration: unknown rule ${code}`
127
- );
128
- }
129
- }
130
-
131
- // Check severity field
132
- for (const code of Object.keys(config.severity)) {
133
- if (!knownRules.has(code)) {
134
- throw new Error(
135
- `[RILL-C003] Invalid configuration: unknown rule ${code}`
136
- );
137
- }
138
- }
139
- }
140
-
141
- // ============================================================
142
- // CONFIGURATION LOADING
143
- // ============================================================
144
-
145
- /**
146
- * Load configuration from .rill-check.json in the specified directory.
147
- *
148
- * @param cwd - Directory to search for configuration file
149
- * @returns CheckConfig object, or null if file not found
150
- * @throws Error with "Invalid configuration: {reason}" if JSON is invalid [EC-3]
151
- * @throws Error with "Invalid configuration: unknown rule {code}" if unknown rule [EC-4]
152
- */
153
- export function loadConfig(cwd: string): CheckConfig | null {
154
- const configPath = join(cwd, CONFIG_FILE_NAME);
155
-
156
- // Return null if file not found (not an error)
157
- if (!existsSync(configPath)) {
158
- return null;
159
- }
160
-
161
- let fileContent: string;
162
- try {
163
- fileContent = readFileSync(configPath, 'utf-8');
164
- } catch (err) {
165
- throw new Error(
166
- `[RILL-C003] Invalid configuration: failed to read file (${err instanceof Error ? err.message : String(err)})`
167
- );
168
- }
169
-
170
- // Parse JSON
171
- let parsedData: unknown;
172
- try {
173
- parsedData = JSON.parse(fileContent);
174
- } catch (err) {
175
- throw new Error(
176
- `[RILL-C003] Invalid configuration: invalid JSON (${err instanceof Error ? err.message : String(err)})`
177
- );
178
- }
179
-
180
- // Validate structure
181
- validateConfig(parsedData);
182
-
183
- // Get defaults
184
- const defaults = createDefaultConfig();
185
-
186
- // Merge with defaults (parsedData is validated, so we can safely cast)
187
- const rules = {
188
- ...defaults.rules,
189
- ...(parsedData.rules as Record<string, RuleState> | undefined),
190
- };
191
- const severity = {
192
- ...defaults.severity,
193
- ...(parsedData.severity as Record<string, Severity> | undefined),
194
- };
195
-
196
- const config: CheckConfig = { rules, severity };
197
-
198
- // Validate rule codes
199
- validateRuleCodes(config);
200
-
201
- return config;
202
- }
@@ -1,174 +0,0 @@
1
- /**
2
- * Fix Applier
3
- * Apply automatic fixes to source code with collision detection.
4
- */
5
-
6
- import { parse } from '@rcrsr/rill';
7
- import type { Diagnostic, ValidationContext } from './types.js';
8
-
9
- // ============================================================
10
- // TYPES
11
- // ============================================================
12
-
13
- /**
14
- * Result of applying fixes to source code.
15
- */
16
- export interface ApplyResult {
17
- /** Modified source code with fixes applied */
18
- readonly modified: string;
19
- /** Number of fixes successfully applied */
20
- readonly applied: number;
21
- /** Number of fixes skipped */
22
- readonly skipped: number;
23
- /** Reasons for skipped fixes */
24
- readonly skippedReasons: Array<{ code: string; reason: string }>;
25
- }
26
-
27
- /**
28
- * Internal representation of a fix to apply.
29
- */
30
- interface ApplicableFix {
31
- readonly code: string;
32
- readonly start: number;
33
- readonly end: number;
34
- readonly replacement: string;
35
- }
36
-
37
- // ============================================================
38
- // FIX APPLICATION
39
- // ============================================================
40
-
41
- /**
42
- * Apply automatic fixes to source code.
43
- *
44
- * Constraints:
45
- * - Applies fixes in reverse position order (end to start) to avoid offset shifts
46
- * - Skips fixes where applicable === false
47
- * - Detects collisions (overlapping ranges) and skips with reason
48
- * - Verifies modified source parses successfully
49
- * - Throws if any applied fix creates invalid syntax
50
- *
51
- * @param source - Original source code
52
- * @param diagnostics - Diagnostics with potential fixes
53
- * @param context - Validation context (unused but required by spec)
54
- * @returns ApplyResult with modified source and counts
55
- * @throws Error if applied fixes create invalid syntax [EC-6]
56
- */
57
- export function applyFixes(
58
- source: string,
59
- diagnostics: Diagnostic[],
60
- _context: ValidationContext
61
- ): ApplyResult {
62
- // Filter to diagnostics with fixes
63
- const fixableDiagnostics = diagnostics.filter(
64
- (d) => d.fix !== null && d.fix.applicable
65
- );
66
-
67
- // If no applicable fixes, return original
68
- if (fixableDiagnostics.length === 0) {
69
- return {
70
- modified: source,
71
- applied: 0,
72
- skipped: 0,
73
- skippedReasons: [],
74
- };
75
- }
76
-
77
- // Convert to ApplicableFix with positions
78
- const fixes: ApplicableFix[] = fixableDiagnostics.map((d) => ({
79
- code: d.code,
80
- start: d.fix!.range.start.offset,
81
- end: d.fix!.range.end.offset,
82
- replacement: d.fix!.replacement,
83
- }));
84
-
85
- // Sort fixes by end position (descending) to apply from end to start
86
- // This avoids offset shifts when applying multiple fixes
87
- const sortedFixes = fixes.slice().sort((a, b) => b.end - a.end);
88
-
89
- // Detect collisions and filter to non-overlapping fixes
90
- const { validFixes, skippedReasons } = filterCollisions(sortedFixes);
91
-
92
- // Apply fixes to source
93
- let modified = source;
94
- for (const fix of validFixes) {
95
- const before = modified.slice(0, fix.start);
96
- const after = modified.slice(fix.end);
97
- modified = before + fix.replacement + after;
98
- }
99
-
100
- // Verify modified source parses successfully [EC-6]
101
- try {
102
- parse(modified);
103
- } catch {
104
- throw new Error('Fix would create invalid syntax');
105
- }
106
-
107
- const applied = validFixes.length;
108
- const skipped = sortedFixes.length - applied;
109
-
110
- return {
111
- modified,
112
- applied,
113
- skipped,
114
- skippedReasons,
115
- };
116
- }
117
-
118
- // ============================================================
119
- // COLLISION DETECTION
120
- // ============================================================
121
-
122
- /**
123
- * Filter fixes to remove overlapping ranges.
124
- * Detects collisions where fix ranges overlap [EC-5].
125
- *
126
- * Strategy: Keep first fix in sorted order (end to start),
127
- * skip subsequent fixes that overlap with any kept fix.
128
- *
129
- * @param sortedFixes - Fixes sorted by end position (descending)
130
- * @returns Valid fixes and reasons for skipped fixes
131
- */
132
- function filterCollisions(sortedFixes: ApplicableFix[]): {
133
- validFixes: ApplicableFix[];
134
- skippedReasons: Array<{ code: string; reason: string }>;
135
- } {
136
- const validFixes: ApplicableFix[] = [];
137
- const skippedReasons: Array<{ code: string; reason: string }> = [];
138
-
139
- for (const fix of sortedFixes) {
140
- // Check if this fix overlaps with any already-kept fix
141
- const hasCollision = validFixes.some((kept) => rangesOverlap(fix, kept));
142
-
143
- if (hasCollision) {
144
- // Skip this fix due to collision [EC-5]
145
- skippedReasons.push({
146
- code: fix.code,
147
- reason: 'Fix range overlaps with another fix',
148
- });
149
- } else {
150
- // No collision, keep this fix
151
- validFixes.push(fix);
152
- }
153
- }
154
-
155
- return { validFixes, skippedReasons };
156
- }
157
-
158
- /**
159
- * Check if two fix ranges overlap.
160
- *
161
- * Ranges overlap if:
162
- * - One starts before the other ends, AND
163
- * - One ends after the other starts
164
- *
165
- * @param a - First fix range
166
- * @param b - Second fix range
167
- * @returns true if ranges overlap
168
- */
169
- function rangesOverlap(
170
- a: { start: number; end: number },
171
- b: { start: number; end: number }
172
- ): boolean {
173
- return a.start < b.end && a.end > b.start;
174
- }
@@ -1,39 +0,0 @@
1
- /**
2
- * Check Module - Static Analysis for rill
3
- * Public API for rill-check tool.
4
- */
5
-
6
- // ============================================================
7
- // PUBLIC TYPES
8
- // ============================================================
9
- export type {
10
- ValidationRule,
11
- RuleCategory,
12
- Severity,
13
- RuleState,
14
- Diagnostic,
15
- Fix,
16
- CheckConfig,
17
- ValidationContext,
18
- FixContext,
19
- } from './types.js';
20
-
21
- // ============================================================
22
- // RULE REGISTRY
23
- // ============================================================
24
- export { VALIDATION_RULES } from './rules/index.js';
25
-
26
- // ============================================================
27
- // CONFIGURATION
28
- // ============================================================
29
- export { loadConfig, createDefaultConfig } from './config.js';
30
-
31
- // ============================================================
32
- // VALIDATION
33
- // ============================================================
34
- export { validateScript } from './validator.js';
35
-
36
- // ============================================================
37
- // FIX APPLICATION
38
- // ============================================================
39
- export { applyFixes, type ApplyResult } from './fixer.js';