All files ignore-file.ts

88.24% Statements 15/17
100% Branches 0/0
85.71% Functions 6/7
88.24% Lines 15/17

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 512x 2x     2x 2x 2x   2x     2x               2x 2x                 2x 2x       2x         4x         2x 2x          
import { FileBase } from './file';
import { GENERATION_DISCLAIMER } from './common';
import { Project } from './project';
 
export class IgnoreFile extends FileBase {
  private readonly excludes = new Array<string>();
  private readonly includes = new Array<string>();
 
  private comments = new Array<string>();
 
  constructor(project: Project, filePath: string) {
    super(project, filePath, { editGitignore: filePath !== '.gitignore' });
  }
 
  /**
   * appends a comment that will be included before the next exclude/include line
   * @param comment 
   */
  public comment(comment: string) {
    this.comments.push();
    this.comments.push(`# ${comment}`);
  }
 
  public exclude(...patterns: string[]) {
    this.flushComments(this.excludes);
    this.excludes.push(...patterns);
  }
 
  public include(...patterns: string[]) {
    this.flushComments(this.includes);
    this.includes.push(...patterns);
  }
 
  protected get data(): string {
    return [
      `# ${GENERATION_DISCLAIMER}`,
      ...this.excludes,
 
      // includes must follow includes
      ...this.includes.map(x => `!${x}`),
    ].join('\n');
  }
 
  private flushComments(into: string[]) {
    into.push(...this.comments);
    this.comments = [];
  }
}