texform_transform/
context.rs1use 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}