Skip to content

Commit

Permalink
refactor: align to tslint & rename ng2Walker
Browse files Browse the repository at this point in the history
Align to the changes introduced by tslint@5 and rename `ng2Walker` to
`ngWalker`.
  • Loading branch information
mgechev committed Apr 19, 2017
1 parent 9362759 commit 01bffd5
Show file tree
Hide file tree
Showing 30 changed files with 192 additions and 396 deletions.
6 changes: 3 additions & 3 deletions package.json
@@ -1,6 +1,6 @@
{
"name": "codelyzer",
"version": "2.1.1",
"version": "3.0.0",
"description": "Linting for Angular applications, following angular.io/styleguide.",
"main": "index.js",
"scripts": {
Expand Down Expand Up @@ -61,12 +61,12 @@
"rimraf": "^2.5.2",
"rxjs": "5.0.1",
"ts-node": "1.2.2",
"tslint": "^4.0.0",
"tslint": "^5.0.0",
"typescript": "^2.1.4",
"zone.js": "^0.8.4"
},
"peerDependencies": {
"tslint": "^4.0.0",
"tslint": "^5.0.0",
"@angular/compiler": "^2.3.1 || >=4.0.0-beta <5.0.0",
"@angular/core": "^2.3.1 || >=4.0.0-beta <5.0.0"
},
Expand Down
6 changes: 4 additions & 2 deletions src/angular/ng2Walker.ts → src/angular/ngWalker.ts
Expand Up @@ -13,7 +13,7 @@ import {ReferenceCollectorVisitor} from './templates/referenceCollectorVisitor';

import {MetadataReader} from './metadataReader';
import {ComponentMetadata, DirectiveMetadata, StyleMetadata} from './metadata';
import {ng2WalkerFactoryUtils} from './ng2WalkerFactoryUtils';
import {ng2WalkerFactoryUtils} from './ngWalkerFactoryUtils';

import {Config} from './config';

Expand All @@ -34,12 +34,14 @@ export interface Ng2WalkerConfig {
cssVisitorCtrl?: CssAstVisitorCtrl;
}

export class Ng2Walker extends Lint.RuleWalker {
export class NgWalker extends Lint.RuleWalker {
constructor(sourceFile: ts.SourceFile,
protected _originalOptions: Lint.IOptions,
private _config?: Ng2WalkerConfig,
protected _metadataReader?: MetadataReader) {

super(sourceFile, _originalOptions);

this._metadataReader = this._metadataReader || ng2WalkerFactoryUtils.defaultMetadataReader();
this._config = Object.assign({
templateVisitorCtrl: BasicTemplateAstVisitor,
Expand Down
@@ -1,6 +1,6 @@
import * as ts from 'typescript';
import * as Lint from 'tslint';
import {Ng2Walker, Ng2WalkerConfig} from './ng2Walker';
import {NgWalker, Ng2WalkerConfig} from './ngWalker';
import {MetadataReader} from './metadataReader';
import {UrlResolver} from './urlResolvers/urlResolver';
import {FsFileResolver} from './fileResolver/fsFileResolver';
Expand Down
4 changes: 2 additions & 2 deletions src/componentClassSuffixRule.ts
Expand Up @@ -6,7 +6,7 @@ import {Failure} from './walkerFactory/walkerFactory';
import {all, validateComponent} from './walkerFactory/walkerFn';
import {Maybe, F2} from './util/function';
import {IOptions} from 'tslint';
import {Ng2Walker} from './angular/ng2Walker';
import {NgWalker} from './angular/ngWalker';

export class Rule extends Lint.Rules.AbstractRule {

Expand All @@ -32,7 +32,7 @@ export class Rule extends Lint.Rules.AbstractRule {

static FAILURE: string = 'The name of the class %s should end with the suffix %s ($$02-03$$)';

static walkerBuilder: F2<ts.SourceFile, IOptions, Ng2Walker> =
static walkerBuilder: F2<ts.SourceFile, IOptions, NgWalker> =
all(
validateComponent((meta: ComponentMetadata, suffixList?: string[]) =>
Maybe.lift(meta.controller)
Expand Down
2 changes: 1 addition & 1 deletion src/componentSelectorRule.ts
Expand Up @@ -51,7 +51,7 @@ export class Rule extends SelectorRule {
],
optionsDescription: Lint.Utils.dedent`
Options accept three obligatory items as an array:
1. \`"element"\` or \`"attribute"\` forces components either to be elements or attributes.
2. A single prefix (string) or array of prefixes (strings) which have to be used in component selectors.
3. \`"kebab-case"\` or \`"camelCase"\` allows you to pick a case.
Expand Down
4 changes: 2 additions & 2 deletions src/directiveClassSuffixRule.ts
@@ -1,7 +1,7 @@
import * as Lint from 'tslint';
import * as ts from 'typescript';
import {sprintf} from 'sprintf-js';
import {Ng2Walker} from './angular/ng2Walker';
import {NgWalker} from './angular/ngWalker';

import {DirectiveMetadata} from './angular/metadata';

Expand Down Expand Up @@ -40,7 +40,7 @@ export class Rule extends Lint.Rules.AbstractRule {
}
}

export class ClassMetadataWalker extends Ng2Walker {
export class ClassMetadataWalker extends NgWalker {
visitNg2Directive(meta: DirectiveMetadata) {
let name = meta.controller.name;
let className:string = name.text;
Expand Down
2 changes: 1 addition & 1 deletion src/directiveSelectorRule.ts
Expand Up @@ -48,7 +48,7 @@ export class Rule extends SelectorRule {
],
optionsDescription: Lint.Utils.dedent`
Options accept three obligatory items as an array:
1. \`"element"\` or \`"attribute"\` forces components either to be elements or attributes.
2. A single prefix (string) or array of prefixes (strings) which have to be used in directive selectors.
3. \`"kebab-case"\` or \`"camelCase"\` allows you to pick a case.
Expand Down
2 changes: 1 addition & 1 deletion src/importDestructuringSpacingRule.ts
Expand Up @@ -20,7 +20,7 @@ export class Rule extends Lint.Rules.AbstractRule {
}

// The walker takes care of all the work.
class ImportDestructuringSpacingWalker extends Lint.SkippableTokenAwareRuleWalker {
class ImportDestructuringSpacingWalker extends Lint.RuleWalker {
private scanner: ts.Scanner;

constructor(sourceFile: ts.SourceFile, options: Lint.IOptions) {
Expand Down
4 changes: 2 additions & 2 deletions src/invokeInjectableRule.ts
@@ -1,7 +1,7 @@
import * as Lint from 'tslint';
import * as ts from 'typescript';
import {sprintf} from 'sprintf-js';
import {Ng2Walker} from './angular/ng2Walker';
import {NgWalker} from './angular/ngWalker';

export class Rule extends Lint.Rules.AbstractRule {
public static metadata: Lint.IRuleMetadata = {
Expand All @@ -24,7 +24,7 @@ export class Rule extends Lint.Rules.AbstractRule {
}
}

export class ValidateInjectableWalker extends Ng2Walker {
export class ValidateInjectableWalker extends NgWalker {
visitClassDeclaration(declaration: ts.ClassDeclaration) {
(<ts.Decorator[]>declaration.decorators || [])
.forEach((d: any) => {
Expand Down
6 changes: 3 additions & 3 deletions src/noAccessMissingMemberRule.ts
Expand Up @@ -2,7 +2,7 @@ import * as Lint from 'tslint';
import * as ts from 'typescript';
import {sprintf} from 'sprintf-js';
import {stringDistance} from './util/utils';
import {Ng2Walker} from './angular/ng2Walker';
import {NgWalker} from './angular/ngWalker';
import {RecursiveAngularExpressionVisitor} from './angular/templates/recursiveAngularExpressionVisitor';
import {ExpTypes} from './angular/expressionTypes';
import {getDeclaredMethodNames, getDeclaredPropertyNames} from './util/classDeclarationUtils';
Expand All @@ -13,7 +13,7 @@ import {Config} from './angular/config';
enum DeclarationType {
Property,
Method
};
}

export interface ASTField {
obj?: ASTField;
Expand Down Expand Up @@ -138,7 +138,7 @@ export class Rule extends Lint.Rules.AbstractRule {

public apply(sourceFile:ts.SourceFile): Lint.RuleFailure[] {
return this.applyWithWalker(
new Ng2Walker(sourceFile,
new NgWalker(sourceFile,
this.getOptions(), {
expressionVisitorCtrl: SymbolAccessValidator
}));
Expand Down
4 changes: 2 additions & 2 deletions src/noInputRenameRule.ts
@@ -1,7 +1,7 @@
import * as Lint from 'tslint';
import * as ts from 'typescript';
import {sprintf} from 'sprintf-js';
import {Ng2Walker} from './angular/ng2Walker';
import {NgWalker} from './angular/ngWalker';

export class Rule extends Lint.Rules.AbstractRule {
public static metadata: Lint.IRuleMetadata = {
Expand All @@ -26,7 +26,7 @@ export class Rule extends Lint.Rules.AbstractRule {
}
}

export class InputMetadataWalker extends Ng2Walker {
export class InputMetadataWalker extends NgWalker {
visitNg2Input(property:ts.PropertyDeclaration, input:ts.Decorator, args:string[]) {
let className = (<any>property).parent.name.text;
let memberName = (<any>property.name).text;
Expand Down
4 changes: 2 additions & 2 deletions src/noOutputRenameRule.ts
@@ -1,7 +1,7 @@
import * as Lint from 'tslint';
import * as ts from 'typescript';
import {sprintf} from 'sprintf-js';
import {Ng2Walker} from './angular/ng2Walker';
import {NgWalker} from './angular/ngWalker';

export class Rule extends Lint.Rules.AbstractRule {
public static metadata: Lint.IRuleMetadata = {
Expand All @@ -27,7 +27,7 @@ export class Rule extends Lint.Rules.AbstractRule {
}


export class OutputMetadataWalker extends Ng2Walker {
export class OutputMetadataWalker extends NgWalker {
visitNg2Output(property:ts.PropertyDeclaration, output:ts.Decorator, args:string[]) {
let className = (<any>property).parent.name.text;
let memberName = (<any>property.name).text;
Expand Down
9 changes: 4 additions & 5 deletions src/noUnusedCssRule.ts
@@ -1,6 +1,6 @@
import * as Lint from 'tslint';
import * as ts from 'typescript';
import {Ng2Walker} from './angular/ng2Walker';
import {NgWalker} from './angular/ngWalker';
import {getComponentDecorator, isSimpleTemplateString, getDecoratorPropertyInitializer} from './util/utils';
import {BasicCssAstVisitor} from './angular/styles/basicCssAstVisitor';
import {BasicTemplateAstVisitor} from './angular/templates/basicTemplateAstVisitor';
Expand All @@ -15,7 +15,7 @@ import {parseTemplate} from './angular/templates/templateParser';
import { CssAst, CssSelectorRuleAst, CssSelectorAst, CssBlockAst } from './angular/styles/cssAst';

import {ComponentMetadata, StyleMetadata} from './angular/metadata';
import {ng2WalkerFactoryUtils} from './angular/ng2WalkerFactoryUtils';
import {ng2WalkerFactoryUtils} from './angular/ngWalkerFactoryUtils';
import {logger} from './util/logger';
import {SemVerDSL} from './util/ngVersion';

Expand Down Expand Up @@ -180,8 +180,7 @@ class UnusedCssVisitor extends BasicCssAstVisitor {
const end = ast.end.offset;
const length = end - ast.start.offset + 1;
// length + 1 because we want to drop the '}'
const fix = this.createFix(this.createReplacement(start, length, ''));
this.addFailure(this.createFailure(start, length, 'Unused styles', fix));
this.addFailure(this.createFailure(start, length, 'Unused styles', this.createReplacement(start, length, '')));
}
} catch (e) {
logger.error(e);
Expand Down Expand Up @@ -231,7 +230,7 @@ class UnusedCssVisitor extends BasicCssAstVisitor {
}

// Finds the template and wrapes the parsed content into a root element
export class UnusedCssNg2Visitor extends Ng2Walker {
export class UnusedCssNg2Visitor extends NgWalker {
private templateAst: TemplateAst;

visitClassDeclaration(declaration: ts.ClassDeclaration) {
Expand Down
4 changes: 2 additions & 2 deletions src/pipeImpureRule.ts
@@ -1,7 +1,7 @@
import * as Lint from 'tslint';
import * as ts from 'typescript';
import {sprintf} from 'sprintf-js';
import {Ng2Walker} from './angular/ng2Walker';
import {NgWalker} from './angular/ngWalker';
import SyntaxKind = require('./util/syntaxKind');

export class Rule extends Lint.Rules.AbstractRule {
Expand All @@ -24,7 +24,7 @@ export class Rule extends Lint.Rules.AbstractRule {
}
}

export class ClassMetadataWalker extends Ng2Walker {
export class ClassMetadataWalker extends NgWalker {

constructor(sourceFile:ts.SourceFile, private rule:Rule) {
super(sourceFile, rule.getOptions());
Expand Down
6 changes: 3 additions & 3 deletions src/pipeNamingRule.ts
Expand Up @@ -2,7 +2,7 @@ import * as Lint from 'tslint';
import * as ts from 'typescript';
import {sprintf} from 'sprintf-js';
import SyntaxKind = require('./util/syntaxKind');
import {Ng2Walker} from './angular/ng2Walker';
import {NgWalker} from './angular/ngWalker';
import {SelectorValidator} from './util/selectorValidator';

export class Rule extends Lint.Rules.AbstractRule {
Expand Down Expand Up @@ -43,7 +43,7 @@ export class Rule extends Lint.Rules.AbstractRule {
private validator: Function;

constructor(ruleName:string, value:any, disabledIntervals:Lint.IDisabledInterval[]) {
super(ruleName, value, disabledIntervals);
super({ ruleName, ruleArguments: value, ruleSeverity: 'warning', disabledIntervals });
if (value[1] === 'camelCase') {
this.validator = SelectorValidator.camelCase;
}
Expand All @@ -69,7 +69,7 @@ export class Rule extends Lint.Rules.AbstractRule {
}
}

export class ClassMetadataWalker extends Ng2Walker {
export class ClassMetadataWalker extends NgWalker {

constructor(sourceFile:ts.SourceFile, private rule:Rule) {
super(sourceFile, rule.getOptions());
Expand Down
12 changes: 3 additions & 9 deletions src/propertyDecoratorBase.ts
Expand Up @@ -21,28 +21,22 @@ export class UsePropertyDecorator extends Lint.Rules.AbstractRule {
}

constructor(private config: IUsePropertyDecoratorConfig, ruleName: string, value: any, disabledIntervals: Lint.IDisabledInterval[]) {
super(ruleName, value, disabledIntervals);
super({ ruleName, ruleArguments: value, disabledIntervals, ruleSeverity: 'warning' });
}

public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
let documentRegistry = ts.createDocumentRegistry();
let languageServiceHost = Lint.createLanguageServiceHost('file.ts', sourceFile.getFullText());
return this.applyWithWalker(
new DirectiveMetadataWalker(sourceFile,
this.getOptions(),
ts.createLanguageService(languageServiceHost, documentRegistry), this.config));
this.getOptions(), this.config));
}
}

class DirectiveMetadataWalker extends Lint.RuleWalker {
private languageService : ts.LanguageService;
private typeChecker : ts.TypeChecker;

constructor(sourceFile: ts.SourceFile, options: Lint.IOptions,
languageService : ts.LanguageService, private config: IUsePropertyDecoratorConfig) {
constructor(sourceFile: ts.SourceFile, options: Lint.IOptions, private config: IUsePropertyDecoratorConfig) {
super(sourceFile, options);
this.languageService = languageService;
this.typeChecker = languageService.getProgram().getTypeChecker();
}

visitClassDeclaration(node: ts.ClassDeclaration) {
Expand Down
2 changes: 1 addition & 1 deletion src/selectorNameBase.ts
Expand Up @@ -23,7 +23,7 @@ export abstract class SelectorRule extends Lint.Rules.AbstractRule {
let type = value[1];
let prefix = value[2] || [];
let name = value[3];
super(ruleName, value, disabledIntervals);
super({ ruleName, ruleArguments: value, ruleSeverity: 'warning', disabledIntervals });
this.setMultiPrefix(prefix);
this.setPrefixArguments(prefix);
this.setPrefixValidator(prefix, name);
Expand Down
7 changes: 3 additions & 4 deletions src/templateToNgTemplateRule.ts
Expand Up @@ -2,7 +2,7 @@ import * as Lint from 'tslint';
import * as ts from 'typescript';
import {stringDistance} from './util/utils';
import {getDeclaredProperties, getDeclaredMethods} from './util/classDeclarationUtils';
import {Ng2Walker} from './angular/ng2Walker';
import {NgWalker} from './angular/ngWalker';
import {RecursiveAngularExpressionVisitor} from './angular/templates/recursiveAngularExpressionVisitor';
import * as e from '@angular/compiler/src/expression_parser/ast';
import { EmbeddedTemplateAst, ElementAst } from '@angular/compiler';
Expand Down Expand Up @@ -35,8 +35,7 @@ class TemplateToNgTemplateVisitor extends BasicTemplateAstVisitor {
let fix;
if (subtemplate.startsWith(TemplateStart)) {
const replacement = this.createReplacement(sp.start.offset, TemplateStart.length, '<ng-template');
fix = this.createFix(replacement);
this.addFailure(this.createFailure(sp.start.offset, sp.end.offset - sp.start.offset, ErrorMessage, fix));
this.addFailure(this.createFailure(sp.start.offset, sp.end.offset - sp.start.offset, ErrorMessage, replacement));
}

super.visitEmbeddedTemplate(element, ctx);
Expand Down Expand Up @@ -70,7 +69,7 @@ export class Rule extends Lint.Rules.AbstractRule {

public apply(sourceFile:ts.SourceFile): Lint.RuleFailure[] {
return this.applyWithWalker(
new Ng2Walker(sourceFile,
new NgWalker(sourceFile,
this.getOptions(), {
templateVisitorCtrl: TemplateToNgTemplateVisitor
}));
Expand Down
6 changes: 3 additions & 3 deletions src/templatesUsePublicRule.ts
Expand Up @@ -2,15 +2,15 @@ import * as Lint from 'tslint';
import * as ts from 'typescript';
import {stringDistance} from './util/utils';
import {getDeclaredProperties, getDeclaredMethods} from './util/classDeclarationUtils';
import {Ng2Walker} from './angular/ng2Walker';
import {NgWalker} from './angular/ngWalker';
import {RecursiveAngularExpressionVisitor} from './angular/templates/recursiveAngularExpressionVisitor';
import * as e from '@angular/compiler/src/expression_parser/ast';
import SyntaxKind = require('./util/syntaxKind');

enum DeclarationType {
Property,
Method
};
}

class SymbolAccessValidator extends RecursiveAngularExpressionVisitor {
visitPropertyRead(ast: e.PropertyRead, context: any): any {
Expand Down Expand Up @@ -88,7 +88,7 @@ export class Rule extends Lint.Rules.AbstractRule {

public apply(sourceFile:ts.SourceFile): Lint.RuleFailure[] {
return this.applyWithWalker(
new Ng2Walker(sourceFile,
new NgWalker(sourceFile,
this.getOptions(), {
expressionVisitorCtrl: SymbolAccessValidator
}));
Expand Down
2 changes: 1 addition & 1 deletion src/util/function.ts
Expand Up @@ -58,7 +58,7 @@ export class Maybe<T> {

unwrap(): T | undefined {
return this.t;
};
}

private constructor(private t: T | undefined) {
}
Expand Down

0 comments on commit 01bffd5

Please sign in to comment.