diff options
Diffstat (limited to 'packages/tslint-config')
-rw-r--r-- | packages/tslint-config/CHANGELOG.md | 1 | ||||
-rw-r--r-- | packages/tslint-config/rules/underscorePrivatesRule.ts | 17 |
2 files changed, 6 insertions, 12 deletions
diff --git a/packages/tslint-config/CHANGELOG.md b/packages/tslint-config/CHANGELOG.md index 5364ae0ee..31f49eef6 100644 --- a/packages/tslint-config/CHANGELOG.md +++ b/packages/tslint-config/CHANGELOG.md @@ -3,6 +3,7 @@ v0.x.x - TBD ------------------------ * Added custom 'underscore-privates' rule, requiring underscores to be prepended to private variable names + * Because our tools can be used in both a TS and JS environment, we want to make the private methods of any public facing interface show up at the bottom of auto-complete lists. Additionally, we wanted to remain consistent with respect to our usage of underscores in order to enforce this rule with a linter rule, rather then manual code reviews. v0.3.0 - _December 20, 2017_ ------------------------ diff --git a/packages/tslint-config/rules/underscorePrivatesRule.ts b/packages/tslint-config/rules/underscorePrivatesRule.ts index d00f9696c..472ea09ff 100644 --- a/packages/tslint-config/rules/underscorePrivatesRule.ts +++ b/packages/tslint-config/rules/underscorePrivatesRule.ts @@ -1,7 +1,7 @@ import * as Lint from 'tslint'; import * as ts from 'typescript'; -const UNDERSCORE = '_'.charCodeAt(0); +const UNDERSCORE = '_'; type RelevantClassMember = | ts.MethodDeclaration @@ -9,15 +9,15 @@ type RelevantClassMember = | ts.GetAccessorDeclaration | ts.SetAccessorDeclaration; -// Based on: https://github.com/DanielRosenwasser/underscore-privates-tslint-rule +// Copied from: https://github.com/DanielRosenwasser/underscore-privates-tslint-rule +// The version on github is not published on npm export class Rule extends Lint.Rules.AbstractRule { - public static FAILURE_STRING = 'private members name must be prefixed with an underscore'; + public static FAILURE_STRING = 'private members must be prefixed with an underscore'; public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] { return this.applyWithFunction(sourceFile, walk); } } - function walk(ctx: Lint.WalkContext<void>): void { traverse(ctx.sourceFile); @@ -26,23 +26,19 @@ function walk(ctx: Lint.WalkContext<void>): void { return ts.forEachChild(node, traverse); } } - function checkNodeForViolations(ctx: Lint.WalkContext<void>, node: ts.Node): void { if (!isRelevantClassMember(node)) { return; } - // The declaration might have a computed property name or a numeric name. const name = node.name; if (!nameIsIdentifier(name)) { return; } - if (!nameStartsWithUnderscore(name.text) && memberIsPrivate(node)) { ctx.addFailureAtNode(name, Rule.FAILURE_STRING); } } - function isRelevantClassMember(node: ts.Node): node is RelevantClassMember { switch (node.kind) { case ts.SyntaxKind.MethodDeclaration: @@ -54,15 +50,12 @@ function isRelevantClassMember(node: ts.Node): node is RelevantClassMember { return false; } } - function nameStartsWithUnderscore(text: string) { - return text.charCodeAt(0) === UNDERSCORE; + return text.charCodeAt(0) === UNDERSCORE.charCodeAt(0); } - function memberIsPrivate(node: ts.Declaration) { return Lint.hasModifier(node.modifiers, ts.SyntaxKind.PrivateKeyword); } - function nameIsIdentifier(node: ts.Node): node is ts.Identifier { return node.kind === ts.SyntaxKind.Identifier; } |