From a2a56ea19efa8db9085ebf3cd3892699950e1c6f Mon Sep 17 00:00:00 2001 From: Lukas Fritsch Date: Sat, 30 Sep 2023 23:24:02 +0200 Subject: [PATCH 1/3] added basic ignore --- package-lock.json | 13 +++++++------ package.json | 1 + src/__tests__/cli.ts | 5 ++++- src/__tests__/print.ts | 1 + src/__tests__/process.ts | 4 ++++ src/config.ts | 3 +++ src/index.ts | 1 + src/process.ts | 17 ++++++++++++++++- 8 files changed, 37 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 653a3c0..c020d88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "file-entry-cache": "^6.0.1", "flow-remove-types": "2.156.0", "glob": "^7.1.6", + "ignore": "^5.2.4", "json5": "^2.2.0", "ora": "^5.3.0", "read-pkg-up": "^7.0.1", @@ -4059,9 +4060,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "engines": { "node": ">= 4" } @@ -11709,9 +11710,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" }, "ignore-by-default": { "version": "1.0.1", diff --git a/package.json b/package.json index 98a4e78..462ffa7 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "file-entry-cache": "^6.0.1", "flow-remove-types": "2.156.0", "glob": "^7.1.6", + "ignore": "^5.2.4", "json5": "^2.2.0", "ora": "^5.3.0", "read-pkg-up": "^7.0.1", diff --git a/src/__tests__/cli.ts b/src/__tests__/cli.ts index 00e1a9a..d57e204 100644 --- a/src/__tests__/cli.ts +++ b/src/__tests__/cli.ts @@ -854,7 +854,8 @@ export default promise "ignoreUnresolved": [], "ignoreUnimported": ["src/setup{Proxy,Tests}.js"], "ignoreUnused": [], - "ignorePatterns": ["**/node_modules/**", "**/*.d.ts"] + "ignorePatterns": ["**/node_modules/**", "**/*.d.ts"], + "respectGitignore": true }`, }, { name: 'src/index.tsx', content: `import './imported';` }, @@ -1118,6 +1119,7 @@ cases( ignoreUnresolved: [], ignoreUnimported: [], ignoreUnused: [], + respectGitignore: true, }, }, { @@ -1151,6 +1153,7 @@ cases( ignoreUnresolved: [], ignoreUnimported: [], ignoreUnused: ['@babel/runtime', 'meteor-node-stubs'], + respectGitignore: true, }, }, ], diff --git a/src/__tests__/print.ts b/src/__tests__/print.ts index 655f841..ef37232 100644 --- a/src/__tests__/print.ts +++ b/src/__tests__/print.ts @@ -17,6 +17,7 @@ describe('printResults', () => { ignoreUnimported: [], ignoreUnused: [], ignoreUnresolved: [], + respectGitignore: false, }, showUnresolvedImports: false, showUnusedDeps: false, diff --git a/src/__tests__/process.ts b/src/__tests__/process.ts index c95ee45..373d03f 100644 --- a/src/__tests__/process.ts +++ b/src/__tests__/process.ts @@ -24,6 +24,7 @@ describe('processResults', () => { ignoreUnimported: [], ignoreUnused: [], ignoreUnresolved: [], + respectGitignore: false, }, showUnusedFiles: false, showUnusedDeps: false, @@ -64,6 +65,7 @@ describe('processResults', () => { ignoreUnimported: [], ignoreUnused: [], ignoreUnresolved: [], + respectGitignore: false, }, showUnusedFiles: false, showUnusedDeps: false, @@ -104,6 +106,7 @@ describe('processResults', () => { ignoreUnimported: [], ignoreUnused: [], ignoreUnresolved: [], + respectGitignore: false, }, showUnusedFiles: false, showUnusedDeps: true, @@ -154,6 +157,7 @@ describe('processResults', () => { ignoreUnimported: [], ignoreUnused: [], ignoreUnresolved: [], + respectGitignore: false, }, showUnusedFiles: true, showUnusedDeps: false, diff --git a/src/config.ts b/src/config.ts index e7b3527..ca65356 100644 --- a/src/config.ts +++ b/src/config.ts @@ -39,6 +39,7 @@ export interface UnimportedConfig { ignoreUnresolved: string[]; ignoreUnimported: string[]; ignoreUnused: string[]; + respectGitignore?: boolean; moduleDirectory?: string[]; rootDir?: string; extensions?: string[]; @@ -70,6 +71,7 @@ export interface Config { ignoreUnresolved: string[]; ignoreUnimported: string[]; ignoreUnused: string[]; + respectGitignore: boolean; moduleDirectory?: string[]; rootDir?: string; extensions: string[]; @@ -157,6 +159,7 @@ export async function getConfig(args?: CliArguments): Promise { ), ignoreUnused: configFile?.ignoreUnused ?? preset?.ignoreUnused ?? [], ignorePatterns: configFile?.ignorePatterns ?? preset?.ignorePatterns ?? [], + respectGitignore: configFile?.respectGitignore ?? true, moduleDirectory: configFile?.moduleDirectory ?? preset?.moduleDirectory, entryFiles: [], extensions: [], diff --git a/src/index.ts b/src/index.ts index 3f29d3a..8909c6a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -159,6 +159,7 @@ export async function main(args: CliArguments): Promise { ignoreUnimported: config.ignoreUnimported, ignoreUnused: config.ignoreUnused, ignoreUnresolved: config.ignoreUnresolved, + respectGitignore: config.respectGitignore, }); spinner.stop(); diff --git a/src/process.ts b/src/process.ts index 0b3f76b..ea173c4 100644 --- a/src/process.ts +++ b/src/process.ts @@ -1,6 +1,9 @@ +import ignore from 'ignore'; import { TraverseResult } from './traverse'; import { Context } from './index'; import { ensureArray } from './ensureArray'; +import path from 'path'; +import { exists, readText } from './fs'; export interface ProcessedResult { unresolved: [string, string[]][]; @@ -41,11 +44,23 @@ export async function processResults( !ignoreUnusedIdx[x], ); - const unimported = files + let unimported = files .filter((x) => !traverseResult.files.has(x)) .map((x) => x.replace(context.cwd + '/', '')) .filter((x) => !ignoreUnimportedIdx[x]); + if (context.config.respectGitignore && (await exists('.gitignore'))) { + const gitignore = (await readText('.gitignore')).split('\n'); + const ig = ignore().add(gitignore); + unimported = ig + .filter( + unimported.map((x) => + path.relative(context.cwd, path.resolve(context.cwd, x)), + ), + ) + .map((x) => path.join(context.cwd, x)); + } + const formatTypeResultMap: { [P in FormatTypes]: boolean } = { showUnusedFiles: !unimported.length, showUnusedDeps: !unused.length, From e5807a4c05726217b6ff826fd0ca99e9e4cd9abc Mon Sep 17 00:00:00 2001 From: Lukas Fritsch Date: Mon, 2 Oct 2023 09:51:06 +0200 Subject: [PATCH 2/3] Add info to ReadMe --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 7a4f02c..abe4595 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,7 @@ Save the file as `.unimportedrc.json` in the root of your project (next to `pack "ignoreUnresolved": ["some-npm-dependency"], "ignoreUnimported": ["src/i18n/locales/en.ts", "src/i18n/locales/nl.ts"], "ignoreUnused": ["bcrypt", "create-emotion"], + "respectGitignore": true, "scannedDirs": ["./modules"] } ``` @@ -298,6 +299,14 @@ tests/** To specify custom ignore paths, add your own patterns to `.unimportedrc.json#ignorePatterns`. Note that `unimported` won't merge settings! The custom list needs to be the full list of patterns that you want to ignore. +In addition `unimported` will also ignore files that match your `.gitignore` patterns. To disable this behavior, set `respectGitignore` to `false` in your `.unimportedrc.json` file. + +```json +{ + "respectGitignore": false +} +``` + ## Troubleshooting Common issues or known limitations of unimported. From 76078aaf4f0071fef82bd9e1ea5099d8abe5a022 Mon Sep 17 00:00:00 2001 From: Lukas Fritsch Date: Mon, 2 Oct 2023 11:51:37 +0200 Subject: [PATCH 3/3] Added cli test for gitignore --- src/__tests__/cli.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/__tests__/cli.ts b/src/__tests__/cli.ts index d57e204..9a020ec 100644 --- a/src/__tests__/cli.ts +++ b/src/__tests__/cli.ts @@ -181,6 +181,19 @@ cases( exitCode: 1, stdout: /1 unimported files.*bar.js/s, }, + { + name: 'should ignore unimported file matching `.gitignore`', + files: [ + { name: 'package.json', content: '{ "main": "index.js" }' }, + { name: 'index.js', content: `import foo from './foo';` }, + { name: 'foo.js', content: '' }, + { name: 'bar.js', content: '' }, + { name: 'ignore.js', content: '' }, + { name: '.gitignore', content: '**/ignore*' }, + ], + exitCode: 1, + stdout: /1 unimported files.*bar.js/s, + }, { name: 'should support JSON config', files: [