diff --git a/src/util/config.ts b/src/util/config.ts index c53031b78..6b866b654 100644 --- a/src/util/config.ts +++ b/src/util/config.ts @@ -1,5 +1,5 @@ import micromatch from 'micromatch'; -import type { ImportedConfiguration, LocalConfiguration, Configuration, IssueType } from '../types'; +import type { ImportedConfiguration, LocalConfiguration, Configuration, IssueType, Report } from '../types'; export const resolveConfig = ( importedConfiguration: ImportedConfiguration, @@ -41,14 +41,18 @@ export const resolveIncludedIssueTypes = ( // Automatically inject the devDependencies report type in dev mode const deps: IssueType[] = resolvedConfig?.dev ? ['dependencies', 'devDependencies'] : ['dependencies']; const groups: IssueType[] = ['files', ...deps, 'unlisted', 'exports', 'types', 'nsExports', 'nsTypes', 'duplicates']; - const include = [includeArg, resolvedConfig?.include ?? []] - .flat() - .map(value => value.split(',')) - .flat(); - const exclude = [excludeArg, resolvedConfig?.exclude ?? []] - .flat() - .map(value => value.split(',')) - .flat(); - const includes = (include.length > 0 ? include : groups).filter(group => !exclude.includes(group)); - return groups.reduce((r, group) => ((r[group] = includes.includes(group)), r), {} as Configuration['report']); + + // Allow space-separated argument values (--include files,dependencies) + const normalizedIncludesArg = includeArg.map(value => value.split(',')).flat(); + const normalizedExcludesArg = excludeArg.map(value => value.split(',')).flat(); + + // CLI arguments override local options + const excludes = (resolvedConfig?.exclude ?? []).filter(exclude => !normalizedIncludesArg.includes(exclude)); + const includes = (resolvedConfig?.include ?? []).filter(include => !normalizedExcludesArg.includes(include)); + + const include = [normalizedIncludesArg, includes].flat(); + const exclude = [normalizedExcludesArg, excludes].flat(); + const included = (include.length > 0 ? include : groups).filter(group => !exclude.includes(group)); + + return groups.reduce((types, group) => ((types[group] = included.includes(group)), types), {} as Report); };