aboutsummaryrefslogtreecommitdiffstats
path: root/packages/tslint-config
diff options
context:
space:
mode:
Diffstat (limited to 'packages/tslint-config')
-rw-r--r--packages/tslint-config/CHANGELOG.md1
-rw-r--r--packages/tslint-config/rules/underscorePrivatesRule.ts17
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;
}