From 16719b4fb8857dcd0b80f6064a462d6a6f855f07 Mon Sep 17 00:00:00 2001 From: eyelidlessness Date: Thu, 25 Jul 2024 09:54:27 -0700 Subject: [PATCH] Correct non-empty tuples in all cases where that was intended --- .../xforms-engine/src/parse/xpath/semantic-analysis.ts | 7 +++++-- .../xforms-engine/src/parse/xpath/syntax-traversal.ts | 8 ++++---- .../test/parse/xpath/syntax-traversal.test.ts | 4 ++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/xforms-engine/src/parse/xpath/semantic-analysis.ts b/packages/xforms-engine/src/parse/xpath/semantic-analysis.ts index 276b7ec8..7e5e6a08 100644 --- a/packages/xforms-engine/src/parse/xpath/semantic-analysis.ts +++ b/packages/xforms-engine/src/parse/xpath/semantic-analysis.ts @@ -48,9 +48,12 @@ const isCallToLocalNamedFunction = ( return localNameNode?.text === localName; }; -type ArgumentTypes = readonly AnySyntaxType[]; +type ArgumentTypes = readonly [AnySyntaxType, ...AnySyntaxType[]]; -const hasCallSignature = (syntaxNode: FunctionCallNode, expected: ArgumentTypes[]): boolean => { +const hasCallSignature = ( + syntaxNode: FunctionCallNode, + expected: readonly ArgumentTypes[] +): boolean => { const [, ...argumentNodes] = syntaxNode.children; if (argumentNodes.length === 0 && expected.length === 0) { diff --git a/packages/xforms-engine/src/parse/xpath/syntax-traversal.ts b/packages/xforms-engine/src/parse/xpath/syntax-traversal.ts index fa774acb..4d17cbfa 100644 --- a/packages/xforms-engine/src/parse/xpath/syntax-traversal.ts +++ b/packages/xforms-engine/src/parse/xpath/syntax-traversal.ts @@ -14,7 +14,7 @@ export type TypedSyntaxNode = Extract< type CollectedNodes = Identity>>; const isTypedNodeMatch = ( - types: readonly [...Type[]], + types: readonly [Type, ...Type[]], syntaxNode: AnySyntaxNode ): syntaxNode is TypedSyntaxNode => { return types.includes(syntaxNode.type as Type); @@ -25,7 +25,7 @@ interface CollectNodesOptions { } const collectTypedChildren = ( - types: readonly [...Type[]], + types: readonly [Type, ...Type[]], currentNode: AnySyntaxNode, options: CollectNodesOptions = {} ): CollectedNodes => { @@ -48,7 +48,7 @@ const collectTypedChildren = ( * identifying all LocationPaths referenced by a broader expression. */ export const collectTypedNodes = ( - types: readonly [...Type[]], + types: readonly [Type, ...Type[]], currentNode: AnySyntaxNode, options: CollectNodesOptions = {} ): CollectedNodes => { @@ -112,7 +112,7 @@ export const isCompleteSubExpression = ( * in `foo[position() = 2]`). */ export const findTypedPrincipalExpressionNode = ( - types: readonly [...Type[]], + types: readonly [Type, ...Type[]], xpathNode: XPathNode ): TypedSyntaxNode | null => { const [first, ...rest] = collectTypedNodes(types, xpathNode); diff --git a/packages/xforms-engine/test/parse/xpath/syntax-traversal.test.ts b/packages/xforms-engine/test/parse/xpath/syntax-traversal.test.ts index 6190c444..3d7e13b1 100644 --- a/packages/xforms-engine/test/parse/xpath/syntax-traversal.test.ts +++ b/packages/xforms-engine/test/parse/xpath/syntax-traversal.test.ts @@ -34,7 +34,7 @@ describe('XPath syntax traversal', () => { interface CollectTypedNodesCase { readonly expressionDescription: string; readonly expression: string; - readonly types: readonly AnySyntaxType[]; + readonly types: readonly [AnySyntaxType, ...AnySyntaxType[]]; readonly deep?: true; readonly resultsDescription: string; readonly expected: readonly ExpectedSyntaxNode[]; @@ -126,7 +126,7 @@ describe('XPath syntax traversal', () => { interface FindTypedPrincipalExpressionNodeCase { readonly expressionDescription: string; readonly expression: string; - readonly types: readonly AnySyntaxType[]; + readonly types: readonly [AnySyntaxType, ...AnySyntaxType[]]; readonly resultDescription: string; readonly expected: ExpectedSyntaxNode | null; }