arc-1 0.3.0 → 0.4.1

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 (152) hide show
  1. package/README.md +77 -199
  2. package/dist/adt/btp.d.ts +2 -2
  3. package/dist/adt/btp.d.ts.map +1 -1
  4. package/dist/adt/btp.js +1 -1
  5. package/dist/adt/btp.js.map +1 -1
  6. package/dist/adt/client.d.ts +13 -1
  7. package/dist/adt/client.d.ts.map +1 -1
  8. package/dist/adt/client.js +39 -1
  9. package/dist/adt/client.js.map +1 -1
  10. package/dist/adt/codeintel.d.ts +41 -0
  11. package/dist/adt/codeintel.d.ts.map +1 -1
  12. package/dist/adt/codeintel.js +99 -27
  13. package/dist/adt/codeintel.js.map +1 -1
  14. package/dist/adt/config.d.ts.map +1 -1
  15. package/dist/adt/config.js.map +1 -1
  16. package/dist/adt/cookies.d.ts.map +1 -1
  17. package/dist/adt/cookies.js.map +1 -1
  18. package/dist/adt/crud.d.ts.map +1 -1
  19. package/dist/adt/crud.js.map +1 -1
  20. package/dist/adt/devtools.d.ts +14 -0
  21. package/dist/adt/devtools.d.ts.map +1 -1
  22. package/dist/adt/devtools.js +28 -3
  23. package/dist/adt/devtools.js.map +1 -1
  24. package/dist/adt/diagnostics.d.ts +101 -0
  25. package/dist/adt/diagnostics.d.ts.map +1 -0
  26. package/dist/adt/diagnostics.js +349 -0
  27. package/dist/adt/diagnostics.js.map +1 -0
  28. package/dist/adt/errors.d.ts.map +1 -1
  29. package/dist/adt/errors.js.map +1 -1
  30. package/dist/adt/features.d.ts.map +1 -1
  31. package/dist/adt/features.js.map +1 -1
  32. package/dist/adt/http.d.ts +26 -7
  33. package/dist/adt/http.d.ts.map +1 -1
  34. package/dist/adt/http.js +140 -86
  35. package/dist/adt/http.js.map +1 -1
  36. package/dist/adt/oauth.d.ts.map +1 -1
  37. package/dist/adt/oauth.js.map +1 -1
  38. package/dist/adt/safety.d.ts.map +1 -1
  39. package/dist/adt/safety.js.map +1 -1
  40. package/dist/adt/transport.d.ts.map +1 -1
  41. package/dist/adt/transport.js.map +1 -1
  42. package/dist/adt/types.d.ts +139 -0
  43. package/dist/adt/types.d.ts.map +1 -1
  44. package/dist/adt/types.js.map +1 -1
  45. package/dist/adt/xml-parser.d.ts +37 -1
  46. package/dist/adt/xml-parser.d.ts.map +1 -1
  47. package/dist/adt/xml-parser.js +147 -0
  48. package/dist/adt/xml-parser.js.map +1 -1
  49. package/dist/cache/cache.d.ts +47 -4
  50. package/dist/cache/cache.d.ts.map +1 -1
  51. package/dist/cache/cache.js +16 -5
  52. package/dist/cache/cache.js.map +1 -1
  53. package/dist/cache/caching-layer.d.ts +82 -0
  54. package/dist/cache/caching-layer.d.ts.map +1 -0
  55. package/dist/cache/caching-layer.js +134 -0
  56. package/dist/cache/caching-layer.js.map +1 -0
  57. package/dist/cache/memory.d.ts +14 -2
  58. package/dist/cache/memory.d.ts.map +1 -1
  59. package/dist/cache/memory.js +72 -5
  60. package/dist/cache/memory.js.map +1 -1
  61. package/dist/cache/sqlite.d.ts +10 -1
  62. package/dist/cache/sqlite.d.ts.map +1 -1
  63. package/dist/cache/sqlite.js +90 -2
  64. package/dist/cache/sqlite.js.map +1 -1
  65. package/dist/cache/warmup.d.ts +41 -0
  66. package/dist/cache/warmup.d.ts.map +1 -0
  67. package/dist/cache/warmup.js +286 -0
  68. package/dist/cache/warmup.js.map +1 -0
  69. package/dist/cli.d.ts.map +1 -1
  70. package/dist/cli.js.map +1 -1
  71. package/dist/context/cds-deps.d.ts +35 -0
  72. package/dist/context/cds-deps.d.ts.map +1 -0
  73. package/dist/context/cds-deps.js +201 -0
  74. package/dist/context/cds-deps.js.map +1 -0
  75. package/dist/context/compressor.d.ts +20 -1
  76. package/dist/context/compressor.d.ts.map +1 -1
  77. package/dist/context/compressor.js +178 -17
  78. package/dist/context/compressor.js.map +1 -1
  79. package/dist/context/contract.d.ts.map +1 -1
  80. package/dist/context/contract.js.map +1 -1
  81. package/dist/context/deps.d.ts.map +1 -1
  82. package/dist/context/deps.js.map +1 -1
  83. package/dist/context/method-surgery.d.ts +91 -0
  84. package/dist/context/method-surgery.d.ts.map +1 -0
  85. package/dist/context/method-surgery.js +441 -0
  86. package/dist/context/method-surgery.js.map +1 -0
  87. package/dist/context/types.d.ts +7 -0
  88. package/dist/context/types.d.ts.map +1 -1
  89. package/dist/context/types.js.map +1 -1
  90. package/dist/handlers/hyperfocused.d.ts +35 -0
  91. package/dist/handlers/hyperfocused.d.ts.map +1 -0
  92. package/dist/handlers/hyperfocused.js +104 -0
  93. package/dist/handlers/hyperfocused.js.map +1 -0
  94. package/dist/handlers/intent.d.ts +2 -1
  95. package/dist/handlers/intent.d.ts.map +1 -1
  96. package/dist/handlers/intent.js +440 -43
  97. package/dist/handlers/intent.js.map +1 -1
  98. package/dist/handlers/tools.d.ts.map +1 -1
  99. package/dist/handlers/tools.js +130 -39
  100. package/dist/handlers/tools.js.map +1 -1
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js.map +1 -1
  103. package/dist/lint/config-builder.d.ts +60 -0
  104. package/dist/lint/config-builder.d.ts.map +1 -0
  105. package/dist/lint/config-builder.js +187 -0
  106. package/dist/lint/config-builder.js.map +1 -0
  107. package/dist/lint/lint.d.ts +43 -0
  108. package/dist/lint/lint.d.ts.map +1 -1
  109. package/dist/lint/lint.js +77 -2
  110. package/dist/lint/lint.js.map +1 -1
  111. package/dist/lint/presets/cloud.d.ts +16 -0
  112. package/dist/lint/presets/cloud.d.ts.map +1 -0
  113. package/dist/lint/presets/cloud.js +111 -0
  114. package/dist/lint/presets/cloud.js.map +1 -0
  115. package/dist/lint/presets/onprem.d.ts +17 -0
  116. package/dist/lint/presets/onprem.d.ts.map +1 -0
  117. package/dist/lint/presets/onprem.js +82 -0
  118. package/dist/lint/presets/onprem.js.map +1 -0
  119. package/dist/server/audit.d.ts +1 -0
  120. package/dist/server/audit.d.ts.map +1 -1
  121. package/dist/server/audit.js.map +1 -1
  122. package/dist/server/config.d.ts.map +1 -1
  123. package/dist/server/config.js +12 -0
  124. package/dist/server/config.js.map +1 -1
  125. package/dist/server/context.d.ts.map +1 -1
  126. package/dist/server/context.js.map +1 -1
  127. package/dist/server/elicit.d.ts.map +1 -1
  128. package/dist/server/elicit.js.map +1 -1
  129. package/dist/server/http.d.ts.map +1 -1
  130. package/dist/server/http.js +4 -1
  131. package/dist/server/http.js.map +1 -1
  132. package/dist/server/logger.d.ts.map +1 -1
  133. package/dist/server/logger.js.map +1 -1
  134. package/dist/server/server.d.ts +3 -2
  135. package/dist/server/server.d.ts.map +1 -1
  136. package/dist/server/server.js +90 -5
  137. package/dist/server/server.js.map +1 -1
  138. package/dist/server/sinks/btp-auditlog.d.ts.map +1 -1
  139. package/dist/server/sinks/btp-auditlog.js.map +1 -1
  140. package/dist/server/sinks/file.d.ts.map +1 -1
  141. package/dist/server/sinks/file.js.map +1 -1
  142. package/dist/server/sinks/stderr.d.ts.map +1 -1
  143. package/dist/server/sinks/stderr.js.map +1 -1
  144. package/dist/server/sinks/types.d.ts.map +1 -1
  145. package/dist/server/sinks/types.js.map +1 -1
  146. package/dist/server/types.d.ts +14 -0
  147. package/dist/server/types.d.ts.map +1 -1
  148. package/dist/server/types.js +6 -0
  149. package/dist/server/types.js.map +1 -1
  150. package/dist/server/xsuaa.d.ts.map +1 -1
  151. package/dist/server/xsuaa.js.map +1 -1
  152. package/package.json +13 -6
