From e5fba60ce546737c3dd8f01af53841de375f11a3 Mon Sep 17 00:00:00 2001 From: jasmith-hs Date: Wed, 4 Mar 2026 10:25:33 -0500 Subject: [PATCH] Add 3.0 version of LegacyOverrides, that will be turned on by default. Remove isWhitespaceRequiredWithinTokens option as it is a BuiltinFeature now --- .../com/hubspot/jinjava/LegacyOverrides.java | 19 ++++++++------ .../jinjava/tree/parse/TokenScanner.java | 3 +-- .../jinjava/tree/parse/TokenScannerTest.java | 25 +++++++++++-------- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/hubspot/jinjava/LegacyOverrides.java b/src/main/java/com/hubspot/jinjava/LegacyOverrides.java index 9d3e7ebe7..046f35805 100644 --- a/src/main/java/com/hubspot/jinjava/LegacyOverrides.java +++ b/src/main/java/com/hubspot/jinjava/LegacyOverrides.java @@ -11,12 +11,22 @@ @JinjavaImmutableStyle.WithStyle public interface LegacyOverrides extends WithLegacyOverrides { LegacyOverrides NONE = new Builder().build(); + LegacyOverrides THREE_POINT_0 = new Builder() + .withEvaluateMapKeys(true) + .withIterateOverMapKeys(true) + .withUsePyishObjectMapper(true) + .withUseSnakeCasePropertyNaming(true) + .withUseNaturalOperatorPrecedence(true) + .withParseWhitespaceControlStrictly(true) + .withAllowAdjacentTextNodes(true) + .withUseTrimmingForNotesAndExpressions(true) + .withKeepNullableLoopValues(true) + .build(); LegacyOverrides ALL = new Builder() .withEvaluateMapKeys(true) .withIterateOverMapKeys(true) .withUsePyishObjectMapper(true) .withUseSnakeCasePropertyNaming(true) - .withWhitespaceRequiredWithinTokens(true) .withUseNaturalOperatorPrecedence(true) .withParseWhitespaceControlStrictly(true) .withAllowAdjacentTextNodes(true) @@ -44,11 +54,6 @@ default boolean isUseSnakeCasePropertyNaming() { return false; } - @Value.Default - default boolean isWhitespaceRequiredWithinTokens() { - return false; - } - @Value.Default default boolean isUseNaturalOperatorPrecedence() { return false; @@ -77,7 +82,7 @@ default boolean isKeepNullableLoopValues() { class Builder extends ImmutableLegacyOverrides.Builder {} static Builder newBuilder() { - return builder(); + return new Builder(); } static Builder builder() { diff --git a/src/main/java/com/hubspot/jinjava/tree/parse/TokenScanner.java b/src/main/java/com/hubspot/jinjava/tree/parse/TokenScanner.java index e8973d5d3..7e53b295a 100644 --- a/src/main/java/com/hubspot/jinjava/tree/parse/TokenScanner.java +++ b/src/main/java/com/hubspot/jinjava/tree/parse/TokenScanner.java @@ -97,8 +97,7 @@ private Token getNextToken() { if ( config .getFeatures() - .isActive(BuiltInFeatures.WHITESPACE_REQUIRED_WITHIN_TOKENS) || - config.getLegacyOverrides().isWhitespaceRequiredWithinTokens() + .isActive(BuiltInFeatures.WHITESPACE_REQUIRED_WITHIN_TOKENS) ) { boolean hasNextChar = (currPost + 1) < length; boolean nextCharIsWhitespace = hasNextChar && (' ' == is[currPost + 1]); diff --git a/src/test/java/com/hubspot/jinjava/tree/parse/TokenScannerTest.java b/src/test/java/com/hubspot/jinjava/tree/parse/TokenScannerTest.java index 9bf9f0f3d..af1988c03 100644 --- a/src/test/java/com/hubspot/jinjava/tree/parse/TokenScannerTest.java +++ b/src/test/java/com/hubspot/jinjava/tree/parse/TokenScannerTest.java @@ -7,7 +7,9 @@ import com.google.common.collect.Lists; import com.google.common.io.Resources; import com.hubspot.jinjava.JinjavaConfig; -import com.hubspot.jinjava.LegacyOverrides; +import com.hubspot.jinjava.features.BuiltInFeatures; +import com.hubspot.jinjava.features.FeatureConfig; +import com.hubspot.jinjava.features.FeatureStrategies; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.stream.Collectors; @@ -25,7 +27,7 @@ public class TokenScannerTest { @Before public void setup() { - config = JinjavaConfig.newBuilder().build(); + config = JinjavaConfig.builder().build(); symbols = config.getTokenScannerSymbols(); } @@ -266,13 +268,17 @@ public void testCommentWithWhitespaceChar() { List tokens = tokens("comment-without-whitespace"); assertThat(tokens.get(0).content.trim()).isEqualTo("$"); - LegacyOverrides legacyOverrides = LegacyOverrides - .newBuilder() - .withWhitespaceRequiredWithinTokens(true) - .build(); JinjavaConfig config = JinjavaConfig - .newBuilder() - .withLegacyOverrides(legacyOverrides) + .builder() + .withFeatureConfig( + FeatureConfig + .newBuilder() + .add( + BuiltInFeatures.WHITESPACE_REQUIRED_WITHIN_TOKENS, + FeatureStrategies.ACTIVE + ) + .build() + ) .build(); TokenScanner scanner = fixture("comment-without-whitespace", config); tokens = Lists.newArrayList(scanner); @@ -299,8 +305,7 @@ public void testEscapedBackslashWithinAttrValue() { @Test public void testLstripBlocks() { - config = - JinjavaConfig.newBuilder().withLstripBlocks(true).withTrimBlocks(true).build(); + config = JinjavaConfig.builder().withLstripBlocks(true).withTrimBlocks(true).build(); List tokens = tokens("tag-with-trim-chars"); assertThat(tokens).isNotEmpty();