Struct syntastica::Processor

source ·
pub struct Processor<'set, Set: LanguageSet> { /* private fields */ }
Expand description

A type for easy reuse of resources when highlighting multiple inputs.

When planning to process multiple different inputs, potentially in multiple different languages, create and store an instance of this type, so that the resusable resources will be reused.

Additionally, the Processor::process_once function provides a quick way to process an input once without keeping the reusable resources.

Instantiation

A Processor can be created by calling Processor::new with an implementation of LanguageSet.

Examples

Example: process once

This example uses the Processor::process_once function to process one input without keeping a Processor instance.

use syntastica::{style::Style, Processor};
use syntastica_parsers::{Lang, LanguageSetImpl};

let highlights = Processor::process_once(
    "fn",       // the code to process
    Lang::Rust, // the code's language
    // any valid `LanguageSet` supporting the required language
    &LanguageSetImpl::new(),
)
.unwrap();

assert_eq!(highlights, vec![vec![("fn", Some("keyword.function"))]]);

Example: instantiation with Processor::new

This example uses the Processor::new function to create a Processor instance which can then be used to process multiple different inputs.

use syntastica::{style::Style, Processor};
use syntastica_parsers_git::{Lang, LanguageSetImpl};

// get a `LanguageSet`
let language_set = LanguageSetImpl::new();

// create a `Processor` using that `LanguageSet`
let mut processor = Processor::new(&language_set);

// process some input
let highlights = processor.process("# comment", Lang::Python).unwrap();
assert_eq!(highlights, vec![vec![("# comment", Some("comment"))]]);

// process input with injections
let highlights = processor
    .process(r#"Regex::new(r".")"#, Lang::Rust)
    .unwrap();
assert_eq!(
    highlights,
    vec![vec![
        ("Regex", Some("type")),
        ("::", Some("punctuation.delimiter")),
        ("new", Some("function.call")),
        ("(", Some("punctuation.bracket")),
        ("r", Some("string")),
        ("\"", Some("string.regex")),
        (".", Some("punctuation.special")), // this is the injected regex language
        ("\"", Some("string.regex")),
        (")", Some("punctuation.bracket")),
    ]]
);

Implementations§

source§

impl<'set, Set: LanguageSet> Processor<'set, Set>

source

pub fn new(set: &'set Set) -> Self

Create a new Processor given a LanguageSet.

See the type documentation for other means of instantiation and an example.

source

pub fn process_once<'src>( code: &'src str, language: Set::Language, set: &'set Set ) -> Result<Highlights<'src>>

Create a temporary Processor and run process once.

Only use this function if you do not plan to process multiple inputs!

See the documentation for process and new for more information on the parameters, return type, and possible errors.

source

pub fn process<'src>( &mut self, code: &'src str, language: Set::Language ) -> Result<Highlights<'src>>

Process the given code using the language specified by language_name.

Returns

On success, the function returns Highlights which can be used by render for rendering to end users.

Errors

The function may result in the following errors:

source

pub fn process_tree<'src>( &mut self, code: &'src str, language: Set::Language, tree: &Node<'_> ) -> Result<Highlights<'src>>

Process the given code using the language specified by language_name using an already parsed tree.

Unlike process, this does not parse the input text, but instead uses a parsed tree that is provided by the caller. This also means that language injections must be handled by the caller.

This allows for incremental parsing, useful for e.g. text editors. See the tree-sitter Rust documentation for more information.

Example
use syntastica::{language_set::LanguageSet, renderer::TerminalRenderer, Processor};
use syntastica_parsers::{Lang, LanguageSetImpl};
use tree_sitter::{InputEdit, Parser, Point};

// create a LanguageSet, Processor, Renderer, and ResolvedTheme
let set = LanguageSetImpl::new();
let mut processor = Processor::new(&set);
let mut renderer = TerminalRenderer::new(None);
let theme = syntastica_themes::one::dark();

// create a tree-sitter parser
let mut parser = Parser::new();
// and set the desired language
parser.set_language(Lang::Rust.get())?;

// parse, process, and render source code
let code = "fn test() {}";
let mut tree = parser.parse(code, None).unwrap();
println!(
    "{}",
    syntastica::render(
        &processor.process_tree(code, Lang::Rust, &tree.root_node())?,
        &mut renderer,
        &theme,
    )
);

// edit the code and tree
let new_code = "fn test(a: u32) {}";
tree.edit(&InputEdit {
    start_byte: 8,
    old_end_byte: 8,
    new_end_byte: 14,
    start_position: Point::new(0, 8),
    old_end_position: Point::new(0, 8),
    new_end_position: Point::new(0, 14),
});

// re-parse, process, and render the code
let new_tree = parser.parse(new_code, Some(&tree)).unwrap();
println!(
    "{}",
    syntastica::render(
        &processor.process_tree(new_code, Lang::Rust, &new_tree.root_node())?,
        &mut renderer,
        &theme,
    )
);
Returns

On success, the function returns Highlights which can be used by render for rendering to end users.

Errors

The function may result in the following errors:

Auto Trait Implementations§

§

impl<'set, Set> RefUnwindSafe for Processor<'set, Set>where Set: RefUnwindSafe,

§

impl<'set, Set> Send for Processor<'set, Set>where Set: Sync,

§

impl<'set, Set> Sync for Processor<'set, Set>where Set: Sync,

§

impl<'set, Set> Unpin for Processor<'set, Set>

§

impl<'set, Set> UnwindSafe for Processor<'set, Set>where Set: RefUnwindSafe,

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

source§

fn adapt_into_using<M>(self, method: M) -> Dwhere M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
source§

fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T, C> ArraysFrom<C> for Twhere C: IntoArrays<T>,

source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
source§

impl<T, C> ArraysInto<C> for Twhere C: FromArrays<T>,

source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T, C> ComponentsFrom<C> for Twhere C: IntoComponents<T>,

source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FromAngle<T> for T

source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
source§

impl<T, U> FromStimulus<U> for Twhere U: IntoStimulus<T>,

source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
source§

impl<T, U> Into<U> for Twhere 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, U> IntoAngle<U> for Twhere U: FromAngle<T>,

source§

fn into_angle(self) -> U

Performs a conversion into T.
source§

impl<T, U> IntoColor<U> for Twhere U: FromColor<T>,

source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
source§

impl<T, U> IntoColorUnclamped<U> for Twhere U: FromColorUnclamped<T>,

source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
source§

impl<T> IntoStimulus<T> for T

source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
source§

impl<'a, T, C> TryComponentsInto<C> for Twhere C: TryFromComponents<T>,

§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
source§

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

§

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 Twhere U: TryFrom<T>,

§

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, U> TryIntoColor<U> for Twhere U: TryFromColor<T>,

source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
source§

impl<C, U> UintsFrom<C> for Uwhere C: IntoUints<U>,

source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
source§

impl<C, U> UintsInto<C> for Uwhere C: FromUints<U>,

source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.