Skip to content

Commit b712db0

Browse files
committed
feat: handle paths via source_file instead of cmt_file
1 parent 5019280 commit b712db0

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

jscomp/gentype/GenTypeMain.ml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,6 @@ let processCmtFile cmt =
136136
if !Debug.basic then Log_.item "Cmt %s\n" cmt;
137137
let cmtFile = cmt |> Paths.getCmtFile in
138138
if cmtFile <> "" then
139-
let outputFile = cmt |> Paths.getOutputFile ~config in
140-
let outputFileRelative = cmt |> Paths.getOutputFileRelative ~config in
141139
let fileName = cmt |> Paths.getModuleName in
142140
let isInterface = Filename.check_suffix cmtFile ".cmti" in
143141
let inputCMT, hasGenTypeAnnotations = readInputCmt isInterface cmtFile in
@@ -151,6 +149,10 @@ let processCmtFile cmt =
151149
| true -> ".resi"
152150
| false -> ".res")
153151
in
152+
let outputFile = sourceFile |> Paths.getOutputFile ~config in
153+
let outputFileRelative =
154+
sourceFile |> Paths.getOutputFileRelative ~config
155+
in
154156
let resolver =
155157
ModuleResolver.createLazyResolver ~config ~extensions:[".res"; ".shim.ts"]
156158
~excludeFile:(fun fname ->

jscomp/gentype/Paths.ml

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,42 @@ let findNameSpace cmt =
2828
cmt |> Filename.basename |> (Filename.chop_extension [@doesNotRaise])
2929
|> keepAfterDash
3030

31-
let getOutputFileRelative ~config cmt =
32-
(cmt |> handleNamespace) ^ ModuleExtension.tsInputFileSuffix ~config
31+
let remove_project_root_from_absolute_path ~(config : Config.t) source_path =
32+
let i = String.length config.projectRoot + 1 in
33+
let n = String.length source_path - i in
34+
(String.sub source_path i n [@doesNotRaise])
3335

34-
let getOutputFile ~(config : Config.t) cmt =
35-
Filename.concat config.projectRoot (getOutputFileRelative ~config cmt)
36+
let getOutputFileRelative ~config source_path =
37+
if Filename.is_relative source_path then
38+
(source_path |> handleNamespace) ^ ModuleExtension.tsInputFileSuffix ~config
39+
else
40+
let relative_path =
41+
remove_project_root_from_absolute_path ~config source_path
42+
in
43+
(relative_path |> handleNamespace)
44+
^ ModuleExtension.tsInputFileSuffix ~config
45+
46+
let getOutputFile ~(config : Config.t) sourcePath =
47+
if Filename.is_relative sourcePath then
48+
(* assuming a relative path from the project root *)
49+
Filename.concat config.projectRoot
50+
(getOutputFileRelative ~config sourcePath)
51+
else
52+
(* we want to place the output beside the source file *)
53+
let relative_path =
54+
remove_project_root_from_absolute_path ~config sourcePath
55+
in
56+
Filename.concat config.projectRoot
57+
(getOutputFileRelative ~config relative_path)
3658

3759
let getModuleName cmt =
3860
cmt |> handleNamespace |> Filename.basename |> ModuleName.fromStringUnsafe
3961

4062
let getCmtFile cmt =
41-
let pathCmt = Filename.concat (Sys.getcwd ()) cmt in
63+
let pathCmt =
64+
if Filename.is_relative cmt then Filename.concat (Sys.getcwd ()) cmt
65+
else cmt
66+
in
4267
let cmtFile =
4368
if Filename.check_suffix pathCmt ".cmt" then
4469
let pathCmtLowerCase =

0 commit comments

Comments
 (0)