Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit97d0134

Browse files
committed
rt2
1 parent4308fed commit97d0134

File tree

6 files changed

+68
-16
lines changed

6 files changed

+68
-16
lines changed

‎2/cli.re‎

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
openBelt;
2+
13
exceptionUnrecognizedInput(string);
24

35
moduleArgs= {
@@ -31,6 +33,7 @@ let optionToFileType = input =>
3133
|"css"=>Compiler2.CSS
3234
|"graphql"=>Compiler2.GraphQL
3335
|"typed"=>Compiler2.Typed
36+
|"reason"=>Compiler2.Reason
3437
|_=>raise(UnrecognizedInput(input))
3538
};
3639

@@ -43,28 +46,27 @@ let program =
4346
|.Commander.parse(Commander.Process.argv)
4447
|.Args.decode;
4548

46-
letfilename=
47-
program|.Args.args|.Belt.Array.get(0)|.Belt.Option.getExn;
49+
letfilename= program|.Args.args|.Array.get(0)|.Option.getExn;
4850

4951
letinputType=
5052
program
5153
|.Args.input
52-
|.Belt.Option.mapWithDefault(
54+
|.Option.mapWithDefault(
5355
inferInputTypeFromFileExtension(filename),
5456
optionToFileType,
5557
);
5658

5759
letoutputType=
5860
program
5961
|.Args.output
60-
|.Belt.Option.map(optionToFileType)
61-
|.Belt.Option.getWithDefault(Compiler2.Typed);
62+
|.Option.map(optionToFileType)
63+
|.Option.getWithDefault(Compiler2.Typed);
6264

6365
letinputSource=Node.Fs.readFileAsUtf8Sync(filename);
6466

6567
letinputFile=
6668
Compiler2.{type_: inputType, name: filename, source: inputSource};
6769

68-
letoutput=Compiler2.compile(inputFile, outputType);
70+
letoutputs=Compiler2.compile(inputFile, outputType);
6971

70-
Js.log(output);
72+
Array.forEach(outputs,Js.log);

‎2/compiler2.re‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
openBelt;
2+
13
typefileType=
24
|CSS
35
|FlowDefinition
@@ -13,13 +15,17 @@ type file = {
1315
};
1416

1517
letcompile= (file, target)=> {
16-
lettypedAst=
18+
lettypedModules=
1719
switch (file.type_) {
1820
|FlowDefinition=>ParseFlow.parse(~name=file.name, ~source=file.source)
1921
|_=>raise(Errors2.Unimplemented)
2022
};
21-
switch (target) {
22-
|FlowDefinition=>GenerateFlow.compile(typedAst)
23-
|_=>raise(Errors2.Unimplemented)
24-
};
23+
24+
Array.map(typedModules, typedMod=>
25+
switch (target) {
26+
|FlowDefinition=>GenerateFlow.compile(typedMod)
27+
|Reason=>GenerateReason.compile(typedMod)
28+
|_=>raise(Errors2.Unimplemented)
29+
}
30+
);
2531
};

‎2/generateReason.re‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
openBelt;
22

3+
letextractName= identifier=>
4+
switch (identifier) {
5+
|DotTyped.Identifier(id)=> id
6+
|DotTyped.UnknownIdentifier=>"Unknown"
7+
};
8+
39
letrecfromDotTyped=
410
fun
511
|DotTyped.Regex=>Rabel.regex()
@@ -12,3 +18,17 @@ let rec fromDotTyped =
1218
|DotTyped.Optional(t)=>Rabel.optional(fromDotTyped(t))
1319
|DotTyped.Array(t)=>Rabel.array(fromDotTyped(t))
1420
|DotTyped.Tuple(types)=> types|.Array.map(fromDotTyped)|.Rabel.tuple;
21+
22+
letreccompile= (~moduleName=?, moduleDefinition)=>
23+
switch (moduleDefinition) {
24+
|DotTyped.ModuleDeclaration({name, declarations})=>
25+
letdeclarations=
26+
Array.map(declarations, compile(~moduleName=extractName(name)));
27+
Js.Array.joinWith("\n", declarations);
28+
29+
|DotTyped.LetDeclaration({name, type_})=>
30+
Rabel.bsModule(
31+
~module_=Option.getExn(moduleName),
32+
Rabel.external_(extractName(name), fromDotTyped(type_),""),
33+
)
34+
};

‎2/parseFlow.re‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,12 @@ let parse = (~name: string, ~source: string) => {
9494
let (flowAst,_errors)=
9595
Parser_flow.program_file(source,Some(Loc.SourceFile(name)));
9696
let (_,statements,_)= flowAst;
97-
DotTyped.ModuleDeclaration({
98-
name:Identifier(name),
99-
declarations: statements|.List.toArray|.Array.map(flowAstToTypedAst),
100-
});
97+
lettypedModule=
98+
DotTyped.ModuleDeclaration({
99+
name:Identifier(name),
100+
declarations:
101+
statements|.List.toArray|.Array.map(flowAstToTypedAst),
102+
});
103+
104+
[|typedModule|];
101105
};

‎2/rabel.re‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,22 @@ let optional = t => Ast.apply("option", [|t|]);
1919
letarray= t=>Ast.apply("array",[|t|]);
2020

2121
lettuple= ts=>Ast.apply("", ts);
22+
23+
letmodule_= (name, statements)=>
24+
"module "
25+
++ name
26+
++" = {\n"
27+
++ (statements|.Array.map(s=>" "++ s)|>Js.Array.joinWith("\n"))
28+
++"\n}";
29+
30+
letbsModule= (~module_=?, statement)=> {
31+
letdecorator=
32+
switch (module_) {
33+
|Some(moduleName)=>"[@bs.module\""++ moduleName++"\"]"
34+
|None=>"[@bs.module]"
35+
};
36+
decorator++" "++ statement;
37+
};
38+
39+
letexternal_= (name, type_, exported)=>
40+
"external "++ name++" : "++ type_++" = "++"\""++ exported++"\";";

‎package.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"main":"lib/index.js",
99
"scripts": {
1010
"test":"jest",
11+
"local":"node lib/js/2/cli.js",
1112
"build":"bsb -clean-world -make-world",
1213
"build-docs":"browserify -e lib/index.js -o docs/retyped.js -s retyped"
1314
},

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp