diff --git a/cli/engine/node/file-system.mjs b/cli/engine/node/file-system.mjs index c3f87da16..eee17ea4f 100644 --- a/cli/engine/node/file-system.mjs +++ b/cli/engine/node/file-system.mjs @@ -18,9 +18,10 @@ const SKIP_DIRS = new Set([ // The exceptions to the hidden-dir rule: hidden directories that // conventionally hold real UI source rather than tooling or vendored code. -// VitePress keeps custom theme components in .vitepress/theme/*.vue, and -// Storybook keeps preview decorators/styles in .storybook/. -const HIDDEN_SOURCE_DIRS = new Set(['.vitepress', '.storybook']); +// VitePress and VuePress keep custom theme components in +// .vitepress/theme/*.vue / .vuepress/theme/, and Storybook keeps preview +// decorators/styles in .storybook/. +const HIDDEN_SOURCE_DIRS = new Set(['.vitepress', '.vuepress', '.storybook']); const SCANNABLE_EXTENSIONS = new Set([ '.html', '.htm', '.css', '.scss', '.sass', '.less', diff --git a/skill/scripts/context-signals.mjs b/skill/scripts/context-signals.mjs index 17ef2f6dd..ab36da497 100644 --- a/skill/scripts/context-signals.mjs +++ b/skill/scripts/context-signals.mjs @@ -168,7 +168,7 @@ function isVendoredPath(rel) { const dirSegments = rel.split(/[\\/]/).slice(0, -1); return dirSegments.some( (seg) => - (seg.startsWith('.') && seg !== '.vitepress' && seg !== '.storybook') || + (seg.startsWith('.') && seg !== '.vitepress' && seg !== '.vuepress' && seg !== '.storybook') || seg === 'node_modules' || seg === 'dist' || seg === 'build' || seg === '__pycache__', ); } diff --git a/tests/detect-antipatterns.test.js b/tests/detect-antipatterns.test.js index a024173b9..8f068faf5 100644 --- a/tests/detect-antipatterns.test.js +++ b/tests/detect-antipatterns.test.js @@ -1850,11 +1850,13 @@ describe('walkDir', () => { // exception: VitePress themes and Storybook preview files must keep // being scanned (they were before the hidden-dir rule existed). write('.vitepress/theme/Layout.vue'); + write('.vuepress/theme/Layout.vue'); write('.storybook/preview.css'); const files = walkDir(tmp).sort(); expect(files).toEqual([ path.join(tmp, '.storybook', 'preview.css'), path.join(tmp, '.vitepress', 'theme', 'Layout.vue'), + path.join(tmp, '.vuepress', 'theme', 'Layout.vue'), path.join(tmp, 'src', 'app.css'), ]); } finally {