Skip to content

Commit 954255e

Browse files
committed
chore(no-navigation-without-resolve): reporting on whole link attributes
1 parent da57243 commit 954255e

File tree

8 files changed

+53
-52
lines changed

8 files changed

+53
-52
lines changed

.changeset/salty-plants-juggle.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'eslint-plugin-svelte': minor
3+
---
4+
5+
feat(no-navigation-without-resolve): for links, the rule now reports on the whole attribute

packages/eslint-plugin-svelte/src/rules/no-navigation-without-resolve.ts

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -92,21 +92,15 @@ export default createRule('no-navigation-without-resolve', {
9292
},
9393
...(!ignoreLinks && {
9494
SvelteShorthandAttribute(node) {
95-
if (!isLinkAttributeOk(context, node, node.value, resolveReferences)) {
96-
context.report({ loc: node.loc, messageId: 'linkWithoutResolve' });
97-
}
95+
checkLinkAttribute(context, node, node.value, resolveReferences);
9896
},
9997
SvelteAttribute(node) {
100-
if (
101-
!isLinkAttributeOk(
102-
context,
103-
node,
104-
node.value[0].type === 'SvelteMustacheTag' ? node.value[0].expression : node.value[0],
105-
resolveReferences
106-
)
107-
) {
108-
context.report({ loc: node.value[0].loc, messageId: 'linkWithoutResolve' });
109-
}
98+
checkLinkAttribute(
99+
context,
100+
node,
101+
node.value[0].type === 'SvelteMustacheTag' ? node.value[0].expression : node.value[0],
102+
resolveReferences
103+
);
110104
}
111105
})
112106
};
@@ -220,23 +214,25 @@ function checkShallowNavigationCall(
220214
}
221215
}
222216

223-
function isLinkAttributeOk(
217+
function checkLinkAttribute(
224218
context: RuleContext,
225219
attribute: AST.SvelteAttribute | AST.SvelteShorthandAttribute,
226220
value: TSESTree.Expression | AST.SvelteLiteral,
227221
resolveReferences: Set<TSESTree.Identifier>
228-
): boolean {
229-
return (
230-
attribute.parent.parent.type !== 'SvelteElement' ||
231-
attribute.parent.parent.kind !== 'html' ||
232-
attribute.parent.parent.name.type !== 'SvelteName' ||
233-
attribute.parent.parent.name.name !== 'a' ||
234-
attribute.key.name !== 'href' ||
235-
expressionIsNullish(new FindVariableContext(context), value) ||
236-
expressionIsAbsolute(new FindVariableContext(context), value) ||
237-
expressionIsFragment(new FindVariableContext(context), value) ||
238-
isResolveCall(new FindVariableContext(context), value, resolveReferences)
239-
);
222+
): void {
223+
if (
224+
attribute.parent.parent.type === 'SvelteElement' &&
225+
attribute.parent.parent.kind === 'html' &&
226+
attribute.parent.parent.name.type === 'SvelteName' &&
227+
attribute.parent.parent.name.name === 'a' &&
228+
attribute.key.name === 'href' &&
229+
!expressionIsNullish(new FindVariableContext(context), value) &&
230+
!expressionIsAbsolute(new FindVariableContext(context), value) &&
231+
!expressionIsFragment(new FindVariableContext(context), value) &&
232+
!isResolveCall(new FindVariableContext(context), value, resolveReferences)
233+
) {
234+
context.report({ loc: attribute.loc, messageId: 'linkWithoutResolve' });
235+
}
240236
}
241237

242238
// Helper functions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,40 @@
11
- message: Unexpected href link without resolve().
22
line: 6
3-
column: 10
3+
column: 4
44
suggestions: null
55
- message: Unexpected href link without resolve().
66
line: 7
7-
column: 10
7+
column: 4
88
suggestions: null
99
- message: Unexpected href link without resolve().
1010
line: 8
11-
column: 9
11+
column: 4
1212
suggestions: null
1313
- message: Unexpected href link without resolve().
1414
line: 9
15-
column: 9
15+
column: 4
1616
suggestions: null
1717
- message: Unexpected href link without resolve().
1818
line: 10
19-
column: 9
19+
column: 4
2020
suggestions: null
2121
- message: Unexpected href link without resolve().
2222
line: 11
23-
column: 9
23+
column: 4
2424
suggestions: null
2525
- message: Unexpected href link without resolve().
2626
line: 12
27-
column: 9
27+
column: 4
2828
suggestions: null
2929
- message: Unexpected href link without resolve().
3030
line: 13
31-
column: 9
31+
column: 4
3232
suggestions: null
3333
- message: Unexpected href link without resolve().
3434
line: 14
35-
column: 9
35+
column: 4
3636
suggestions: null
3737
- message: Unexpected href link without resolve().
3838
line: 15
39-
column: 9
39+
column: 4
4040
suggestions: null
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
- message: Unexpected href link without resolve().
22
line: 5
3-
column: 9
3+
column: 4
44
suggestions: null
55
- message: Unexpected href link without resolve().
66
line: 6
7-
column: 9
7+
column: 4
88
suggestions: null

packages/eslint-plugin-svelte/tests/fixtures/rules/no-navigation-without-resolve/invalid/link-partial-resolve01-errors.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
- message: Unexpected href link without resolve().
22
line: 8
3-
column: 9
3+
column: 4
44
suggestions: null
55
- message: Unexpected href link without resolve().
66
line: 9
7-
column: 9
7+
column: 4
88
suggestions: null
99
- message: Unexpected href link without resolve().
1010
line: 10
11-
column: 9
11+
column: 4
1212
suggestions: null
1313
- message: Unexpected href link without resolve().
1414
line: 11
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
- message: Unexpected href link without resolve().
22
line: 6
3-
column: 10
3+
column: 4
44
suggestions: null
55
- message: Unexpected href link without resolve().
66
line: 7
7-
column: 9
7+
column: 4
88
suggestions: null
99
- message: Unexpected href link without resolve().
1010
line: 8
11-
column: 9
11+
column: 4
1212
suggestions: null
1313
- message: Unexpected href link without resolve().
1414
line: 9
15-
column: 9
15+
column: 4
1616
suggestions: null
1717
- message: Unexpected href link without resolve().
1818
line: 10
1919
column: 4
2020
suggestions: null
2121
- message: Unexpected href link without resolve().
2222
line: 11
23-
column: 9
23+
column: 4
2424
suggestions: null
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
- message: Unexpected href link without resolve().
22
line: 6
3-
column: 10
3+
column: 4
44
suggestions: null
55
- message: Unexpected href link without resolve().
66
line: 7
7-
column: 9
7+
column: 4
88
suggestions: null
99
- message: Unexpected href link without resolve().
1010
line: 8
11-
column: 9
11+
column: 4
1212
suggestions: null
1313
- message: Unexpected href link without resolve().
1414
line: 9
15-
column: 9
15+
column: 4
1616
suggestions: null
1717
- message: Unexpected href link without resolve().
1818
line: 10
1919
column: 4
2020
suggestions: null
2121
- message: Unexpected href link without resolve().
2222
line: 11
23-
column: 9
23+
column: 4
2424
suggestions: null
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
- message: Unexpected href link without resolve().
22
line: 6
3-
column: 9
3+
column: 4
44
suggestions: null

0 commit comments

Comments
 (0)