[][src]Struct codespan::Files

pub struct Files<Source> { /* fields omitted */ }

A database of source files.

The Source generic parameter determines how source text is stored. Using String will have Files take ownership of all source text. Smart pointer types such as Cow<'_, str>, Rc<str> or Arc<str> can be used to share the source text with the rest of the program.

Methods

impl<Source> Files<Source> where
    Source: AsRef<str>, 
[src]

pub fn new() -> Self[src]

Create a new, empty database of files.

pub fn add(&mut self, name: impl Into<OsString>, source: Source) -> FileId[src]

Add a file to the database, returning the handle that can be used to refer to it again.

pub fn update(&mut self, file_id: FileId, source: Source)[src]

Update a source file in place.

This will mean that any outstanding byte indexes will now point to invalid locations.

pub fn name(&self, file_id: FileId) -> &OsStr[src]

Get the name of the source file.

use codespan::Files;

let name = "test";

let mut files = Files::new();
let file_id = files.add(name, "hello world!");

assert_eq!(files.name(file_id), name);

pub fn line_span(
    &self,
    file_id: FileId,
    line_index: impl Into<LineIndex>
) -> Result<Span, LineIndexOutOfBoundsError>
[src]

Get the span at the given line index.

use codespan::{Files, LineIndex, LineIndexOutOfBoundsError, Span};

let mut files = Files::new();
let file_id = files.add("test", "foo\nbar\r\n\nbaz");

let line_sources = (0..5)
    .map(|line| files.line_span(file_id, line))
    .collect::<Vec<_>>();

assert_eq!(
    line_sources,
    [
        Ok(Span::new(0, 4)),    // 0: "foo\n"
        Ok(Span::new(4, 9)),    // 1: "bar\r\n"
        Ok(Span::new(9, 10)),   // 2: ""
        Ok(Span::new(10, 13)),  // 3: "baz"
        Err(LineIndexOutOfBoundsError {
            given: LineIndex::from(5),
            max: LineIndex::from(4),
        }),
    ]
);

pub fn line_index(
    &self,
    file_id: FileId,
    byte_index: impl Into<ByteIndex>
) -> LineIndex
[src]

Get the line index at the given byte in the source file.

use codespan::{Files, LineIndex};

let mut files = Files::new();
let file_id = files.add("test", "foo\nbar\r\n\nbaz");

assert_eq!(files.line_index(file_id, 0), LineIndex::from(0));
assert_eq!(files.line_index(file_id, 7), LineIndex::from(1));
assert_eq!(files.line_index(file_id, 8), LineIndex::from(1));
assert_eq!(files.line_index(file_id, 9), LineIndex::from(2));
assert_eq!(files.line_index(file_id, 100), LineIndex::from(3));

pub fn location(
    &self,
    file_id: FileId,
    byte_index: impl Into<ByteIndex>
) -> Result<Location, LocationError>
[src]

Get the location at the given byte index in the source file.

use codespan::{ByteIndex, Files, Location, LocationError, Span};

let mut files = Files::new();
let file_id = files.add("test", "foo\nbar\r\n\nbaz");

assert_eq!(files.location(file_id, 0), Ok(Location::new(0, 0)));
assert_eq!(files.location(file_id, 7), Ok(Location::new(1, 3)));
assert_eq!(files.location(file_id, 8), Ok(Location::new(1, 4)));
assert_eq!(files.location(file_id, 9), Ok(Location::new(2, 0)));
assert_eq!(
    files.location(file_id, 100),
    Err(LocationError::OutOfBounds {
        given: ByteIndex::from(100),
        span: Span::new(0, 13),
    }),
);

pub fn source(&self, file_id: FileId) -> &Source[src]

Get the source of the file.

use codespan::Files;

let source = "hello world!";

let mut files = Files::new();
let file_id = files.add("test", source);

assert_eq!(*files.source(file_id), source);

pub fn source_span(&self, file_id: FileId) -> Span[src]

Return the span of the full source.

use codespan::{Files, Span};

let source = "hello world!";

let mut files = Files::new();
let file_id = files.add("test", source);

assert_eq!(files.source_span(file_id), Span::from_str(source));

pub fn source_slice(
    &self,
    file_id: FileId,
    span: impl Into<Span>
) -> Result<&str, SpanOutOfBoundsError>
[src]

Return a slice of the source file, given a span.

use codespan::{Files, Span};

let mut files = Files::new();
let file_id = files.add("test",  "hello world!");

assert_eq!(files.source_slice(file_id, Span::new(0, 5)), Ok("hello"));
assert!(files.source_slice(file_id, Span::new(0, 100)).is_err());

Trait Implementations

impl<Source: Clone> Clone for Files<Source>[src]

impl<Source: Debug> Debug for Files<Source>[src]

impl<Source> Default for Files<Source> where
    Source: AsRef<str>, 
[src]

impl<'a, Source> Files<'a> for Files<Source> where
    Source: AsRef<str>, 
[src]

type FileId = FileId

A unique identifier for files in the file provider. This will be used for rendering diagnostic::Labels in the corresponding source files. Read more

type Name = String

The user-facing name of a file, to be displayed in diagnostics.

type Source = &'a str

The source code of a file.

Auto Trait Implementations

impl<Source> RefUnwindSafe for Files<Source> where
    Source: RefUnwindSafe

impl<Source> Send for Files<Source> where
    Source: Send

impl<Source> Sync for Files<Source> where
    Source: Sync

impl<Source> Unpin for Files<Source> where
    Source: Unpin

impl<Source> UnwindSafe for Files<Source> where
    Source: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.