Fix 'find_modules_prefix' when generating docs.
This commit is contained in:
parent
ab32302117
commit
2c987e289d
|
@ -575,22 +575,40 @@ fn new_timestamp() -> Duration {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn find_modules_prefix(modules: &[DocLink]) -> String {
|
fn find_modules_prefix(modules: &[DocLink]) -> String {
|
||||||
modules
|
do_find_modules_prefix("", modules)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn do_find_modules_prefix(current_prefix: &str, modules: &[DocLink]) -> String {
|
||||||
|
let prefix = modules
|
||||||
.iter()
|
.iter()
|
||||||
.fold(None, |previous_prefix, module| {
|
.fold(None, |previous_prefix, module| {
|
||||||
let prefix = module
|
let name = module.name.strip_prefix(current_prefix).unwrap_or_default();
|
||||||
.name
|
let name = if name.starts_with('/') {
|
||||||
.split('/')
|
name.strip_prefix('/').unwrap_or_default()
|
||||||
.next()
|
} else {
|
||||||
.unwrap_or_default()
|
name
|
||||||
.to_string();
|
};
|
||||||
|
|
||||||
|
let prefix = name.split('/').next().unwrap_or_default().to_string();
|
||||||
|
|
||||||
match previous_prefix {
|
match previous_prefix {
|
||||||
None if prefix != module.name => Some(prefix),
|
None if prefix != module.name => Some(prefix),
|
||||||
Some(..) if Some(prefix) == previous_prefix => previous_prefix,
|
Some(..) if Some(prefix) == previous_prefix => previous_prefix,
|
||||||
_ => Some(String::new()),
|
_ => Some(String::new()),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.unwrap_or_default()
|
.unwrap_or_default();
|
||||||
|
|
||||||
|
if prefix.is_empty() {
|
||||||
|
current_prefix.to_string()
|
||||||
|
} else {
|
||||||
|
let mut current_prefix = current_prefix.to_owned();
|
||||||
|
if !current_prefix.is_empty() {
|
||||||
|
current_prefix.push('/');
|
||||||
|
}
|
||||||
|
current_prefix.push_str(&prefix);
|
||||||
|
do_find_modules_prefix(¤t_prefix, modules)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -602,7 +620,7 @@ fn find_modules_prefix_test() {
|
||||||
name: "aiken/list".to_string(),
|
name: "aiken/list".to_string(),
|
||||||
path: String::new()
|
path: String::new()
|
||||||
}]),
|
}]),
|
||||||
"aiken".to_string()
|
"aiken/list".to_string()
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
@ -620,7 +638,7 @@ fn find_modules_prefix_test() {
|
||||||
path: String::new()
|
path: String::new()
|
||||||
},
|
},
|
||||||
DocLink {
|
DocLink {
|
||||||
name: "aiken/byte_array".to_string(),
|
name: "aiken/bytearray".to_string(),
|
||||||
path: String::new(),
|
path: String::new(),
|
||||||
}
|
}
|
||||||
]),
|
]),
|
||||||
|
@ -634,7 +652,56 @@ fn find_modules_prefix_test() {
|
||||||
path: String::new()
|
path: String::new()
|
||||||
},
|
},
|
||||||
DocLink {
|
DocLink {
|
||||||
name: "foo/byte_array".to_string(),
|
name: "foo/bytearray".to_string(),
|
||||||
|
path: String::new(),
|
||||||
|
}
|
||||||
|
]),
|
||||||
|
"".to_string()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn find_modules_prefix_test_2() {
|
||||||
|
assert_eq!(
|
||||||
|
find_modules_prefix(&[
|
||||||
|
DocLink {
|
||||||
|
name: "aiken/trees/bst".to_string(),
|
||||||
|
path: String::new()
|
||||||
|
},
|
||||||
|
DocLink {
|
||||||
|
name: "aiken/trees/mt".to_string(),
|
||||||
|
path: String::new(),
|
||||||
|
}
|
||||||
|
]),
|
||||||
|
"aiken/trees".to_string()
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
find_modules_prefix(&[
|
||||||
|
DocLink {
|
||||||
|
name: "aiken/trees/bst".to_string(),
|
||||||
|
path: String::new()
|
||||||
|
},
|
||||||
|
DocLink {
|
||||||
|
name: "aiken/trees/mt".to_string(),
|
||||||
|
path: String::new(),
|
||||||
|
},
|
||||||
|
DocLink {
|
||||||
|
name: "aiken/sequences".to_string(),
|
||||||
|
path: String::new(),
|
||||||
|
}
|
||||||
|
]),
|
||||||
|
"aiken".to_string()
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
find_modules_prefix(&[
|
||||||
|
DocLink {
|
||||||
|
name: "aiken".to_string(),
|
||||||
|
path: String::new()
|
||||||
|
},
|
||||||
|
DocLink {
|
||||||
|
name: "aiken/prelude".to_string(),
|
||||||
path: String::new(),
|
path: String::new(),
|
||||||
}
|
}
|
||||||
]),
|
]),
|
||||||
|
|
Loading…
Reference in New Issue