pub struct CodeSnippet { /* private fields */ }
Expand description
CodeSnippet
is a component of diagnostic to display code snippets.
Note: If the span spans multiple lines of code, only the first line of the code will be selected.
In the text rendered by CodeSnippet
, the specific position of the span will be highlighted by an underline.
Therefore, we recommend that do not use a span with a large scope, the scope of the span should be as small as possible and point to the problem location in the code snippet.
Implementations§
Source§impl CodeSnippet
impl CodeSnippet
Sourcepub fn new(code_span: Span, source_map: Arc<SourceMap>) -> Self
pub fn new(code_span: Span, source_map: Arc<SourceMap>) -> Self
§Examples
If you want to get one line code snippet from ‘compiler_base/error/src/diagnostic/test_datas/code_snippet’ file
ⓘ
Line 1 Code Snippet.
Line 2 Code Snippet.
let mut sb = StyledBuffer::<DiagnosticStyle>::new();
let mut errs = vec![];
// 1. You shouled load the file and create the `SourceFile`
let filename = fs::canonicalize(&PathBuf::from("./src/diagnostic/test_datas/code_snippet"))
.unwrap()
.display()
.to_string();
let src = std::fs::read_to_string(filename.clone()).unwrap();
let sm = SourceMap::new(FilePathMapping::empty());
sm.new_source_file(PathBuf::from(filename.clone()).into(), src.to_string());
// 2. You should create a code span for the code snippet.
let code_span = SpanData {
lo: new_byte_pos(22),
hi: new_byte_pos(42),
}.span();
// 3. You can create the `CodeSnippet` by the `SourceFile`,
// and render text "Line 2 Code Snippet.".
let code_snippet = CodeSnippet::new(code_span, Arc::new(sm));
code_snippet.format(&mut sb, &mut errs);
Trait Implementations§
Source§impl Component<DiagnosticStyle> for CodeSnippet
impl Component<DiagnosticStyle> for CodeSnippet
Source§fn format(
&self,
sb: &mut StyledBuffer<DiagnosticStyle>,
errs: &mut Vec<ComponentFormatError>,
)
fn format( &self, sb: &mut StyledBuffer<DiagnosticStyle>, errs: &mut Vec<ComponentFormatError>, )
Auto Trait Implementations§
impl Freeze for CodeSnippet
impl !RefUnwindSafe for CodeSnippet
impl !Send for CodeSnippet
impl !Sync for CodeSnippet
impl Unpin for CodeSnippet
impl !UnwindSafe for CodeSnippet
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more