SourceText

Struct SourceText 

Source
pub struct SourceText { /* private fields */ }
Expand description

Represents source code text with line mapping and optional URL reference.

This struct manages the raw source text and provides utilities for:

  • Text extraction at specific offsets or ranges
  • Character and line/column position tracking
  • LSP position and range conversions (when lsp-types feature is enabled)
  • Error reporting with precise location information

Implementations§

Source§

impl SourceText

Source

pub fn apply_edits(&mut self, edits: &[TextEdit]) -> usize

Applies multiple text edits to the source text and returns the minimum affected offset.

This method is used for incremental updates to source code, such as those received from LSP clients or other text editing operations.

§Arguments
  • edits - A slice of TextEdit operations to apply
§Returns

The minimum byte offset that was affected by any of the edits. This is useful for determining where to restart parsing after incremental changes.

§Examples
let mut source = SourceText::new("let x = 5;");
let edits = vec![TextEdit { span: 4..5, text: "y".to_string() }];
let min_offset = source.apply_edits(&edits);
assert_eq!(min_offset, 4);
Source

pub fn view(&self, range: Range<usize>) -> SourceView<'_>

Creates a new SourceText containing a slice of the original text.

This method extracts a portion of the source text and creates a new SourceText instance with the extracted content. The line map is rebuilt for the new content.

§Arguments
  • range - The byte range to extract from the original text
§Returns

A new SourceText instance containing the extracted text slice

§Examples
let source = SourceText::new("fn main() {\n    println!(\"Hello\");\n}");
let slice = source.slice(0..12); // "fn main() {"
Source

pub fn get_url(&self) -> Option<&Url>

Gets the URL associated with this source text, if any.

§Returns

An Option<&Url> containing the URL reference if one was set, or None if no URL is associated with this source text.

§Examples
let source = SourceText::new_with_url("code", Url::parse("file:///main.rs").unwrap());
assert!(source.get_url().is_some());
Source

pub fn len(&self) -> usize

Gets the length of the source text in bytes.

§Returns

The length of the source text in bytes.

§Examples
let source = SourceText::new("Hello, world!");
assert_eq!(source.len(), 13);
Source

pub fn is_empty(&self) -> bool

Checks if the source text is empty.

§Returns

true if the source text is empty, false otherwise.

§Examples
let source = SourceText::new("");
assert!(source.is_empty());
Source§

impl SourceText

Source

pub fn new(input: impl ToString) -> Self

Creates a new SourceText from a string.

§Arguments
  • input - The source code text
§Examples
let source = SourceText::new("fn main() {}");
Source

pub fn new_with_url(input: impl ToString, url: Url) -> Self

Creates a new SourceText from a string with an optional URL.

§Arguments
  • input - The source code text
  • url - URL reference for the source file
§Examples
let source = SourceText::new_with_url("fn main() {}", Url::parse("file:///main.rs").unwrap());
Source

pub fn lsp_to_text_edit(&self, edit: TextEdit) -> TextEdit

Converts an LSP TextEdit to a TextEdit.

§Arguments
  • edit - The LSP TextEdit to convert
§Returns

A TextEdit with byte-based span suitable for internal use.

§Availability

This method is only available when the lsp-types feature is enabled.

Source

pub fn syntax_error( &self, message: impl Into<String>, offset: usize, ) -> OakError

Creates a kind error with location information.

§Arguments
  • message - The error message
  • offset - The byte offset where the error occurred
§Returns

A PexError with precise location information including line and column.

§Examples
let source = SourceText::new("let x =");
let error = source.syntax_error("Unexpected end of input", 7);

Creates a kind error with location information.

§Arguments
  • message - The error message
  • offset - The byte offset where the error occurred
§Returns

A PexError with precise location information including line and column.

§Examples
let source = SourceText::new("let x =");
let error = source.syntax_error("Unexpected end of input", 7);
Source

pub fn unexpected_character(&self, character: char, offset: usize) -> OakError

Creates an error for an unexpected character with location information.

§Arguments
  • character - The unexpected character
  • offset - The byte offset where the unexpected character was found
§Returns

A PexError with precise location information including line and column.

§Examples
let source = SourceText::new("let x@y = 5");
let error = source.unexpected_character('@', 6);
Source

pub fn get_location(&self, offset: usize) -> SourceLocation

Gets the source location for a given byte offset.

§Arguments
  • offset - The byte offset to get location for
§Returns

A SourceLocation with line, column, and optional URL information.

§Examples
let source = SourceText::new("line 1\nline 2\n");
let location = source.get_location(8); // Start of second line
assert_eq!(location.line, 2);
assert_eq!(location.column, 0);

Trait Implementations§

Source§

impl Clone for SourceText

Source§

fn clone(&self) -> SourceText

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SourceText

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SourceText

Source§

fn default() -> SourceText

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for SourceText

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<'view> From<&'view SourceText> for SourceView<'view>

Source§

fn from(value: &'view SourceText) -> Self

Converts to this type from the input type.
Source§

impl Hash for SourceText

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for SourceText

Source§

fn eq(&self, other: &SourceText) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for SourceText

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<'input> Source for &'input SourceText

Source§

fn length(&self) -> usize

Get the length of this source. Read more
Source§

fn get_text_in(&self, range: Range<usize>) -> &str

Get the text content at the specified range. Read more
Source§

fn offset_to_position(&self, offset: usize) -> Position

Convert an offset to position information for error reporting. Read more
Source§

fn position_to_offset(&self, position: Position) -> usize

Convert a position to an offset. Read more
Source§

fn is_empty(&self) -> bool

Check if the source is empty.
Source§

fn get_char_at(&self, offset: usize) -> Option<char>

Get a single character at the specified offset. Read more
Source§

fn get_text_from(&self, offset: usize) -> &str

Get the text from the current position to the end of the source. Read more
Source§

fn get_url(&self) -> Option<&Url>

Get the URL of this source, if available. Read more
Source§

fn span_to_lsp_range(&self, span: Range<usize>) -> Range

Converts a byte range to an LSP Range. Read more
Source§

fn lsp_range_to_span(&self, range: Range) -> Range<usize>

Converts an LSP Range to a byte-based source span. Read more
Source§

fn find_char_from(&self, offset: usize, ch: char) -> Option<usize>

Find the next occurrence of a character starting from an offset. Read more
Source§

fn find_str_from(&self, offset: usize, pattern: &str) -> Option<usize>

Find the next occurrence of a substring starting from an offset. Read more
Source§

fn syntax_error(&self, message: impl Into<String>, position: usize) -> OakError

Create an error for an invalid range. Read more
Source§

impl Eq for SourceText

Source§

impl StructuralPartialEq for SourceText

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,