From 30241d83cf4dec7a97bc68c7d9c5275bb576d20b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efe=20G=C3=B6kdemir?= Date: Sun, 18 Oct 2026 09:53:07 +0300 Subject: [PATCH] Add article_list setting support --- .changeset/article-list-setting-types.md | 6 ++++++ .../checks/valid-block-content-setting-type/index.spec.ts | 1 + packages/theme-check-common/src/schema-settings.spec.ts | 1 + packages/theme-check-common/src/schema-settings.ts | 2 ++ packages/theme-check-common/src/types/schemas/setting.ts | 3 +++ .../theme-language-server-common/src/TypeSystem.spec.ts | 7 ++++--- 6 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 .changeset/article-list-setting-types.md diff --git a/.changeset/article-list-setting-types.md b/.changeset/article-list-setting-types.md new file mode 100644 index 000000000..10c53b30d --- /dev/null +++ b/.changeset/article-list-setting-types.md @@ -0,0 +1,6 @@ +--- +'@shopify/theme-check-common': minor +'@shopify/theme-language-server-common': minor +--- + +Add support for `article_list` theme settings and infer their values as arrays of articles. diff --git a/packages/theme-check-common/src/checks/valid-block-content-setting-type/index.spec.ts b/packages/theme-check-common/src/checks/valid-block-content-setting-type/index.spec.ts index 9abd98056..d622253f1 100644 --- a/packages/theme-check-common/src/checks/valid-block-content-setting-type/index.spec.ts +++ b/packages/theme-check-common/src/checks/valid-block-content-setting-type/index.spec.ts @@ -17,6 +17,7 @@ describe('ValidBlockContentSettingType', () => { ['checkbox', 'boolean'], ['product', 'product'], ['product_list', 'product[]'], + ['article_list', 'article[]'], ])('reports a %s schema setting named content on its type', async (settingType, liquidType) => { const source = blockSource([{ id: 'content', type: settingType }]); diff --git a/packages/theme-check-common/src/schema-settings.spec.ts b/packages/theme-check-common/src/schema-settings.spec.ts index 1a9d068c9..5d8bead76 100644 --- a/packages/theme-check-common/src/schema-settings.spec.ts +++ b/packages/theme-check-common/src/schema-settings.spec.ts @@ -32,6 +32,7 @@ describe('schemaSettingLiquidType', () => { ['video', 'video'], ['collection_list', 'collection[]'], ['product_list', 'product[]'], + ['article_list', 'article[]'], ] as const)('maps %s settings to their Liquid type', (type, expected) => { expect(schemaSettingLiquidType(type)).toBe(expected); }); diff --git a/packages/theme-check-common/src/schema-settings.ts b/packages/theme-check-common/src/schema-settings.ts index 690170d8e..e4ea9360f 100644 --- a/packages/theme-check-common/src/schema-settings.ts +++ b/packages/theme-check-common/src/schema-settings.ts @@ -43,6 +43,8 @@ export function schemaSettingLiquidType(settingType: string): string | undefined return 'collection[]'; case 'product_list': return 'product[]'; + case 'article_list': + return 'article[]'; default: return undefined; } diff --git a/packages/theme-check-common/src/types/schemas/setting.ts b/packages/theme-check-common/src/types/schemas/setting.ts index b1e75028a..5c4d42399 100644 --- a/packages/theme-check-common/src/types/schemas/setting.ts +++ b/packages/theme-check-common/src/types/schemas/setting.ts @@ -17,6 +17,7 @@ export declare namespace Setting { | Product | CollectionList | ProductList + | ArticleList | MetaobjectList | Text | Textarea @@ -57,6 +58,7 @@ export declare namespace Setting { // Resource List Settings CollectionList = 'collection_list', ProductList = 'product_list', + ArticleList = 'article_list', MetaobjectList = 'metaobject_list', // Text Settings @@ -140,6 +142,7 @@ export declare namespace Setting { export interface CollectionList extends ResourceList {} export interface ProductList extends ResourceList {} + export interface ArticleList extends ResourceList {} export interface MetaobjectList extends ResourceList { metaobject_type: string; } diff --git a/packages/theme-language-server-common/src/TypeSystem.spec.ts b/packages/theme-language-server-common/src/TypeSystem.spec.ts index 044c954f5..911fee268 100644 --- a/packages/theme-language-server-common/src/TypeSystem.spec.ts +++ b/packages/theme-language-server-common/src/TypeSystem.spec.ts @@ -389,7 +389,7 @@ describe('Module: TypeSystem', () => { } }); - it('should support section settings in section files', async () => { + it('should support article_list section settings in section files', async () => { const sourceCode = ` {{ section.settings.my_list }} {% schema %} @@ -400,7 +400,7 @@ describe('Module: TypeSystem', () => { { "id": "my_list", "label": "t:my-setting.label", - "type": "product_list" + "type": "article_list" } ] } @@ -414,7 +414,7 @@ describe('Module: TypeSystem', () => { ast, 'file:///sections/my-section.liquid', ); - expect(inferredType).to.eql({ kind: 'array', valueType: 'product' } as ArrayType); + expect(inferredType).to.eql({ kind: 'array', valueType: 'article' } as ArrayType); }); it.each([ @@ -447,6 +447,7 @@ describe('Module: TypeSystem', () => { ['video', 'video'], ['collection_list', { kind: 'array', valueType: 'collection' }], ['product_list', { kind: 'array', valueType: 'product' }], + ['article_list', { kind: 'array', valueType: 'article' }], ] as const)('infers block.settings values for %s settings', async (settingType, expectedType) => { const sourceCode = ` {{ block.settings.value }}