cobolx-2 1.2.3

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 (284) hide show
  1. package/.github/pull_request_template.md +9 -0
  2. package/.github/workflows/ci.yml +18 -0
  3. package/.vscode/launch.json +19 -0
  4. package/.vscode/tasks.json +14 -0
  5. package/CHANGELOG.md +16 -0
  6. package/CONTRIBUTING.md +23 -0
  7. package/CargoX.lock +2 -0
  8. package/LICENSE +21 -0
  9. package/README.md +164 -0
  10. package/api-demo/CargoX.lock +1 -0
  11. package/api-demo/README.md +3 -0
  12. package/api-demo/benchmarks/arith.cbx +6 -0
  13. package/api-demo/cobolx.toml +6 -0
  14. package/api-demo/docs-output/index.html +1 -0
  15. package/api-demo/generated/LEGACYDEMO.cbx +5 -0
  16. package/api-demo/generated/client-types.ts +2 -0
  17. package/api-demo/generated/deploy.json +12 -0
  18. package/api-demo/generated/flowchart.mmd +4 -0
  19. package/api-demo/migrations/20260411215238_init.sql +1 -0
  20. package/api-demo/src/main.cbx +5 -0
  21. package/api-demo/tests/smoke.cbx +6 -0
  22. package/benchmarks/arithmetic.cbx +6 -0
  23. package/cargox/package.json +11 -0
  24. package/cargox/src/index.d.ts +4 -0
  25. package/cargox/src/index.js +5 -0
  26. package/cargox/src/index.js.map +1 -0
  27. package/cargox/src/index.ts +4 -0
  28. package/cargox/src/lockfile/index.d.ts +1 -0
  29. package/cargox/src/lockfile/index.js +9 -0
  30. package/cargox/src/lockfile/index.js.map +1 -0
  31. package/cargox/src/lockfile/index.ts +9 -0
  32. package/cargox/src/manifest.d.ts +10 -0
  33. package/cargox/src/manifest.js +49 -0
  34. package/cargox/src/manifest.js.map +1 -0
  35. package/cargox/src/manifest.ts +58 -0
  36. package/cargox/src/registry/index.d.ts +4 -0
  37. package/cargox/src/registry/index.js +13 -0
  38. package/cargox/src/registry/index.js.map +1 -0
  39. package/cargox/src/registry/index.ts +13 -0
  40. package/cargox/src/resolver/index.d.ts +5 -0
  41. package/cargox/src/resolver/index.js +4 -0
  42. package/cargox/src/resolver/index.js.map +1 -0
  43. package/cargox/src/resolver/index.ts +8 -0
  44. package/cargox/tsconfig.json +7 -0
  45. package/cli/cobolx-cli/package.json +23 -0
  46. package/cli/cobolx-cli/src/commands/add.ts +18 -0
  47. package/cli/cobolx-cli/src/commands/bench.ts +47 -0
  48. package/cli/cobolx-cli/src/commands/build.ts +74 -0
  49. package/cli/cobolx-cli/src/commands/check.ts +24 -0
  50. package/cli/cobolx-cli/src/commands/debug.ts +15 -0
  51. package/cli/cobolx-cli/src/commands/debug_rewind.ts +16 -0
  52. package/cli/cobolx-cli/src/commands/deploy.ts +18 -0
  53. package/cli/cobolx-cli/src/commands/dev.ts +24 -0
  54. package/cli/cobolx-cli/src/commands/doc.ts +19 -0
  55. package/cli/cobolx-cli/src/commands/fmt.ts +14 -0
  56. package/cli/cobolx-cli/src/commands/fuzz.ts +24 -0
  57. package/cli/cobolx-cli/src/commands/generate.ts +38 -0
  58. package/cli/cobolx-cli/src/commands/install.ts +25 -0
  59. package/cli/cobolx-cli/src/commands/legacy.ts +17 -0
  60. package/cli/cobolx-cli/src/commands/lint.ts +17 -0
  61. package/cli/cobolx-cli/src/commands/migrate.ts +27 -0
  62. package/cli/cobolx-cli/src/commands/new.ts +20 -0
  63. package/cli/cobolx-cli/src/commands/profile.ts +8 -0
  64. package/cli/cobolx-cli/src/commands/publish.ts +16 -0
  65. package/cli/cobolx-cli/src/commands/repl.ts +30 -0
  66. package/cli/cobolx-cli/src/commands/run.ts +22 -0
  67. package/cli/cobolx-cli/src/commands/task.ts +27 -0
  68. package/cli/cobolx-cli/src/commands/test.ts +44 -0
  69. package/cli/cobolx-cli/src/commands/update.ts +30 -0
  70. package/cli/cobolx-cli/src/commands/visualize.ts +25 -0
  71. package/cli/cobolx-cli/src/index.ts +101 -0
  72. package/cli/cobolx-cli/src/project.ts +74 -0
  73. package/cli/cobolx-cli/tsconfig.json +7 -0
  74. package/cobolx.toml +7 -0
  75. package/compiler/package.json +14 -0
  76. package/compiler/src/ast/types.d.ts +87 -0
  77. package/compiler/src/ast/types.js +2 -0
  78. package/compiler/src/ast/types.js.map +1 -0
  79. package/compiler/src/ast/types.ts +329 -0
  80. package/compiler/src/backend/custom.d.ts +8 -0
  81. package/compiler/src/backend/custom.js +12 -0
  82. package/compiler/src/backend/custom.js.map +1 -0
  83. package/compiler/src/backend/custom.ts +21 -0
  84. package/compiler/src/borrow_checker/checker.d.ts +3 -0
  85. package/compiler/src/borrow_checker/checker.js +82 -0
  86. package/compiler/src/borrow_checker/checker.js.map +1 -0
  87. package/compiler/src/borrow_checker/checker.ts +100 -0
  88. package/compiler/src/codegen/javascript.d.ts +2 -0
  89. package/compiler/src/codegen/javascript.js +89 -0
  90. package/compiler/src/codegen/javascript.js.map +1 -0
  91. package/compiler/src/codegen/javascript.ts +175 -0
  92. package/compiler/src/const_eval/evaluator.ts +58 -0
  93. package/compiler/src/diagnostics.d.ts +11 -0
  94. package/compiler/src/diagnostics.js +14 -0
  95. package/compiler/src/diagnostics.js.map +1 -0
  96. package/compiler/src/diagnostics.ts +20 -0
  97. package/compiler/src/hir/lower.d.ts +7 -0
  98. package/compiler/src/hir/lower.js +44 -0
  99. package/compiler/src/hir/lower.js.map +1 -0
  100. package/compiler/src/hir/lower.ts +60 -0
  101. package/compiler/src/hir/types.d.ts +21 -0
  102. package/compiler/src/hir/types.js +2 -0
  103. package/compiler/src/hir/types.js.map +1 -0
  104. package/compiler/src/hir/types.ts +26 -0
  105. package/compiler/src/index.d.ts +22 -0
  106. package/compiler/src/index.js +84 -0
  107. package/compiler/src/index.js.map +1 -0
  108. package/compiler/src/index.ts +122 -0
  109. package/compiler/src/lexer/lexer.d.ts +21 -0
  110. package/compiler/src/lexer/lexer.js +207 -0
  111. package/compiler/src/lexer/lexer.js.map +1 -0
  112. package/compiler/src/lexer/lexer.ts +274 -0
  113. package/compiler/src/lexer/tokens.d.ts +8 -0
  114. package/compiler/src/lexer/tokens.js +18 -0
  115. package/compiler/src/lexer/tokens.js.map +1 -0
  116. package/compiler/src/lexer/tokens.ts +126 -0
  117. package/compiler/src/macros/expand.ts +75 -0
  118. package/compiler/src/main.ts +4 -0
  119. package/compiler/src/mir/lower.d.ts +3 -0
  120. package/compiler/src/mir/lower.js +10 -0
  121. package/compiler/src/mir/lower.js.map +1 -0
  122. package/compiler/src/mir/lower.ts +12 -0
  123. package/compiler/src/mir/types.d.ts +13 -0
  124. package/compiler/src/mir/types.js +2 -0
  125. package/compiler/src/mir/types.js.map +1 -0
  126. package/compiler/src/mir/types.ts +16 -0
  127. package/compiler/src/optimizer/constantFold.d.ts +2 -0
  128. package/compiler/src/optimizer/constantFold.js +61 -0
  129. package/compiler/src/optimizer/constantFold.js.map +1 -0
  130. package/compiler/src/optimizer/constantFold.ts +109 -0
  131. package/compiler/src/parser/parser.d.ts +33 -0
  132. package/compiler/src/parser/parser.js +323 -0
  133. package/compiler/src/parser/parser.js.map +1 -0
  134. package/compiler/src/parser/parser.ts +710 -0
  135. package/compiler/src/plugins/api.ts +8 -0
  136. package/compiler/src/plugins/loader.ts +21 -0
  137. package/compiler/src/semantic/analyzer.d.ts +12 -0
  138. package/compiler/src/semantic/analyzer.js +144 -0
  139. package/compiler/src/semantic/analyzer.js.map +1 -0
  140. package/compiler/src/semantic/analyzer.ts +277 -0
  141. package/compiler/src/type_system/checker.d.ts +7 -0
  142. package/compiler/src/type_system/checker.js +84 -0
  143. package/compiler/src/type_system/checker.js.map +1 -0
  144. package/compiler/src/type_system/checker.ts +108 -0
  145. package/compiler/tsconfig.json +7 -0
  146. package/debugger/package.json +11 -0
  147. package/debugger/src/index.d.ts +1 -0
  148. package/debugger/src/index.js +9 -0
  149. package/debugger/src/index.js.map +1 -0
  150. package/debugger/src/index.ts +9 -0
  151. package/debugger/tsconfig.json +7 -0
  152. package/docs/CHANGELOG.md +11 -0
  153. package/docs/CONTRIBUTING.md +15 -0
  154. package/docs/LICENSE +21 -0
  155. package/docs/architecture.md +29 -0
  156. package/docs/cli.md +58 -0
  157. package/docs/language-spec.md +49 -0
  158. package/docs/packages.md +19 -0
  159. package/docs/platform-systems.md +31 -0
  160. package/docs/release-validation.md +22 -0
  161. package/docs/runtime.md +10 -0
  162. package/docs/tooling.md +17 -0
  163. package/docs/vscode-extension.md +40 -0
  164. package/enterprise-demo/CargoX.lock +2 -0
  165. package/enterprise-demo/README.md +3 -0
  166. package/enterprise-demo/benchmarks/arith.cbx +6 -0
  167. package/enterprise-demo/cobolx.toml +7 -0
  168. package/enterprise-demo/src/main.cbx +5 -0
  169. package/enterprise-demo/tests/smoke.cbx +6 -0
  170. package/examples/README.md +20 -0
  171. package/examples/actors-and-flags.md +8 -0
  172. package/examples/api-server/README.md +9 -0
  173. package/examples/api-server/cobolx.toml +6 -0
  174. package/examples/api-server/src/main.cbx +8 -0
  175. package/examples/debug-replay.md +7 -0
  176. package/examples/debugging-demo/README.md +3 -0
  177. package/examples/debugging-demo/cobolx.toml +6 -0
  178. package/examples/debugging-demo/src/main.cbx +7 -0
  179. package/examples/distributed-service.md +12 -0
  180. package/examples/distributed-system/README.md +3 -0
  181. package/examples/distributed-system/cobolx.toml +6 -0
  182. package/examples/distributed-system/generated/deploy.json +12 -0
  183. package/examples/distributed-system/src/main.cbx +6 -0
  184. package/examples/event-driven.md +5 -0
  185. package/examples/event-system/README.md +3 -0
  186. package/examples/event-system/cobolx.toml +6 -0
  187. package/examples/event-system/src/main.cbx +11 -0
  188. package/examples/functions.cbx +10 -0
  189. package/examples/functions.mjs +12 -0
  190. package/examples/hello.cbx +5 -0
  191. package/examples/hello.mjs +7 -0
  192. package/examples/legacy-sample.cob +5 -0
  193. package/examples/parallel-processing/README.md +3 -0
  194. package/examples/parallel-processing/cobolx.toml +6 -0
  195. package/examples/parallel-processing/src/main.cbx +6 -0
  196. package/examples/parallel-processing.md +8 -0
  197. package/examples/platform-features.cbx +32 -0
  198. package/examples/platform-features.mjs +35 -0
  199. package/examples/service.cbx +10 -0
  200. package/examples/workflow-engine/README.md +3 -0
  201. package/examples/workflow-engine/cobolx.toml +6 -0
  202. package/examples/workflow-engine/generated/flowchart.mmd +8 -0
  203. package/examples/workflow-engine/src/main.cbx +13 -0
  204. package/examples/workflow-engine.md +5 -0
  205. package/formatter/package.json +14 -0
  206. package/formatter/src/index.d.ts +1 -0
  207. package/formatter/src/index.js +59 -0
  208. package/formatter/src/index.js.map +1 -0
  209. package/formatter/src/index.ts +103 -0
  210. package/formatter/tsconfig.json +7 -0
  211. package/generated/LEGACYDEMO.cbx +5 -0
  212. package/install.ps1 +4 -0
  213. package/install.sh +5 -0
  214. package/linter/package.json +14 -0
  215. package/linter/src/index.d.ts +2 -0
  216. package/linter/src/index.js +18 -0
  217. package/linter/src/index.js.map +1 -0
  218. package/linter/src/index.ts +19 -0
  219. package/linter/tsconfig.json +7 -0
  220. package/lsp/server/package.json +16 -0
  221. package/lsp/server/src/index.ts +168 -0
  222. package/lsp/server/tsconfig.json +7 -0
  223. package/package.json +30 -0
  224. package/profiler/package.json +11 -0
  225. package/profiler/src/index.d.ts +5 -0
  226. package/profiler/src/index.js +11 -0
  227. package/profiler/src/index.js.map +1 -0
  228. package/profiler/src/index.ts +11 -0
  229. package/profiler/tsconfig.json +7 -0
  230. package/release.json +10 -0
  231. package/runtime/package.json +14 -0
  232. package/runtime/src/actors/index.ts +27 -0
  233. package/runtime/src/async/futures.ts +11 -0
  234. package/runtime/src/code_as_data/index.ts +5 -0
  235. package/runtime/src/config/index.ts +17 -0
  236. package/runtime/src/distributed/index.ts +13 -0
  237. package/runtime/src/events/index.ts +21 -0
  238. package/runtime/src/feature_flags/index.ts +9 -0
  239. package/runtime/src/gc_or_arc/index.ts +1 -0
  240. package/runtime/src/healing/index.ts +26 -0
  241. package/runtime/src/index.ts +20 -0
  242. package/runtime/src/intents/index.ts +9 -0
  243. package/runtime/src/iterators/index.ts +23 -0
  244. package/runtime/src/memory/arc.ts +22 -0
  245. package/runtime/src/observability/index.ts +23 -0
  246. package/runtime/src/repl/context.ts +7 -0
  247. package/runtime/src/scheduler/taskScheduler.ts +11 -0
  248. package/runtime/src/security/capabilities.ts +15 -0
  249. package/runtime/src/security/secrets.ts +13 -0
  250. package/runtime/src/state/versioned.ts +31 -0
  251. package/runtime/src/std_hooks/audit.ts +23 -0
  252. package/runtime/src/time_travel/index.ts +54 -0
  253. package/runtime/src/workflows/index.ts +35 -0
  254. package/runtime/tsconfig.json +7 -0
  255. package/sample-payroll/README.md +3 -0
  256. package/sample-payroll/cobolx.toml +3 -0
  257. package/sample-payroll/src/main.cbx +5 -0
  258. package/stdlib/business/index.js +15 -0
  259. package/stdlib/core/README.md +8 -0
  260. package/stdlib/core/runtime.js +191 -0
  261. package/stdlib/crypto/index.js +5 -0
  262. package/stdlib/datetime/index.js +3 -0
  263. package/stdlib/fs/index.js +9 -0
  264. package/stdlib/http/index.js +7 -0
  265. package/stdlib/io/index.js +1 -0
  266. package/stdlib/json/index.js +7 -0
  267. package/stdlib/net/index.js +4 -0
  268. package/tests/macros.cbx +10 -0
  269. package/tests/pattern_match.cbx +16 -0
  270. package/tests/smoke.cbx +7 -0
  271. package/tests/validate-release.mjs +54 -0
  272. package/tsconfig.base.json +24 -0
  273. package/vscode-extension/LICENSE +21 -0
  274. package/vscode-extension/README.md +47 -0
  275. package/vscode-extension/cobolx-1.2.0.vsix +0 -0
  276. package/vscode-extension/icon.png +0 -0
  277. package/vscode-extension/icon.svg +15 -0
  278. package/vscode-extension/language-configuration.json +17 -0
  279. package/vscode-extension/package.json +148 -0
  280. package/vscode-extension/snippets/cobolx.code-snippets +49 -0
  281. package/vscode-extension/src/extension.ts +283 -0
  282. package/vscode-extension/syntaxes/cobolx.tmLanguage.json +75 -0
  283. package/vscode-extension/tests/test.cbl +3 -0
  284. package/vscode-extension/tsconfig.json +7 -0
