@@ -7246,6 +7246,11 @@ val new_extension:
7246
7246
val chop_all_extensions_maybe:
7247
7247
string ->
7248
7248
string
7249
+
7250
+ (* OCaml specific abstraction*)
7251
+ val module_name:
7252
+ string ->
7253
+ string
7249
7254
end = struct
7250
7255
#1 "ext_filename.ml"
7251
7256
(* Copyright (C) 2015-2016 Bloomberg Finance L.P.
@@ -7332,19 +7337,24 @@ let new_extension name (ext : string) =
7332
7337
search_dot name (String.length name - 1) ext
7333
7338
7334
7339
7335
- let generic_basename name =
7336
- let rec find_end n =
7337
- if n < 0 then String.sub name 0 1
7338
- else if is_dir_sep name.[n] then find_end (n - 1)
7339
- else find_beg n (n + 1)
7340
- and find_beg n p =
7341
- if n < 0 then String.sub name 0 p
7342
- else if is_dir_sep name.[n] then String.sub name (n + 1) (p - n - 1)
7343
- else find_beg (n - 1) p
7344
- in
7345
- if name = ""
7346
- then "."
7347
- else find_end (String.length name - 1)
7340
+
7341
+ (** TODO: improve efficiency
7342
+ given a path, calcuate its module name *)
7343
+ let module_name name =
7344
+ let rec search_dot i last name =
7345
+ if i < 0 then
7346
+ (match last with
7347
+ | None -> Ext_string.capitalize_ascii name
7348
+ | Some i -> Ext_string.capitalize_sub name i)
7349
+ else
7350
+ search_dot (i - 1)
7351
+ (if String.unsafe_get name i = '.' then Some i else last)
7352
+ name in
7353
+ let name = Filename.basename name in
7354
+ let name_len = String.length name in
7355
+ search_dot (name_len - 1) None name
7356
+
7357
+
7348
7358
end
7349
7359
module Ext_format : sig
7350
7360
#1 "ext_format.mli"
@@ -17711,6 +17721,32 @@ let suites =
17711
17721
string_eq (Ext_filename.chop_all_extensions_maybe ".a.b.x") "";
17712
17722
string_eq (Ext_filename.chop_all_extensions_maybe "abx") "abx";
17713
17723
end;
17724
+ __LOC__ >:: begin fun _ ->
17725
+ string_eq
17726
+ (Ext_filename.module_name "a/b/c.d")
17727
+ "C";
17728
+ string_eq
17729
+ (Ext_filename.module_name "a/b/xc.re")
17730
+ "Xc";
17731
+ string_eq
17732
+ (Ext_filename.module_name "a/b/xc.ml")
17733
+ "Xc" ;
17734
+ string_eq
17735
+ (Ext_filename.module_name "a/b/xc.mli")
17736
+ "Xc" ;
17737
+ string_eq
17738
+ (Ext_filename.module_name "a/b/xc.cppo.mli")
17739
+ "Xc";
17740
+ string_eq
17741
+ (Ext_filename.module_name "a/b/xc.cppo.")
17742
+ "Xc" ;
17743
+ string_eq
17744
+ (Ext_filename.module_name "a/b/xc..")
17745
+ "Xc" ;
17746
+ string_eq
17747
+ (Ext_filename.module_name "a/b/xc.")
17748
+ "Xc" ;
17749
+ end
17714
17750
]
17715
17751
17716
17752
0 commit comments