From 4fb4f0ef287f535e3331c2e13eb7dccd4f076191 Mon Sep 17 00:00:00 2001 From: Toru Nagashima Date: Thu, 15 Nov 2018 07:21:01 +0900 Subject: [PATCH] Fix: wrong reference on TSQualifiedName (fixes #550) --- analyze-scope.js | 9 +++++++++ tests/lib/scope-analysis.js | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/analyze-scope.js b/analyze-scope.js index d090290..339091e 100644 --- a/analyze-scope.js +++ b/analyze-scope.js @@ -384,6 +384,15 @@ class Referencer extends OriginalReferencer { } } + /** + * Create reference objects for the object part. (This is `obj.prop`) + * @param {TSTypeQuery} node The TSTypeQuery node to visit. + * @returns {void} + */ + TSQualifiedName(node) { + this.visit(node.left); + } + /** * Create reference objects for the references in computed keys. * @param {TSPropertySignature} node The TSPropertySignature node to visit. diff --git a/tests/lib/scope-analysis.js b/tests/lib/scope-analysis.js index 6fb0f9a..f56714b 100644 --- a/tests/lib/scope-analysis.js +++ b/tests/lib/scope-analysis.js @@ -351,4 +351,23 @@ export default class ListModalStore { expect(messages).toStrictEqual([]); }); + + test("https://github.com/eslint/typescript-eslint-parser/issues/550", () => { + const code = ` +function test(file: Blob) { + const slice: typeof file.slice = + file.slice || (file as any).webkitSlice || (file as any).mozSlice + return slice +} +`; + const config = { + parser: "typescript-eslint-parser", + rules: { + "no-use-before-define": "error" + } + }; + const messages = linter.verify(code, config, { filename: "issue.ts" }); + + expect(messages).toStrictEqual([]); + }); });