File tree Expand file tree Collapse file tree 1 file changed +23
-0
lines changed Expand file tree Collapse file tree 1 file changed +23
-0
lines changed Original file line number Diff line number Diff line change @@ -12,6 +12,21 @@ pub enum ProjectObjectNode {
12
12
Dir ( String , Vec < ProjectObjectNode > ) ,
13
13
}
14
14
15
+ fn join_single_dir_entries ( nodes : & mut Vec < ProjectObjectNode > ) {
16
+ for node in nodes {
17
+ if let ProjectObjectNode :: Dir ( my_name, my_nodes) = node {
18
+ join_single_dir_entries ( my_nodes) ;
19
+ // If this directory consists of a single sub-directory...
20
+ if let [ ProjectObjectNode :: Dir ( sub_name, sub_nodes) ] = & mut my_nodes[ ..] {
21
+ // ... join the two names with a path separator and eliminate the layer
22
+ * my_name += "/" ;
23
+ * my_name += sub_name;
24
+ * my_nodes = std:: mem:: take ( sub_nodes) ;
25
+ }
26
+ }
27
+ }
28
+ }
29
+
15
30
fn find_dir < ' a > (
16
31
name : & str ,
17
32
nodes : & ' a mut Vec < ProjectObjectNode > ,
@@ -60,6 +75,14 @@ fn build_nodes(
60
75
let filename = path. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) . to_string ( ) ;
61
76
out_nodes. push ( ProjectObjectNode :: Unit ( filename, idx) ) ;
62
77
}
78
+ // Within the top-level module directories, join paths. Leave the
79
+ // top-level name intact though since it's the module name.
80
+ for node in & mut nodes {
81
+ if let ProjectObjectNode :: Dir ( _, sub_nodes) = node {
82
+ join_single_dir_entries ( sub_nodes) ;
83
+ }
84
+ }
85
+
63
86
nodes
64
87
}
65
88
You can’t perform that action at this time.
0 commit comments