liquid2 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +22 -2
- data/LICENSE_SHOPIFY.txt +8 -0
- data/README.md +420 -13
- data/lib/liquid2/context.rb +29 -18
- data/lib/liquid2/environment.rb +58 -6
- data/lib/liquid2/errors.rb +4 -2
- data/lib/liquid2/expressions/arguments.rb +20 -0
- data/lib/liquid2/expressions/arithmetic.rb +123 -0
- data/lib/liquid2/expressions/boolean.rb +2 -1
- data/lib/liquid2/expressions/filtered.rb +19 -25
- data/lib/liquid2/expressions/lambda.rb +2 -0
- data/lib/liquid2/expressions/loop.rb +7 -5
- data/lib/liquid2/expressions/path.rb +19 -2
- data/lib/liquid2/expressions/relational.rb +1 -1
- data/lib/liquid2/filter.rb +1 -2
- data/lib/liquid2/filters/array.rb +0 -1
- data/lib/liquid2/filters/sort.rb +5 -4
- data/lib/liquid2/loader.rb +1 -0
- data/lib/liquid2/nodes/tags/doc.rb +2 -0
- data/lib/liquid2/nodes/tags/extends.rb +270 -1
- data/lib/liquid2/nodes/tags/include.rb +7 -7
- data/lib/liquid2/nodes/tags/macro.rb +145 -1
- data/lib/liquid2/nodes/tags/raw.rb +2 -1
- data/lib/liquid2/nodes/tags/render.rb +8 -10
- data/lib/liquid2/nodes/tags/with.rb +42 -1
- data/lib/liquid2/parser.rb +170 -22
- data/lib/liquid2/scanner.rb +27 -44
- data/lib/liquid2/static_analysis.rb +1 -1
- data/lib/liquid2/template.rb +52 -5
- data/lib/liquid2/undefined.rb +32 -20
- data/lib/liquid2/version.rb +1 -1
- data/lib/liquid2.rb +2 -0
- data/sig/liquid2.rbs +331 -40
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
- data/.vscode/settings.json +0 -32
data/sig/liquid2.rbs
CHANGED
@@ -76,12 +76,16 @@ module Liquid2
|
|
76
76
|
|
77
77
|
@undefined: singleton(Undefined)
|
78
78
|
|
79
|
+
@falsy_undefined: bool
|
80
|
+
|
79
81
|
@loader: TemplateLoader
|
80
82
|
|
81
83
|
@globals: Hash[String, untyped]?
|
82
84
|
|
83
85
|
@scanner: StringScanner
|
84
86
|
|
87
|
+
@arithmetic_operators: bool
|
88
|
+
|
85
89
|
attr_reader tags: Hash[String, _Tag]
|
86
90
|
|
87
91
|
attr_reader local_namespace_limit: Integer?
|
@@ -98,7 +102,11 @@ module Liquid2
|
|
98
102
|
|
99
103
|
attr_reader shorthand_indexes: bool
|
100
104
|
|
101
|
-
|
105
|
+
attr_reader falsy_undefined: bool
|
106
|
+
|
107
|
+
attr_reader arithmetic_operators: bool
|
108
|
+
|
109
|
+
def initialize: (?context_depth_limit: ::Integer, ?globals: Hash[String, untyped]?, ?loader: TemplateLoader?, ?local_namespace_limit: Integer?, ?loop_iteration_limit: Integer?, ?output_stream_limit: Integer?, ?shorthand_indexes: bool, ?suppress_blank_control_flow_blocks: bool, ?undefined: singleton(Undefined), ?falsy_undefined: bool) -> void
|
102
110
|
|
103
111
|
# @param source [String] template source text.
|
104
112
|
# @return [Template]
|
@@ -123,6 +131,10 @@ module Liquid2
|
|
123
131
|
# if _name_ did not exist in the filter register.
|
124
132
|
def delete_filter: (String name) -> ([_Filter, (Integer | nil)] | nil)
|
125
133
|
|
134
|
+
def register_tag: (String name, _Tag tag) -> void
|
135
|
+
|
136
|
+
def delete_tag: (String name) -> (_Tag | nil)
|
137
|
+
|
126
138
|
def setup_tags_and_filters: () -> void
|
127
139
|
|
128
140
|
def undefined: (String name, ?node: _HasToken?) -> Undefined
|
@@ -336,6 +348,8 @@ module Liquid2
|
|
336
348
|
def parse_string: () -> String
|
337
349
|
|
338
350
|
def parse_identifier: (?trailing_question: bool) -> Identifier
|
351
|
+
|
352
|
+
def parse_name: () -> String
|
339
353
|
|
340
354
|
# Parse comma separated expression.
|
341
355
|
# Leading commas should be consumed by the caller.
|
@@ -346,6 +360,10 @@ module Liquid2
|
|
346
360
|
# Leading commas should be consumed by the caller.
|
347
361
|
# @return [Array<KeywordArgument>]
|
348
362
|
def parse_keyword_arguments: () -> Array[KeywordArgument]
|
363
|
+
|
364
|
+
def parse_parameters: () -> Hash[String, Parameter]
|
365
|
+
|
366
|
+
def parse_arguments: () -> [Array[untyped], Array[KeywordArgument]]
|
349
367
|
|
350
368
|
class Precedence
|
351
369
|
LOWEST: 1
|
@@ -361,6 +379,12 @@ module Liquid2
|
|
361
379
|
MEMBERSHIP: 6
|
362
380
|
|
363
381
|
PREFIX: 7
|
382
|
+
|
383
|
+
ADD_SUB: 8
|
384
|
+
|
385
|
+
MUL_DIV: 9
|
386
|
+
|
387
|
+
POW: 10
|
364
388
|
end
|
365
389
|
|
366
390
|
PRECEDENCES: Hash[Symbol, Integer]
|
@@ -461,6 +485,8 @@ module Liquid2
|
|
461
485
|
|
462
486
|
attr_reader up_to_date: Proc::_Callable?
|
463
487
|
|
488
|
+
attr_reader source: String
|
489
|
+
|
464
490
|
# @param env [Environment]
|
465
491
|
# @param ast [RootNode]
|
466
492
|
# @param name [String] The template's name.
|
@@ -489,6 +515,10 @@ module Liquid2
|
|
489
515
|
|
490
516
|
def comments: () -> Array[BlockComment | InlineComment | Comment]
|
491
517
|
|
518
|
+
def docs: () -> Array[DocTag]
|
519
|
+
|
520
|
+
def macros: (?include_partials: bool) -> [Array[MacroTag], Array[CallTag]]
|
521
|
+
|
492
522
|
# Return an array of variables used in this template, without path segments.
|
493
523
|
# @param include_partials [bool]
|
494
524
|
# @return [Array[String]]
|
@@ -589,29 +619,33 @@ module Liquid2
|
|
589
619
|
|
590
620
|
def []: (*untyped) ?{ (?) -> untyped } -> self
|
591
621
|
|
592
|
-
def key?: (*untyped) ?{ (?) -> untyped } ->
|
622
|
+
def key?: (*untyped) ?{ (?) -> untyped } -> untyped
|
593
623
|
|
594
|
-
def include?: (*untyped) ?{ (?) -> untyped } ->
|
624
|
+
def include?: (*untyped) ?{ (?) -> untyped } -> untyped
|
595
625
|
|
596
|
-
def member?: (*untyped) ?{ (?) -> untyped } ->
|
626
|
+
def member?: (*untyped) ?{ (?) -> untyped } -> untyped
|
597
627
|
|
598
628
|
def fetch: (*untyped) ?{ (?) -> untyped } -> self
|
599
629
|
|
600
|
-
def !: () ->
|
630
|
+
def !: () -> untyped
|
601
631
|
|
602
632
|
def ==: (untyped other) -> untyped
|
603
633
|
|
604
634
|
alias eql? ==
|
605
635
|
|
606
|
-
def size: () ->
|
636
|
+
def size: () -> untyped
|
607
637
|
|
608
|
-
def length: () ->
|
638
|
+
def length: () -> untyped
|
609
639
|
|
610
640
|
def to_s: () -> ""
|
611
641
|
|
612
|
-
def to_i: () ->
|
642
|
+
def to_i: () -> untyped
|
643
|
+
|
644
|
+
def +@: () -> untyped
|
645
|
+
|
646
|
+
def -@: () -> untyped
|
613
647
|
|
614
|
-
def to_f: () ->
|
648
|
+
def to_f: () -> untyped
|
615
649
|
|
616
650
|
def each: (*untyped) ?{ (?) -> untyped } -> untyped
|
617
651
|
|
@@ -619,9 +653,9 @@ module Liquid2
|
|
619
653
|
|
620
654
|
def join: (*untyped) -> ""
|
621
655
|
|
622
|
-
def to_liquid: (RenderContext _context) ->
|
656
|
+
def to_liquid: (RenderContext _context) -> untyped
|
623
657
|
|
624
|
-
def poke: () ->
|
658
|
+
def poke: () -> bool
|
625
659
|
end
|
626
660
|
|
627
661
|
# An undefined type that always raises an exception.
|
@@ -659,6 +693,10 @@ module Liquid2
|
|
659
693
|
def to_s: () -> untyped
|
660
694
|
|
661
695
|
def to_i: () -> untyped
|
696
|
+
|
697
|
+
def +@: () -> untyped
|
698
|
+
|
699
|
+
def -@: () -> untyped
|
662
700
|
|
663
701
|
def to_f: () -> untyped
|
664
702
|
|
@@ -830,11 +868,11 @@ module Liquid2
|
|
830
868
|
@loops: Array[ForLoop]
|
831
869
|
|
832
870
|
# A stack of interrupts used to signal breaking and continuing `for` loops.
|
833
|
-
@interrupts: Array[
|
871
|
+
@interrupts: Array[Symbol]
|
834
872
|
|
835
873
|
attr_reader env: Environment
|
836
874
|
|
837
|
-
|
875
|
+
attr_accessor template: Template
|
838
876
|
|
839
877
|
attr_reader globals: _Namespace
|
840
878
|
|
@@ -842,8 +880,7 @@ module Liquid2
|
|
842
880
|
|
843
881
|
attr_reader tag_namespace: Hash[Symbol, untyped]
|
844
882
|
|
845
|
-
attr_accessor interrupts: Array[
|
846
|
-
|
883
|
+
attr_accessor interrupts: Array[Symbol]
|
847
884
|
|
848
885
|
BUILT_IN: BuiltIn
|
849
886
|
|
@@ -911,16 +948,13 @@ module Liquid2
|
|
911
948
|
|
912
949
|
def get_output_buffer: (untyped parent_buffer) -> untyped
|
913
950
|
|
914
|
-
# Mark _string_ as "safe" if auto escape is enabled.
|
915
|
-
def markup: (untyped string) -> untyped
|
916
|
-
|
917
951
|
def cycle: (untyped key, untyped length) -> untyped
|
918
952
|
|
919
|
-
def increment: (untyped name) ->
|
953
|
+
def increment: (untyped name) -> Integer
|
920
954
|
|
921
|
-
def decrement: (untyped name) ->
|
955
|
+
def decrement: (untyped name) -> Integer
|
922
956
|
|
923
|
-
def assign_score: (untyped value) ->
|
957
|
+
def assign_score: (untyped value) -> Integer
|
924
958
|
|
925
959
|
end
|
926
960
|
end
|
@@ -942,7 +976,7 @@ module Liquid2
|
|
942
976
|
|
943
977
|
attr_accessor source: (String | nil)
|
944
978
|
|
945
|
-
def initialize: (String message, ?[Symbol, String?, Integer]? token) -> void
|
979
|
+
def initialize: (String message, ?[Symbol, String?, Integer]? token, ?template_name: String?) -> void
|
946
980
|
|
947
981
|
def detailed_message: (?highlight: bool, **untyped kwargs) -> String
|
948
982
|
|
@@ -975,6 +1009,12 @@ module Liquid2
|
|
975
1009
|
class DisabledTagError < LiquidError
|
976
1010
|
end
|
977
1011
|
|
1012
|
+
class TemplateInheritanceError < LiquidError
|
1013
|
+
end
|
1014
|
+
|
1015
|
+
class RequiredBlockError < TemplateInheritanceError
|
1016
|
+
end
|
1017
|
+
|
978
1018
|
# The standard _for_ tag.
|
979
1019
|
class ForTag < Tag
|
980
1020
|
@expression: LoopExpression
|
@@ -1117,6 +1157,26 @@ module Liquid2
|
|
1117
1157
|
|
1118
1158
|
def evaluate: (RenderContext context) -> [String, untyped]
|
1119
1159
|
end
|
1160
|
+
|
1161
|
+
class Parameter < Expression
|
1162
|
+
@name: String
|
1163
|
+
|
1164
|
+
@sym: Symbol
|
1165
|
+
|
1166
|
+
@value: untyped
|
1167
|
+
|
1168
|
+
attr_reader name: String
|
1169
|
+
|
1170
|
+
attr_reader sym: Symbol
|
1171
|
+
|
1172
|
+
attr_reader value: (untyped | :undefined)
|
1173
|
+
|
1174
|
+
# @param name [Token]
|
1175
|
+
# @param value [Expression]
|
1176
|
+
def initialize: ([Symbol, String?, Integer] token, String name, untyped value) -> void
|
1177
|
+
|
1178
|
+
def evaluate: (RenderContext context) -> [String, untyped]
|
1179
|
+
end
|
1120
1180
|
end
|
1121
1181
|
|
1122
1182
|
module Liquid2
|
@@ -1170,11 +1230,11 @@ module Liquid2
|
|
1170
1230
|
class FilteredExpression < Expression
|
1171
1231
|
@left: Expression
|
1172
1232
|
|
1173
|
-
@filters: Array[Filter]
|
1233
|
+
@filters: Array[Filter]?
|
1174
1234
|
|
1175
|
-
attr_reader filters: Array[Filter]
|
1235
|
+
attr_reader filters: Array[Filter]?
|
1176
1236
|
|
1177
|
-
def initialize: ([Symbol, String?, Integer] token, untyped left, Array[Filter] filters) -> void
|
1237
|
+
def initialize: ([Symbol, String?, Integer] token, untyped left, Array[Filter]? filters) -> void
|
1178
1238
|
|
1179
1239
|
def evaluate: (RenderContext context) -> untyped
|
1180
1240
|
end
|
@@ -1207,25 +1267,17 @@ module Liquid2
|
|
1207
1267
|
class Filter < Expression
|
1208
1268
|
@name: String
|
1209
1269
|
|
1210
|
-
@args: Array[untyped]
|
1270
|
+
@args: Array[untyped]?
|
1211
1271
|
|
1212
1272
|
attr_reader name: String
|
1213
1273
|
|
1214
|
-
attr_reader args: Array[untyped]
|
1274
|
+
attr_reader args: Array[untyped]?
|
1215
1275
|
|
1216
1276
|
# @param name [Token]
|
1217
1277
|
# @param args [Array[Expression]]
|
1218
|
-
def initialize: ([Symbol, String?, Integer] token, String name, Array[untyped] args) -> void
|
1278
|
+
def initialize: ([Symbol, String?, Integer] token, String name, Array[untyped]? args) -> void
|
1219
1279
|
|
1220
1280
|
def evaluate: (untyped left, RenderContext context) -> untyped
|
1221
|
-
|
1222
|
-
private
|
1223
|
-
|
1224
|
-
# @param context [RenderContext]
|
1225
|
-
# @return [positional arguments, keyword arguments] An array with two elements.
|
1226
|
-
# The first is an array of evaluates positional arguments. The second is a hash
|
1227
|
-
# of keyword names to evaluated keyword values.
|
1228
|
-
def evaluate_args: (RenderContext context) -> [Array[untyped], Hash[Symbol, untyped]]
|
1229
1281
|
end
|
1230
1282
|
end
|
1231
1283
|
|
@@ -1341,10 +1393,16 @@ module Liquid2
|
|
1341
1393
|
attr_reader segments: Array[String | Integer | Path]
|
1342
1394
|
attr_reader head: (String | Integer | Path)
|
1343
1395
|
|
1396
|
+
RE_PROPERTY: ::Regexp
|
1397
|
+
|
1344
1398
|
# @param segments [Array[String | Integer | Path]]
|
1345
1399
|
def initialize: ([Symbol, String?, Integer] token, Array[String | Integer | Path] segments) -> void
|
1346
1400
|
|
1347
1401
|
def evaluate: (RenderContext context) -> untyped
|
1402
|
+
|
1403
|
+
private
|
1404
|
+
|
1405
|
+
def segment_to_s: (untyped segment, ?head: bool) -> ::String
|
1348
1406
|
end
|
1349
1407
|
end
|
1350
1408
|
|
@@ -1553,7 +1611,7 @@ module Liquid2
|
|
1553
1611
|
def self.to_integer: (untyped obj) -> Integer
|
1554
1612
|
|
1555
1613
|
# Cast _obj_ to a number, favouring BigDecimal over Float.
|
1556
|
-
def self.to_decimal: (untyped obj, ?default:
|
1614
|
+
def self.to_decimal: (untyped obj, ?default: untyped) -> (Integer | BigDecimal | Numeric)
|
1557
1615
|
|
1558
1616
|
# Cast _obj_ to a date and time. Return `nil` if casting fails.
|
1559
1617
|
def self.to_date: (untyped obj) -> untyped
|
@@ -1717,6 +1775,8 @@ module Liquid2
|
|
1717
1775
|
|
1718
1776
|
def self.nil_safe_casecmp: (untyped a, untyped b) -> (0 | 1 | -1)
|
1719
1777
|
|
1778
|
+
INFINITY_ARRAY: [Float]
|
1779
|
+
|
1720
1780
|
def self.numeric_compare: (untyped left, untyped right) -> (0 | 1 | -1)
|
1721
1781
|
|
1722
1782
|
def self.ints: (untyped obj) -> Array[(Integer | Float | BigDecimal)]
|
@@ -1956,6 +2016,8 @@ module Liquid2
|
|
1956
2016
|
class DocTag < Tag
|
1957
2017
|
@text: String
|
1958
2018
|
|
2019
|
+
attr_reader text: String
|
2020
|
+
|
1959
2021
|
def self.parse: ([Symbol, String?, Integer] token, Parser parser) -> DocTag
|
1960
2022
|
|
1961
2023
|
# @param text [String]
|
@@ -1984,7 +2046,7 @@ end
|
|
1984
2046
|
module Liquid2
|
1985
2047
|
# The standard _include_ tag.
|
1986
2048
|
class IncludeTag < Tag
|
1987
|
-
@
|
2049
|
+
@template_name: untyped
|
1988
2050
|
|
1989
2051
|
@repeat: bool
|
1990
2052
|
|
@@ -2014,7 +2076,7 @@ module Liquid2
|
|
2014
2076
|
|
2015
2077
|
# The standard _render_ tag.
|
2016
2078
|
class RenderTag < Tag
|
2017
|
-
@
|
2079
|
+
@template_name: untyped
|
2018
2080
|
|
2019
2081
|
@repeat: bool
|
2020
2082
|
|
@@ -2345,4 +2407,233 @@ module Liquid2
|
|
2345
2407
|
# Return _left_ serialized in JSON format.
|
2346
2408
|
def self.json: (untyped left, ?pretty: bool) -> String
|
2347
2409
|
end
|
2348
|
-
end
|
2410
|
+
end
|
2411
|
+
|
2412
|
+
module Liquid2
|
2413
|
+
# The _macro_ tag.
|
2414
|
+
class MacroTag < Tag
|
2415
|
+
@macro_name: String
|
2416
|
+
|
2417
|
+
@params: Hash[String, Parameter]
|
2418
|
+
|
2419
|
+
@block: Block
|
2420
|
+
|
2421
|
+
@blank: bool
|
2422
|
+
|
2423
|
+
END_BLOCK: Set[String]
|
2424
|
+
|
2425
|
+
attr_reader macro_name: String
|
2426
|
+
|
2427
|
+
attr_reader params: Hash[String, Parameter]
|
2428
|
+
|
2429
|
+
attr_reader Block: Block
|
2430
|
+
|
2431
|
+
# @param parser [Parser]
|
2432
|
+
# @return [MacroTag]
|
2433
|
+
def self.parse: ([Symbol, String?, Integer] token, Parser parser) -> MacroTag
|
2434
|
+
|
2435
|
+
def initialize: ([Symbol, String?, Integer] token, String name, Hash[String, Parameter] params, Block block) -> void
|
2436
|
+
|
2437
|
+
def render: (RenderContext context, String _buffer) -> void
|
2438
|
+
end
|
2439
|
+
|
2440
|
+
# The _call_ tag.
|
2441
|
+
class CallTag < Tag
|
2442
|
+
@macro_name: String
|
2443
|
+
|
2444
|
+
@args: Array[untyped]
|
2445
|
+
|
2446
|
+
@kwargs: Array[KeywordArgument]
|
2447
|
+
|
2448
|
+
@blank: bool
|
2449
|
+
|
2450
|
+
DISABLED_TAGS: Set[String]
|
2451
|
+
|
2452
|
+
attr_reader macro_name: String
|
2453
|
+
|
2454
|
+
attr_reader args: Array[untyped]
|
2455
|
+
|
2456
|
+
attr_reader kwargs: Array[KeywordArgument]
|
2457
|
+
|
2458
|
+
# @param parser [Parser]
|
2459
|
+
# @return [CallTag]
|
2460
|
+
def self.parse: ([Symbol, String?, Integer] token, Parser parser) -> CallTag
|
2461
|
+
|
2462
|
+
def initialize: ([Symbol, String?, Integer] token, String name, Array[untyped] args, Array[KeywordArgument] kwargs) -> void
|
2463
|
+
|
2464
|
+
def render: (RenderContext context, String buffer) -> void
|
2465
|
+
end
|
2466
|
+
end
|
2467
|
+
|
2468
|
+
module Liquid2
|
2469
|
+
# The _extends_ tag.
|
2470
|
+
class ExtendsTag < Tag
|
2471
|
+
@template_name: String
|
2472
|
+
|
2473
|
+
@blank: bool
|
2474
|
+
|
2475
|
+
attr_reader template_name: String
|
2476
|
+
|
2477
|
+
# @param token [[Symbol, String?, Integer]]
|
2478
|
+
# @param parser [Parser]
|
2479
|
+
# @return [ExtendsTag]
|
2480
|
+
def self.parse: ([Symbol, String?, Integer] token, Parser parser) -> ExtendsTag
|
2481
|
+
|
2482
|
+
def initialize: ([Symbol, String?, Integer] token, String name) -> void
|
2483
|
+
|
2484
|
+
def render: (RenderContext context, String buffer) -> void
|
2485
|
+
|
2486
|
+
def stack_blocks: (RenderContext context, Template template) -> Template?
|
2487
|
+
|
2488
|
+
def inheritance_nodes: (RenderContext context, Template template) -> [Array[ExtendsTag], Array[BlockTag]]
|
2489
|
+
end
|
2490
|
+
|
2491
|
+
# The _block_ tag.
|
2492
|
+
class BlockTag < Tag
|
2493
|
+
@block_name: String
|
2494
|
+
|
2495
|
+
@block: Block
|
2496
|
+
|
2497
|
+
@required: bool
|
2498
|
+
|
2499
|
+
@blank: bool
|
2500
|
+
|
2501
|
+
END_BLOCK: Set[String]
|
2502
|
+
|
2503
|
+
attr_reader block_name: String
|
2504
|
+
|
2505
|
+
attr_reader block: Block
|
2506
|
+
|
2507
|
+
attr_reader required: bool
|
2508
|
+
|
2509
|
+
# @param token [[Symbol, String?, Integer]]
|
2510
|
+
# @param parser [Parser]
|
2511
|
+
# @return [BlockTag]
|
2512
|
+
def self.parse: ([Symbol, String?, Integer] token, Parser parser) -> BlockTag
|
2513
|
+
|
2514
|
+
def initialize: ([Symbol, String?, Integer] token, String name, Block block, required: bool) -> void
|
2515
|
+
|
2516
|
+
def render: (RenderContext context, String buffer) -> void
|
2517
|
+
end
|
2518
|
+
|
2519
|
+
class BlockDrop
|
2520
|
+
@token: [Symbol, String?, Integer]
|
2521
|
+
|
2522
|
+
@context: RenderContext
|
2523
|
+
|
2524
|
+
@buffer: String
|
2525
|
+
|
2526
|
+
@name: String
|
2527
|
+
|
2528
|
+
@parent: [BlockTag, bool, Template, untyped?]?
|
2529
|
+
|
2530
|
+
attr_reader token: [Symbol, String?, Integer]
|
2531
|
+
|
2532
|
+
# @param token [[Symbol, String?, Integer]]
|
2533
|
+
# @param context [RenderContext]
|
2534
|
+
# @param name [String]
|
2535
|
+
# @param parent [[BlockTag, bool, String, Block?]?]
|
2536
|
+
def initialize: ([Symbol, String?, Integer] token, RenderContext context, String name, untyped parent) -> void
|
2537
|
+
|
2538
|
+
def to_s: () -> ::String
|
2539
|
+
|
2540
|
+
def key?: (untyped key) -> bool
|
2541
|
+
|
2542
|
+
def []: (untyped key) -> untyped
|
2543
|
+
end
|
2544
|
+
end
|
2545
|
+
|
2546
|
+
module Liquid2
|
2547
|
+
class WithTag < Tag
|
2548
|
+
@args: Array[KeywordArgument]
|
2549
|
+
|
2550
|
+
@block: Block
|
2551
|
+
|
2552
|
+
@blank: bool
|
2553
|
+
|
2554
|
+
END_BLOCK: Set[String]
|
2555
|
+
|
2556
|
+
# @param token [[Symbol, String?, Integer]]
|
2557
|
+
# @param parser [Parser]
|
2558
|
+
# @return [WithTag]
|
2559
|
+
def self.parse: ([Symbol, String?, Integer] token, Parser parser) -> WithTag
|
2560
|
+
|
2561
|
+
# @param token [[Symbol, String?, Integer]]
|
2562
|
+
# @param args [Array[KeywordArgument]]
|
2563
|
+
# @param block [Block]
|
2564
|
+
def initialize: ([Symbol, String?, Integer] token, Array[KeywordArgument] args, Block block) -> void
|
2565
|
+
|
2566
|
+
def render: (RenderContext context, String buffer) -> void
|
2567
|
+
|
2568
|
+
def children: (untyped _static_context, ?include_partials: bool) -> ::Array[Node]
|
2569
|
+
|
2570
|
+
def block_scope: () -> Array[Identifier]
|
2571
|
+
end
|
2572
|
+
end
|
2573
|
+
|
2574
|
+
module Liquid2
|
2575
|
+
# Base class for all arithmetic expressions.
|
2576
|
+
class ArithmeticExpression < Expression
|
2577
|
+
@left: untyped
|
2578
|
+
|
2579
|
+
@right: untyped
|
2580
|
+
|
2581
|
+
# @param left [Expression]
|
2582
|
+
# @param right [Expression]
|
2583
|
+
def initialize: ([Symbol, String?, Integer] token, untyped left, untyped right) -> void
|
2584
|
+
|
2585
|
+
def children: () -> ::Array[untyped]
|
2586
|
+
|
2587
|
+
def inner_evaluate: (untyped context) -> ::Array[untyped]
|
2588
|
+
end
|
2589
|
+
|
2590
|
+
# Infix addition
|
2591
|
+
class Plus < ArithmeticExpression
|
2592
|
+
def evaluate: (RenderContext context) -> untyped
|
2593
|
+
end
|
2594
|
+
|
2595
|
+
# Infix subtraction
|
2596
|
+
class Minus < ArithmeticExpression
|
2597
|
+
def evaluate: (RenderContext context) -> untyped
|
2598
|
+
end
|
2599
|
+
|
2600
|
+
# Infix multiplication
|
2601
|
+
class Times < ArithmeticExpression
|
2602
|
+
def evaluate: (RenderContext context) -> untyped
|
2603
|
+
end
|
2604
|
+
|
2605
|
+
# Infix division
|
2606
|
+
class Divide < ArithmeticExpression
|
2607
|
+
def evaluate: (RenderContext context) -> untyped
|
2608
|
+
end
|
2609
|
+
|
2610
|
+
# Infix modulo
|
2611
|
+
class Modulo < ArithmeticExpression
|
2612
|
+
def evaluate: (RenderContext context) -> untyped
|
2613
|
+
end
|
2614
|
+
|
2615
|
+
# Infix exponentiation
|
2616
|
+
class Pow < ArithmeticExpression
|
2617
|
+
def evaluate: (RenderContext context) -> untyped
|
2618
|
+
end
|
2619
|
+
|
2620
|
+
# Prefix negation
|
2621
|
+
class Negative < Expression
|
2622
|
+
@right: untyped
|
2623
|
+
|
2624
|
+
# @param right [Expression]
|
2625
|
+
def initialize: ([Symbol, String?, Integer] token, untyped right) -> void
|
2626
|
+
|
2627
|
+
def evaluate: (RenderContext context) -> untyped
|
2628
|
+
end
|
2629
|
+
|
2630
|
+
# Prefix positive
|
2631
|
+
class Positive < Expression
|
2632
|
+
@right: untyped
|
2633
|
+
|
2634
|
+
# @param right [Expression]
|
2635
|
+
def initialize: ([Symbol, String?, Integer] token, untyped right) -> void
|
2636
|
+
|
2637
|
+
def evaluate: (RenderContext context) -> untyped
|
2638
|
+
end
|
2639
|
+
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: liquid2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Prior
|
@@ -73,7 +73,6 @@ extra_rdoc_files: []
|
|
73
73
|
files:
|
74
74
|
- ".rubocop.yml"
|
75
75
|
- ".ruby-version"
|
76
|
-
- ".vscode/settings.json"
|
77
76
|
- CHANGELOG.md
|
78
77
|
- LICENSE.txt
|
79
78
|
- LICENSE_SHOPIFY.txt
|
@@ -86,6 +85,7 @@ files:
|
|
86
85
|
- lib/liquid2/errors.rb
|
87
86
|
- lib/liquid2/expression.rb
|
88
87
|
- lib/liquid2/expressions/arguments.rb
|
88
|
+
- lib/liquid2/expressions/arithmetic.rb
|
89
89
|
- lib/liquid2/expressions/array.rb
|
90
90
|
- lib/liquid2/expressions/blank.rb
|
91
91
|
- lib/liquid2/expressions/boolean.rb
|
metadata.gz.sig
CHANGED
Binary file
|
data/.vscode/settings.json
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"rubocop.mode": "enableUnconditionally",
|
3
|
-
"cSpell.words": [
|
4
|
-
"bigdecimal",
|
5
|
-
"bytesize",
|
6
|
-
"byteslice",
|
7
|
-
"charpos",
|
8
|
-
"Cyclomatic",
|
9
|
-
"endcapture",
|
10
|
-
"endcase",
|
11
|
-
"endcomment",
|
12
|
-
"endraw",
|
13
|
-
"forloop",
|
14
|
-
"ivar",
|
15
|
-
"keyreq",
|
16
|
-
"kwargs",
|
17
|
-
"ljust",
|
18
|
-
"lparen",
|
19
|
-
"lstrip",
|
20
|
-
"ndigits",
|
21
|
-
"nodoc",
|
22
|
-
"parentloop",
|
23
|
-
"rparen",
|
24
|
-
"rpartition",
|
25
|
-
"rstrip",
|
26
|
-
"tablerow",
|
27
|
-
"truncatewords"
|
28
|
-
],
|
29
|
-
"cSpell.enabledFileTypes": {
|
30
|
-
"ruby": true
|
31
|
-
}
|
32
|
-
}
|