pinakes-core: simplify extract_aliases; return Vec<String> directly

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I020c7dc647ba7f2c4b45a951c23cb2226a6a6964
This commit is contained in:
raf 2026-02-09 15:01:51 +03:00
commit b09b405a5d
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF

View file

@ -12,7 +12,6 @@ use std::path::Path;
use regex::Regex;
use uuid::Uuid;
use crate::error::Result;
use crate::model::{LinkType, MarkdownLink, MediaId};
/// Configuration for context extraction around links
@ -279,36 +278,40 @@ pub fn resolve_link_candidates(
///
/// Obsidian uses the `aliases` field in frontmatter to define alternative names
/// for a note that can be used in wikilinks.
pub fn extract_aliases(content: &str) -> Result<Vec<String>> {
let parsed = gray_matter::Matter::<gray_matter::engine::YAML>::new().parse(content);
pub fn extract_aliases(content: &str) -> Vec<String> {
let Ok(parsed) = gray_matter::Matter::<gray_matter::engine::YAML>::new().parse(content) else {
return Vec::new();
};
if let Some(data) = parsed.ok().and_then(|p| p.data) {
if let gray_matter::Pod::Hash(map) = data {
if let Some(aliases) = map.get("aliases") {
match aliases {
gray_matter::Pod::Array(arr) => {
return Ok(arr
.iter()
.filter_map(|a| {
if let gray_matter::Pod::String(s) = a {
Some(s.clone())
} else {
None
}
})
.collect());
}
gray_matter::Pod::String(s) => {
// Single alias as string
return Ok(vec![s.clone()]);
}
_ => {}
let Some(data) = parsed.data else {
return Vec::new();
};
let gray_matter::Pod::Hash(map) = data else {
return Vec::new();
};
let Some(aliases) = map.get("aliases") else {
return Vec::new();
};
match aliases {
gray_matter::Pod::Array(arr) => arr
.iter()
.filter_map(|a| {
if let gray_matter::Pod::String(s) = a {
Some(s.clone())
} else {
None
}
}
})
.collect(),
gray_matter::Pod::String(s) => {
// Single alias as string
vec![s.clone()]
}
_ => Vec::new(),
}
Ok(Vec::new())
}
#[cfg(test)]
@ -408,11 +411,9 @@ And an embedded image: ![[diagram.png]]
// Should include relative path and .md variations
assert!(!candidates.is_empty());
assert!(
candidates
.iter()
.any(|p| p.to_string_lossy().contains("My Note.md"))
);
assert!(candidates
.iter()
.any(|p| p.to_string_lossy().contains("My Note.md")));
}
#[test]
@ -426,7 +427,7 @@ aliases:
# Content here
"#;
let aliases = extract_aliases(content).unwrap();
let aliases = extract_aliases(content);
assert_eq!(aliases, vec!["Alternative Name", "Another Alias"]);
}
@ -439,7 +440,7 @@ aliases: Single Alias
# Content
"#;
let aliases = extract_aliases(content).unwrap();
let aliases = extract_aliases(content);
assert_eq!(aliases, vec!["Single Alias"]);
}