-
Notifications
You must be signed in to change notification settings - Fork 23
/
package.json
executable file
·1378 lines (1378 loc) · 92.2 KB
/
package.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"name": "shopify-liquid",
"displayName": "Liquid",
"description": "The essential vscode extension for Liquid. Supports completions, validations, formatting and intelliSense capabilities for Shopify, Jekyll and 11ty Liquid variations.",
"publisher": "sissel",
"icon": "images/logo.png",
"author": "Νίκος Σαβίδης <[email protected]>",
"version": "4.1.0",
"keywords": [
"liquid",
"shopify",
"formatter",
"html",
"jekyll",
"11ty",
"syntax",
"snippets",
"language",
"formatting"
],
"repository": {
"type": "git",
"url": "https://github.com/panoply/vscode-liquid.git"
},
"bugs": {
"email": "[email protected]",
"url": "https://github.com/panoply/vscode-liquid/issues"
},
"engines": {
"vscode": "^1.81.0",
"node": "v16.15.0"
},
"categories": [
"Formatters",
"Programming Languages",
"Snippets",
"Other"
],
"activationEvents": [
"onStartupFinished"
],
"main": "./dist/extension.js",
"extensionDependencies": [
"vscode.html-language-features"
],
"contributes": {
"enabledApiProposals": [
"outputChannelLanguage"
],
"htmlLanguageParticipants": [
{
"autoInsert": true,
"languageId": "liquid"
}
],
"jsonValidation": [
{
"url": "./schema/liquidrc.json",
"fileMatch": [
".liquidrc",
".liquidrc.json"
]
},
{
"url": "./schema/shopify-schema.json",
"fileMatch": [
"settings_schema.json"
]
},
{
"url": "./schema/section-groups.json",
"fileMatch": [
"*-group.json"
]
},
{
"url": "./schema/shopify-templates.json",
"fileMatch": [
"index.json",
"index.*.json",
"404.json",
"article.json",
"blog.json",
"cart.json",
"cart.*.json",
"collection.json",
"collection.*.json",
"list-collection.json",
"page.*.json",
"page.json",
"password.json",
"search.json",
"search.*.json",
"product.json",
"product.*.json"
]
},
{
"url": "./schema/syncify-env.json",
"fileMatch": [
".env.syncify",
".env.syncify.json"
]
},
{
"url": "./schema/syncify-schema.json",
"fileMatch": [
"*.schema"
]
},
{
"url": "./schema/syncify-pkg.json",
"fileMatch": [
"package.json"
]
},
{
"url": "./schema/syncify.json",
"fileMatch": [
"syncify.config.json",
"syconfig.json"
]
}
],
"commands": [
{
"command": "liquid.restartExtension",
"title": "Restart Extension",
"icon": "$(refresh)",
"category": "Liquid"
},
{
"command": "liquid.enableFormatting",
"title": "Enable Formatting",
"icon": "$(check)",
"category": "Liquid"
},
{
"command": "liquid.disableFormatting",
"title": "Disable Formatting",
"icon": "$(x)",
"category": "Liquid"
},
{
"command": "liquid.openOutput",
"title": "Open Output",
"icon": "$(note)",
"category": "Liquid"
},
{
"command": "liquid.formatDocument",
"title": "Format Document",
"icon": "$(list-selection)",
"category": "Liquid"
},
{
"command": "liquid.generateLiquidrc",
"title": "Generate .liquidrc file",
"icon": "$(file-add)",
"category": "Liquid"
},
{
"command": "liquid.releaseNotes",
"title": "Release Notes",
"icon": "$(file-add)",
"category": "Liquid"
}
],
"languages": [
{
"id": "log-liquid",
"extensions": [
".liquid.log"
],
"aliases": [
"Log Liquid"
]
},
{
"id": "liquid",
"configuration": "./language/liquid.language-configuration.json",
"extensions": [
".liquid",
".jekyll"
],
"aliases": [
"Liquid"
],
"icon": {
"light": "/icons/liquid.svg",
"dark": "/icons/liquid.svg"
}
},
{
"id": "liquid-css",
"configuration": "./language/liquid-css.language-configuration.json",
"extensions": [
".css.liquid"
],
"aliases": [
"Liquid CSS"
]
},
{
"id": "liquid-scss",
"configuration": "./language/liquid-css.language-configuration.json",
"extensions": [
".scss.liquid"
],
"aliases": [
"Liquid SCSS"
]
},
{
"id": "liquid-javascript",
"configuration": "./language/liquid-javascript.language-configuration.json",
"extensions": [
".js.liquid"
],
"aliases": [
"Liquid JavaScript"
],
"icon": {
"light": "/icons/liquid-javascript.svg",
"dark": "/icons/liquid-javascript.svg"
}
},
{
"id": "jsonc",
"filenames": [
".liquidrc",
".liquidrc.json"
],
"icon": {
"light": "/icons/liquidrc.svg",
"dark": "/icons/liquidrc.svg"
}
},
{
"id": "json",
"filenamePatterns": [
"*.schema"
]
},
{
"id": "json",
"filenames": [
".env.syncify",
".env.syncify.json"
]
}
],
"grammars": [
{
"language": "log-liquid",
"scopeName": "liquid.log",
"path": "./syntax/languages/log.tmLanguage.json"
},
{
"language": "liquid",
"scopeName": "source.liquid",
"path": "./syntax/liquid.tmLanguage.json",
"unbalancedBracketScopes": [
"punctuation.definition.tag.begin.liquid",
"punctuation.definition.tag.end.liquid",
"punctuation.definition.tag.range.liquid",
"keyword.other.array-item.liquid",
"punctuation.output.liquid"
]
},
{
"scopeName": "source.liquid.embedded",
"path": "./syntax/injections/embedded.tmLanguage.json",
"injectTo": [
"source.liquid"
],
"embeddedLanguages": {
"source.json": "json",
"source.js": "javascript",
"source.css": "css",
"source.css.liquid": "liquid-css",
"source.scss": "scss"
}
},
{
"scopeName": "source.liquid.frontmatter",
"path": "./syntax/injections/frontmatter.tmLanguage.json",
"injectTo": [
"source.liquid",
"source.json.liquid",
"source.yaml.liquid",
"source.css.liquid",
"source.scss.liquid",
"source.js.liquid"
],
"unbalancedBracketScopes": [
"punctuation.definition.tag.begin.liquid",
"punctuation.definition.tag.end.liquid",
"punctuation.definition.tag.range.liquid",
"keyword.other.array-item.liquid"
],
"embeddedLanguages": {
"source.yaml": "yaml",
"source.json": "json",
"source.js": "javascript",
"source.toml": "toml"
}
},
{
"scopeName": "source.markdown.liquid",
"path": "./syntax/injections/markdown.tmLanguage.json",
"injectTo": [
"text.html.markdown"
]
},
{
"scopeName": "source.json.liquid",
"path": "./syntax/injections/json.tmLanguage.json",
"injectTo": [
"source.json"
]
},
{
"scopeName": "source.yaml.liquid",
"path": "./syntax/injections/yaml.tmLanguage.json",
"injectTo": [
"source.yaml"
]
},
{
"language": "liquid-css",
"scopeName": "source.css.liquid",
"path": "./syntax/languages/css.tmLanguage.json",
"unbalancedBracketScopes": [
"punctuation.section.property-list.begin.bracket.curly.css",
"punctuation.section.property-list.end.bracket.curly.css",
"punctuation.definition.tag.begin.liquid",
"punctuation.definition.tag.end.liquid",
"punctuation.definition.tag.range.liquid",
"keyword.other.array-item.liquid"
]
},
{
"language": "liquid-scss",
"scopeName": "source.scss.liquid",
"path": "./syntax/languages/scss.tmLanguage.json",
"unbalancedBracketScopes": [
"punctuation.definition.tag.begin.liquid",
"punctuation.definition.tag.end.liquid",
"punctuation.definition.tag.range.liquid",
"keyword.other.array-item.liquid"
]
},
{
"language": "liquid-javascript",
"scopeName": "source.js.liquid",
"path": "./syntax/languages/javascript.tmLanguage.json",
"unbalancedBracketScopes": [
"punctuation.definition.tag.begin.liquid",
"punctuation.definition.tag.end.liquid",
"punctuation.definition.tag.range.liquid",
"keyword.other.array-item.liquid"
]
},
{
"scopeName": "markdown.liquid.codeblock",
"path": "./syntax/injections/code-block.tmLanguage.json",
"injectTo": [
"text.html.markdown"
],
"embeddedLanguages": {
"meta.embedded.block.liquid": "liquid"
},
"unbalancedBracketScopes": [
"punctuation.definition.tag.begin.liquid",
"punctuation.definition.tag.end.liquid",
"punctuation.definition.tag.range.liquid",
"keyword.other.array-item.liquid"
]
},
{
"injectTo": [
"source.js",
"source.js.jsx",
"source.jsx",
"source.ts",
"source.tsx"
],
"embeddedLanguages": {
"meta.liquid.template.literal.liquid": "liquid"
},
"scopeName": "source.liquid-literal.injection",
"path": "./syntax/injections/literal-string.tmLanguage.json"
},
{
"injectTo": [
"source.js",
"source.js.jsx",
"source.jsx",
"source.ts",
"source.tsx"
],
"scopeName": "liquid-literal.attributes.injection",
"path": "./syntax/injections/literal-attributes.tmLanguage.json",
"embeddedLanguages": {
"meta.template.expression.ts": "typescript"
}
},
{
"injectTo": [
"source.liquid"
],
"scopeName": "source.liquid.doc-comments.injection",
"path": "./syntax/injections/comments.tmLanguage.json"
},
{
"scopeName": "source.json.embedded",
"path": "./syntax/injections/json-script.tmLanguage.json",
"injectTo": [
"source.liquid"
],
"embeddedLanguages": {
"meta.embedded.block.json.html": "json"
}
}
],
"snippets": [
{
"language": "liquid",
"path": "./snippets/tags.json"
}
],
"configurationDefaults": {
"files.associations": {
"*.json.liquid": "json",
"*.yaml.liquid": "yaml",
"*.md.liquid": "markdown",
"*.js.liquid": "liquid-javascript",
"*.css.liquid": "liquid-css",
"*.scss.liquid": "liquid-scss"
},
"[liquid]": {
"editor.foldingStrategy": "indentation"
},
"liquid.format.rules": {
"json": {
"braceAllman": true
}
},
"emmet.includeLanguages": {
"liquid": "html",
"liquid-css": "css",
"liquid-scss": "scss"
},
"vsicons.associations.files": [
{
"icon": "liquid",
"filename": true,
"format": "svg",
"extensions": [
".liquidrc",
".liquidrc.json"
]
}
]
},
"configuration": {
"title": "Liquid Language Settings",
"markdownDescription": "The Liquid extension will look for a `.liquidrc` or `.liquidrc.json` in the root of your project. When no such files exists it will use the `.vscode/settings.json` file or alternatively your global user settings.",
"type": "object",
"properties": {
"liquid.engine": {
"type": "string",
"default": "shopify",
"enum": [
"standard",
"shopify",
"11ty"
],
"markdownDescription": "**Default** `shopify`\n\nThe `liquid.engine` option is used to determine the Liquid template variation you are working with. This extension supports the following Liquid variations:\n\n- [Standard](https://shopify.github.io/liquid/)\n- [Shopify](https://shopify.dev/docs/api/liquid)\n- [11ty](https://www.11ty.dev/docs/languages/liquid/)\n- [Jekyll](https://jekyllrb.com/docs/liquid/)\n\nFeatures and capabilities differ depending on the engine you define. For example, if you are working with the **Shopify** Liquid variation the engine is set to `Standard` it will result in features like object and property completions not being available.\n\n**Tip**\n\nYou can optionally infer the engine with your `.liquidrc` file.\n"
},
"liquid.config.baseDir": {
"type": "string",
"markdownDescription": "**Default** `.`\n\nThe `liquid.config.baseDir` option can be used to define a **relative** directory path for resolving `.liquidrc` or `.liquidrc.json` files. The option will only work in projects that use `.liquidrc` files and has no effect if `liquid.config.method` is set `workspace`\n\nConsider the following directory layout:\n\n```\n\n root\n ├─ .vscode\n │ └─ settings.json\n ├─ docs\n │ ├─ .liquidrc.json\n │ └─ index.liquid\n └─ src\n ├─ includes\n └─ views\n\n```\n\nBy default, when no `.liquidrc` exist in a projects root, then it is assumed beautification rules have been defined in the `.vscode/settings.json` workspace file. When no formatting rules are defined in the workspace file then the default rules will be used. In situations where you need the extension to use a config file that is located outside of the root you can provide a `baseDir` to the directory containing one of the supported file types.\n\nTargeting the `.liquidrc.json` file located in `docs` directory:\n\n<!--prettier-ignore-->\n```jsonc\n{\n \"liquid.config.baseDir\": \"./docs\"\n}\n```\n\n_The `baseDir` must point to a relative directory not a file. If the directory provided cannot be resolved, root is used._\n"
},
"liquid.config.method": {
"type": "string",
"default": "liquidrc",
"markdownDescription": "**Default** `liquidrc`\n\n💁🏽♀️ Recommended setting is `liquidrc`\n\nThe configuration method to use. This option defaults to `liquidrc` which means the extension will look for a `.liquidrc` or `.liquidrc.json` file contained in your projects root directory (or relative to the `liquid.config.baseDir` path if provided).\n\nIf you set this to `workspace` then the extension will expect settings to be defined within a `.vscode/settings.json` workspace file or if you are not using a project based workspace setting (`.vscode/settings.json`) file then it will look at global workspace (User Preference) settings.\n\n> **NOTE**\n>\n> When set `workspace` and no configuration settings are defined but a `.liquidrc` file is detected then the extension will use the `.liquidrc` file.\n\n",
"enum": [
"liquidrc",
"workspace"
]
},
"liquid.files.shopify": {
"type": "object",
"additionalProperties": false,
"markdownDescription": "[Shopify](https://shopify.dev) file references.",
"properties": {
"locales": {
"type": "string",
"markdownDescription": "**Default** `\"\"`\n\nProvide the path location to the default locale (ie: `en.default.json`) file. Use a path that is relative to the current project root directory. When you provide a locale file path reference then completions will show for locales in output type object tags.\n\n**IMPORTANT**\n\nYou must point to path to **default** language file.\n"
},
"settings": {
"type": "string",
"markdownDescription": "**Default** `\"\"`\n\nProvide the path location to your `settings_schema.json` file. Use a path that is relative to the current project root directory. When you provide a path reference then completions will show for liquid objects starting with `settings.*`.\n\n**IMPORTANT**\n\nYou must point to path to `settings_schema.json` file.\n\n"
},
"snippets": {
"type": "array",
"markdownDescription": "**Default** `[]`\n\nDefine a string list of paths relative to the projects root directory which contain snippet files. When you providing snippet file paths location references the snippets will be provided in `{% render '' %}` completions.\n\n",
"items": {
"uniqueItems": true,
"type": "string"
}
},
"sections": {
"type": [
"array",
"string"
],
"markdownDescription": "**Default** `[]`\n\nDefine a string list of paths relative to the projects root directory which contain section files. When you provide section file location references the sections will be made available in `{% section '' %}` tag completions and `cmd + click` will allow quick opening.\n\n",
"items": {
"uniqueItems": true,
"type": "string"
}
},
"schema": {
"type": [
"array",
"string"
],
"markdownDescription": "> **This reference is for developers leveraging [Syncify](https://github.com/panoply/syncify). If you are not using Syncify then please consider adopting it as an alternative to Shopify CLI. Break free from the Shopify CLI by using Syncify and leveraging Shared Section Schema.**\n\n---\n\n**Default** `[]`\n\nDefine a string list of paths relative to the projects root directory which contain shared schema files, this will _typically_ be identical to globs you've defined in your `syncify.config.ts` file on the `paths > schema[]` config option. When you provide schema file mapping, shared section scheme `$ref` entires within `{% schema %}` tags will provide auto-completions and in addition any `$description` key values will be rendered in tooltips.\n",
"items": {
"uniqueItems": true,
"type": "string"
}
}
}
},
"liquid.files.11ty": {
"type": "object",
"additionalProperties": false,
"markdownDescription": "[11ty](https://11ty.dev) file references.",
"properties": {
"data": {
"type": "array",
"markdownDescription": "**Default** `[]`\n\nAccepts JSON file path locations to data files used by Eleventy. Use paths that are relative to the current project root directory.\n\n**IMPORTANT**\n\nOnly JSON data files are accepted, YAML files will be ignored.",
"items": {
"uniqueItems": true,
"type": "string"
}
},
"includes": {
"type": "array",
"markdownDescription": "**Default** `[]`\n\nDefine a string list of paths relative to the projects root directory which contain include files. When you provide include file path location references they will be provided in `{% include '' %}` and/or `{% render '' %}` completions.\n\n",
"items": {
"uniqueItems": true,
"type": "string"
}
}
}
},
"liquid.completion.tags": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable Liquid tag completions. Liquid tags are determined by delimiter character sequences of (`{% %}`). When enabled (ie: `true`), tags completions are triggered by typing `%`.\n\n\n"
},
"liquid.completion.objects": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable Liquid object completions. This option requires the Liquid `engine` to be set to `shopify`. When enabled (ie: `true`) then object completions will be invoked within tokens and tags.\n\n**Note**\n\nThis option will only trigger objects but not properties of objects. You need to enable `liquid.completion.properties` for property completions.\n\n"
},
"liquid.completion.properties": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable Liquid property completions for known objects. This option requires the Liquid `engine` to be set to `shopify`. When enabled (ie: `true`) properties of known objects are triggered when typing `.` and the previous keyword is a determined to be known object reference.\n\n**Note**\n\nThis option will only trigger properties, but not objects. You need to enable `liquid.completion.objects` for object completions.\n\n"
},
"liquid.completion.filters": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable Liquid filter completions. When enabled, typing `|` will trigger filter completions when the cursor position is determined to contained within a token that accepts filters.\n"
},
"liquid.completion.operators": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable Liquid control flow, iteration and other relating operator completions. When enabled (ie: `true`), Liquid logical's are triggered in accordance with surrounding structures and token context. The following operators are provided:\n\n- `>`\n- `<`\n- `<=`\n- `>=`\n- `==`\n- `!=`\n- `or`\n- `and`\n- `contains`\n- `in`\n- `with`\n- `as`\n"
},
"liquid.completion.sections": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable Liquid object/property completions for `section.settings.*` and `block.settings.*` supplied using data contained within `{% schema %}` tag regions of Shopify section files. This option requires the Liquid `engine` to be set to `shopify`. When enabled (ie: `true`) then property of `section.*` will provided.\n\n_This completion capability will respect scoped based `block.type` control flows regions_\n"
},
"liquid.completion.schema": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable schema JSON completions within `{% schema %}` tag regions of Shopify section files. This option requires the Liquid `engine` to be set to `shopify`. When enabled (ie: `true`) the JSON will provide completions triggers.\n\n"
},
"liquid.completion.variables": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable Liquid defined variable completions. When enabled (ie: `true`) then completions will include variable assignments and captures. The extension also supports re-assignment scoping and iteree array scoping.\n\n\n**Example**\n\nBelow is an example of variable completions when enabled (`true`) which is the default.\n\n```js\n\n{% assign foo = 'hello world' %}\n\n{{ f }} // The assignment foo will be shown in completions\n\n```\n\n"
},
"liquid.completion.frontmatter": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable Liquid object completions for frontmatter in files. This is typically used in [11ty](https://www.11ty.dev/) projects and allows for YAML frontmatter data to be made available in liquid objects completions.\n\n\n"
},
"liquid.validate.schema": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable schema JSON diagnostic validations within `{% schema %}` tag regions of Shopify section files. This option requires the Liquid `engine` to be set to `shopify`. When enable this capability will warn of incorrect or otherwise invalid JSON syntax and structures expressed.\n\n_It is highly recommended you keep this enabled to prevent formatting errors_\n\n"
},
"liquid.hover.tags": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable schema JSON hover descriptions within `{% schema %}` tag regions of Shopify section files. This option requires the Liquid `engine` to be set to `shopify`. When enabled (ie: `true`) the hover tooltips will shown in the text editor when placing the cursor on different properties and values in the JSON structure.\n\n"
},
"liquid.hover.filters": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable schema JSON hover descriptions within `{% schema %}` tag regions of Shopify section files. This option requires the Liquid `engine` to be set to `shopify`. When enabled (ie: `true`) the hover tooltips will shown in the text editor when placing the cursor on different properties and values in the JSON structure.\n\n"
},
"liquid.hover.schema": {
"type": "boolean",
"default": true,
"markdownDescription": "**Default** `true`\n\n💁🏽♀️ Recommended setting is `true`\n\nWhether or not to enable schema JSON hover descriptions within `{% schema %}` tag regions of Shopify section files. This option requires the Liquid `engine` to be set to `shopify`. When enabled (ie: `true`) the hover tooltips will shown in the text editor when placing the cursor on different properties and values in the JSON structure.\n\n"
},
"liquid.format.validate": {
"type": "boolean",
"markdownDescription": "**Default** `true`\n\nÆsthetic will perform parse validations and throw when invalid syntax structures are detected. You can disable this behavior if you are writing shitty code or using the Shopify Dawn theme (which is both chaotic and riddled in bad practices). Disabling validations is required in some cases in order to have Æsthetic allows bad syntactical structures to pass through, but please be aware that this may result in untended output and break your code.\n\nWhen **enabled** (i.e: `true`) Æsthetic will return hints and parse error locations to help you debug the issue.",
"default": true
},
"liquid.format.rules": {
"type": "object",
"properties": {
"ignore": {
"type": "array",
"markdownDescription": "\n**Default** `[]`\n\nA glob pattern list of file's and/or directories to be ignored from formatting. Use relative paths to exclude or ignore beautification running on certain files or uri path locations within your workspace.\n\n**Tip**\n\nYou can also leverage inline ignore comments. Place a Æsthetic ignore comment at the top of files you wish to exclude from beautification, for example:\n\n```liquid\n\n{% # esthetic-ignore %}\n\n```\n\n**Ignoring Next**\n\nÆsthetic support tag level ignored. Annotate tokens that are full formed with ignore next comments to exclude them from formatting:\n\n```liquid\n\n{% # esthetic-ignore %}\n<div>\n ALL CODE IN THIS TAG IS EXCLUDED\n</div>\n\n```\n\n**Ignoring Regions**\n\nÆsthetic also supports inline ignore comment regions. Wrap the code you wish to exclude from formatting as follows:\n\n```liquid\n\n{% # esthetic-ignore-start %}\n\n CODE TO EXCLUDE\n\n{% # esthetic-ignore-end %}\n\n```",
"items": {
"type": "string"
}
},
"endNewLine": {
"deprecationMessage": "DEPRECATED\n\nThe \"endNewLine\" rule has changed. You should instead use \"endNewline\" wherein the uppercase \"L\" for \"Line\" now uses a lowercase \"l\", for example:\n\n✓ THIS IS CORRECT\n\n{\n \"endNewline\": true\n}\n\n𐄂 THIS IS INCORRECT\n\n{\n \"endNewLine\": true\n}"
},
"endNewline": {
"type": "boolean",
"default": false,
"markdownDescription": "Whether or not files should end with an empty newline. When this rule is `undefined` or omitted then Æsthetic will look for an `.editorconfig` file and use definitions inferred within.\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/global/endNewline/)\n"
},
"wrap": {
"type": "number",
"default": 0,
"markdownDescription": "Character width limit before applying word wrap. A `0` value disables this option.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/global/wrap/)\n"
},
"wrapFraction": {
"type": "number",
"default": 0,
"markdownDescription": "Wrap fraction is used on internal structures as a secondary point of control. By default, it will use a 75% metric according to `wrap` defined values.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/global/wrapFraction/)\n"
},
"indentSize": {
"type": "number",
"default": 2,
"markdownDescription": "The number of `indentChar` values to comprise a single indentation. By default this is set to `2` meaning a single indentation will be 2 whitespace characters.\n\n**How to use Tabs?**\n\nIf you're heathen who prefers Tabs. You will need to set the `indentChar` to `\\t` and infer the size limit here.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/global/indentSize/)\n"
},
"preserveLine": {
"type": "number",
"default": 3,
"markdownDescription": "The maximum number of consecutive empty lines to retain (ie: preserve). By default, `3` newlines are preserved.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/global/preserveLine/)\n\n"
},
"crlf": {
"type": "boolean",
"default": false,
"markdownDescription": "If line termination should be Windows (CRLF) format. By default, Unix (LF) format is used. Setting this value to `true` will use CRLF.\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/global/crlf)\n"
},
"preset": {
"enum": [
"default",
"recommended",
"warrington",
"strict",
"shopify"
],
"default": "default",
"markdownDescription": "A preset ruleset style guide to use. This will assign rules according to a set of defaults to produce a certain beautification result. If this rule is `undefined` it will default to using `default` which is least obtrusive formatting style.\n\n**Options**\n\n**`default`** (required)\n\n> This is the **default** and the most unobtrusive. Formatting will use a preservationist based technique with this preset mode.\n\n**`recommended`**\n\n> This style guide is typically suited for most cases, it will apply a base set of rules aligned with the Æsthetic approach.\n\n**`warrington`**\n\n> This style guide preset is best suited for developers and specifically teams working with Shopify themes. The preset was curated by the talented [David Warrington](https://ellodave.dev/).\n\n**`strict`**\n\n> This is a strict ruleset curated by the projects author [Panoply (sissel)](https://github.com/panoply).\n\n**`shopify`** 🤡\n\n> Replicates the Prettier style of formatting. If you've used the Shopify Liquid Prettier Plugin and enjoy that beautification style using this preset will produce the same results.\n\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/global/preset/)\n"
},
"liquid": {
"type": "object",
"additionalProperties": false,
"markdownDescription": "Beautification rules applied to **Liquid**",
"properties": {
"argumentLineBreak": {
"type": "number",
"default": 0,
"markdownDescription": "Forces Liquid tag and filter argument expressions onto newlines according to the number of arguments present on the token. By default, this rule uses a value of `0` which will result in arguments being forced when the tag or output token containing them spans ¾ (or 75%) of defined global [`wrap`](https://aesthetic.js.org/rules/global/wrap) limit.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/argumentLineBreak/)\n\n\n"
},
"delimiterTrims": {
"type": "string",
"enum": [
"preserve",
"tags",
"outputs",
"never",
"always",
"multiline"
],
"default": "preserve",
"markdownDescription": "### Delimiter Trims\n\nHow delimiter whitespace trim dashes (`{%-`, `-%}`, `{{-` and `-}}`) should handled in Liquid tags and output object tokens. You should _maybe_ avoid setting this to `force` in order to avoid stripping whitespace in cases where text content contains Liquid.\n\n> **NOTE**\n>\n> This rule will not touch Liquid tokens encapsulated within strings, ie: `\"{{ foo }}\"` or `'{{ foo }}'` are left intact.\n\n\n**Options**\n\nThis is a Liquid specific formatting rule which defaults to using `preserve` when no option has been specified.\n\n- preserve\n- tags\n- outputs\n- never\n- always\n- multiline\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/delimiterTrims/)\n\n"
},
"delimiterPlacement": {
"type": "string",
"enum": [
"preserve",
"inline",
"consistent",
"force",
"force-multiline"
],
"default": "preserve",
"markdownDescription": "Controls the placement of opening and closing Liquid tag delimiters (`{%`, `{{`, `}}` and `%}`). This rule provides 3 different formatting options and will ensure that delimiters are beautified in concordance. When the rule is `undefined` it will default to using `none`.\n\n**Options**\n\nThis is a Liquid specific formatting rule which defaults to using `preserve` when no option has been specified. The **recommended** option to use is `consistent` or `force-multiline`.\n\n- preserve\n- default\n- inline\n- consistent\n- force\n- force-multiline\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/delimiterPlacement/)\n\n"
},
"commentIndent": {
"type": "boolean",
"default": false,
"markdownDescription": "Applies single indentation to containing content of Liquid comments. Liquid line type comments are currently not supported by this rule. Only block type Liquid tokens will be handled.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/commentIndent/)\n\n"
},
"commentPreserve": {
"type": "boolean",
"default": false,
"markdownDescription": "Preserve the inner contents of Liquid block comments.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/preserveComment/)\n"
},
"filterLineBreak": {
"type": "number",
"default": 0,
"markdownDescription": "Forces Liquid filter `|` expressions onto newlines when the number of filters contained on a tag exceeds the limit defined. By default, this rule uses a value of `0` which will result in Liquid filters being forced when the tag or output token containing them spans ¾ (or 75%) of defined global [`wrap`](https://aesthetic.js.org/rules/global/wrap) limit.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/forceFilter/)\n"
},
"dedentTagList": {
"type": "array",
"default": [],
"markdownDescription": "A list of Liquid tags that should exclude standard indentation. Only tags which contain a start and end types are valid.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/dedentTagList/)\n",
"items": {
"type": "string",
"additionalItems": true,
"uniqueItems": true,
"not": {
"enum": [
"comment"
]
},
"enum": [
"form",
"paginate",
"capture",
"case",
"for",
"if",
"raw",
"tablerow",
"liquid",
"unless",
"schema",
"style",
"script",
"stylesheet",
"javascript"
]
}
},
"ignoreTagList": {
"type": "array",
"default": [],
"markdownDescription": "A list of Liquid tags that should excluded from formatting. Only tags which contain a start and end types are valid.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/ignoreTagList/)\n",
"items": {
"type": "string",
"additionalItems": true,
"uniqueItems": true,
"not": {
"enum": [
"comment"
]
},
"enum": [
"form",
"paginate",
"capture",
"case",
"for",
"if",
"raw",
"tablerow",
"liquid",
"unless",
"schema",
"style",
"script",
"stylesheet",
"javascript"
]
}
},
"indentAttribute": {
"default": false,
"type": "boolean",
"markdownDescription": "Whether or not to apply indentation of HTML attributes within Liquid identified tag blocks contained in HTML Tags. This rule emulates the `liquid-prettier-plugin` structures with more refined controlling. This requires the `markup` rule `forceAttributes` be set to either `true` or have limit value (e.g: `2`) defined.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/indentAttribute/)\n"
},
"lineBreakSeparator": {
"default": "after",
"type": "string",
"markdownDescription": "Controls the placement of Liquid separator type characters in new line structures. In situations where you write a multiline tag expression this rule can augment the order of leading operator characters such as the parameter comma `,` separator.\n\nThis rule will not break tag content on to new lines for you, it instead together with the inferred structure you've expressed. This means that you will need to manually new line the arguments.\n\n### Options\n\nThis is a Liquid specific formatting rule which will default to `after` when no option has been specified.\n\n- before\n- after\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/lineBreakSeparator/)\n",
"enum": [
"before",
"after"
]
},
"equipoiseSpacing": {
"default": true,
"type": "boolean",
"markdownDescription": "Whether or not to normalize and correct the inner spacing of Liquid tokens. This rule will equally distribute whitespace characters contained within Liquid tags and output tokens. The rule will also inject spacing in accordance with common Liquid code structures.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/equipoiseSpacing)\n"
},
"preserveInternal": {
"type": "boolean",
"default": false,
"markdownDescription": "Prevent the internals structures of Liquid tokens from being formatted. When enabled, Æsthetic will preserve the internal formations of output and tags.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/preserveInternal/)\n"
},
"quoteConvert": {
"default": "none",
"type": "string",
"markdownDescription": "How quotation characters of markup attributes and Liquid tokens should be handled. Allows for conversion to single quotes or double quotes. Markup tag attributes should always use double quotations, it's the standard in languages like HTML.\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/liquid/quoteConvert/)\n",
"enum": [
"none",
"double",
"single"
]
},
"commentNewline": {
"deprecationMessage": "DEPRECATED\n\nThe liquid \"commentNewline\" rule has been deprecated. This formatting rule no longer has any effect.\n\n𐄂 NO LONGER SUPPORTED\n{\n \"liquid\": {\n \"commentNewline\": true\n }\n}"
},
"forceArgument": {
"deprecationMessage": "DEPRECATED\n\nThe liquid \"forceArgument\" rule has changed. You should instead use \"argumentLineBreak\" for example:\n\n✓ THIS IS CORRECT\n\n{\n \"liquid\": {\n \"argumentLineBreak\": 3\n }\n}\n\n𐄂 THIS IS INCORRECT\n{\n \"liquid\": {\n \"forceArgument\": 3\n }\n}"
},
"forceFilter": {
"deprecationMessage": "DEPRECATED\n\nThe liquid \"forceFilter\" rule has changed. You should instead use \"filterLineBreak\" for example:\n\n✓ THIS IS CORRECT\n\n{\n \"liquid\": {\n \"filterLineBreak\": 3\n }\n}\n\n𐄂 THIS IS INCORRECT\n{\n \"liquid\": {\n \"forceFilter\": 3\n }\n}"
},
"preserveComment": {
"deprecationMessage": "DEPRECATED\n\nThe liquid \"preserveComment\" rule has changed. You should instead use \"commentPreserve\" for example:\n\n✓ THIS IS CORRECT\n\n{\n \"liquid\": {\n \"commentPreserve\": true\n }\n}\n\n𐄂 THIS IS INCORRECT\n{\n \"liquid\": {\n \"preserveComment\": true\n }\n}"
},
"normalizeSpacing": {
"deprecationMessage": "DEPRECATED\n\nThe liquid \"normalizeSpacing\" rule has changed. You should instead use \"equipoiseSpacing\" for example:\n\n✓ THIS IS CORRECT\n\n{\n \"liquid\": {\n \"normalizeSpacing\": true\n }\n}\n\n𐄂 THIS IS INCORRECT\n{\n \"liquid\": {\n \"equipoiseSpacing\": true\n }\n}"
}
}
},
"markup": {
"type": "object",
"additionalProperties": false,
"markdownDescription": "Beautification rules applied to the following markup languages:\n\n- **HTML**\n- **Liquid**\n- **XML**\n- **XHTML**",
"properties": {
"attributeCasing": {
"type": "string",
"default": "preserve",
"markdownDescription": "How markup attribute names and value casing should be processed. This defaults to `preserve` which will leave casing intact and _typically_ the best option to use.\n\n**Options**\n\nThis rule defaults to using `preserve` which will leave attribute names and values intact.\n\n- preserve\n- lowercase\n- lowercase-name\n- lowercase-value\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/attributeCasing/)\n",
"enum": [
"preserve",
"lowercase",
"lowercase-name",
"lowercase-value"
]
},
"attributeLineBreak": {
"type": [
"boolean",
"number"
],
"default": false,
"markdownDescription": "How or if markup attributes should be indented each onto their own line. You can optionally provide an integer value of `1` or more. When an integer value is passed, attributes will be forced only if the number of attributes contained on the tag exceeds the supplied value limit. When you define a `wrap` level then attributes will be automatically forced when limit is exceeded unless you've set this rule to `true` or provided an integer threshold.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/forceAttribute/)\n"
},
"attributePreserve": {
"type": "boolean",
"default": false,
"markdownDescription": "Whether or not markup tags should have their insides preserved, ie: attributes. This option is only available to markup and does not support child tokens that require a different lexer. When enabled, this rule will run precedence and override all attribute related rules.\n\nIf you're working with a JavaScript framework that implements a data-attribute development based architecture (like Alpine or Angular) which requires a build-step then this rule _might_ help prevent Æsthetic augmenting code or failing when it encounters otherwise invalid structures not supported or recognized by official markup based language specifications.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/attributePreserve/)"
},
"attributeSort": {
"type": [
"boolean",
"array"
],
"default": false,
"oneOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "boolean"
}
],
"markdownDescription": "Provides sorting of HTML and XML Attributes. When enabled (`true`) it will sort attributes in an alpha-numeric order. Sorting is ignored on tags which contain Liquid output and tag type tokens as attributes. The rule also accepts a list of attribute names and when provided will be sorted according to order passed.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/attributeSort/)\n"
},
"commentIndent": {
"type": "boolean",
"default": false,
"markdownDescription": "Applies single indentation to containing content of HTML comments.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/commentIndent/)\n\n"
},
"commentDelimiter": {
"enum": [
"preserve",
"inline",
"inline-align",
"force",
"consistent"
],
"default": "preserve",
"markdownDescription": "Controls the placement of HTML and XML (i.e: markup) type comment delimiters. This is a markup specific formatting rule that defaults to using preserve and applied to languages using `<!--` and `-->` delimiter tokens.\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/commentDelimiters/)"
},
"commentPreserve": {
"type": "boolean",
"default": false,
"markdownDescription": "Preserve the inner contents of HTML comments.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/preserveComment/)\n"
},
"delimiterTerminus": {
"enum": [
"inline",
"force",
"adapt"
],
"default": "inline",
"markdownDescription": "Whether or not ending HTML tag delimiters should be forced onto a newline. This will emulate the style of Prettier's `singleAttributePerLine` formatting option, wherein the last `>` delimiter character breaks itself onto a new line. Though this output style was popularized by Prettier, the resulting structures produced are far from elegant (aesthetically).\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/delimiterTerminus/)\n\n"
},
"forceIndent": {
"type": "boolean",
"default": false,
"markdownDescription": "Will force indentation upon all content and tags without regard for the text nodes. To some degree this rule emulates a result similar to that you'd expect in Prettier. Inline preservation is respected in cases where a Liquid output object token is encapsulated between text nodes. In such scenarios the text content will only force indent the start and end portions.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/forceIndent/)\n"
},
"ignoreJS": {
"type": "boolean",
"default": true,
"markdownDescription": "Whether or not to format regions of code that are identified to be JavaScript. Tags such as `<script>` and `{% javascript %}` can contain JavaScript and by default beautification is applied using the `script` rules. When ignored (ie: `true`) Æsthetic will not apply formatting to these regions.\n\nWhen enabled (ie: `true`) the entire `<script>` region is excluded including indentation levels. If the `<script>` tag is being used to link an external file (eg: `<script src=\"/path/fle.js\"></script>`) and no code is detected between the opening and closing tags then formatting will be applied in accordance with defined rules pertaining to markup.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/ignoreJS)\n"
},
"ignoreJSON": {
"type": "boolean",
"default": true,
"markdownDescription": "Whether or not to format regions of code that are identified to be JSON. Such tags are typically identified using attribute annotations like `<script type=\"application/json\">`. By default, beautification is applied using the `json` rules. When ignored (ie: `true`) Æsthetic will not apply formatting to these regions.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/ignoreJSON/)\n"
},
"ignoreCSS": {
"type": "boolean",
"default": true,
"markdownDescription": "Whether or not to format regions of code that are identified to be CSS. Tags such as `<style>` and `{% style %}` can contain CSS and by default beautification is applied using the `style` rules. When ignored (ie: `true`) Æsthetic will not apply formatting to these regions.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/ignoreCSS/)\n"
},
"preserveText": {
"type": "boolean",
"default": true,
"markdownDescription": "If text in the provided markup code should be preserved exactly as provided. This option eliminates beautification and wrapping of text content.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/preserveText/)\n"
},
"selfCloseSpace": {
"type": "boolean",
"default": false,
"markdownDescription": "Whether markup self-closing (void) tags should apply a single space to ending portion of the delimiter which results in the tag output to produce `' />'` instead of `'/>'`.\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/selfCloseSpace/)\n"
},
"selfCloseSVG": {
"type": "boolean",
"default": false,
"markdownDescription": "Whether or not SVG type tags should be converted to self closing void types. When enabled, tags which contain a closing tag will instead become void type.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/selfCloseSVG/)\n"
},
"stripAttributeLines": {
"type": "boolean",
"default": false,
"markdownDescription": "Whether or not newlines contained within tag attributes or preserved. This rule will be used along side the `forceAttribute` rule and when enabled (`true`) will strip newlines contained in HTML attributes. When disabled (`false`) then newlines will be preserved according to the **global** `preserveLine` limit defined.\n\nThis rule wil only take effect when `forceAttribute` is enabled (ie: `true`) or the `forceAttribute` limit has been exceeded as per the provided value. In addition to `forceAttribute`, the global `preserveLine` rule value is used to determine the amount of lines allowed.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/stripAttributeLines/)\n"
},
"stripTextWrapLines": {
"type": "boolean",
"default": false,
"markdownDescription": "Whether or not Æsthetic should strip newline occurrences when applying word-wrap on text content. This rule will only take effect if a word wrap limit has been defined via `wrap` option. When enabled, Æsthetic will remove newline occurrences from text identified content and produce a strictly formed wrap.\n\nBy default, this rule is `false` and Æsthetic will preserve newlines within text content, ensuring that newline occurrences adhere to the `preserveLine` limit regardless of whether or not a `wrap` limit has been set. Setting this to `true` will override `preserveLine` within text specific content and instead refer to the `wrap` limitation.\n\n> **NOTE**\n>\n> If you have set `preserveText` to `true` this rule will be ignored, as `preserveText` take precedence and\n> will override all text content related formatting options.\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/stripTextWrapLines/)"
},
"quoteConvert": {
"default": "none",
"type": "string",
"markdownDescription": "How quotation characters of markup attributes and Liquid tokens should be handled. Allows for conversion to single quotes or double quotes. Markup tag attributes should always use double quotations, it's the standard in languages like HTML.\n\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/quoteConvert/)\n",
"enum": [
"none",
"double",
"single"
]
},
"valueLineBreak": {
"enum": [
"preserve",
"inline",
"force-align",
"force-indent"
],
"default": "preserve",
"markdownDescription": "Attribute value handling applied when values span multiple lines.\n\n**Options**\n\n- preserve\n- align\n- indent\n- force-preserve\n- force-align\n- force-indent\n\n[Æsthetic Documentation](https://aesthetic.js.org/rules/markup/valueLineBreak/)\n"
},
"valueSpacing": {
"enum": [
"preserve",
"equipoise",
"wrap",
"wrap-fraction"