33 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			33 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import {RuleWalker} from 'tslint/lib/language/walker'; | ||
|  | import {RuleFailure} from 'tslint/lib/lint'; | ||
|  | import {AbstractRule} from 'tslint/lib/rules'; | ||
|  | import * as ts from 'typescript'; | ||
|  | 
 | ||
|  | export class Rule extends AbstractRule { | ||
|  |   public static FAILURE_STRING = 'missing copyright header'; | ||
|  | 
 | ||
|  |   public apply(sourceFile: ts.SourceFile): RuleFailure[] { | ||
|  |     const walker = new EnforceCopyrightHeaderWalker(sourceFile, this.getOptions()); | ||
|  |     return this.applyWithWalker(walker); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | class EnforceCopyrightHeaderWalker extends RuleWalker { | ||
|  |   private regex: RegExp = /\/\*[\s\S]*?Copyright Google Inc\.[\s\S]*?\*\//; | ||
|  | 
 | ||
|  |   public visitSourceFile(node: ts.SourceFile) { | ||
|  |     // check for a shebang
 | ||
|  |     let text = node.getFullText(); | ||
|  |     let offset = 0; | ||
|  |     if (text.indexOf('#!') === 0) { | ||
|  |       offset = text.indexOf('\n') + 1; | ||
|  |       text = text.substring(offset); | ||
|  |     } | ||
|  |     // look for the copyright header
 | ||
|  |     let match = text.match(this.regex); | ||
|  |     if (!match || match.index !== 0) { | ||
|  |       this.addFailure(this.createFailure(offset, offset + 1, Rule.FAILURE_STRING)); | ||
|  |     } | ||
|  |   } | ||
|  | } |