All files ignore-file.ts

82.35% Statements 14/17
100% Branches 0/0
71.43% Functions 5/7
82.35% Lines 14/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 511x 1x     1x 1x 1x   1x     1x               1x 1x       1x 1x                 1x                   1x 1x          
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 = [];
  }
}