From a87760a73ed68dd5e8766c938abd0209fb4f8b32 Mon Sep 17 00:00:00 2001 From: HiDeoo <494699+HiDeoo@users.noreply.github.com> Date: Wed, 27 Nov 2024 15:16:53 +0100 Subject: [PATCH] feat: improves messages for errors related to the Astro `trailingSlash` option to indicate if a link is missing a trailing slash or if a link has a trailing slash when it should not --- .../libs/validation.ts | 18 ++++++++++-------- .../tests/trailing.test.ts | 8 ++++---- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/starlight-links-validator/libs/validation.ts b/packages/starlight-links-validator/libs/validation.ts index eeeb9d7..13908a5 100644 --- a/packages/starlight-links-validator/libs/validation.ts +++ b/packages/starlight-links-validator/libs/validation.ts @@ -19,7 +19,8 @@ export const ValidationErrorType = { InvalidLink: 'invalid link', LocalLink: 'local link', RelativeLink: 'relative link', - TrailingSlash: 'trailing slash', + TrailingSlashMissing: 'missing trailing slash', + TrailingSlashForbidden: 'forbidden trailing slash', } as const export function validateLinks( @@ -168,13 +169,14 @@ function validateLink(context: ValidationContext) { return } - if ( - path.length > 0 && - ((astroConfig.trailingSlash === 'always' && !path.endsWith('/')) || - (astroConfig.trailingSlash === 'never' && path.endsWith('/'))) - ) { - addError(errors, filePath, link, ValidationErrorType.TrailingSlash) - return + if (path.length > 0) { + if (astroConfig.trailingSlash === 'always' && !path.endsWith('/')) { + addError(errors, filePath, link, ValidationErrorType.TrailingSlashMissing) + return + } else if (astroConfig.trailingSlash === 'never' && path.endsWith('/')) { + addError(errors, filePath, link, ValidationErrorType.TrailingSlashForbidden) + return + } } } diff --git a/packages/starlight-links-validator/tests/trailing.test.ts b/packages/starlight-links-validator/tests/trailing.test.ts index 3f99e45..e762a1b 100644 --- a/packages/starlight-links-validator/tests/trailing.test.ts +++ b/packages/starlight-links-validator/tests/trailing.test.ts @@ -12,8 +12,8 @@ test('validates links when the `trailingSlash` Astro option is set to `never`', expectValidationErrorCount(output, 6, 1) expectValidationErrors(output, 'test/', [ - ['/guides/example/', ValidationErrorType.TrailingSlash], - ['/guides/example/#description', ValidationErrorType.TrailingSlash], + ['/guides/example/', ValidationErrorType.TrailingSlashForbidden], + ['/guides/example/#description', ValidationErrorType.TrailingSlashForbidden], ['/unknown', ValidationErrorType.InvalidLink], ['/unknown/', ValidationErrorType.InvalidLink], ['/guides/example#unknown', ValidationErrorType.InvalidHash], @@ -29,8 +29,8 @@ test('validates links when the `trailingSlash` Astro option is set to `always`', expectValidationErrorCount(output, 6, 1) expectValidationErrors(output, 'test/', [ - ['/guides/example', ValidationErrorType.TrailingSlash], - ['/guides/example#description', ValidationErrorType.TrailingSlash], + ['/guides/example', ValidationErrorType.TrailingSlashMissing], + ['/guides/example#description', ValidationErrorType.TrailingSlashMissing], ['/unknown', ValidationErrorType.InvalidLink], ['/unknown/', ValidationErrorType.InvalidLink], ['/guides/example#unknown', ValidationErrorType.InvalidHash],