From 5afeeab24ad013142f2431750f24e6085d0a6f3a Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Sun, 6 Sep 2020 11:08:16 -0700 Subject: [PATCH] fix(eslint-plugin): [no-use-before-define] false positive with jsx pragma reference (#2503) Fixes #2502 --- .../src/rules/no-use-before-define.ts | 2 +- .../tests/rules/no-use-before-define.test.ts | 53 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/no-use-before-define.ts b/packages/eslint-plugin/src/rules/no-use-before-define.ts index 08d12645d6a..1e26e4729f9 100644 --- a/packages/eslint-plugin/src/rules/no-use-before-define.ts +++ b/packages/eslint-plugin/src/rules/no-use-before-define.ts @@ -258,7 +258,7 @@ export default util.createRule({ reference.init || !variable || variable.identifiers.length === 0 || - (variable.identifiers[0].range[1] < reference.identifier.range[1] && + (variable.identifiers[0].range[1] <= reference.identifier.range[1] && !isInInitializer(variable, reference)) || !isForbidden(variable, reference) ) { diff --git a/packages/eslint-plugin/tests/rules/no-use-before-define.test.ts b/packages/eslint-plugin/tests/rules/no-use-before-define.test.ts index dd8e2e7271e..85dec218d11 100644 --- a/packages/eslint-plugin/tests/rules/no-use-before-define.test.ts +++ b/packages/eslint-plugin/tests/rules/no-use-before-define.test.ts @@ -290,6 +290,59 @@ enum Foo { `, options: [{ enums: false }], }, + // https://github.com/typescript-eslint/typescript-eslint/issues/2502 + { + code: ` +import * as React from 'react'; + +
; + `, + parserOptions: { + sourceType: 'module', + ecmaFeatures: { + jsx: true, + }, + }, + }, + { + code: ` +import React from 'react'; + +
; + `, + parserOptions: { + sourceType: 'module', + ecmaFeatures: { + jsx: true, + }, + }, + }, + { + code: ` +import { h } from 'preact'; + +
; + `, + parserOptions: { + sourceType: 'module', + jsxPragma: 'h', + ecmaFeatures: { + jsx: true, + }, + }, + }, + { + code: ` +const React = require('react'); + +
; + `, + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, ], invalid: [ {