diff --git a/src/rules/semicolonRule.ts b/src/rules/semicolonRule.ts index e6512c5e2ed..a15127fddcc 100644 --- a/src/rules/semicolonRule.ts +++ b/src/rules/semicolonRule.ts @@ -140,6 +140,13 @@ class SemicolonWalker extends Lint.RuleWalker { super.visitExportAssignment(node); } + public visitFunctionDeclaration(node: ts.FunctionDeclaration) { + if (!node.body) { + this.checkSemicolonAt(node); + } + super.visitFunctionDeclaration(node); + } + private checkSemicolonAt(node: ts.Node) { const sourceFile = this.getSourceFile(); const children = node.getChildren(sourceFile); diff --git a/test/rules/semicolon/always/test.ts.fix b/test/rules/semicolon/always/test.ts.fix index 9c4f33d90ff..ae2d2ac5002 100644 --- a/test/rules/semicolon/always/test.ts.fix +++ b/test/rules/semicolon/always/test.ts.fix @@ -30,6 +30,14 @@ debugger; import v = require("i"); module M { export var x; + export function f(s: string): string; + export function f(n: number): number; + export function f(x: any) { return x; } +} + +declare module "M" { + function f(): number; + function g(): number; } function useStrictMissingSemicolon() { diff --git a/test/rules/semicolon/always/test.ts.lint b/test/rules/semicolon/always/test.ts.lint index 8b933c82c4f..b57f932b4db 100644 --- a/test/rules/semicolon/always/test.ts.lint +++ b/test/rules/semicolon/always/test.ts.lint @@ -44,6 +44,16 @@ import v = require("i") module M { export var x ~nil [Missing semicolon] + export function f(s: string): string; + export function f(n: number): number + ~nil [Missing semicolon] + export function f(x: any) { return x; } +} + +declare module "M" { + function f(): number; + function g(): number + ~nil [Missing semicolon] } function useStrictMissingSemicolon() { diff --git a/test/rules/semicolon/enabled/test.ts.fix b/test/rules/semicolon/enabled/test.ts.fix index ec2189ca95e..39b546bc9a1 100644 --- a/test/rules/semicolon/enabled/test.ts.fix +++ b/test/rules/semicolon/enabled/test.ts.fix @@ -30,6 +30,14 @@ debugger; import v = require("i"); module M { export var x; + export function f(s: string): string; + export function f(n: number): number; + export function f(x: any) { return x; } +} + +declare module "M" { + function f(): number; + function g(): number; } function useStrictMissingSemicolon() { diff --git a/test/rules/semicolon/enabled/test.ts.lint b/test/rules/semicolon/enabled/test.ts.lint index 3b7c7f5df7b..c2e091b9a89 100644 --- a/test/rules/semicolon/enabled/test.ts.lint +++ b/test/rules/semicolon/enabled/test.ts.lint @@ -44,6 +44,16 @@ import v = require("i") module M { export var x ~nil [Missing semicolon] + export function f(s: string): string; + export function f(n: number): number + ~nil [Missing semicolon] + export function f(x: any) { return x; } +} + +declare module "M" { + function f(): number; + function g(): number + ~nil [Missing semicolon] } function useStrictMissingSemicolon() { diff --git a/test/rules/semicolon/ignore-interfaces/test.ts.fix b/test/rules/semicolon/ignore-interfaces/test.ts.fix index 9d28c5db66f..13621ebd8d1 100644 --- a/test/rules/semicolon/ignore-interfaces/test.ts.fix +++ b/test/rules/semicolon/ignore-interfaces/test.ts.fix @@ -30,6 +30,14 @@ debugger; import v = require("i"); module M { export var x; + export function f(s: string): string; + export function f(n: number): number; + export function f(x: any) { return x; } +} + +declare module "M" { + function f(): number; + function g(): number; } function useStrictMissingSemicolon() { diff --git a/test/rules/semicolon/ignore-interfaces/test.ts.lint b/test/rules/semicolon/ignore-interfaces/test.ts.lint index 1ee2a304971..511c934132c 100644 --- a/test/rules/semicolon/ignore-interfaces/test.ts.lint +++ b/test/rules/semicolon/ignore-interfaces/test.ts.lint @@ -44,6 +44,16 @@ import v = require("i") module M { export var x ~nil [Missing semicolon] + export function f(s: string): string; + export function f(n: number): number + ~nil [Missing semicolon] + export function f(x: any) { return x; } +} + +declare module "M" { + function f(): number; + function g(): number + ~nil [Missing semicolon] } function useStrictMissingSemicolon() { diff --git a/test/rules/semicolon/never/test.ts.fix b/test/rules/semicolon/never/test.ts.fix index 085b171bf39..7ceb5db6a28 100644 --- a/test/rules/semicolon/never/test.ts.fix +++ b/test/rules/semicolon/never/test.ts.fix @@ -30,6 +30,14 @@ debugger import v = require("i") module M { export var x + export function f(s: string): string + export function f(n: number): number + export function f(x: any) { return x } +} + +declare module "M" { + function f(): number + function g(): number } function useStrictUnnecessarySemicolon() { diff --git a/test/rules/semicolon/never/test.ts.lint b/test/rules/semicolon/never/test.ts.lint index 0cb9871f32e..2690012939f 100644 --- a/test/rules/semicolon/never/test.ts.lint +++ b/test/rules/semicolon/never/test.ts.lint @@ -44,6 +44,17 @@ import v = require("i"); module M { export var x; ~ [Unnecessary semicolon] + export function f(s: string): string; + ~ [Unnecessary semicolon] + export function f(n: number): number + export function f(x: any) { return x; } + ~ [Unnecessary semicolon] +} + +declare module "M" { + function f(): number; + ~ [Unnecessary semicolon] + function g(): number } function useStrictUnnecessarySemicolon() {