diff --git a/packages/steiger-plugin-fsd/src/_lib/find-all-recursively.ts b/packages/steiger-plugin-fsd/src/_lib/find-all-recursively.ts index 6701b7c..77ae9e8 100644 --- a/packages/steiger-plugin-fsd/src/_lib/find-all-recursively.ts +++ b/packages/steiger-plugin-fsd/src/_lib/find-all-recursively.ts @@ -1,7 +1,7 @@ import { basename } from 'node:path' import type { Folder, File } from '@feature-sliced/filesystem' -import { parseIntoFsdRoot as parseIntoFolder } from './prepare-test.js' +import { joinFromRoot, parseIntoFsdRoot as parseIntoFolder } from './prepare-test.js' /** Recursively walk through a folder and return all entries that satisfy the predicate in a flat array. */ export function findAllRecursively(folder: Folder, predicate: (entry: Folder | File) => boolean): Array { @@ -54,9 +54,9 @@ if (import.meta.vitest) { ) expect(result.map((entry) => entry.path)).toEqual([ - '/folder1/directory1', - '/folder2/folder3/directory2', - '/directory3', + joinFromRoot('folder1', 'directory1'), + joinFromRoot('folder2', 'folder3', 'directory2'), + joinFromRoot('directory3'), ]) }) } diff --git a/packages/steiger-plugin-fsd/src/_lib/group-slices.ts b/packages/steiger-plugin-fsd/src/_lib/group-slices.ts index 66e23aa..e8c4a67 100644 --- a/packages/steiger-plugin-fsd/src/_lib/group-slices.ts +++ b/packages/steiger-plugin-fsd/src/_lib/group-slices.ts @@ -1,4 +1,4 @@ -import { sep } from 'node:path' +import { sep, join } from 'node:path' export function groupSlices(sliceNames: Array): Record> { const groups: Record> = {} @@ -20,8 +20,8 @@ export function groupSlices(sliceNames: Array): Record { - expect(groupSlices(['a/b/c', 'a/b/d', 'a/e', 'f', 'g'])).toEqual({ - 'a/b': ['c', 'd'], + expect(groupSlices([join('a', 'b', 'c'), join('a', 'b', 'd'), join('a', 'e'), 'f', 'g'])).toEqual({ + [join('a', 'b')]: ['c', 'd'], a: ['e'], '': ['f', 'g'], }) diff --git a/packages/steiger-plugin-fsd/src/_lib/prepare-test.ts b/packages/steiger-plugin-fsd/src/_lib/prepare-test.ts index 7daf1b4..0f674dd 100644 --- a/packages/steiger-plugin-fsd/src/_lib/prepare-test.ts +++ b/packages/steiger-plugin-fsd/src/_lib/prepare-test.ts @@ -85,39 +85,39 @@ if (import.meta.vitest) { expect(root).toEqual({ type: 'folder', - path: '/', + path: joinFromRoot(), children: [ { type: 'folder', - path: '/entities', + path: joinFromRoot('entities'), children: [ { type: 'folder', - path: '/entities/users', + path: joinFromRoot('entities', 'users'), children: [ { type: 'folder', - path: '/entities/users/ui', + path: joinFromRoot('entities', 'users', 'ui'), children: [], }, { type: 'file', - path: '/entities/users/index.ts', + path: joinFromRoot('entities', 'users', 'index.ts'), }, ], }, { type: 'folder', - path: '/entities/posts', + path: joinFromRoot('entities', 'posts'), children: [ { type: 'folder', - path: '/entities/posts/ui', + path: joinFromRoot('entities', 'posts', 'ui'), children: [], }, { type: 'file', - path: '/entities/posts/index.ts', + path: joinFromRoot('entities', 'posts', 'index.ts'), }, ], }, @@ -125,19 +125,19 @@ if (import.meta.vitest) { }, { type: 'folder', - path: '/shared', + path: joinFromRoot('shared'), children: [ { type: 'folder', - path: '/shared/ui', + path: joinFromRoot('shared', 'ui'), children: [ { type: 'file', - path: '/shared/ui/index.ts', + path: joinFromRoot('shared', 'ui', 'index.ts'), }, { type: 'file', - path: '/shared/ui/Button.tsx', + path: joinFromRoot('shared', 'ui', 'Button.tsx'), }, ], }, diff --git a/packages/steiger-plugin-fsd/src/insignificant-slice/index.spec.ts b/packages/steiger-plugin-fsd/src/insignificant-slice/index.spec.ts index d00a8e1..64af733 100644 --- a/packages/steiger-plugin-fsd/src/insignificant-slice/index.spec.ts +++ b/packages/steiger-plugin-fsd/src/insignificant-slice/index.spec.ts @@ -1,4 +1,5 @@ import { expect, it, vi } from 'vitest' +import { join } from 'node:path' import { compareMessages, parseIntoFsdRoot } from '../_lib/prepare-test.js' import insignificantSlice from './index.js' @@ -122,10 +123,10 @@ it('reports errors on a project with insignificant slices', async () => { expect((await insignificantSlice.check(root)).diagnostics.sort(compareMessages)).toEqual([ { - message: 'Slice "entities/product" has no references. Consider removing it.', + message: `Slice "${join('entities', 'product')}" has no references. Consider removing it.`, }, { - message: 'Slice "entities/user" has only one reference in slice "pages/editor". Consider merging them.', + message: `Slice "${join('entities', 'user')}" has only one reference in slice "${join('pages', 'editor')}". Consider merging them.`, }, ]) }) diff --git a/packages/steiger-plugin-fsd/src/no-reserved-folder-names/index.spec.ts b/packages/steiger-plugin-fsd/src/no-reserved-folder-names/index.spec.ts index f1d4038..776d7fd 100644 --- a/packages/steiger-plugin-fsd/src/no-reserved-folder-names/index.spec.ts +++ b/packages/steiger-plugin-fsd/src/no-reserved-folder-names/index.spec.ts @@ -1,4 +1,5 @@ import { expect, it } from 'vitest' +import { join } from 'node:path' import noReservedFolderNames from './index.js' import { parseIntoFsdRoot } from '../_lib/prepare-test.js' @@ -43,5 +44,7 @@ it('reports errors on a project with subfolders in segments that use reserved na `) const diagnostics = noReservedFolderNames.check(root).diagnostics - expect(diagnostics).toEqual([{ message: 'Folder name "lib" in "shared/ui" is reserved for segment names' }]) + expect(diagnostics).toEqual([ + { message: `Folder name "lib" in "${join('shared', 'ui')}" is reserved for segment names` }, + ]) }) diff --git a/packages/steiger-plugin-fsd/src/no-segmentless-slices/index.spec.ts b/packages/steiger-plugin-fsd/src/no-segmentless-slices/index.spec.ts index 5c7a27e..306d640 100644 --- a/packages/steiger-plugin-fsd/src/no-segmentless-slices/index.spec.ts +++ b/packages/steiger-plugin-fsd/src/no-segmentless-slices/index.spec.ts @@ -1,4 +1,5 @@ import { expect, it } from 'vitest' +import { join } from 'node:path' import noSegmentlessSlices from './index.js' import { parseIntoFsdRoot } from '../_lib/prepare-test.js' @@ -53,6 +54,6 @@ it('reports errors on a project where some slices have no segments', () => { const diagnostics = noSegmentlessSlices.check(root).diagnostics expect(diagnostics).toEqual([ { message: 'Slice "user" on layer "entities" has no segments' }, - { message: 'Slice "settings/profile" on layer "pages" has no segments' }, + { message: `Slice "${join('settings', 'profile')}" on layer "pages" has no segments` }, ]) }) diff --git a/packages/steiger-plugin-fsd/src/public-api/index.spec.ts b/packages/steiger-plugin-fsd/src/public-api/index.spec.ts index be55878..981e72c 100644 --- a/packages/steiger-plugin-fsd/src/public-api/index.spec.ts +++ b/packages/steiger-plugin-fsd/src/public-api/index.spec.ts @@ -1,7 +1,7 @@ import { expect, it } from 'vitest' import publicApi from './index.js' -import { compareMessages, parseIntoFsdRoot } from '../_lib/prepare-test.js' +import { compareMessages, joinFromRoot, parseIntoFsdRoot } from '../_lib/prepare-test.js' it('reports no errors on a project with all the required public APIs', () => { const root = parseIntoFsdRoot(` @@ -54,7 +54,7 @@ it('reports errors on slices that are missing a public API', () => { fixes: [ { type: 'create-file', - path: '/entities/posts/index.ts', + path: joinFromRoot('entities', 'posts', 'index.ts'), content: '', }, ], @@ -64,7 +64,7 @@ it('reports errors on slices that are missing a public API', () => { fixes: [ { type: 'create-file', - path: '/pages/editor/index.ts', + path: joinFromRoot('pages', 'editor', 'index.ts'), content: '', }, ], @@ -103,7 +103,7 @@ it('reports errors on segments that are missing a public API', () => { fixes: [ { type: 'create-file', - path: '/shared/ui/index.ts', + path: joinFromRoot('shared', 'ui', 'index.ts'), content: '', }, ],