Skip to content

Commit 67dc504

Browse files
committed
refactor(manifest): Simplify frontmatter editing
1 parent e9c744b commit 67dc504

File tree

2 files changed

+25
-27
lines changed

2 files changed

+25
-27
lines changed

src/cargo/util/frontmatter.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,17 +110,33 @@ impl<'s> ScriptSource<'s> {
110110
self.shebang.clone().map(|span| &self.raw[span])
111111
}
112112

113+
pub fn shebang_span(&self) -> Option<Span> {
114+
self.shebang.clone()
115+
}
116+
113117
pub fn info(&self) -> Option<&'s str> {
114118
self.info.clone().map(|span| &self.raw[span])
115119
}
116120

121+
pub fn info_span(&self) -> Option<Span> {
122+
self.info.clone()
123+
}
124+
117125
pub fn frontmatter(&self) -> Option<&'s str> {
118126
self.frontmatter.clone().map(|span| &self.raw[span])
119127
}
120128

129+
pub fn frontmatter_span(&self) -> Option<Span> {
130+
self.frontmatter.clone()
131+
}
132+
121133
pub fn content(&self) -> &'s str {
122134
&self.raw[self.content.clone()]
123135
}
136+
137+
pub fn content_span(&self) -> Span {
138+
self.content.clone()
139+
}
124140
}
125141

126142
/// Returns the index after the shebang line, if present

src/cargo/util/toml_mut/manifest.rs

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -277,11 +277,11 @@ impl LocalManifest {
277277
let mut embedded = None;
278278
if is_embedded(path) {
279279
let source = ScriptSource::parse(&data)?;
280-
if let Some(frontmatter) = source.frontmatter() {
281-
embedded = Some(Embedded::exists(&data, frontmatter));
282-
data = frontmatter.to_owned();
283-
} else if let Some(shebang) = source.shebang() {
284-
embedded = Some(Embedded::after(&data, shebang));
280+
if let Some(frontmatter) = source.frontmatter_span() {
281+
embedded = Some(Embedded::exists(frontmatter));
282+
data = source.frontmatter().unwrap().to_owned();
283+
} else if let Some(shebang) = source.shebang_span() {
284+
embedded = Some(Embedded::after(shebang));
285285
data = String::new();
286286
} else {
287287
embedded = Some(Embedded::start());
@@ -592,33 +592,15 @@ impl Embedded {
592592
Self::Implicit(0)
593593
}
594594

595-
fn after(input: &str, after: &str) -> Self {
596-
let span = substr_span(input, after);
597-
let end = span.end;
598-
Self::Implicit(end)
595+
fn after(after: std::ops::Range<usize>) -> Self {
596+
Self::Implicit(after.end)
599597
}
600598

601-
fn exists(input: &str, exists: &str) -> Self {
602-
let span = substr_span(input, exists);
603-
Self::Explicit(span)
599+
fn exists(exists: std::ops::Range<usize>) -> Self {
600+
Self::Explicit(exists)
604601
}
605602
}
606603

607-
fn substr_span(haystack: &str, needle: &str) -> std::ops::Range<usize> {
608-
let haystack_start_ptr = haystack.as_ptr();
609-
let haystack_end_ptr = haystack[haystack.len()..haystack.len()].as_ptr();
610-
611-
let needle_start_ptr = needle.as_ptr();
612-
let needle_end_ptr = needle[needle.len()..needle.len()].as_ptr();
613-
614-
assert!(needle_end_ptr < haystack_end_ptr);
615-
assert!(haystack_start_ptr <= needle_start_ptr);
616-
let start = needle_start_ptr as usize - haystack_start_ptr as usize;
617-
let end = start + needle.len();
618-
619-
start..end
620-
}
621-
622604
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
623605
enum DependencyStatus {
624606
None,

0 commit comments

Comments
 (0)