Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore.report.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Failed to generate report.
1 change: 1 addition & 0 deletions .npmignore.report.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Failed to generate report.
1 change: 1 addition & 0 deletions LICENSE.report.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Failed to generate report.
1 change: 1 addition & 0 deletions README.report.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Failed to generate report.
1 change: 1 addition & 0 deletions src/config.report.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Failed to generate report.
1 change: 1 addition & 0 deletions src/constants.report.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Failed to generate report.
1 change: 1 addition & 0 deletions src/index.report.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Failed to generate report.
21 changes: 19 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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<TArgs> {
const argv = await yargs(hideBin(process.argv))
Expand Down Expand Up @@ -85,7 +102,7 @@ async function run(): Promise<void> {
}

if (args.all) {
const files = getAllValidFiles(args.directory);
const files = getAllValidFiles(args.directory, ALL_IGNORE_DIRECTORIES, ALL_IGNORE_EXTENSIONS);

if (!files) {
console.log(
Expand Down
1 change: 1 addition & 0 deletions src/report-generator.report.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Failed to generate report.
4 changes: 2 additions & 2 deletions src/report-generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,15 @@ 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);

if (!allFiles) {
throw new Error("failed to get all files in directory");
}

const filteredFiles = filterIgnoredFiles(allFiles);
const filteredFiles = filterIgnoredFiles(allFiles, ignoreDirectories, ignoreExtensions);

return filteredFiles;
} catch (err) {
Expand Down
1 change: 1 addition & 0 deletions src/types.report.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Failed to generate report.
1 change: 1 addition & 0 deletions src/utils.report.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Failed to generate report.
50 changes: 45 additions & 5 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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 [];
}
Expand All @@ -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)
);

Expand Down Expand Up @@ -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
};