From fa42255e933f534cf8e7aacc0160f71cb2464345 Mon Sep 17 00:00:00 2001 From: K-Schaeffer Date: Tue, 16 Jan 2024 18:37:42 -0300 Subject: [PATCH 1/5] feat: handle LogicalExpressions on getAttributeValue --- src/utils/getAttributeValue.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/utils/getAttributeValue.ts b/src/utils/getAttributeValue.ts index 0378ff36..e0930fb0 100644 --- a/src/utils/getAttributeValue.ts +++ b/src/utils/getAttributeValue.ts @@ -15,6 +15,16 @@ function getAttributeValue(node: AST.VAttribute | AST.VDirective) { return node.value.expression.value; } + if (node.value.expression.type === 'LogicalExpression') { + const operator = node.value.expression.operator; + // @ts-ignore + const leftSideOfOperation = node.value.expression.left.value; + // @ts-ignore + const rightSideOfOperation = node.value.expression.right.value; + + return eval(`${leftSideOfOperation} ${operator} ${rightSideOfOperation}`); + } + // TODO we're effectively using this as just a placeholder to let rules know // that a value has been passed in for this attribute. We should replace // this with a stronger API to either explicitly handle all of the different From 244f2bb6dc0797bb14ba691684c9785f9cd8e51c Mon Sep 17 00:00:00 2001 From: K-Schaeffer Date: Tue, 16 Jan 2024 18:38:15 -0300 Subject: [PATCH 2/5] test: assert logic expression behavior --- src/rules/__tests__/interactive-supports-focus.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rules/__tests__/interactive-supports-focus.test.ts b/src/rules/__tests__/interactive-supports-focus.test.ts index d7658125..d0fbcb38 100644 --- a/src/rules/__tests__/interactive-supports-focus.test.ts +++ b/src/rules/__tests__/interactive-supports-focus.test.ts @@ -61,7 +61,8 @@ makeRuleTester("interactive-supports-focus", rule, { "
", "", "", - `` + ``, + "
", ], invalid: [ ...rule.interactiveRoles.flatMap((role) => From 833acb17dc3e30757deb9193a19ab053c66ea3c5 Mon Sep 17 00:00:00 2001 From: K-Schaeffer Date: Wed, 17 Jan 2024 19:33:20 -0300 Subject: [PATCH 3/5] fix: remove ts-ignore statements --- src/utils/getAttributeValue.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/utils/getAttributeValue.ts b/src/utils/getAttributeValue.ts index e0930fb0..a304da25 100644 --- a/src/utils/getAttributeValue.ts +++ b/src/utils/getAttributeValue.ts @@ -17,9 +17,7 @@ function getAttributeValue(node: AST.VAttribute | AST.VDirective) { if (node.value.expression.type === 'LogicalExpression') { const operator = node.value.expression.operator; - // @ts-ignore const leftSideOfOperation = node.value.expression.left.value; - // @ts-ignore const rightSideOfOperation = node.value.expression.right.value; return eval(`${leftSideOfOperation} ${operator} ${rightSideOfOperation}`); From 451d4a7e4891806aef05507ce9bdbf66ca27f3f8 Mon Sep 17 00:00:00 2001 From: K-Schaeffer Date: Wed, 17 Jan 2024 21:05:49 -0300 Subject: [PATCH 4/5] fix: verifying type of left and right bits of the expression --- src/utils/getAttributeValue.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/utils/getAttributeValue.ts b/src/utils/getAttributeValue.ts index a304da25..192f1726 100644 --- a/src/utils/getAttributeValue.ts +++ b/src/utils/getAttributeValue.ts @@ -17,8 +17,17 @@ function getAttributeValue(node: AST.VAttribute | AST.VDirective) { if (node.value.expression.type === 'LogicalExpression') { const operator = node.value.expression.operator; - const leftSideOfOperation = node.value.expression.left.value; - const rightSideOfOperation = node.value.expression.right.value; + let leftSideOfOperation; + let rightSideOfOperation; + node.value.expression.left.type + + if (node.value.expression.left.type === 'Literal') { + leftSideOfOperation = node.value.expression.left.value; + } + + if (node.value.expression.right.type === 'Literal') { + rightSideOfOperation = node.value.expression.right.value; + } return eval(`${leftSideOfOperation} ${operator} ${rightSideOfOperation}`); } From fbdf5706e1da34e67f2680aacdd5090c0c2ac685 Mon Sep 17 00:00:00 2001 From: K-Schaeffer Date: Wed, 17 Jan 2024 21:07:11 -0300 Subject: [PATCH 5/5] fix: typo --- src/utils/getAttributeValue.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/utils/getAttributeValue.ts b/src/utils/getAttributeValue.ts index 192f1726..e64e0d49 100644 --- a/src/utils/getAttributeValue.ts +++ b/src/utils/getAttributeValue.ts @@ -19,7 +19,6 @@ function getAttributeValue(node: AST.VAttribute | AST.VDirective) { const operator = node.value.expression.operator; let leftSideOfOperation; let rightSideOfOperation; - node.value.expression.left.type if (node.value.expression.left.type === 'Literal') { leftSideOfOperation = node.value.expression.left.value;