From 2e9e96d77c27a9f6c60f23dc568b6d6b57bfb298 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Fri, 7 Nov 2025 11:39:41 +0100 Subject: [PATCH] feat(jsii-reflect): can jqii-query on `fqn` field The "fqn" field did not use to be queryable, it now is. --- packages/jsii-reflect/lib/jsii-query.ts | 6 ++++++ packages/jsii-reflect/test/jsii-query.test.ts | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/packages/jsii-reflect/lib/jsii-query.ts b/packages/jsii-reflect/lib/jsii-query.ts index cb01c04485..a82b142c15 100644 --- a/packages/jsii-reflect/lib/jsii-query.ts +++ b/packages/jsii-reflect/lib/jsii-query.ts @@ -232,22 +232,26 @@ function matches(el: ApiElement, kind: string, pred: Predicate): boolean { if (!['type', 'class'].includes(kind)) return false; context.kind = 'class'; + context.fqn = el.fqn; } if (el instanceof InterfaceType) { const moreSpecificInterfaceType = el.datatype ? 'struct' : 'interface'; if (!['type', moreSpecificInterfaceType].includes(kind)) return false; context.kind = moreSpecificInterfaceType; + context.fqn = el.fqn; } if (el instanceof EnumType) { if (!['type', 'enum'].includes(kind)) return false; context.kind = 'enum'; + context.fqn = el.fqn; } if (el instanceof Property) { if (!['member', 'property'].includes(kind)) return false; context.kind = 'property'; + context.fqn = `${el.parentType.fqn}#${el.name}`; } if (el instanceof Callable) { const moreSpecificCallable = @@ -255,6 +259,7 @@ function matches(el: ApiElement, kind: string, pred: Predicate): boolean { if (!['member', moreSpecificCallable].includes(kind)) return false; context.kind = moreSpecificCallable; + context.fqn = `${el.parentType.fqn}#${el.name}`; } Object.assign( @@ -430,6 +435,7 @@ type ApiElementAttribute = const API_ELEMENT_ATTRIBUTES: ApiElementAttribute[] = [ 'kind', + 'fqn', // Types 'ancestors', 'abstract', diff --git a/packages/jsii-reflect/test/jsii-query.test.ts b/packages/jsii-reflect/test/jsii-query.test.ts index 9e72d68fbf..4b2de8080c 100644 --- a/packages/jsii-reflect/test/jsii-query.test.ts +++ b/packages/jsii-reflect/test/jsii-query.test.ts @@ -113,6 +113,16 @@ describe('filtering', () => { 'static @scope/jsii-calc-base-of-base.StaticConsumer#consume(..._args: any[]): void', ); }); + + test('fqn is available to filter on', async () => { + const result = await query([ + parseExpression('class:fqn.includes("base.StaticConsumer")'), + ]); + + expect(result).toContainEqual( + 'static @scope/jsii-calc-base-of-base.StaticConsumer#consume(..._args: any[]): void', + ); + }); }); async function query(