mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
30 lines
983 B
TypeScript
30 lines
983 B
TypeScript
import * as ts from 'typescript';
|
|
import * as Lint from 'tslint';
|
|
import * as tsutils from 'tsutils';
|
|
|
|
/**
|
|
* Rule that enforces that property setters are declared after getters.
|
|
*/
|
|
export class Rule extends Lint.Rules.AbstractRule {
|
|
apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
|
|
return this.applyWithWalker(new Walker(sourceFile, this.getOptions()));
|
|
}
|
|
}
|
|
|
|
class Walker extends Lint.RuleWalker {
|
|
visitGetAccessor(getter: ts.GetAccessorDeclaration) {
|
|
if (getter.parent && tsutils.isClassDeclaration(getter.parent)) {
|
|
const getterName = getter.name.getText();
|
|
const setter = getter.parent.members.find(member => {
|
|
return tsutils.isSetAccessorDeclaration(member) && member.name.getText() === getterName;
|
|
}) as ts.SetAccessorDeclaration | undefined;
|
|
|
|
if (setter && setter.pos < getter.pos) {
|
|
this.addFailureAtNode(setter, 'Setters must be declared after getters.');
|
|
}
|
|
}
|
|
|
|
super.visitGetAccessor(getter);
|
|
}
|
|
}
|