From eaedf6a9e9985bbeda1bbca3f815f1f3f1df4e83 Mon Sep 17 00:00:00 2001 From: Allen Bierbaum Date: Sat, 30 Apr 2016 18:28:30 -0500 Subject: [PATCH] no-inferrable-types: Add ignore-params flag This change allows using no-inferrable types at times when you may want to still require types for method/function parameter lists (for example when using the typedef rule) --- src/rules/noInferrableTypesRule.ts | 12 ++++++- .../{ => default}/test.ts.lint | 0 .../{ => default}/tslint.json | 0 .../ignore-params/test.ts.lint | 32 +++++++++++++++++++ .../ignore-params/tslint.json | 8 +++++ 5 files changed, 51 insertions(+), 1 deletion(-) rename test/rules/no-inferrable-types/{ => default}/test.ts.lint (100%) rename test/rules/no-inferrable-types/{ => default}/tslint.json (100%) create mode 100644 test/rules/no-inferrable-types/ignore-params/test.ts.lint create mode 100644 test/rules/no-inferrable-types/ignore-params/tslint.json diff --git a/src/rules/noInferrableTypesRule.ts b/src/rules/noInferrableTypesRule.ts index 98b8526e81d..638adfc821d 100644 --- a/src/rules/noInferrableTypesRule.ts +++ b/src/rules/noInferrableTypesRule.ts @@ -27,13 +27,23 @@ export class Rule extends Lint.Rules.AbstractRule { } class NoInferrableTypesWalker extends Lint.RuleWalker { + public ignoreParameters: boolean = false; + + constructor(sourceFile: ts.SourceFile, options: Lint.IOptions) { + super(sourceFile, options); + + this.ignoreParameters = (options.ruleArguments.indexOf("ignore-params") !== -1); + } + public visitVariableDeclaration(node: ts.VariableDeclaration) { this.checkDeclaration(node); super.visitVariableDeclaration(node); } public visitParameterDeclaration(node: ts.ParameterDeclaration) { - this.checkDeclaration(node); + if (!this.ignoreParameters) { + this.checkDeclaration(node); + } super.visitParameterDeclaration(node); } diff --git a/test/rules/no-inferrable-types/test.ts.lint b/test/rules/no-inferrable-types/default/test.ts.lint similarity index 100% rename from test/rules/no-inferrable-types/test.ts.lint rename to test/rules/no-inferrable-types/default/test.ts.lint diff --git a/test/rules/no-inferrable-types/tslint.json b/test/rules/no-inferrable-types/default/tslint.json similarity index 100% rename from test/rules/no-inferrable-types/tslint.json rename to test/rules/no-inferrable-types/default/tslint.json diff --git a/test/rules/no-inferrable-types/ignore-params/test.ts.lint b/test/rules/no-inferrable-types/ignore-params/test.ts.lint new file mode 100644 index 00000000000..8a57f8fdf69 --- /dev/null +++ b/test/rules/no-inferrable-types/ignore-params/test.ts.lint @@ -0,0 +1,32 @@ +// errors, inferrable type is declared +let x: number = 7; + ~~~~~~ [number] +let y: boolean = false; + ~~~~~~~ [boolean] +let z: string = "foo"; + ~~~~~~ [string] + +// not errors, we are skipping params +function foo (a: number = 5, b: boolean = true, c: string = "bah") { } + +class TestClass { + doSomething(a: number = 5, b: boolean = true, c: string = "bah") {} +} + +// not errors, inferrable type is not declared +let _x = 7; +let _y = false; +let _z = "foo"; + +// not error, type is not inferrable +let weird: any = 123; + +// not errors, inferrable type is not declared +function bar(a = 5, b = true, c = "bah") { } + +// not errors, types are not inferrable +function baz(a: any = 5, b: any = true, c: any = "bah") { } + +[number]: LHS type (number) inferred by RHS expression, remove type annotation +[boolean]: LHS type (boolean) inferred by RHS expression, remove type annotation +[string]: LHS type (string) inferred by RHS expression, remove type annotation diff --git a/test/rules/no-inferrable-types/ignore-params/tslint.json b/test/rules/no-inferrable-types/ignore-params/tslint.json new file mode 100644 index 00000000000..bad8056f990 --- /dev/null +++ b/test/rules/no-inferrable-types/ignore-params/tslint.json @@ -0,0 +1,8 @@ +{ + "rules": { + "no-inferrable-types": [ + true, + "ignore-params" + ] + } +}