Skip to content

Commit 3c71bc5

Browse files
authored
improvement: experimental multiple ignore file mode (#223)
1 parent 89569ac commit 3c71bc5

File tree

3 files changed

+40
-14
lines changed

3 files changed

+40
-14
lines changed

src/commands/infuse.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ export const builder = (args: Argv): Argv<InfuseOptions> => {
9090
.option('ignoreFileName', {
9191
type: 'string',
9292
alias: 'i',
93-
describe: 'ignore file names, i.e. .ignore-i18n .ignore-i18n-2'
93+
describe: 'ignore file names, i.e. .ignore-i18n'
9494
})
9595
.option('prettier', {
9696
type: 'string',

src/commands/squeeze.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ type SqueezeOptions = {
3030
namespace?: string
3131
output: string
3232
ignoreFileName?: string
33+
ignoreMultipleMode?: boolean
3334
}
3435

3536
export const command = 'squeeze'
@@ -75,18 +76,24 @@ export const builder = (args: Argv): Argv<SqueezeOptions> => {
7576
.option('ignoreFileName', {
7677
type: 'string',
7778
alias: 'i',
78-
describe: 'ignore file names, i.e. .ignore-i18n .ignore-i18n-2'
79+
describe: 'ignore file names, i.e. .ignore-i18n'
80+
})
81+
.option('ignoreMultipleMode', {
82+
type: 'boolean',
83+
default: false,
84+
describe: 'use multiple ignore file with --ignoreFileName (NOTE: This option is EXPERIMENTAL)'
7985
})
8086
}
8187

8288
export const handler = async (args: Arguments<SqueezeOptions>) => {
8389
const targetPath = resolve(args.target)
90+
const ignoreMultipleMode = args.ignoreMultipleMode || false
8491

8592
let nsDictionary = {} as NamespaceDictionary
8693
let externalMessages = {} as LocaleMessages
8794
let ig = ignore()
8895
if (args.ignoreFileName) {
89-
ig = getIgnore(args.target, args.ignoreFileName)
96+
ig = getIgnore(args.target, args.ignoreFileName, ignoreMultipleMode)
9097
}
9198

9299
try {

src/utils.ts

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -480,29 +480,48 @@ export function splitLocaleMessages (
480480
return { sfc: messages, external: metaExternalLocaleMessages }
481481
}
482482

483-
export function getIgnore (target:string, ignoreFileNames: string): Ignore {
483+
export function getIgnore (target:string, ignoreFileNames: string, ignoreMultipleMode = false): Ignore {
484484
const ig = ignore()
485485
const files = ignoreFileNames.split(',').filter(Boolean)
486-
files.forEach(file => {
487-
debug('ignore target file', file)
488-
const ignoreFiles = readIgnoreFile(target, file)
486+
files.forEach((file, index) => {
487+
debug('ignore target file', file, index)
488+
if (index > 0 && !ignoreMultipleMode) {
489+
return
490+
}
491+
const ignoreFiles = readIgnoreFile(target, file, ignoreMultipleMode)
489492
returnIgnoreInstance(ig, ignoreFiles)
490493
})
491494
return ig
492495
}
493496

494-
function readIgnoreFile (target: string, _ignoreFile: string): string[] {
495-
const ignoreFiles = glob.sync(`${target}/**/${_ignoreFile}`)
496-
debug('readIgnoreFile: ignoreFiles', ignoreFiles)
497+
function readIgnoreFile (target: string, _ignoreFile: string, ignoreMultipleMode = false): string[] {
497498
const ignoreTargets = [] as string[]
498-
ignoreFiles.forEach(ignoreFile => {
499-
fs.readFileSync(ignoreFile, 'utf8')
499+
if (!ignoreMultipleMode) {
500+
const ignoreFiles = glob.sync(`${target}/**/${_ignoreFile}`)
501+
debug('readIgnoreFile: ignoreFiles', ignoreFiles)
502+
ignoreFiles.forEach(ignoreFile => {
503+
fs.readFileSync(ignoreFile, 'utf8')
504+
.split(/\r?\n/g)
505+
.filter(line => line.trim() && !line.trim().startsWith('#'))
506+
.filter(Boolean)
507+
.forEach(ignoreTarget => {
508+
ignoreTargets.push(formatPath(ignoreFile, ignoreTarget))
509+
})
510+
})
511+
} else {
512+
debug(`ignoreMultipleMode target: ${target}, _ignoreFile: ${_ignoreFile}`)
513+
const fullPath = resolve(path.join(target, path.normalize(_ignoreFile)))
514+
debug(`ignoreMultipleMode fullpath: ${fullPath}`)
515+
fs.readFileSync(fullPath, 'utf8')
500516
.split(/\r?\n/g)
517+
.filter(line => line.trim() && !line.trim().startsWith('#'))
501518
.filter(Boolean)
502519
.forEach(ignoreTarget => {
503-
ignoreTargets.push(formatPath(ignoreFile, ignoreTarget))
520+
const igTarget = path.join(target, ignoreTarget)
521+
debug('ignore target', igTarget)
522+
ignoreTargets.push(igTarget)
504523
})
505-
})
524+
}
506525
debug(`ignoreTargets ${ignoreTargets}`)
507526
return ignoreTargets
508527
}

0 commit comments

Comments
 (0)