Skip to main content

texform_transform/
context.rs

1//! Compiled transform execution context.
2
3use crate::ast::Ast;
4use crate::config::{BuildConfig, TransformConfig};
5use crate::engine;
6use crate::error::{TransformBuildError, TransformError};
7use crate::parse::ParseContext;
8use crate::report::TransformReport;
9use crate::rewrite;
10
11pub struct TransformContext {
12    default_config: TransformConfig,
13    rewrite: rewrite::Plan,
14}
15
16impl TransformContext {
17    pub fn from_build_config(
18        config: BuildConfig,
19        parse_ctx: &ParseContext,
20    ) -> Result<Self, TransformBuildError> {
21        let default_config = config.default_transform();
22        let rewrite =
23            rewrite::Plan::build(&config, parse_ctx).map_err(TransformBuildError::Rewrite)?;
24        Ok(Self {
25            default_config,
26            rewrite,
27        })
28    }
29
30    pub fn run(
31        &self,
32        ast: &mut Ast,
33        parse_ctx: &ParseContext,
34    ) -> Result<TransformReport, TransformError> {
35        self.run_with(ast, parse_ctx, &self.default_config)
36    }
37
38    pub fn run_with(
39        &self,
40        ast: &mut Ast,
41        parse_ctx: &ParseContext,
42        config: &TransformConfig,
43    ) -> Result<TransformReport, TransformError> {
44        engine::execute(self, ast, parse_ctx, config)
45    }
46
47    pub fn default_config(&self) -> &TransformConfig {
48        &self.default_config
49    }
50
51    pub fn rewrite_plan(&self) -> &rewrite::Plan {
52        &self.rewrite
53    }
54
55    #[cfg(test)]
56    pub(crate) fn from_rewrite_plan_for_tests(
57        default_config: TransformConfig,
58        rewrite: rewrite::Plan,
59    ) -> Self {
60        Self {
61            default_config,
62            rewrite,
63        }
64    }
65}