Skip to content

Commit aef96bc

Browse files
committed
Clean-up:
* Reuse if markup analysis * Extract boolean expression syntax helper
1 parent 345a6b6 commit aef96bc

4 files changed

Lines changed: 204 additions & 172 deletions

File tree

packages/theme-check-common/src/checks/liquid-html-syntax-error/checks/liquid-syntax-error/branch.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { NodeTypes } from './parser-compat';
88
import type { LiquidHtmlNode } from '../../../../types';
99
import type { Context } from './context';
1010
import {
11+
analyzeMarkup,
1112
conditionalHasBareArrayAccess,
1213
expressionsHaveBareContainsValueExpression,
1314
hasBareArrayAccess,
@@ -28,6 +29,7 @@ import {
2829
hasSingleTrailingConditionalToken,
2930
hasTrailingParsedConditionalMarkup,
3031
hasUnclosedQuotedString,
32+
type MarkupAnalysisInput,
3133
} from './utils';
3234

3335
const ELSIF_BARE_ARRAY_ACCESS = 'Bare bracket access is not allowed in strict2 mode';
@@ -119,7 +121,9 @@ function reportWhenSyntaxError(node: LiquidBranch, context: Context): void {
119121

120122
function checkElsifBranch(node: LiquidBranch, context: Context): void {
121123
if (typeof node.markup === 'string') {
122-
if (hasStringMarkupLiquidSyntaxError(node.markup)) {
124+
const markupAnalysis = analyzeMarkup(node.markup);
125+
126+
if (hasStringMarkupLiquidSyntaxError(markupAnalysis)) {
123127
reportLiquidSyntaxError(node, context);
124128
} else {
125129
reportSyntaxError(node, context);
@@ -129,13 +133,14 @@ function checkElsifBranch(node: LiquidBranch, context: Context): void {
129133

130134
const markup = node.markup as LiquidConditionalExpression;
131135
const rawMarkup = node.source.slice(node.markupPosition.start, node.markupPosition.end);
136+
const rawMarkupAnalysis = analyzeMarkup(rawMarkup);
132137

133-
if (hasRawMarkupLiquidSyntaxError(rawMarkup)) {
138+
if (hasRawMarkupLiquidSyntaxError(rawMarkupAnalysis)) {
134139
reportLiquidSyntaxError(node, context);
135140
return;
136141
}
137142

138-
if (hasUnclosedQuotedString(rawMarkup)) {
143+
if (hasUnclosedQuotedString(rawMarkupAnalysis)) {
139144
reportSyntaxError(node, context);
140145
return;
141146
}
@@ -155,8 +160,9 @@ function checkElsifBranch(node: LiquidBranch, context: Context): void {
155160
}
156161

157162
const parsedMarkup = node.source.slice(markup.position.start, node.markupPosition.end);
158-
if (hasSkippedCharacters(parsedMarkup)) {
159-
if (hasParsedMarkupLiquidSyntaxError(parsedMarkup)) {
163+
const parsedMarkupAnalysis = analyzeMarkup(parsedMarkup);
164+
if (hasSkippedCharacters(parsedMarkupAnalysis)) {
165+
if (hasParsedMarkupLiquidSyntaxError(parsedMarkupAnalysis)) {
160166
reportLiquidSyntaxError(node, context);
161167
} else {
162168
reportSyntaxError(node, context);
@@ -171,11 +177,11 @@ function checkElsifBranch(node: LiquidBranch, context: Context): void {
171177
}
172178
}
173179

174-
function hasStringMarkupLiquidSyntaxError(markup: string): boolean {
180+
function hasStringMarkupLiquidSyntaxError(markup: MarkupAnalysisInput): boolean {
175181
return hasSingleTrailingConditionalToken(markup) || hasParsedMarkupLiquidSyntaxError(markup);
176182
}
177183

178-
function hasRawMarkupLiquidSyntaxError(markup: string): boolean {
184+
function hasRawMarkupLiquidSyntaxError(markup: MarkupAnalysisInput): boolean {
179185
return (
180186
hasInvalidConditionalLookupMarkup(markup) ||
181187
hasInvalidBooleanExpressionComparisonMarkup(markup) ||
@@ -190,7 +196,7 @@ function hasRawMarkupLiquidSyntaxError(markup: string): boolean {
190196
);
191197
}
192198

193-
function hasParsedMarkupLiquidSyntaxError(markup: string): boolean {
199+
function hasParsedMarkupLiquidSyntaxError(markup: MarkupAnalysisInput): boolean {
194200
return (
195201
hasRawMarkupLiquidSyntaxError(markup) ||
196202
hasInvalidLogicalOperandMarkup(markup) ||

packages/theme-check-common/src/checks/liquid-html-syntax-error/checks/liquid-syntax-error/if.ts

Lines changed: 17 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
11
import type { LiquidTag, LiquidConditionalExpression } from './parser-compat';
22
import type { Context } from './context';
33
import {
4+
analyzeMarkup,
45
conditionalHasBareArrayAccess,
5-
hasInvalidBooleanExpressionComparisonMarkup,
6-
hasInvalidBooleanExpressionLexerMarkup,
7-
hasInvalidBooleanExpressionLookupMarkup,
8-
hasInvalidBooleanExpressionTokenMarkup,
9-
hasInvalidBooleanComparisonRhsMarkup,
10-
hasInvalidBooleanComparisonRhsLookupMarkup,
11-
hasInvalidComparisonRhsMarkup,
6+
hasBooleanExpressionLiquidSyntaxError,
7+
hasConditionalLiquidSyntaxError,
128
hasInvalidConditionalLookupMarkup,
13-
hasInvalidLogicalOperandMarkup,
14-
hasInvalidStandaloneConditionalLexerMarkup,
159
hasInvalidStandaloneConditionalTokenMarkup,
1610
hasSkippedCharacters,
1711
hasSkippedPrefixCharacters,
@@ -26,20 +20,12 @@ const LIQUID_SYNTAX_ERROR = `Liquid syntax error: ${SYNTAX_ERROR}`;
2620

2721
export function checkIfTag(node: LiquidTag, context: Context): void {
2822
if (typeof node.markup === 'string') {
23+
const markupAnalysis = analyzeMarkup(node.markup);
24+
2925
context.report({
3026
message:
31-
hasSingleTrailingConditionalToken(node.markup) ||
32-
hasInvalidBooleanExpressionComparisonMarkup(node.markup) ||
33-
hasInvalidBooleanExpressionLexerMarkup(node.markup) ||
34-
hasInvalidBooleanExpressionLookupMarkup(node.markup) ||
35-
hasInvalidBooleanExpressionTokenMarkup(node.markup) ||
36-
hasInvalidBooleanComparisonRhsMarkup(node.markup) ||
37-
hasInvalidConditionalLookupMarkup(node.markup) ||
38-
hasInvalidBooleanComparisonRhsLookupMarkup(node.markup) ||
39-
hasInvalidComparisonRhsMarkup(node.markup) ||
40-
hasInvalidLogicalOperandMarkup(node.markup) ||
41-
hasInvalidStandaloneConditionalLexerMarkup(node.markup) ||
42-
hasInvalidStandaloneConditionalTokenMarkup(node.markup)
27+
hasSingleTrailingConditionalToken(markupAnalysis) ||
28+
hasConditionalLiquidSyntaxError(markupAnalysis)
4329
? LIQUID_SYNTAX_ERROR
4430
: SYNTAX_ERROR,
4531
startIndex: node.position.start,
@@ -50,16 +36,9 @@ export function checkIfTag(node: LiquidTag, context: Context): void {
5036

5137
const markup = node.markup as LiquidConditionalExpression;
5238
const tagMarkup = rawMarkup(node);
39+
const tagMarkupAnalysis = analyzeMarkup(tagMarkup);
5340

54-
if (
55-
hasInvalidBooleanExpressionComparisonMarkup(tagMarkup) ||
56-
hasInvalidBooleanExpressionLexerMarkup(tagMarkup) ||
57-
hasInvalidBooleanExpressionLookupMarkup(tagMarkup) ||
58-
hasInvalidBooleanExpressionTokenMarkup(tagMarkup) ||
59-
hasInvalidBooleanComparisonRhsMarkup(tagMarkup) ||
60-
hasInvalidBooleanComparisonRhsLookupMarkup(tagMarkup) ||
61-
hasInvalidComparisonRhsMarkup(tagMarkup)
62-
) {
41+
if (hasBooleanExpressionLiquidSyntaxError(tagMarkupAnalysis)) {
6342
context.report({
6443
message: LIQUID_SYNTAX_ERROR,
6544
startIndex: node.position.start,
@@ -68,7 +47,7 @@ export function checkIfTag(node: LiquidTag, context: Context): void {
6847
return;
6948
}
7049

71-
if (hasInvalidConditionalLookupMarkup(tagMarkup)) {
50+
if (hasInvalidConditionalLookupMarkup(tagMarkupAnalysis)) {
7251
context.report({
7352
message: LIQUID_SYNTAX_ERROR,
7453
startIndex: node.position.start,
@@ -77,7 +56,7 @@ export function checkIfTag(node: LiquidTag, context: Context): void {
7756
return;
7857
}
7958

80-
if (hasInvalidStandaloneConditionalTokenMarkup(tagMarkup)) {
59+
if (hasInvalidStandaloneConditionalTokenMarkup(tagMarkupAnalysis)) {
8160
context.report({
8261
message: LIQUID_SYNTAX_ERROR,
8362
startIndex: node.position.start,
@@ -86,7 +65,7 @@ export function checkIfTag(node: LiquidTag, context: Context): void {
8665
return;
8766
}
8867

89-
if (hasUnclosedQuotedString(tagMarkup)) {
68+
if (hasUnclosedQuotedString(tagMarkupAnalysis)) {
9069
context.report({
9170
message: SYNTAX_ERROR,
9271
startIndex: node.position.start,
@@ -114,22 +93,12 @@ export function checkIfTag(node: LiquidTag, context: Context): void {
11493
}
11594

11695
const parsedMarkup = node.source.slice(markup.position.start, node.markupPosition.end);
117-
if (hasSkippedCharacters(parsedMarkup)) {
96+
const parsedMarkupAnalysis = analyzeMarkup(parsedMarkup);
97+
if (hasSkippedCharacters(parsedMarkupAnalysis)) {
11898
context.report({
119-
message:
120-
hasInvalidConditionalLookupMarkup(parsedMarkup) ||
121-
hasInvalidBooleanExpressionComparisonMarkup(parsedMarkup) ||
122-
hasInvalidBooleanExpressionLexerMarkup(parsedMarkup) ||
123-
hasInvalidBooleanExpressionLookupMarkup(parsedMarkup) ||
124-
hasInvalidBooleanExpressionTokenMarkup(parsedMarkup) ||
125-
hasInvalidBooleanComparisonRhsMarkup(parsedMarkup) ||
126-
hasInvalidBooleanComparisonRhsLookupMarkup(parsedMarkup) ||
127-
hasInvalidComparisonRhsMarkup(parsedMarkup) ||
128-
hasInvalidLogicalOperandMarkup(parsedMarkup) ||
129-
hasInvalidStandaloneConditionalLexerMarkup(parsedMarkup) ||
130-
hasInvalidStandaloneConditionalTokenMarkup(parsedMarkup)
131-
? LIQUID_SYNTAX_ERROR
132-
: SYNTAX_ERROR,
99+
message: hasConditionalLiquidSyntaxError(parsedMarkupAnalysis)
100+
? LIQUID_SYNTAX_ERROR
101+
: SYNTAX_ERROR,
133102
startIndex: node.position.start,
134103
endIndex: node.position.end,
135104
});

packages/theme-check-common/src/checks/liquid-html-syntax-error/checks/liquid-syntax-error/unless.ts

Lines changed: 17 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
11
import type { LiquidTag, LiquidConditionalExpression } from './parser-compat';
22
import type { Context } from './context';
33
import {
4+
analyzeMarkup,
45
conditionalHasBareArrayAccess,
5-
hasInvalidBooleanExpressionComparisonMarkup,
6-
hasInvalidBooleanExpressionLexerMarkup,
7-
hasInvalidBooleanExpressionLookupMarkup,
8-
hasInvalidBooleanExpressionTokenMarkup,
9-
hasInvalidBooleanComparisonRhsMarkup,
10-
hasInvalidBooleanComparisonRhsLookupMarkup,
11-
hasInvalidComparisonRhsMarkup,
6+
hasBooleanExpressionLiquidSyntaxError,
7+
hasConditionalLiquidSyntaxError,
128
hasInvalidConditionalLookupMarkup,
13-
hasInvalidLogicalOperandMarkup,
14-
hasInvalidStandaloneConditionalLexerMarkup,
159
hasInvalidStandaloneConditionalTokenMarkup,
1610
hasRubyAcceptedWhitespaceSeparatedQuotePrefix,
1711
hasSkippedCharacters,
@@ -27,20 +21,12 @@ const LIQUID_SYNTAX_ERROR = `Liquid syntax error: ${SYNTAX_ERROR}`;
2721

2822
export function checkUnlessTag(node: LiquidTag, context: Context): void {
2923
if (typeof node.markup === 'string') {
24+
const markupAnalysis = analyzeMarkup(node.markup);
25+
3026
context.report({
3127
message:
32-
hasSingleTrailingConditionalToken(node.markup) ||
33-
hasInvalidBooleanExpressionComparisonMarkup(node.markup) ||
34-
hasInvalidBooleanExpressionLexerMarkup(node.markup) ||
35-
hasInvalidBooleanExpressionLookupMarkup(node.markup) ||
36-
hasInvalidBooleanExpressionTokenMarkup(node.markup) ||
37-
hasInvalidConditionalLookupMarkup(node.markup) ||
38-
hasInvalidBooleanComparisonRhsMarkup(node.markup) ||
39-
hasInvalidBooleanComparisonRhsLookupMarkup(node.markup) ||
40-
hasInvalidComparisonRhsMarkup(node.markup) ||
41-
hasInvalidLogicalOperandMarkup(node.markup) ||
42-
hasInvalidStandaloneConditionalLexerMarkup(node.markup) ||
43-
hasInvalidStandaloneConditionalTokenMarkup(node.markup)
28+
hasSingleTrailingConditionalToken(markupAnalysis) ||
29+
hasConditionalLiquidSyntaxError(markupAnalysis)
4430
? LIQUID_SYNTAX_ERROR
4531
: SYNTAX_ERROR,
4632
startIndex: node.position.start,
@@ -52,17 +38,10 @@ export function checkUnlessTag(node: LiquidTag, context: Context): void {
5238
const source = node.source;
5339
const markup = node.markup as LiquidConditionalExpression;
5440
const tagMarkup = rawMarkup(node);
41+
const tagMarkupAnalysis = analyzeMarkup(tagMarkup);
5542
const skippedPrefix = source.slice(node.markupPosition.start, markup.position.start);
5643

57-
if (
58-
hasInvalidBooleanExpressionComparisonMarkup(tagMarkup) ||
59-
hasInvalidBooleanExpressionLexerMarkup(tagMarkup) ||
60-
hasInvalidBooleanExpressionLookupMarkup(tagMarkup) ||
61-
hasInvalidBooleanExpressionTokenMarkup(tagMarkup) ||
62-
hasInvalidBooleanComparisonRhsMarkup(tagMarkup) ||
63-
hasInvalidBooleanComparisonRhsLookupMarkup(tagMarkup) ||
64-
hasInvalidComparisonRhsMarkup(tagMarkup)
65-
) {
44+
if (hasBooleanExpressionLiquidSyntaxError(tagMarkupAnalysis)) {
6645
context.report({
6746
message: LIQUID_SYNTAX_ERROR,
6847
startIndex: node.position.start,
@@ -71,7 +50,7 @@ export function checkUnlessTag(node: LiquidTag, context: Context): void {
7150
return;
7251
}
7352

74-
if (hasInvalidConditionalLookupMarkup(tagMarkup)) {
53+
if (hasInvalidConditionalLookupMarkup(tagMarkupAnalysis)) {
7554
context.report({
7655
message: LIQUID_SYNTAX_ERROR,
7756
startIndex: node.position.start,
@@ -80,7 +59,7 @@ export function checkUnlessTag(node: LiquidTag, context: Context): void {
8059
return;
8160
}
8261

83-
if (hasInvalidStandaloneConditionalTokenMarkup(tagMarkup)) {
62+
if (hasInvalidStandaloneConditionalTokenMarkup(tagMarkupAnalysis)) {
8463
context.report({
8564
message: LIQUID_SYNTAX_ERROR,
8665
startIndex: node.position.start,
@@ -90,7 +69,7 @@ export function checkUnlessTag(node: LiquidTag, context: Context): void {
9069
}
9170

9271
if (
93-
hasUnclosedQuotedString(tagMarkup) &&
72+
hasUnclosedQuotedString(tagMarkupAnalysis) &&
9473
!hasRubyAcceptedWhitespaceSeparatedQuotePrefix(skippedPrefix)
9574
) {
9675
context.report({
@@ -120,22 +99,12 @@ export function checkUnlessTag(node: LiquidTag, context: Context): void {
12099
}
121100

122101
const parsedMarkup = source.slice(markup.position.start, node.markupPosition.end);
123-
if (hasSkippedCharacters(parsedMarkup)) {
102+
const parsedMarkupAnalysis = analyzeMarkup(parsedMarkup);
103+
if (hasSkippedCharacters(parsedMarkupAnalysis)) {
124104
context.report({
125-
message:
126-
hasInvalidConditionalLookupMarkup(parsedMarkup) ||
127-
hasInvalidBooleanExpressionComparisonMarkup(parsedMarkup) ||
128-
hasInvalidBooleanExpressionLexerMarkup(parsedMarkup) ||
129-
hasInvalidBooleanExpressionLookupMarkup(parsedMarkup) ||
130-
hasInvalidBooleanExpressionTokenMarkup(parsedMarkup) ||
131-
hasInvalidBooleanComparisonRhsMarkup(parsedMarkup) ||
132-
hasInvalidBooleanComparisonRhsLookupMarkup(parsedMarkup) ||
133-
hasInvalidComparisonRhsMarkup(parsedMarkup) ||
134-
hasInvalidLogicalOperandMarkup(parsedMarkup) ||
135-
hasInvalidStandaloneConditionalLexerMarkup(parsedMarkup) ||
136-
hasInvalidStandaloneConditionalTokenMarkup(parsedMarkup)
137-
? LIQUID_SYNTAX_ERROR
138-
: SYNTAX_ERROR,
105+
message: hasConditionalLiquidSyntaxError(parsedMarkupAnalysis)
106+
? LIQUID_SYNTAX_ERROR
107+
: SYNTAX_ERROR,
139108
startIndex: node.position.start,
140109
endIndex: node.position.end,
141110
});

0 commit comments

Comments
 (0)