@@ -0,0 +1,12 @@
1
+ {
2
+ "service": "distributed-system",
3
+ "address": "node://distributed-system",
4
+ "status": {
5
+ "name": "distributed-system",
6
+ "healthy": true,
7
+ "details": {
8
+ "address": "node://distributed-system"
9
+ }
10
+ },
11
+ "discovered": "node://distributed-system"
12
+ }
@@ -0,0 +1,6 @@
1
+ PROGRAM DistributedSystem
2
+
3
+ BEGIN
4
+ DISPLAY "Node online"
5
+ DISPLAY "Service registered"
6
+ END
@@ -0,0 +1,5 @@
1
+ # Event Driven
2
+
3
+ Use `createEventBus()` to register listeners and emit events asynchronously.
4
+
5
+ This integrates with actors and workflow steps for event-based orchestration.
@@ -0,0 +1,3 @@
1
+ # Event System Example
2
+
3
+ Demonstrates event-style program flow and pairs with the runtime event bus helpers.
@@ -0,0 +1,6 @@
1
+ [package]
2
+ name = "event-system"
3
+ version = "1.0.0"
4
+ entry = "src/main.cbx"
5
+
6
+ [dependencies]
@@ -0,0 +1,11 @@
1
+ PROGRAM EventSystem
2
+
3
+ MACRO emitMessage(value)
4
+ BEGIN
5
+ DISPLAY value
6
+ END-MACRO
7
+
8
+ BEGIN
9
+ emitMessage!("UserCreated")
10
+ DISPLAY "Listener handled event"
11
+ END
@@ -0,0 +1,10 @@
1
+ PROGRAM Functions
2
+
3
+ FUNCTION add(left, right) BEGIN
4
+ RETURN left + right
5
+ END-FUNCTION
6
+
7
+ BEGIN
8
+ SET total = add(4, 5)
9
+ DISPLAY total
10
+ END
@@ -0,0 +1,12 @@
1
+ import { display, input, math, strings } from "../stdlib/core/runtime.js";
2
+
3
+ function add(left, right) {
4
+ return (left + right);
5
+ }
6
+
7
+ function main() {
8
+ let total = add(4, 5);
9
+ display(total);
10
+ }
11
+
12
+ main();
@@ -0,0 +1,5 @@
1
+ PROGRAM Hello
2
+
3
+ BEGIN
4
+ DISPLAY "Hello from COBOLX"
5
+ END
@@ -0,0 +1,7 @@
1
+ import { display, input, math, strings } from "../stdlib/core/runtime.js";
2
+
3
+ function main() {
4
+ display("Hello from COBOLX");
5
+ }
6
+
7
+ main();
@@ -0,0 +1,5 @@
1
+ IDENTIFICATION DIVISION.
2
+ PROGRAM-ID. LEGACYDEMO.
3
+ PROCEDURE DIVISION.
4
+ DISPLAY "HELLO".
5
+ STOP RUN.
@@ -0,0 +1,3 @@
1
+ # Parallel Processing Example
2
+
3
+ Demonstrates iterator-friendly processing and async task spawning.
@@ -0,0 +1,6 @@
1
+ [package]
2
+ name = "parallel-processing"
3
+ version = "1.0.0"
4
+ entry = "src/main.cbx"
5
+
6
+ [dependencies]
@@ -0,0 +1,6 @@
1
+ PROGRAM ParallelProcessing
2
+
3
+ BEGIN
4
+ DISPLAY "parallel workers complete"
5
+ DISPLAY 42
6
+ END
@@ -0,0 +1,8 @@
1
+ # Parallel Processing
2
+
3
+ COBOL-X currently exposes explicit async spawn and iterator pipelines:
4
+
5
+ - `spawn(() => work())`
6
+ - `iter(values).map(...).filter(...).collect()`
7
+
8
+ Compiler-level auto-parallel analysis is staged on top of these runtime primitives.
@@ -0,0 +1,32 @@
1
+ PROGRAM PlatformFeatures
2
+
3
+ /// compile-time constant
4
+ CONST LIMIT = 3
5
+
6
+ ENUM Result:
7
+ OK(value)
8
+ ERR(message)
9
+ END
10
+
11
+ /// simple declarative macro
12
+ MACRO say(value)
13
+ BEGIN
14
+ DISPLAY value
15
+ END-MACRO
16
+
17
+ FUNCTION inspect(item)
18
+ BEGIN
19
+ MATCH item:
20
+ OK(value):
21
+ say!("matched ok")
22
+ DISPLAY value
23
+ ERR(problem):
24
+ DISPLAY problem
25
+ END-MATCH
26
+ RETURN item?
27
+ END-FUNCTION
28
+
29
+ BEGIN
30
+ LET result = OK(LIMIT)
31
+ inspect(result)
32
+ END
@@ -0,0 +1,35 @@
1
+ import { display, input, math, strings, Result, Option, iter, spawn, channel } from "../stdlib/core/runtime.js";
2
+
3
+
4
+ function __variant(tag, values) { return { tag, values }; }
5
+ function __propagate(value) { if (value && value.tag === "ERR") throw new Error(String(value.values?.[0] ?? "propagated error")); return value?.tag === "OK" ? value.values[0] : value; }
6
+
7
+ const LIMIT = 3;
8
+ const OK = (...values) => __variant("OK", values);
9
+ const ERR = (...values) => __variant("ERR", values);
10
+ function __macro_say(value) {
11
+ display(value);
12
+ }
13
+ function inspect(item) {
14
+ {
15
+ const __matchValue = item;
16
+ if (__matchValue?.tag === "OK") {
17
+ const value = __matchValue.values[0];
18
+ __macro_say("matched ok");
19
+ display(value);
20
+ }
21
+ else if (__matchValue?.tag === "ERR") {
22
+ const problem = __matchValue.values[0];
23
+ display(problem);
24
+ }
25
+ }
26
+ return __propagate(item);
27
+ }
28
+
29
+ function main() {
30
+ const result = __variant("OK", [LIMIT]);
31
+ inspect(result);
32
+ }
33
+
34
+ main();
35
+
@@ -0,0 +1,10 @@
1
+ PROGRAM Service
2
+
3
+ FUNCTION health() BEGIN
4
+ RETURN 200
5
+ END-FUNCTION
6
+
7
+ BEGIN
8
+ DISPLAY "service ready"
9
+ DISPLAY health()
10
+ END
@@ -0,0 +1,3 @@
1
+ # Workflow Engine Example
2
+
3
+ Demonstrates workflow-oriented logic and pairs with `cobolx task` and `cobolx visualize`.
@@ -0,0 +1,6 @@
1
+ [package]
2
+ name = "workflow-engine"
3
+ version = "1.0.0"
4
+ entry = "src/main.cbx"
5
+
6
+ [dependencies]
@@ -0,0 +1,8 @@
1
+ flowchart TD
2
+ A[Program WorkflowEngine]
3
+ N0[ExpressionStatement]
4
+ A --> N0
5
+ N1[DisplayStatement]
6
+ N0 --> N1
7
+ N2[DisplayStatement]
8
+ N1 --> N2
@@ -0,0 +1,13 @@
1
+ PROGRAM WorkflowEngine
2
+
3
+ FUNCTION validate()
4
+ BEGIN
5
+ DISPLAY "validate"
6
+ RETURN 1
7
+ END-FUNCTION
8
+
9
+ BEGIN
10
+ validate()
11
+ DISPLAY "approve"
12
+ DISPLAY "notify"
13
+ END
@@ -0,0 +1,5 @@
1
+ # Workflow Engine
2
+
3
+ Use `WorkflowEngine` from `@cobolx/runtime` to define retries and timeouts for named steps.
4
+
5
+ This integrates with supervisor-style self-healing and observability layers.
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "@cobolx/formatter",
3
+ "version": "0.2.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "scripts": {
7
+ "build": "tsc -p tsconfig.json",
8
+ "check": "tsc -p tsconfig.json --noEmit",
9
+ "clean": "if (Test-Path dist) { Remove-Item -Recurse -Force dist }"
10
+ },
11
+ "dependencies": {
12
+ "@cobolx/compiler": "0.2.0"
13
+ }
14
+ }
@@ -0,0 +1 @@
1
+ export declare function formatSource(source: string): string;
@@ -0,0 +1,59 @@
1
+ import { parseSource } from "@cobolx/compiler";
2
+ function formatExpression(expression) {
3
+ switch (expression.kind) {
4
+ case "NumberLiteral":
5
+ return String(expression.value);
6
+ case "StringLiteral":
7
+ return JSON.stringify(expression.value);
8
+ case "BooleanLiteral":
9
+ return expression.value ? "TRUE" : "FALSE";
10
+ case "Identifier":
11
+ return expression.name;
12
+ case "UnaryExpression":
13
+ return `${expression.operator}${formatExpression(expression.operand)}`;
14
+ case "BinaryExpression":
15
+ return `${formatExpression(expression.left)} ${expression.operator} ${formatExpression(expression.right)}`;
16
+ case "CallExpression":
17
+ return `${expression.callee}(${expression.args.map(formatExpression).join(", ")})`;
18
+ }
19
+ }
20
+ function formatStatement(statement, indent = "") {
21
+ switch (statement.kind) {
22
+ case "SetStatement":
23
+ return `${indent}SET ${statement.name} = ${formatExpression(statement.expression)}`;
24
+ case "DisplayStatement":
25
+ return `${indent}DISPLAY ${formatExpression(statement.expression)}`;
26
+ case "InputStatement":
27
+ return `${indent}INPUT ${statement.name}${statement.prompt ? ` ${formatExpression(statement.prompt)}` : ""}`;
28
+ case "ReturnStatement":
29
+ return `${indent}RETURN ${formatExpression(statement.expression)}`;
30
+ case "ExpressionStatement":
31
+ return `${indent}${formatExpression(statement.expression)}`;
32
+ case "IfStatement": {
33
+ const thenLines = statement.thenBranch.map((child) => formatStatement(child, `${indent} `));
34
+ const elseLines = statement.elseBranch.map((child) => formatStatement(child, `${indent} `));
35
+ const body = [`${indent}IF ${formatExpression(statement.condition)} THEN`, ...thenLines];
36
+ if (elseLines.length > 0) {
37
+ body.push(`${indent}ELSE`, ...elseLines);
38
+ }
39
+ body.push(`${indent}END-IF`);
40
+ return body.join("\n");
41
+ }
42
+ }
43
+ }
44
+ function formatProgram(program) {
45
+ const lines = [`PROGRAM ${program.name}`, ""];
46
+ for (const fn of program.functions) {
47
+ lines.push(`FUNCTION ${fn.name}(${fn.params.join(", ")}) BEGIN`);
48
+ lines.push(...fn.body.map((statement) => formatStatement(statement, " ")));
49
+ lines.push("END-FUNCTION", "");
50
+ }
51
+ lines.push("BEGIN");
52
+ lines.push(...program.body.map((statement) => formatStatement(statement, " ")));
53
+ lines.push("END", "");
54
+ return lines.join("\n");
55
+ }
56
+ export function formatSource(source) {
57
+ return formatProgram(parseSource(source));
58
+ }
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import type { ExpressionNode, PatternNode, ProgramNode, StatementNode } from "@cobolx/compiler";
2
+ import { parseSource } from "@cobolx/compiler";
3
+
4
+ function formatExpression(expression: ExpressionNode): string {
5
+ switch (expression.kind) {
6
+ case "NumberLiteral":
7
+ return String(expression.value);
8
+ case "StringLiteral":
9
+ return JSON.stringify(expression.value);
10
+ case "BooleanLiteral":
11
+ return expression.value ? "TRUE" : "FALSE";
12
+ case "Identifier":
13
+ return expression.name;
14
+ case "UnaryExpression":
15
+ return `${expression.operator}${formatExpression(expression.operand)}`;
16
+ case "BinaryExpression":
17
+ return `${formatExpression(expression.left)} ${expression.operator} ${formatExpression(expression.right)}`;
18
+ case "CallExpression":
19
+ return `${formatExpression(expression.callee)}(${expression.args.map(formatExpression).join(", ")})`;
20
+ case "TryExpression":
21
+ return `${formatExpression(expression.expression)}?`;
22
+ case "MacroInvocation":
23
+ return `${expression.name}!(${expression.args.map(formatExpression).join(", ")})`;
24
+ case "MemberExpression":
25
+ return `${formatExpression(expression.object)}.${expression.property}`;
26
+ case "EnumConstructorExpression":
27
+ return `${expression.variantName}(${expression.fields.map(formatExpression).join(", ")})`;
28
+ case "ArrayLiteral":
29
+ return `[${expression.items.map(formatExpression).join(", ")}]`;
30
+ }
31
+ }
32
+
33
+ function formatStatement(statement: StatementNode, indent = ""): string {
34
+ switch (statement.kind) {
35
+ case "LetStatement":
36
+ return `${indent}LET ${statement.isMutable ? "MUT " : ""}${statement.binding.name} = ${formatExpression(statement.expression)}`;
37
+ case "SetStatement":
38
+ return `${indent}SET ${statement.name} = ${formatExpression(statement.expression)}`;
39
+ case "DisplayStatement":
40
+ return `${indent}DISPLAY ${formatExpression(statement.expression)}`;
41
+ case "InputStatement":
42
+ return `${indent}INPUT ${statement.name}${statement.prompt ? ` ${formatExpression(statement.prompt)}` : ""}`;
43
+ case "ReturnStatement":
44
+ return `${indent}RETURN ${formatExpression(statement.expression)}`;
45
+ case "ExpressionStatement":
46
+ return `${indent}${formatExpression(statement.expression)}`;
47
+ case "AssertStatement":
48
+ return `${indent}ASSERT ${formatExpression(statement.expression)}`;
49
+ case "SpawnStatement":
50
+ return `${indent}SPAWN ${formatExpression(statement.expression)}`;
51
+ case "IfStatement": {
52
+ const thenLines = statement.thenBranch.map((child) => formatStatement(child, `${indent} `));
53
+ const elseLines = statement.elseBranch.map((child) => formatStatement(child, `${indent} `));
54
+ const body = [`${indent}IF ${formatExpression(statement.condition)} THEN`, ...thenLines];
55
+ if (elseLines.length > 0) {
56
+ body.push(`${indent}ELSE`, ...elseLines);
57
+ }
58
+ body.push(`${indent}END-IF`);
59
+ return body.join("\n");
60
+ }
61
+ case "MatchStatement": {
62
+ const arms = statement.arms.map((arm) => `${indent} ${formatPattern(arm.pattern)}:\n${arm.body.map((child) => formatStatement(child, `${indent} `)).join("\n")}`);
63
+ return [`${indent}MATCH ${formatExpression(statement.expression)}:`, ...arms, `${indent}END-MATCH`].join("\n");
64
+ }
65
+ case "UnsafeBlock":
66
+ return [`${indent}UNSAFE`, `${indent}BEGIN`, ...statement.body.map((child) => formatStatement(child, `${indent} `)), `${indent}END-UNSAFE`].join("\n");
67
+ case "BlockStatement":
68
+ return statement.body.map((child) => formatStatement(child, indent)).join("\n");
69
+ }
70
+ }
71
+
72
+ function formatPattern(pattern: PatternNode): string {
73
+ switch (pattern.kind) {
74
+ case "WildcardPattern":
75
+ return "_";
76
+ case "IdentifierPattern":
77
+ return pattern.name;
78
+ case "VariantPattern":
79
+ return `${pattern.variantName}(${pattern.bindings.join(", ")})`;
80
+ case "LiteralPattern":
81
+ return formatExpression(pattern.expression);
82
+ default:
83
+ return "_";
84
+ }
85
+ }
86
+
87
+ function formatProgram(program: ProgramNode): string {
88
+ const lines = [`PROGRAM ${program.name}`, ""];
89
+ for (const constant of program.consts) lines.push(`CONST ${constant.name} = ${formatExpression(constant.expression)}`);
90
+ for (const fn of program.functions) {
91
+ lines.push(`${fn.signature.isAsync ? "ASYNC " : ""}FUNCTION ${fn.signature.name}(${fn.signature.params.map((param) => param.name).join(", ")}) BEGIN`);
92
+ lines.push(...fn.body.map((statement) => formatStatement(statement, " ")));
93
+ lines.push("END-FUNCTION", "");
94
+ }
95
+ lines.push("BEGIN");
96
+ lines.push(...program.body.map((statement) => formatStatement(statement, " ")));
97
+ lines.push("END", "");
98
+ return lines.join("\n");
99
+ }
100
+
101
+ export function formatSource(source: string): string {
102
+ return formatProgram(parseSource(source));
103
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist"
5
+ },
6
+ "include": ["src/**/*.ts"]
7
+ }
@@ -0,0 +1,5 @@
1
+ PROGRAM LEGACYDEMO
2
+
3
+ BEGIN
4
+ DISPLAY "Converted legacy COBOL program LEGACYDEMO"
5
+ END
package/install.ps1 ADDED
@@ -0,0 +1,4 @@
1
+ Write-Host "Installing COBOL-X workspace dependencies..."
2
+ npm install
3
+ npm run build
4
+ Write-Host "COBOL-X built successfully."
package/install.sh ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ npm install
4
+ npm run build
5
+ echo "COBOL-X built successfully."
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "@cobolx/linter",
3
+ "version": "0.2.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "scripts": {
7
+ "build": "tsc -p tsconfig.json",
8
+ "check": "tsc -p tsconfig.json --noEmit",
9
+ "clean": "if (Test-Path dist) { Remove-Item -Recurse -Force dist }"
10
+ },
11
+ "dependencies": {
12
+ "@cobolx/compiler": "0.2.0"
13
+ }
14
+ }
@@ -0,0 +1,2 @@
1
+ import type { Diagnostic } from "@cobolx/compiler";
2
+ export declare function lintSource(source: string): Diagnostic[];
@@ -0,0 +1,18 @@
1
+ import { analyzeSource } from "@cobolx/compiler";
2
+ export function lintSource(source) {
3
+ const diagnostics = [...analyzeSource(source).diagnostics];
4
+ for (const [index, line] of source.split(/\r?\n/).entries()) {
5
+ if (/^\s*(program|begin|end|set|display|input|if|then|else|function|return)\b/.test(line)) {
6
+ diagnostics.push({
7
+ message: "Prefer uppercase COBOL-X keywords for consistency",
8
+ severity: "warning",
9
+ range: {
10
+ start: { line: index + 1, column: 1, offset: 0 },
11
+ end: { line: index + 1, column: line.length + 1, offset: 0 }
12
+ }
13
+ });
14
+ }
15
+ }
16
+ return diagnostics;
17
+ }
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,MAAM,WAAW,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3D,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,IAAI,0EAA0E,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1F,WAAW,CAAC,IAAI,CAAC;gBACf,OAAO,EAAE,mDAAmD;gBAC5D,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE;oBACL,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;oBAChD,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;iBAC7D;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Diagnostic } from "@cobolx/compiler";
2
+ import { analyzeSource } from "@cobolx/compiler";
3
+
4
+ export function lintSource(source: string): Diagnostic[] {
5
+ const diagnostics = [...analyzeSource(source).diagnostics];
6
+ for (const [index, line] of source.split(/\r?\n/).entries()) {
7
+ if (/^\s*(program|begin|end|set|display|input|if|then|else|function|return)\b/.test(line)) {
8
+ diagnostics.push({
9
+ message: "Prefer uppercase COBOL-X keywords for consistency",
10
+ severity: "warning",
11
+ range: {
12
+ start: { line: index + 1, column: 1, offset: 0 },
13
+ end: { line: index + 1, column: line.length + 1, offset: 0 }
14
+ }
15
+ });
16
+ }
17
+ }
18
+ return diagnostics;
19
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist"
5
+ },
6
+ "include": ["src/**/*.ts"]
7
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@cobolx/lsp",
3
+ "version": "0.2.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "scripts": {
7
+ "build": "tsc -p tsconfig.json",
8
+ "check": "tsc -p tsconfig.json --noEmit",
9
+ "clean": "if (Test-Path dist) { Remove-Item -Recurse -Force dist }"
10
+ },
11
+ "dependencies": {
12
+ "@cobolx/compiler": "0.2.0",
13
+ "vscode-languageserver": "^9.0.1",
14
+ "vscode-languageserver-textdocument": "^1.0.12"
15
+ }
16
+ }