import * as ts from "typescript" ; import * as Lint from "tslint" ; export class Rule extends Lint . Rules . AbstractRule { public static metadata : Lint . IRuleMetadata = { ruleName : 'adf-file-name' , type : 'maintainability' , description : `Enforce consistent name avoid prefix` , descriptionDetails : `See more at https://angular.io/styleguide#style-05-13.` , rationale : `Consistent conventions make it easy to quickly identify files when you search with autocomplete.` , options : null , optionsDescription : "Not configurable." , typescriptOnly : true , } ; public static FAILURE_STRING = 'The name of the File should not start with ADF Alfresco or Activiti prefix ' ; public static FAILURE_STRING_UNDERSCORE = 'The name of the File should not have _ in the name but you can use - ' ; public static FAILURE_STRING_UPPERCASE = 'The name of the File should not start with uppercase' ; public apply ( sourceFile ) { return this . applyWithWalker ( new AdfFileName ( sourceFile , this . getOptions ( ) ) ) ; } } class AdfFileName extends Lint . RuleWalker { public visitSourceFile ( node ) { var whiteList = [ 'activiti-alfresco.service.ts' , 'activiti-alfresco.service.spec.ts' , 'alfresco-api.service.ts' , 'alfresco-api.service.spects' ] ; var fileName = this . getFilename ( ) ; var fileNameReg = /^(alfresco|activiti|adf|activity)/ig ; var filenameMatch = fileNameReg . exec ( fileName ) ; var isWhiteListName = whiteList . find ( ( currentWhiteListName ) => { return currentWhiteListName === fileName ; } ) ; console . log ( 'error' ) ; if ( filenameMatch && ! isWhiteListName ) { this . addFailure ( this . createFailure ( node . getStart ( ) , node . getWidth ( ) , Rule . FAILURE_STRING + fileName ) ) ; super . visitSourceFile ( node ) ; } if ( fileName . indexOf ( '-' ) >= 0 ) { this . addFailure ( this . createFailure ( node . getStart ( ) , node . getWidth ( ) , Rule . FAILURE_STRING_UNDERSCORE + fileName ) ) ; super . visitSourceFile ( node ) ; } if ( fileName [ 0 ] == fileName [ 0 ] . toUpperCase ( ) ) { this . addFailure ( this . createFailure ( node . getStart ( ) , node . getWidth ( ) , Rule . FAILURE_STRING_UPPERCASE + fileName ) ) ; super . visitSourceFile ( node ) ; } } private getFilename ( ) { const filename = this . getSourceFile ( ) . fileName ; const lastSlash = filename . lastIndexOf ( '/' ) ; if ( lastSlash > - 1 ) { return filename . substring ( lastSlash + 1 ) ; } return filename ; } }