forked from rescript-lang/rescript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.js
76 lines (70 loc) · 2.23 KB
/
test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//@ts-check
// @ts-ignore
var OCaml = require("./build/Release/tree_sitter_ocaml_binding");
OCaml.nodeTypeInfo = require("./src/node-types.json");
var P = require("tree-sitter");
var p = new P();
p.setLanguage(OCaml);
var nodeTypes = require("./node_types.js");
var { Node, getTypedefs, nodeToObject, maker } = nodeTypes;
// https://docs.google.com/document/d/1FTascZXT9cxfetuPRT2eXPQKXui4nWFivUnS_335T3U/preview
var nodeFormatter = {
header(obj) {
if (!(obj instanceof Node)) {
return null;
}
if (obj.children.length === 0) {
return ["span", {}, obj.text];
}
return ["span", {}, obj.type];
},
hasBody(obj) {
return obj.children.length > 0;
},
body(obj) {
var display = ["ol", { style: "list-style-type:none" }];
for (let i of obj.children) {
// @ts-ignore
display.push(["li", {}, ["object", { object: i }]]);
}
return display;
},
};
if (globalThis.devtoolsFormatters === undefined) {
globalThis.devtoolsFormatters = [];
}
globalThis.devtoolsFormatters.push(nodeFormatter);
// only make senses in browser
// function visual(obj, formatter) {
// var old = globalThis.devtoolsFormatters;
// try {
// if (old === undefined) {
// globalThis.devtoolsFormatters = [];
// }
// globalThis.devtoolsFormatters.push(formatter);
// console.log(obj);
// } finally {
// globalThis.devtoolsFormatters = old;
// }
// }
// visual(new Node('hi','test',[1,2,3]),nodeFormatter) works
var fs = require("fs");
var path = require("path");
var j_dir = path.join(__dirname, "..", "jscomp", "core");
var y = p.parse(fs.readFileSync(path.join(j_dir, "j.ml"), "utf8"));
/**
* mutual recursive types
*/
var typedefs = getTypedefs(y);
// var map_maker = require("./map_maker");
// var fold_maker = require("./fold_maker");
// var iter_maker = require("./iter_maker");
// var fold = maker(fold_maker.make,typedefs);
// var map = maker(map_maker.make,typedefs);
// var iter = maker(iter_maker.make,typedefs);
// var record_iter = require("./record_iter");
var record_fold = require("./record_fold");
// var record_map = require("./record_map");
var riter = maker(record_fold.make, typedefs);
// console.log(fold, map);
fs.writeFileSync(path.join(j_dir, "js_record_fold.ml"), riter, "utf8");