From bef68b9fa54bc97e7a875de858e07262e0f22554 Mon Sep 17 00:00:00 2001 From: Geoff Seemueller Date: Sun, 24 Nov 2024 10:33:47 -0500 Subject: [PATCH] Enable ignore file processing for file exclusion Added functionality to load and process nested `.code-tokenizer-md-ignore` files for excluding patterns during markdown generation. Introduced new dependencies and ensured initialization before file processing operations. --- .code-tokenizer-md-ignore | 3 ++ bun.lockb | Bin 67493 -> 71172 bytes package.json | 3 ++ src/MarkdownGenerator.ts | 107 ++++++++++++++++++++++++++++++++++++-- test-for-ignore.css | 1 + 5 files changed, 109 insertions(+), 5 deletions(-) create mode 100644 .code-tokenizer-md-ignore create mode 100644 test-for-ignore.css diff --git a/.code-tokenizer-md-ignore b/.code-tokenizer-md-ignore new file mode 100644 index 0000000..2eb8181 --- /dev/null +++ b/.code-tokenizer-md-ignore @@ -0,0 +1,3 @@ +# This is just for testing to make sure the glob patterns work +# Check is valid when test-for-ignore.css is not included in the program output +**/*.css \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 314760774bfbbf9daa2aab98a2ca3ca65c4c94d5..b873aad16ae25a5f836c336c5db649585ff9806f 100755 GIT binary patch delta 15879 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 + */ + private async initialize(): Promise { + if (!this.initialized) { + await this.loadNestedIgnoreFiles(); + this.initialized = true; + } + } + + /** + * Loads and processes .code-tokenizer-md-ignore files recursively from the project directory. + * These files contain patterns for files to exclude from processing. + * @async + * @returns {Promise} + * @throws {Error} When unable to read ignore files + */ + /** + * Loads and processes .code-tokenizer-md-ignore files using ignore-walk. + * These files contain patterns for files to exclude from processing. + * @async + * @returns {Promise} + * @throws {Error} When unable to read ignore files + */ + /** + * Quickly loads patterns from .code-tokenizer-md-ignore files using Bun's native Glob. + * @async + * @returns {Promise} + */ + async loadNestedIgnoreFiles(): Promise { + try { + if (this.verbose) { + console.log('Loading ignore patterns...'); + } + + const ignoreGlob = new Glob("**/.code-tokenizer-md-ignore"); + const ignoreFiles: string[] = []; + + // Use Bun's native glob to find ignore files + for await (const file of ignoreGlob.scan({ + cwd: this.dir, + dot: true, + absolute: true, + followSymlinks: false, + onlyFiles: true + })) { + ignoreFiles.push(file); + } + + if (this.verbose) { + console.log(`Found ${ignoreFiles.length} ignore files`); + } + + // Process each ignore file + for (const ignoreFile of ignoreFiles) { + try { + const content = readFileSync(ignoreFile, 'utf-8'); + const patterns = content + .split('\n') + .map(line => line.trim()) + .filter(line => line && !line.startsWith('#')); + + // Get relative patterns based on ignore file location + const ignoreFileDir = path.relative(this.dir, path.dirname(ignoreFile)); + const relativePatterns = patterns.map(pattern => { + if (!pattern.startsWith('/') && !pattern.startsWith('**')) { + return path.join(ignoreFileDir, pattern).replace(/\\/g, '/'); + } + return pattern; + }); + + this.fileExclusions.push(...relativePatterns); + } catch (error) { + if (this.verbose) { + console.error(`Error processing ignore file ${ignoreFile}:`, error); + } + } + } + + // Remove duplicates + this.fileExclusions = [...new Set(this.fileExclusions)]; + + if (this.verbose) { + console.log(`Total exclusion patterns: ${this.fileExclusions.length}`); + } + } catch (error) { + if (this.verbose) { + console.error('Error loading nested ignore files:', error); + } + throw error; + } + } /** * Retrieves a list of files tracked by Git, excluding those specified in fileTypeExclusions and fileExclusions. * @async @@ -57,13 +154,13 @@ export class MarkdownGenerator { * @throws {Error} When unable to execute git command or access files */ async getTrackedFiles(): Promise { + await this.initialize(); try { const output = this.execCommand('git ls-files'); const trackedFiles = output.split('\n').filter(file => file.trim().length > 0); if (this.verbose) { console.log(`Total tracked files: ${trackedFiles.length}`); } - // Use micromatch to filter out excluded files const filteredFiles = trackedFiles.filter(file => { const fileExt = path.extname(file).toLowerCase(); return !this.fileTypeExclusions.has(fileExt) && !micromatch.isMatch(file, this.fileExclusions, { dot: true }); diff --git a/test-for-ignore.css b/test-for-ignore.css new file mode 100644 index 0000000..e0b0101 --- /dev/null +++ b/test-for-ignore.css @@ -0,0 +1 @@ +A BUNCH OF SHIT \ No newline at end of file