mirror of
https://github.com/askama-rs/askama.git
synced 2025-09-30 14:31:36 +00:00
derive: unify filter generation further
This commit is contained in:
parent
0c9add9128
commit
8256eadf5a
@ -20,7 +20,7 @@ use crate::config::WhitespaceHandling;
|
|||||||
use crate::heritage::{Context, Heritage};
|
use crate::heritage::{Context, Heritage};
|
||||||
use crate::html::write_escaped_str;
|
use crate::html::write_escaped_str;
|
||||||
use crate::input::{Source, TemplateInput};
|
use crate::input::{Source, TemplateInput};
|
||||||
use crate::{CompileError, FileInfo, MsgValidEscapers, CRATE};
|
use crate::{CompileError, FileInfo, MsgValidEscapers, BUILT_IN_FILTERS, CRATE};
|
||||||
|
|
||||||
#[derive(Clone, Copy, PartialEq, Debug)]
|
#[derive(Clone, Copy, PartialEq, Debug)]
|
||||||
enum EvaluatedResult {
|
enum EvaluatedResult {
|
||||||
@ -1534,39 +1534,35 @@ impl<'a> Generator<'a> {
|
|||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
name: &str,
|
name: &str,
|
||||||
args: &[WithSpan<'_, Expr<'_>>],
|
args: &[WithSpan<'_, Expr<'_>>],
|
||||||
filter: &WithSpan<'_, T>,
|
node: &WithSpan<'_, T>,
|
||||||
) -> Result<DisplayWrap, CompileError> {
|
) -> Result<DisplayWrap, CompileError> {
|
||||||
match name {
|
let filter = match name {
|
||||||
"abs" | "into_f64" | "into_isize" => {
|
"abs" | "into_f64" | "into_isize" => Self::_visit_num_traits,
|
||||||
self._visit_num_traits(ctx, buf, name, args, filter)
|
"deref" => Self::_visit_deref_filter,
|
||||||
}
|
"escape" | "e" => Self::_visit_escape_filter,
|
||||||
"deref" => self._visit_deref_filter(ctx, buf, args, filter),
|
"filesizeformat" => Self::_visit_humansize,
|
||||||
"escape" | "e" => self._visit_escape_filter(ctx, buf, args, filter),
|
"fmt" => Self::_visit_fmt_filter,
|
||||||
"filesizeformat" => self._visit_humansize(ctx, buf, name, args, filter),
|
"format" => Self::_visit_format_filter,
|
||||||
"fmt" => self._visit_fmt_filter(ctx, buf, args, filter),
|
"join" => Self::_visit_join_filter,
|
||||||
"format" => self._visit_format_filter(ctx, buf, args, filter),
|
"json" | "tojson" => Self::_visit_json_filter,
|
||||||
"join" => self._visit_join_filter(ctx, buf, args),
|
"linebreaks" | "linebreaksbr" | "paragraphbreaks" => Self::_visit_linebreaks_filter,
|
||||||
"json" | "tojson" => self._visit_json_filter(ctx, buf, args, filter),
|
"pluralize" => Self::_visit_pluralize_filter,
|
||||||
"linebreaks" | "linebreaksbr" | "paragraphbreaks" => {
|
"ref" => Self::_visit_ref_filter,
|
||||||
self._visit_linebreaks_filter(ctx, buf, name, args, filter)
|
"safe" => Self::_visit_safe_filter,
|
||||||
}
|
"uppercase" | "urlencode_strict" => Self::_visit_urlencode,
|
||||||
"pluralize" => self._visit_pluralize_filter(ctx, buf, args, filter),
|
name if BUILT_IN_FILTERS.contains(&name) => Self::_visit_builtin_filter,
|
||||||
"ref" => self._visit_ref_filter(ctx, buf, args, filter),
|
_ => Self::_visit_custom_filter,
|
||||||
"safe" => self._visit_safe_filter(ctx, buf, args, filter),
|
};
|
||||||
"uppercase" | "urlencode_strict" => self._visit_urlencode(ctx, buf, name, args, filter),
|
filter(self, ctx, buf, name, args, node)
|
||||||
name if crate::BUILT_IN_FILTERS.contains(&name) => {
|
|
||||||
self._visit_builtin_filter(ctx, buf, name, args)
|
|
||||||
}
|
|
||||||
name => self._visit_custom_filter(ctx, buf, name, args),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn _visit_custom_filter(
|
fn _visit_custom_filter<T>(
|
||||||
&mut self,
|
&mut self,
|
||||||
ctx: &Context<'_>,
|
ctx: &Context<'_>,
|
||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
name: &str,
|
name: &str,
|
||||||
args: &[WithSpan<'_, Expr<'_>>],
|
args: &[WithSpan<'_, Expr<'_>>],
|
||||||
|
_node: &WithSpan<'_, T>,
|
||||||
) -> Result<DisplayWrap, CompileError> {
|
) -> Result<DisplayWrap, CompileError> {
|
||||||
buf.write(format_args!("filters::{name}("));
|
buf.write(format_args!("filters::{name}("));
|
||||||
self._visit_args(ctx, buf, args)?;
|
self._visit_args(ctx, buf, args)?;
|
||||||
@ -1574,12 +1570,13 @@ impl<'a> Generator<'a> {
|
|||||||
Ok(DisplayWrap::Unwrapped)
|
Ok(DisplayWrap::Unwrapped)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn _visit_builtin_filter(
|
fn _visit_builtin_filter<T>(
|
||||||
&mut self,
|
&mut self,
|
||||||
ctx: &Context<'_>,
|
ctx: &Context<'_>,
|
||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
name: &str,
|
name: &str,
|
||||||
args: &[WithSpan<'_, Expr<'_>>],
|
args: &[WithSpan<'_, Expr<'_>>],
|
||||||
|
_node: &WithSpan<'_, T>,
|
||||||
) -> Result<DisplayWrap, CompileError> {
|
) -> Result<DisplayWrap, CompileError> {
|
||||||
buf.write(format_args!("{CRATE}::filters::{name}("));
|
buf.write(format_args!("{CRATE}::filters::{name}("));
|
||||||
self._visit_args(ctx, buf, args)?;
|
self._visit_args(ctx, buf, args)?;
|
||||||
@ -1663,6 +1660,7 @@ impl<'a> Generator<'a> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
ctx: &Context<'_>,
|
ctx: &Context<'_>,
|
||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
|
_name: &str,
|
||||||
args: &[WithSpan<'_, Expr<'_>>],
|
args: &[WithSpan<'_, Expr<'_>>],
|
||||||
node: &WithSpan<'_, T>,
|
node: &WithSpan<'_, T>,
|
||||||
) -> Result<DisplayWrap, CompileError> {
|
) -> Result<DisplayWrap, CompileError> {
|
||||||
@ -1735,6 +1733,7 @@ impl<'a> Generator<'a> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
ctx: &Context<'_>,
|
ctx: &Context<'_>,
|
||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
|
_name: &str,
|
||||||
args: &[WithSpan<'_, Expr<'_>>],
|
args: &[WithSpan<'_, Expr<'_>>],
|
||||||
node: &WithSpan<'_, T>,
|
node: &WithSpan<'_, T>,
|
||||||
) -> Result<DisplayWrap, CompileError> {
|
) -> Result<DisplayWrap, CompileError> {
|
||||||
@ -1751,6 +1750,7 @@ impl<'a> Generator<'a> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
ctx: &Context<'_>,
|
ctx: &Context<'_>,
|
||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
|
_name: &str,
|
||||||
args: &[WithSpan<'_, Expr<'_>>],
|
args: &[WithSpan<'_, Expr<'_>>],
|
||||||
node: &WithSpan<'_, T>,
|
node: &WithSpan<'_, T>,
|
||||||
) -> Result<DisplayWrap, CompileError> {
|
) -> Result<DisplayWrap, CompileError> {
|
||||||
@ -1767,6 +1767,7 @@ impl<'a> Generator<'a> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
ctx: &Context<'_>,
|
ctx: &Context<'_>,
|
||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
|
_name: &str,
|
||||||
args: &[WithSpan<'_, Expr<'_>>],
|
args: &[WithSpan<'_, Expr<'_>>],
|
||||||
node: &WithSpan<'_, T>,
|
node: &WithSpan<'_, T>,
|
||||||
) -> Result<DisplayWrap, CompileError> {
|
) -> Result<DisplayWrap, CompileError> {
|
||||||
@ -1793,6 +1794,7 @@ impl<'a> Generator<'a> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
ctx: &Context<'_>,
|
ctx: &Context<'_>,
|
||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
|
_name: &str,
|
||||||
args: &[WithSpan<'_, Expr<'_>>],
|
args: &[WithSpan<'_, Expr<'_>>],
|
||||||
node: &WithSpan<'_, T>,
|
node: &WithSpan<'_, T>,
|
||||||
) -> Result<DisplayWrap, CompileError> {
|
) -> Result<DisplayWrap, CompileError> {
|
||||||
@ -1809,6 +1811,7 @@ impl<'a> Generator<'a> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
ctx: &Context<'_>,
|
ctx: &Context<'_>,
|
||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
|
_name: &str,
|
||||||
args: &[WithSpan<'_, Expr<'_>>],
|
args: &[WithSpan<'_, Expr<'_>>],
|
||||||
node: &WithSpan<'_, T>,
|
node: &WithSpan<'_, T>,
|
||||||
) -> Result<DisplayWrap, CompileError> {
|
) -> Result<DisplayWrap, CompileError> {
|
||||||
@ -1869,6 +1872,7 @@ impl<'a> Generator<'a> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
ctx: &Context<'_>,
|
ctx: &Context<'_>,
|
||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
|
_name: &str,
|
||||||
args: &[WithSpan<'_, Expr<'_>>],
|
args: &[WithSpan<'_, Expr<'_>>],
|
||||||
node: &WithSpan<'_, T>,
|
node: &WithSpan<'_, T>,
|
||||||
) -> Result<DisplayWrap, CompileError> {
|
) -> Result<DisplayWrap, CompileError> {
|
||||||
@ -1891,6 +1895,7 @@ impl<'a> Generator<'a> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
ctx: &Context<'_>,
|
ctx: &Context<'_>,
|
||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
|
_name: &str,
|
||||||
args: &[WithSpan<'_, Expr<'_>>],
|
args: &[WithSpan<'_, Expr<'_>>],
|
||||||
node: &WithSpan<'_, T>,
|
node: &WithSpan<'_, T>,
|
||||||
) -> Result<DisplayWrap, CompileError> {
|
) -> Result<DisplayWrap, CompileError> {
|
||||||
@ -1908,11 +1913,13 @@ impl<'a> Generator<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Force type coercion on first argument to `join` filter (see #39).
|
// Force type coercion on first argument to `join` filter (see #39).
|
||||||
fn _visit_join_filter(
|
fn _visit_join_filter<T>(
|
||||||
&mut self,
|
&mut self,
|
||||||
ctx: &Context<'_>,
|
ctx: &Context<'_>,
|
||||||
buf: &mut Buffer,
|
buf: &mut Buffer,
|
||||||
|
_name: &str,
|
||||||
args: &[WithSpan<'_, Expr<'_>>],
|
args: &[WithSpan<'_, Expr<'_>>],
|
||||||
|
_node: &WithSpan<'_, T>,
|
||||||
) -> Result<DisplayWrap, CompileError> {
|
) -> Result<DisplayWrap, CompileError> {
|
||||||
buf.write(CRATE);
|
buf.write(CRATE);
|
||||||
buf.write("::filters::join((&");
|
buf.write("::filters::join((&");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user