Skip to content

Commit

Permalink
fix(collapseSamePrefixes): missing collapse when prefix did not match…
Browse files Browse the repository at this point in the history
… from beginning (#563)

Fixes #546
  • Loading branch information
DrJume committed Dec 21, 2022
1 parent a495847 commit a6e700c
Show file tree
Hide file tree
Showing 8 changed files with 62 additions and 29 deletions.
3 changes: 2 additions & 1 deletion .vscode/settings.json
@@ -1,3 +1,4 @@
{
"typescript.tsdk": "node_modules/typescript/lib"
"typescript.tsdk": "node_modules/typescript/lib",
"prettier.enable": false
}
7 changes: 6 additions & 1 deletion README.md
Expand Up @@ -338,7 +338,12 @@ Components({

// Allow subdirectories as namespace prefix for components.
directoryAsNamespace: false,
// Subdirectory paths for ignoring namespace prefixes

// Collapse same prefixes (camel-sensitive) of folders and components
// to prevent duplication inside namespaced component name.
// works when `directoryAsNamespace: true`
collapseSamePrefixes: false,
// Subdirectory paths for ignoring namespace prefixes.
// works when `directoryAsNamespace: true`
globalNamespaces: [],

Expand Down
@@ -0,0 +1,9 @@
<script>
export default {
name: 'CollapseFolderAndComponentFromRoot',
}
</script>

<template>
<h3>CollapseFolderAndComponentFromRoot Component: <code>collapse/collapseFolder/CollapseFolderAndComponentFromRoot.vue</code></h3>
</template>
@@ -0,0 +1,9 @@
<script>
export default {
name: 'FolderAndComponentPartially',
}
</script>

<template>
<h3>FolderAndComponentPartially Component: <code>collapse/collapseFolder/FolderAndComponentPartially.vue</code></h3>
</template>

This file was deleted.

26 changes: 16 additions & 10 deletions src/core/utils.ts
Expand Up @@ -156,18 +156,24 @@ export function getNameFromFilePath(filePath: string, options: ResolvedOptions):
const collapsed: string[] = []

for (const fileOrFolderName of namespaced) {
const collapsedFilename = collapsed.join('')
if (
collapsedFilename
&& fileOrFolderName.toLowerCase().startsWith(collapsedFilename.toLowerCase())
) {
const collapseSamePrefix = fileOrFolderName.slice(collapsedFilename.length)

collapsed.push(collapseSamePrefix)
continue
let cumulativePrefix = ''
let didCollapse = false

for (const parentFolder of [...collapsed].reverse()) {
cumulativePrefix = `${capitalize(parentFolder)}${cumulativePrefix}`

if (pascalCase(fileOrFolderName).startsWith(pascalCase(cumulativePrefix))) {
const collapseSamePrefix = fileOrFolderName.slice(cumulativePrefix.length)

collapsed.push(collapseSamePrefix)

didCollapse = true
break
}
}

collapsed.push(fileOrFolderName)
if (!didCollapse)
collapsed.push(fileOrFolderName)
}

namespaced = collapsed
Expand Down
4 changes: 2 additions & 2 deletions src/types.ts
Expand Up @@ -103,8 +103,8 @@ export interface Options {
directoryAsNamespace?: boolean

/**
* Collapse same prefixes (case-insensitive) of folders and components
* to prevent duplication inside namespaced component name
* Collapse same prefixes (camel-sensitive) of folders and components
* to prevent duplication inside namespaced component name.
*
* Works when `directoryAsNamespace: true`
* @default false
Expand Down
24 changes: 18 additions & 6 deletions test/__snapshots__/search.test.ts.snap
Expand Up @@ -11,8 +11,12 @@ exports[`search > should with namespace & collapse 1`] = `
"from": "src/components/book/index.vue",
},
{
"as": "CollapseFolderAndComponentPrefixes",
"from": "src/components/collapse/collapseFolderAnd/CollapseFolderAndComponentPrefixes.vue",
"as": "CollapseFolderAndComponentFromRoot",
"from": "src/components/collapse/collapseFolder/CollapseFolderAndComponentFromRoot.vue",
},
{
"as": "CollapseFolderAndComponentPartially",
"from": "src/components/collapse/collapseFolder/FolderAndComponentPartially.vue",
},
{
"as": "ComponentA",
Expand Down Expand Up @@ -60,8 +64,12 @@ exports[`search > should with namespace 1`] = `
"from": "src/components/book/index.vue",
},
{
"as": "CollapseCollapseFolderAndCollapseFolderAndComponentPrefixes",
"from": "src/components/collapse/collapseFolderAnd/CollapseFolderAndComponentPrefixes.vue",
"as": "CollapseCollapseFolderCollapseFolderAndComponentFromRoot",
"from": "src/components/collapse/collapseFolder/CollapseFolderAndComponentFromRoot.vue",
},
{
"as": "CollapseCollapseFolderFolderAndComponentPartially",
"from": "src/components/collapse/collapseFolder/FolderAndComponentPartially.vue",
},
{
"as": "ComponentA",
Expand Down Expand Up @@ -117,8 +125,8 @@ exports[`search > should work 1`] = `
"from": "src/components/ui/nested/checkbox.vue",
},
{
"as": "CollapseFolderAndComponentPrefixes",
"from": "src/components/collapse/collapseFolderAnd/CollapseFolderAndComponentPrefixes.vue",
"as": "CollapseFolderAndComponentFromRoot",
"from": "src/components/collapse/collapseFolder/CollapseFolderAndComponentFromRoot.vue",
},
{
"as": "ComponentA",
Expand All @@ -140,6 +148,10 @@ exports[`search > should work 1`] = `
"as": "ComponentD",
"from": "src/components/ComponentD.vue",
},
{
"as": "FolderAndComponentPartially",
"from": "src/components/collapse/collapseFolder/FolderAndComponentPartially.vue",
},
{
"as": "Recursive",
"from": "src/components/Recursive.vue",
Expand Down

0 comments on commit a6e700c

Please sign in to comment.