@@ -0,0 +1,60 @@
1
+ /**
2
+ * abaplint configuration builder for ARC-1.
3
+ *
4
+ * Builds an @abaplint/core Config by layering:
5
+ * 1. Base: Default config for the detected ABAP version
6
+ * 2. Preset: Cloud or on-prem rule overrides (disable noisy rules, set severities)
7
+ * 3. User: Custom rule overrides from config file or tool args
8
+ *
9
+ * This replaces the hardcoded `Config.getDefault(Version.v702)` with
10
+ * a system-aware, customizable configuration.
11
+ *
12
+ * Architecture note: We start from abaplint's full default config (181 rules)
13
+ * and selectively disable/adjust rules rather than building from scratch.
14
+ * This ensures we benefit from new rules added in abaplint updates while
15
+ * keeping our curated severity levels and disabled-rule list.
16
+ *
17
+ * The cloud vs on-prem distinction is primarily about:
18
+ * - syntax.version: Cloud vs v702-v758 (controls which ABAP syntax is valid)
19
+ * - cloud_types rule: blocks PROG/FORM/etc. that don't exist in BTP
20
+ * - strict_sql rule: enforces strict Open SQL (cloud requirement)
21
+ * - obsolete_statement severity: Error on cloud (won't compile), Warning on-prem (advisory)
22
+ */
23
+ import { Config } from '@abaplint/core';
24
+ import type { SystemType } from '../adt/types.js';
25
+ /** Rule override: true to enable with defaults, false to disable, or object with config */
26
+ export type RuleOverrides = Record<string, boolean | Record<string, unknown>>;
27
+ /** Options for building an abaplint config */
28
+ export interface LintConfigOptions {
29
+ /** SAP system type: 'btp' or 'onprem' */
30
+ systemType?: SystemType;
31
+ /** SAP_BASIS release string (e.g., "757") */
32
+ abapRelease?: string;
33
+ /** Path to custom abaplint.jsonc config file */
34
+ configFile?: string;
35
+ /** Inline rule overrides (from tool call args) */
36
+ ruleOverrides?: RuleOverrides;
37
+ }
38
+ /**
39
+ * Build an abaplint Config from system metadata and user overrides.
40
+ *
41
+ * Resolution order (each layer overrides the previous):
42
+ * 1. Default config for the ABAP version
43
+ * 2. System preset (cloud or on-prem) — disables noisy rules, sets severities
44
+ * 3. User config file (if provided)
45
+ * 4. Inline rule overrides (if provided)
46
+ */
47
+ export declare function buildLintConfig(options?: LintConfigOptions): Config;
48
+ /**
49
+ * Build a "pre-write" config — a strict subset of rules that should
50
+ * block writes when they fail. Only includes correctness rules,
51
+ * not style/formatting.
52
+ */
53
+ export declare function buildPreWriteConfig(options?: LintConfigOptions): Config;
54
+ /** List all available rules with their current config from a Config object */
55
+ export declare function listRulesFromConfig(config: Config): Array<{
56
+ rule: string;
57
+ enabled: boolean;
58
+ severity?: string;
59
+ }>;
60
+ //# sourceMappingURL=config-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-builder.d.ts","sourceRoot":"","sources":["../../src/lint/config-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,MAAM,EAAW,MAAM,gBAAgB,CAAC;AAEjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,2FAA2F;AAC3F,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE9E,8CAA8C;AAC9C,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAoBvE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAoD3E;AA4ED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUhH"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * abaplint configuration builder for ARC-1.
3
+ *
4
+ * Builds an @abaplint/core Config by layering:
5
+ * 1. Base: Default config for the detected ABAP version
6
+ * 2. Preset: Cloud or on-prem rule overrides (disable noisy rules, set severities)
7
+ * 3. User: Custom rule overrides from config file or tool args
8
+ *
9
+ * This replaces the hardcoded `Config.getDefault(Version.v702)` with
10
+ * a system-aware, customizable configuration.
11
+ *
12
+ * Architecture note: We start from abaplint's full default config (181 rules)
13
+ * and selectively disable/adjust rules rather than building from scratch.
14
+ * This ensures we benefit from new rules added in abaplint updates while
15
+ * keeping our curated severity levels and disabled-rule list.
16
+ *
17
+ * The cloud vs on-prem distinction is primarily about:
18
+ * - syntax.version: Cloud vs v702-v758 (controls which ABAP syntax is valid)
19
+ * - cloud_types rule: blocks PROG/FORM/etc. that don't exist in BTP
20
+ * - strict_sql rule: enforces strict Open SQL (cloud requirement)
21
+ * - obsolete_statement severity: Error on cloud (won't compile), Warning on-prem (advisory)
22
+ */
23
+ import { readFileSync } from 'node:fs';
24
+ import { Config, Version } from '@abaplint/core';
25
+ import { mapSapReleaseToAbaplintVersion } from '../adt/features.js';
26
+ import { CLOUD_DISABLED_RULES, CLOUD_ERROR_RULES, CLOUD_WARNING_RULES } from './presets/cloud.js';
27
+ import { ONPREM_DISABLED_RULES, ONPREM_ERROR_RULES, ONPREM_WARNING_RULES } from './presets/onprem.js';
28
+ /**
29
+ * Build an abaplint Config from system metadata and user overrides.
30
+ *
31
+ * Resolution order (each layer overrides the previous):
32
+ * 1. Default config for the ABAP version
33
+ * 2. System preset (cloud or on-prem) — disables noisy rules, sets severities
34
+ * 3. User config file (if provided)
35
+ * 4. Inline rule overrides (if provided)
36
+ */
37
+ export function buildLintConfig(options = {}) {
38
+ const version = resolveVersion(options);
39
+ const base = Config.getDefault(version);
40
+ const raw = JSON.parse(JSON.stringify(base.get()));
41
+ // Apply system preset
42
+ const preset = options.systemType === 'btp' ? 'cloud' : 'onprem';
43
+ applyPreset(raw, preset);
44
+ // Apply user config file (if provided)
45
+ if (options.configFile) {
46
+ applyConfigFile(raw, options.configFile);
47
+ }
48
+ // Apply inline rule overrides (from tool args)
49
+ if (options.ruleOverrides) {
50
+ applyRuleOverrides(raw, options.ruleOverrides);
51
+ }
52
+ return new Config(JSON.stringify(raw));
53
+ }
54
+ /**
55
+ * Build a "pre-write" config — a strict subset of rules that should
56
+ * block writes when they fail. Only includes correctness rules,
57
+ * not style/formatting.
58
+ */
59
+ export function buildPreWriteConfig(options = {}) {
60
+ const version = resolveVersion(options);
61
+ const base = Config.getDefault(version);
62
+ const raw = JSON.parse(JSON.stringify(base.get()));
63
+ const rules = raw.rules;
64
+ // Disable ALL rules first
65
+ for (const key of Object.keys(rules)) {
66
+ rules[key] = false;
67
+ }
68
+ // Enable only pre-write blocking rules
69
+ const preWriteRules = {
70
+ parser_error: { severity: 'Error' },
71
+ parser_missing_space: { severity: 'Error' },
72
+ begin_end_names: { severity: 'Error' },
73
+ unreachable_code: { severity: 'Error' },
74
+ identical_conditions: { severity: 'Error' },
75
+ };
76
+ // Add cloud-specific blocking rules
77
+ if (options.systemType === 'btp') {
78
+ preWriteRules.cloud_types = { severity: 'Error' };
79
+ preWriteRules.strict_sql = { severity: 'Error' };
80
+ preWriteRules.sql_escape_host_variables = { severity: 'Error' };
81
+ preWriteRules.obsolete_statement = {
82
+ severity: 'Error',
83
+ refresh: true,
84
+ compute: true,
85
+ add: true,
86
+ subtract: true,
87
+ multiply: true,
88
+ divide: true,
89
+ move: true,
90
+ formDefinition: true,
91
+ formImplementation: true,
92
+ };
93
+ }
94
+ // Apply pre-write defaults first, then user overrides on top.
95
+ // This lets users customize pre-write behavior (e.g., disable a rule
96
+ // they know produces false positives in their codebase).
97
+ applyRuleOverrides(raw, preWriteRules);
98
+ if (options.configFile) {
99
+ applyConfigFile(raw, options.configFile);
100
+ }
101
+ if (options.ruleOverrides) {
102
+ applyRuleOverrides(raw, options.ruleOverrides);
103
+ }
104
+ return new Config(JSON.stringify(raw));
105
+ }
106
+ /** Resolve the abaplint Version from options */
107
+ function resolveVersion(options) {
108
+ if (options.systemType === 'btp')
109
+ return Version.Cloud;
110
+ if (options.abapRelease)
111
+ return mapSapReleaseToAbaplintVersion(options.abapRelease);
112
+ return Version.v702; // Conservative default
113
+ }
114
+ /** Apply a preset (cloud or onprem) to the raw config */
115
+ function applyPreset(raw, preset) {
116
+ const rules = raw.rules;
117
+ const disabledRules = preset === 'cloud' ? CLOUD_DISABLED_RULES : ONPREM_DISABLED_RULES;
118
+ const errorRules = preset === 'cloud' ? CLOUD_ERROR_RULES : ONPREM_ERROR_RULES;
119
+ const warningRules = preset === 'cloud' ? CLOUD_WARNING_RULES : ONPREM_WARNING_RULES;
120
+ // Disable noisy rules
121
+ for (const rule of disabledRules) {
122
+ rules[rule] = false;
123
+ }
124
+ // Apply error rules
125
+ for (const [rule, config] of Object.entries(errorRules)) {
126
+ rules[rule] = config;
127
+ }
128
+ // Apply warning rules
129
+ for (const [rule, config] of Object.entries(warningRules)) {
130
+ rules[rule] = config;
131
+ }
132
+ }
133
+ /** Apply overrides from a user config file */
134
+ function applyConfigFile(raw, configFile) {
135
+ try {
136
+ const content = readFileSync(configFile, 'utf-8');
137
+ // Strip JSONC comments (// and /* */). This naive regex doesn't handle
138
+ // "//" inside string values, but abaplint configs don't use string values
139
+ // containing "//", so this is safe in practice.
140
+ const stripped = content.replace(/\/\/.*$/gm, '').replace(/\/\*[\s\S]*?\*\//g, '');
141
+ const userConfig = JSON.parse(stripped);
142
+ // Merge rules
143
+ if (userConfig.rules && typeof userConfig.rules === 'object') {
144
+ applyRuleOverrides(raw, userConfig.rules);
145
+ }
146
+ // Merge syntax settings
147
+ if (userConfig.syntax && typeof userConfig.syntax === 'object') {
148
+ raw.syntax = { ...raw.syntax, ...userConfig.syntax };
149
+ }
150
+ }
151
+ catch (err) {
152
+ // Log warning but don't crash — lint should degrade gracefully
153
+ // if the config file is missing or malformed
154
+ const msg = err instanceof Error ? err.message : String(err);
155
+ console.error(`[arc-1] Warning: Could not load abaplint config "${configFile}": ${msg}`);
156
+ }
157
+ }
158
+ /** Apply rule overrides to the raw config */
159
+ function applyRuleOverrides(raw, overrides) {
160
+ const rules = raw.rules;
161
+ for (const [rule, config] of Object.entries(overrides)) {
162
+ if (config === false) {
163
+ rules[rule] = false;
164
+ }
165
+ else if (config === true) {
166
+ // Enable with defaults (don't override existing config)
167
+ if (!rules[rule]) {
168
+ rules[rule] = { severity: 'Error' };
169
+ }
170
+ }
171
+ else {
172
+ rules[rule] = config;
173
+ }
174
+ }
175
+ }
176
+ /** List all available rules with their current config from a Config object */
177
+ export function listRulesFromConfig(config) {
178
+ const rules = config.get().rules;
179
+ return Object.entries(rules).map(([rule, cfg]) => {
180
+ if (cfg === false || cfg === undefined) {
181
+ return { rule, enabled: false };
182
+ }
183
+ const severity = typeof cfg === 'object' && cfg !== null ? cfg.severity : 'Error';
184
+ return { rule, enabled: true, severity: severity ?? 'Error' };
185
+ });
186
+ }
187
+ //# sourceMappingURL=config-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-builder.js","sourceRoot":"","sources":["../../src/lint/config-builder.ts"],"names":[],"mappings":"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"}
@@ -7,8 +7,14 @@
7
7
  *
8
8
  * This gives us the full lexer + parser + linter with 100+ rules,
9
9
  * instead of our Go port's 8 rules and 48 token types.
10
+ *
11
+ * Enhanced with:
12
+ * - Version-aware config (cloud vs on-prem presets)
13
+ * - Auto-fix support via abaplint quickfix API
14
+ * - Pre-write validation (blocks writes on hard errors)
10
15
  */
11
16
  import { Config } from '@abaplint/core';
17
+ import { type LintConfigOptions } from './config-builder.js';
12
18
  /** Lint result from @abaplint/core */
13
19
  export interface LintResult {
14
20
  rule: string;
@@ -19,6 +25,26 @@ export interface LintResult {
19
25
  endColumn: number;
20
26
  severity: 'error' | 'warning' | 'info';
21
27
  }
28
+ /** Result of lint-and-fix operation */
29
+ export interface LintFixResult {
30
+ /** Source code after applying all available fixes */
31
+ fixedSource: string;
32
+ /** Number of fixes applied */
33
+ appliedFixes: number;
34
+ /** Rules that were auto-fixed */
35
+ fixedRules: string[];
36
+ /** Issues remaining after fixes */
37
+ remainingIssues: LintResult[];
38
+ }
39
+ /** Result of pre-write validation */
40
+ export interface PreWriteResult {
41
+ /** Whether the write should proceed */
42
+ pass: boolean;
43
+ /** Errors that block the write */
44
+ errors: LintResult[];
45
+ /** Warnings (advisory, don't block) */
46
+ warnings: LintResult[];
47
+ }
22
48
  /**
23
49
  * Lint ABAP source code using @abaplint/core.
24
50
  *
@@ -27,6 +53,23 @@ export interface LintResult {
27
53
  * @param config - Optional abaplint configuration (defaults to standard ABAP rules)
28
54
  */
29
55
  export declare function lintAbapSource(source: string, filename: string, config?: Config): LintResult[];
56
+ /**
57
+ * Lint ABAP source and auto-fix all fixable issues.
58
+ *
59
+ * Uses abaplint's quickfix API (getDefaultFix + applyEditSingle) to
60
+ * iteratively apply fixes. Returns the cleaned source and remaining issues.
61
+ *
62
+ * Inspired by ABAP cleaner's "clean at a keystroke" approach, but using
63
+ * abaplint's native fix system.
64
+ */
65
+ export declare function lintAndFix(source: string, filename: string, config?: Config): LintFixResult;
66
+ /**
67
+ * Validate ABAP source before writing to SAP system.
68
+ *
69
+ * Uses a strict subset of rules focused on correctness (not style).
70
+ * Errors block the write; warnings are advisory.
71
+ */
72
+ export declare function validateBeforeWrite(source: string, filename: string, configOptions?: LintConfigOptions): PreWriteResult;
30
73
  /**
31
74
  * Auto-detect the correct filename for ABAP source based on content.
32
75
  * abaplint uses the file extension to determine the object type.
@@ -1 +1 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../ts-src/lint/lint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAiC,MAAM,gBAAgB,CAAC;AAEvE,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CACxC;AAKD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAc9F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAazE"}
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/lint/lint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,EAAwC,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAElF,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CACxC;AAED,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,mCAAmC;IACnC,eAAe,EAAE,UAAU,EAAE,CAAC;CAC/B;AAED,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,kCAAkC;IAClC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,uCAAuC;IACvC,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAKD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAc9F;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAgD3F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,iBAAiB,GAChC,cAAc,CAYhB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAazE"}
package/dist/lint/lint.js CHANGED
@@ -7,9 +7,15 @@
7
7
  *
8
8
  * This gives us the full lexer + parser + linter with 100+ rules,
9
9
  * instead of our Go port's 8 rules and 48 token types.
10
+ *
11
+ * Enhanced with:
12
+ * - Version-aware config (cloud vs on-prem presets)
13
+ * - Auto-fix support via abaplint quickfix API
14
+ * - Pre-write validation (blocks writes on hard errors)
10
15
  */
11
- import { Config, MemoryFile, Registry, Version } from '@abaplint/core';
12
- /** Default abaplint configuration for ARC-1 */
16
+ import { Config, Edits, MemoryFile, Registry, Version } from '@abaplint/core';
17
+ import { buildPreWriteConfig } from './config-builder.js';
18
+ /** Default abaplint configuration for ARC-1 (legacy, used as fallback) */
13
19
  const DEFAULT_CONFIG = Config.getDefault(Version.v702);
14
20
  /**
15
21
  * Lint ABAP source code using @abaplint/core.
@@ -32,6 +38,75 @@ export function lintAbapSource(source, filename, config) {
32
38
  severity: mapSeverity(issue.getSeverity()),
33
39
  }));
34
40
  }
41
+ /**
42
+ * Lint ABAP source and auto-fix all fixable issues.
43
+ *
44
+ * Uses abaplint's quickfix API (getDefaultFix + applyEditSingle) to
45
+ * iteratively apply fixes. Returns the cleaned source and remaining issues.
46
+ *
47
+ * Inspired by ABAP cleaner's "clean at a keystroke" approach, but using
48
+ * abaplint's native fix system.
49
+ */
50
+ export function lintAndFix(source, filename, config) {
51
+ const cfg = config ?? DEFAULT_CONFIG;
52
+ const reg = new Registry(cfg);
53
+ reg.addFile(new MemoryFile(filename, source));
54
+ reg.parse();
55
+ const fixedRules = [];
56
+ let appliedFixes = 0;
57
+ // Iterative fix loop — apply one fix at a time, re-parse, repeat
58
+ // Limit iterations to prevent infinite loops from conflicting fixes
59
+ const MAX_ITERATIONS = 50;
60
+ for (let i = 0; i < MAX_ITERATIONS; i++) {
61
+ const issues = reg.findIssues();
62
+ let fixApplied = false;
63
+ for (const issue of issues) {
64
+ const fix = issue.getDefaultFix();
65
+ if (fix) {
66
+ Edits.applyEditSingle(reg, fix);
67
+ reg.parse();
68
+ appliedFixes++;
69
+ if (!fixedRules.includes(issue.getKey())) {
70
+ fixedRules.push(issue.getKey());
71
+ }
72
+ fixApplied = true;
73
+ break; // Re-parse and re-scan after each fix
74
+ }
75
+ }
76
+ if (!fixApplied)
77
+ break;
78
+ }
79
+ // Get remaining issues after all fixes
80
+ const remainingIssues = reg.findIssues().map((issue) => ({
81
+ rule: issue.getKey(),
82
+ message: issue.getMessage(),
83
+ line: issue.getStart().getRow(),
84
+ column: issue.getStart().getCol(),
85
+ endLine: issue.getEnd().getRow(),
86
+ endColumn: issue.getEnd().getCol(),
87
+ severity: mapSeverity(issue.getSeverity()),
88
+ }));
89
+ const file = reg.getFileByName(filename);
90
+ const fixedSource = file ? file.getRaw() : source;
91
+ return { fixedSource, appliedFixes, fixedRules, remainingIssues };
92
+ }
93
+ /**
94
+ * Validate ABAP source before writing to SAP system.
95
+ *
96
+ * Uses a strict subset of rules focused on correctness (not style).
97
+ * Errors block the write; warnings are advisory.
98
+ */
99
+ export function validateBeforeWrite(source, filename, configOptions) {
100
+ const config = buildPreWriteConfig(configOptions ?? {});
101
+ const issues = lintAbapSource(source, filename, config);
102
+ const errors = issues.filter((i) => i.severity === 'error');
103
+ const warnings = issues.filter((i) => i.severity === 'warning');
104
+ return {
105
+ pass: errors.length === 0,
106
+ errors,
107
+ warnings,
108
+ };
109
+ }
35
110
  /**
36
111
  * Auto-detect the correct filename for ABAP source based on content.
37
112
  * abaplint uses the file extension to determine the object type.
@@ -1 +1 @@
1
- {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../ts-src/lint/lint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/lint/lint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * abaplint preset for BTP / ABAP Cloud (Steampunk) systems.
3
+ *
4
+ * Enforces cloud-specific constraints: no classic object types (PROG, FORM),
5
+ * strict Open SQL, host variable escaping, modern ABAP style.
6
+ *
7
+ * Based on abapGit's abaplint configuration and Steampunk API constraints.
8
+ */
9
+ import type { RuleOverrides } from '../config-builder.js';
10
+ /** Rules that BLOCK writes on cloud systems (errors) */
11
+ export declare const CLOUD_ERROR_RULES: RuleOverrides;
12
+ /** Rules that produce warnings on cloud systems (advisory) */
13
+ export declare const CLOUD_WARNING_RULES: RuleOverrides;
14
+ /** Rules explicitly disabled for cloud preset */
15
+ export declare const CLOUD_DISABLED_RULES: string[];
16
+ //# sourceMappingURL=cloud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../../src/lint/presets/cloud.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,EAAE,aA6C/B,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,EAAE,aAyBjC,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,oBAAoB,EAAE,MAAM,EA4BxC,CAAC"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * abaplint preset for BTP / ABAP Cloud (Steampunk) systems.
3
+ *
4
+ * Enforces cloud-specific constraints: no classic object types (PROG, FORM),
5
+ * strict Open SQL, host variable escaping, modern ABAP style.
6
+ *
7
+ * Based on abapGit's abaplint configuration and Steampunk API constraints.
8
+ */
9
+ /** Rules that BLOCK writes on cloud systems (errors) */
10
+ export const CLOUD_ERROR_RULES = {
11
+ // --- Correctness ---
12
+ parser_error: { severity: 'Error' },
13
+ parser_missing_space: { severity: 'Error' },
14
+ begin_end_names: { severity: 'Error' },
15
+ unreachable_code: { severity: 'Error' },
16
+ identical_conditions: { severity: 'Error' },
17
+ // --- Cloud-specific constraints ---
18
+ cloud_types: { severity: 'Error' },
19
+ strict_sql: { severity: 'Error' },
20
+ sql_escape_host_variables: { severity: 'Error' },
21
+ // --- Obsolete syntax (not available in cloud) ---
22
+ obsolete_statement: {
23
+ severity: 'Error',
24
+ refresh: true,
25
+ compute: true,
26
+ add: true,
27
+ subtract: true,
28
+ multiply: true,
29
+ divide: true,
30
+ move: true,
31
+ requested: true,
32
+ occurs: true,
33
+ setExtended: true,
34
+ withHeaderLine: true,
35
+ fieldSymbolStructure: true,
36
+ typePools: true,
37
+ load: true,
38
+ parameter: true,
39
+ ranges: true,
40
+ communication: true,
41
+ pack: true,
42
+ selectWithoutInto: true,
43
+ freeMemory: true,
44
+ exitFromSQL: true,
45
+ sortByFS: true,
46
+ callTransformation: true,
47
+ regex: true,
48
+ occurences: true,
49
+ clientSpecified: true,
50
+ formDefinition: true,
51
+ formImplementation: true,
52
+ },
53
+ };
54
+ /** Rules that produce warnings on cloud systems (advisory) */
55
+ export const CLOUD_WARNING_RULES = {
56
+ prefer_inline: { severity: 'Warning' },
57
+ keyword_case: {
58
+ severity: 'Warning',
59
+ style: 'upper',
60
+ ignoreExceptions: true,
61
+ ignoreLowerClassImplmentationStatement: true,
62
+ },
63
+ line_length: { severity: 'Warning', length: 120 },
64
+ indentation: { severity: 'Warning' },
65
+ sequential_blank: { severity: 'Warning', lines: 4 },
66
+ whitespace_end: { severity: 'Warning' },
67
+ functional_writing: { severity: 'Warning', ignoreExceptions: true },
68
+ prefer_raise_exception_new: { severity: 'Warning' },
69
+ use_new: { severity: 'Warning' },
70
+ prefer_xsdbool: { severity: 'Warning' },
71
+ use_bool_expression: { severity: 'Warning' },
72
+ prefer_corresponding: { severity: 'Warning' },
73
+ exporting: { severity: 'Warning' },
74
+ use_line_exists: { severity: 'Warning' },
75
+ method_length: { severity: 'Warning', statements: 110, ignoreTestClasses: true },
76
+ cyclomatic_complexity: { severity: 'Warning', max: 25 },
77
+ nesting: { severity: 'Warning', depth: 6 },
78
+ unused_variables: { severity: 'Warning' },
79
+ unused_methods: { severity: 'Warning' },
80
+ };
81
+ /** Rules explicitly disabled for cloud preset */
82
+ export const CLOUD_DISABLED_RULES = [
83
+ // Too noisy for MCP context — LLM generates code without doc comments
84
+ 'abapdoc',
85
+ 'description_empty',
86
+ // Naming conventions are project-specific
87
+ 'no_prefixes',
88
+ 'local_variable_names',
89
+ 'method_parameter_names',
90
+ 'class_attribute_names',
91
+ 'local_class_naming',
92
+ 'types_naming',
93
+ 'object_naming',
94
+ 'allowed_object_naming',
95
+ // Not useful for single-file lint (need full project context)
96
+ 'check_ddic',
97
+ 'check_include',
98
+ 'check_text_elements',
99
+ 'check_abstract',
100
+ 'forbidden_void_type',
101
+ 'unknown_types',
102
+ // Alignment rules are too opinionated for generated code
103
+ 'align_parameters',
104
+ 'align_pseudo_comments',
105
+ 'align_type_expressions',
106
+ // Would need project context
107
+ 'db_operation_in_loop',
108
+ 'select_add_order_by',
109
+ 'uncaught_exception',
110
+ ];
111
+ //# sourceMappingURL=cloud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../../src/lint/presets/cloud.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * abaplint preset for on-premise SAP systems (7.02 – 7.58).
3
+ *
4
+ * More relaxed than cloud: allows classic object types, FORMs,
5
+ * obsolete statements are warnings (not errors), and cloud-specific
6
+ * rules are disabled.
7
+ *
8
+ * The ABAP version is set dynamically based on SAP_BASIS release.
9
+ */
10
+ import type { RuleOverrides } from '../config-builder.js';
11
+ /** Rules that BLOCK writes on on-premise systems (errors) */
12
+ export declare const ONPREM_ERROR_RULES: RuleOverrides;
13
+ /** Rules that produce warnings on on-premise systems (advisory) */
14
+ export declare const ONPREM_WARNING_RULES: RuleOverrides;
15
+ /** Rules explicitly disabled for on-premise preset */
16
+ export declare const ONPREM_DISABLED_RULES: string[];
17
+ //# sourceMappingURL=onprem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onprem.d.ts","sourceRoot":"","sources":["../../../src/lint/presets/onprem.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,EAAE,aAOhC,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,EAAE,aA4BlC,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,EAAE,MAAM,EA+BzC,CAAC"}