Skip to content

Commit a6e700c

Browse files
authoredDec 21, 2022
fix(collapseSamePrefixes): missing collapse when prefix did not match from beginning (#563)
Fixes #546
1 parent a495847 commit a6e700c

File tree

8 files changed

+62
-29
lines changed

8 files changed

+62
-29
lines changed
 

‎.vscode/settings.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
{
2-
"typescript.tsdk": "node_modules/typescript/lib"
2+
"typescript.tsdk": "node_modules/typescript/lib",
3+
"prettier.enable": false
34
}

‎README.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,12 @@ Components({
338338

339339
// Allow subdirectories as namespace prefix for components.
340340
directoryAsNamespace: false,
341-
// Subdirectory paths for ignoring namespace prefixes
341+
342+
// Collapse same prefixes (camel-sensitive) of folders and components
343+
// to prevent duplication inside namespaced component name.
344+
// works when `directoryAsNamespace: true`
345+
collapseSamePrefixes: false,
346+
// Subdirectory paths for ignoring namespace prefixes.
342347
// works when `directoryAsNamespace: true`
343348
globalNamespaces: [],
344349

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<script>
2+
export default {
3+
name: 'CollapseFolderAndComponentFromRoot',
4+
}
5+
</script>
6+
7+
<template>
8+
<h3>CollapseFolderAndComponentFromRoot Component: <code>collapse/collapseFolder/CollapseFolderAndComponentFromRoot.vue</code></h3>
9+
</template>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<script>
2+
export default {
3+
name: 'FolderAndComponentPartially',
4+
}
5+
</script>
6+
7+
<template>
8+
<h3>FolderAndComponentPartially Component: <code>collapse/collapseFolder/FolderAndComponentPartially.vue</code></h3>
9+
</template>

‎examples/vite-vue3/src/components/collapse/collapseFolderAnd/CollapseFolderAndComponentPrefixes.vue

-9
This file was deleted.

‎src/core/utils.ts

+16-10
Original file line numberDiff line numberDiff line change
@@ -156,18 +156,24 @@ export function getNameFromFilePath(filePath: string, options: ResolvedOptions):
156156
const collapsed: string[] = []
157157

158158
for (const fileOrFolderName of namespaced) {
159-
const collapsedFilename = collapsed.join('')
160-
if (
161-
collapsedFilename
162-
&& fileOrFolderName.toLowerCase().startsWith(collapsedFilename.toLowerCase())
163-
) {
164-
const collapseSamePrefix = fileOrFolderName.slice(collapsedFilename.length)
165-
166-
collapsed.push(collapseSamePrefix)
167-
continue
159+
let cumulativePrefix = ''
160+
let didCollapse = false
161+
162+
for (const parentFolder of [...collapsed].reverse()) {
163+
cumulativePrefix = `${capitalize(parentFolder)}${cumulativePrefix}`
164+
165+
if (pascalCase(fileOrFolderName).startsWith(pascalCase(cumulativePrefix))) {
166+
const collapseSamePrefix = fileOrFolderName.slice(cumulativePrefix.length)
167+
168+
collapsed.push(collapseSamePrefix)
169+
170+
didCollapse = true
171+
break
172+
}
168173
}
169174

170-
collapsed.push(fileOrFolderName)
175+
if (!didCollapse)
176+
collapsed.push(fileOrFolderName)
171177
}
172178

173179
namespaced = collapsed

‎src/types.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ export interface Options {
103103
directoryAsNamespace?: boolean
104104

105105
/**
106-
* Collapse same prefixes (case-insensitive) of folders and components
107-
* to prevent duplication inside namespaced component name
106+
* Collapse same prefixes (camel-sensitive) of folders and components
107+
* to prevent duplication inside namespaced component name.
108108
*
109109
* Works when `directoryAsNamespace: true`
110110
* @default false

‎test/__snapshots__/search.test.ts.snap

+18-6
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@ exports[`search > should with namespace & collapse 1`] = `
1111
"from": "src/components/book/index.vue",
1212
},
1313
{
14-
"as": "CollapseFolderAndComponentPrefixes",
15-
"from": "src/components/collapse/collapseFolderAnd/CollapseFolderAndComponentPrefixes.vue",
14+
"as": "CollapseFolderAndComponentFromRoot",
15+
"from": "src/components/collapse/collapseFolder/CollapseFolderAndComponentFromRoot.vue",
16+
},
17+
{
18+
"as": "CollapseFolderAndComponentPartially",
19+
"from": "src/components/collapse/collapseFolder/FolderAndComponentPartially.vue",
1620
},
1721
{
1822
"as": "ComponentA",
@@ -60,8 +64,12 @@ exports[`search > should with namespace 1`] = `
6064
"from": "src/components/book/index.vue",
6165
},
6266
{
63-
"as": "CollapseCollapseFolderAndCollapseFolderAndComponentPrefixes",
64-
"from": "src/components/collapse/collapseFolderAnd/CollapseFolderAndComponentPrefixes.vue",
67+
"as": "CollapseCollapseFolderCollapseFolderAndComponentFromRoot",
68+
"from": "src/components/collapse/collapseFolder/CollapseFolderAndComponentFromRoot.vue",
69+
},
70+
{
71+
"as": "CollapseCollapseFolderFolderAndComponentPartially",
72+
"from": "src/components/collapse/collapseFolder/FolderAndComponentPartially.vue",
6573
},
6674
{
6775
"as": "ComponentA",
@@ -117,8 +125,8 @@ exports[`search > should work 1`] = `
117125
"from": "src/components/ui/nested/checkbox.vue",
118126
},
119127
{
120-
"as": "CollapseFolderAndComponentPrefixes",
121-
"from": "src/components/collapse/collapseFolderAnd/CollapseFolderAndComponentPrefixes.vue",
128+
"as": "CollapseFolderAndComponentFromRoot",
129+
"from": "src/components/collapse/collapseFolder/CollapseFolderAndComponentFromRoot.vue",
122130
},
123131
{
124132
"as": "ComponentA",
@@ -140,6 +148,10 @@ exports[`search > should work 1`] = `
140148
"as": "ComponentD",
141149
"from": "src/components/ComponentD.vue",
142150
},
151+
{
152+
"as": "FolderAndComponentPartially",
153+
"from": "src/components/collapse/collapseFolder/FolderAndComponentPartially.vue",
154+
},
143155
{
144156
"as": "Recursive",
145157
"from": "src/components/Recursive.vue",

0 commit comments

Comments
 (0)
Please sign in to comment.