Struct Processor

Source
pub struct Processor<'set, Set: LanguageSet<'set>> { /* 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("variable.builtin")), // this is the injected regex language
        ("\"", Some("string")),
        (")", Some("punctuation.bracket")),
    ]]
);

Implementations§

Source§

impl<'set, Set: LanguageSet<'set>> 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: impl Into<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: impl Into<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: impl Into<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> Freeze for Processor<'set, Set>

§

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 S
where 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) -> D
where 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 T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T, C> ArraysFrom<C> for T
where 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 T
where 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 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<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, C> ComponentsFrom<C> for T
where 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 T
where 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 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, U> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

fn into_angle(self) -> U

Performs a conversion into T.
Source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, U> IntoColor<U> for T
where 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 T
where 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<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

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 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, U> TryIntoColor<U> for T
where 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 U
where 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 U
where C: FromUints<U>,

Source§

fn uints_into(self) -> C

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