Adjust source file API surface (#6423)

This commit is contained in:
Laurenz 2025-06-10 20:13:33 +02:00 committed by GitHub
parent a6ab6ac99a
commit 98034903e4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 12 additions and 29 deletions

View File

@ -187,7 +187,7 @@ impl SystemWorld {
self.slot(id, |slot| { self.slot(id, |slot| {
if let Some(source) = slot.source.get() { if let Some(source) = slot.source.get() {
let source = source.as_ref().expect("file is not valid"); let source = source.as_ref().expect("file is not valid");
source.lines() source.lines().clone()
} else if let Some(bytes) = slot.file.get() { } else if let Some(bytes) = slot.file.get() {
let bytes = bytes.as_ref().expect("file is not valid"); let bytes = bytes.as_ref().expect("file is not valid");
Lines::try_from(bytes).expect("file is not valid utf-8") Lines::try_from(bytes).expect("file is not valid utf-8")

View File

@ -1698,7 +1698,7 @@ mod tests {
// Then, add the invalid `#cite` call. Had the document been invalid // Then, add the invalid `#cite` call. Had the document been invalid
// initially, we would have no populated document to autocomplete with. // initially, we would have no populated document to autocomplete with.
let end = world.main.len_bytes(); let end = world.main.text().len();
world.main.edit(end..end, " #cite()"); world.main.edit(end..end, " #cite()");
test_with_doc(&world, -2, doc.as_ref()) test_with_doc(&world, -2, doc.as_ref())

View File

@ -228,7 +228,7 @@ impl FilePos for (&str, isize) {
#[track_caller] #[track_caller]
fn cursor(source: &Source, cursor: isize) -> usize { fn cursor(source: &Source, cursor: isize) -> usize {
if cursor < 0 { if cursor < 0 {
source.len_bytes().checked_add_signed(cursor + 1).unwrap() source.text().len().checked_add_signed(cursor + 1).unwrap()
} else { } else {
cursor as usize cursor as usize
} }

View File

@ -6,6 +6,8 @@ use std::sync::Arc;
use crate::is_newline; use crate::is_newline;
/// A text buffer and metadata about lines. /// A text buffer and metadata about lines.
///
/// This is internally reference-counted and thus cheap to clone.
#[derive(Clone)] #[derive(Clone)]
pub struct Lines<S>(Arc<Repr<S>>); pub struct Lines<S>(Arc<Repr<S>>);

View File

@ -259,10 +259,10 @@ mod tests {
panic!("test failed"); panic!("test failed");
} }
if incremental { if incremental {
assert_ne!(source.len_bytes(), range.len(), "should have been incremental"); assert_ne!(source.text().len(), range.len(), "should have been incremental");
} else { } else {
assert_eq!( assert_eq!(
source.len_bytes(), source.text().len(),
range.len(), range.len(),
"shouldn't have been incremental" "shouldn't have been incremental"
); );

View File

@ -56,19 +56,15 @@ impl Source {
self.0.id self.0.id
} }
/// The whole source as a string slice.
pub fn lines(&self) -> Lines<String> {
Lines::clone(&self.0.lines)
}
/// The whole source as a string slice. /// The whole source as a string slice.
pub fn text(&self) -> &str { pub fn text(&self) -> &str {
self.0.lines.text() self.0.lines.text()
} }
/// Slice out the part of the source code enclosed by the range. /// An acceleration structure for conversion of UTF-8, UTF-16 and
pub fn get(&self, range: Range<usize>) -> Option<&str> { /// line/column indices.
self.text().get(range) pub fn lines(&self) -> &Lines<String> {
&self.0.lines
} }
/// Fully replace the source text. /// Fully replace the source text.
@ -107,21 +103,6 @@ impl Source {
reparse(&mut inner.root, inner.lines.text(), replace, with.len()) reparse(&mut inner.root, inner.lines.text(), replace, with.len())
} }
/// Get the length of the file in UTF-8 encoded bytes.
pub fn len_bytes(&self) -> usize {
self.0.lines.len_bytes()
}
/// Get the length of the file in UTF-16 code units.
pub fn len_utf16(&self) -> usize {
self.0.lines.len_utf16()
}
/// Get the length of the file in lines.
pub fn len_lines(&self) -> usize {
self.0.lines.len_lines()
}
/// Find the node with the given span. /// Find the node with the given span.
/// ///
/// Returns `None` if the span does not point into this source file. /// Returns `None` if the span does not point into this source file.

View File

@ -92,7 +92,7 @@ impl TestWorld {
self.slot(id, |slot| { self.slot(id, |slot| {
if let Some(source) = slot.source.get() { if let Some(source) = slot.source.get() {
let source = source.as_ref().expect("file is not valid"); let source = source.as_ref().expect("file is not valid");
source.lines() source.lines().clone()
} else if let Some(bytes) = slot.file.get() { } else if let Some(bytes) = slot.file.get() {
let bytes = bytes.as_ref().expect("file is not valid"); let bytes = bytes.as_ref().expect("file is not valid");
Lines::try_from(bytes).expect("file is not valid utf-8") Lines::try_from(bytes).expect("file is not valid utf-8")