diff --git a/.gitignore.report.txt b/.gitignore.report.txt new file mode 100644 index 0000000..2d7685d --- /dev/null +++ b/.gitignore.report.txt @@ -0,0 +1 @@ +Failed to generate report. \ No newline at end of file diff --git a/.npmignore.report.txt b/.npmignore.report.txt new file mode 100644 index 0000000..2d7685d --- /dev/null +++ b/.npmignore.report.txt @@ -0,0 +1 @@ +Failed to generate report. \ No newline at end of file diff --git a/LICENSE.report.txt b/LICENSE.report.txt new file mode 100644 index 0000000..2d7685d --- /dev/null +++ b/LICENSE.report.txt @@ -0,0 +1 @@ +Failed to generate report. \ No newline at end of file diff --git a/README.report.txt b/README.report.txt new file mode 100644 index 0000000..2d7685d --- /dev/null +++ b/README.report.txt @@ -0,0 +1 @@ +Failed to generate report. \ No newline at end of file diff --git a/src/config.report.txt b/src/config.report.txt new file mode 100644 index 0000000..2d7685d --- /dev/null +++ b/src/config.report.txt @@ -0,0 +1 @@ +Failed to generate report. \ No newline at end of file diff --git a/src/constants.report.txt b/src/constants.report.txt new file mode 100644 index 0000000..2d7685d --- /dev/null +++ b/src/constants.report.txt @@ -0,0 +1 @@ +Failed to generate report. \ No newline at end of file diff --git a/src/index.report.txt b/src/index.report.txt new file mode 100644 index 0000000..2d7685d --- /dev/null +++ b/src/index.report.txt @@ -0,0 +1 @@ +Failed to generate report. \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 47514cf..b41e259 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,6 +2,8 @@ import "./config"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; +import path from "path"; +import fs from "fs"; import { clearReports, generateReport, @@ -10,7 +12,22 @@ import { writeReport, } from "./report-generator"; import { Path, TArgs } from "./types"; -import { validateArgs } from "./utils"; +import { validateArgs, parseGitignore } from "./utils"; +import { IGNORE_DIRECTORIES, IGNORE_EXTENSIONS } from "./constants"; + +const gitignorePath = path.resolve(process.cwd(), ".gitignore"); + +let gitignoreDirectories: string[] = []; +let gitignoreExtensions: string[] = []; + +if (fs.existsSync(gitignorePath)){ + const gitignore = parseGitignore(gitignorePath); + gitignoreDirectories = gitignore.directories; + gitignoreExtensions = gitignore.extensions; +} + +const ALL_IGNORE_DIRECTORIES = [...IGNORE_DIRECTORIES, ...gitignoreDirectories]; +const ALL_IGNORE_EXTENSIONS = [...IGNORE_EXTENSIONS, ...gitignoreExtensions]; async function initArgs(): Promise { const argv = await yargs(hideBin(process.argv)) @@ -85,7 +102,7 @@ async function run(): Promise { } if (args.all) { - const files = getAllValidFiles(args.directory); + const files = getAllValidFiles(args.directory, ALL_IGNORE_DIRECTORIES, ALL_IGNORE_EXTENSIONS); if (!files) { console.log( diff --git a/src/report-generator.report.txt b/src/report-generator.report.txt new file mode 100644 index 0000000..2d7685d --- /dev/null +++ b/src/report-generator.report.txt @@ -0,0 +1 @@ +Failed to generate report. \ No newline at end of file diff --git a/src/report-generator.ts b/src/report-generator.ts index 462dd3c..22ad448 100644 --- a/src/report-generator.ts +++ b/src/report-generator.ts @@ -46,7 +46,7 @@ function getAllFiles(dir: Path): Path[] | null { * @returns An array of file paths. * * */ -function getAllValidFiles(dir: Path): Path[] | null { +function getAllValidFiles(dir: Path, ignoreDirectories: string[], ignoreExtensions: string[]): Path[] | null { try { const allFiles = getAllFiles(dir); @@ -54,7 +54,7 @@ function getAllValidFiles(dir: Path): Path[] | null { throw new Error("failed to get all files in directory"); } - const filteredFiles = filterIgnoredFiles(allFiles); + const filteredFiles = filterIgnoredFiles(allFiles, ignoreDirectories, ignoreExtensions); return filteredFiles; } catch (err) { diff --git a/src/types.report.txt b/src/types.report.txt new file mode 100644 index 0000000..2d7685d --- /dev/null +++ b/src/types.report.txt @@ -0,0 +1 @@ +Failed to generate report. \ No newline at end of file diff --git a/src/utils.report.txt b/src/utils.report.txt new file mode 100644 index 0000000..2d7685d --- /dev/null +++ b/src/utils.report.txt @@ -0,0 +1 @@ +Failed to generate report. \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts index 444d484..1632cc6 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -8,10 +8,10 @@ import { TArgs, Path } from "./types"; * @param filePath File path to check if it should be ignored * @returns true if the file should be ignored */ -const shouldIgnoreFileByExtension = (filePath: Path): boolean => { +const shouldIgnoreFileByExtension = (filePath: Path, ignoreExtensions: string[]): boolean => { let shouldIgnore = false; - IGNORE_EXTENSIONS.forEach((ext) => { + ignoreExtensions.forEach((ext) => { if (filePath.endsWith(ext)) { shouldIgnore = true; } @@ -62,7 +62,7 @@ const fileExistsInDirectory = (dir: string, fileName: string): boolean => { * @param filePaths File paths to check * @returns Path array of file paths that are not ignored */ -const filterIgnoredFiles = (filePaths: Path[]): Path[] => { +const filterIgnoredFiles = (filePaths: Path[], ignoreDirectories: string[], ignoreExtensions: string[]): Path[] => { if (!filePaths) { return []; } @@ -71,8 +71,8 @@ const filterIgnoredFiles = (filePaths: Path[]): Path[] => { const fileExtension = path.extname(filePath); const fileDirectory = path.dirname(filePath); - const ignoreByExtension = shouldIgnoreFileByExtension(filePath); - const ignoreByDirectory = IGNORE_DIRECTORIES.some((dir) => + const ignoreByExtension = shouldIgnoreFileByExtension(filePath, ignoreExtensions); + const ignoreByDirectory = ignoreDirectories.some((dir) => filePath.startsWith(dir) ); @@ -135,10 +135,50 @@ function validateArgs(args: TArgs): void { } } +function parseGitignore(gitignorePath: string): { directories: string[], extensions: string[] } { + try { + const ignoreContent = fs.readFileSync(gitignorePath, "utf8"); + const ignoreLines = ignoreContent.split("\n"); + + const directories: string[] = []; + const extensions: string[] = []; + + for(const line of ignoreLines){ + const trimmedLine = line.trim(); + + if(trimmedLine === "" || trimmedLine.startsWith("#")){ + // Skip empty lines and comments + continue; + } + if(trimmedLine.startsWith("/")){ + // Ignore root-level files or directories + if(trimmedLine.endsWith("/")){ + directories.push(trimmedLine.slice(1, -1)); //Directory pattern + } else{ + extensions.push(path.extname(trimmedLine.slice(1))); //File extension pattern + } + } else{ + if(trimmedLine.endsWith("/")){ + directories.push(trimmedLine.slice(0, -1)); + } else{ + extensions.push(path.extname(trimmedLine)); + } + } + } + + return { directories, extensions }; + } catch (err) { + console.error("Failed to read or parse .gitignore file", err); + return {directories: [], extensions: []}; //Return empty arrays in case of error + } + +} + export { shouldIgnoreFileByExtension, splitTextIntoChunks, fileExistsInDirectory, filterIgnoredFiles, validateArgs, + parseGitignore, // Exporting the new function };