| /** |
| * @fileoverview Prevent missing React when using JSX |
| * @author Glen Mailer |
| */ |
| |
| 'use strict'; |
| |
| const variableUtil = require('../util/variable'); |
| const pragmaUtil = require('../util/pragma'); |
| const docsUrl = require('../util/docsUrl'); |
| |
| // ----------------------------------------------------------------------------- |
| // Rule Definition |
| // ----------------------------------------------------------------------------- |
| |
| module.exports = { |
| meta: { |
| docs: { |
| description: 'Prevent missing React when using JSX', |
| category: 'Possible Errors', |
| recommended: true, |
| url: docsUrl('react-in-jsx-scope') |
| }, |
| schema: [] |
| }, |
| |
| create(context) { |
| const pragma = pragmaUtil.getFromContext(context); |
| const NOT_DEFINED_MESSAGE = '\'{{name}}\' must be in scope when using JSX'; |
| |
| function checkIfReactIsInScope(node) { |
| const variables = variableUtil.variablesInScope(context); |
| if (variableUtil.findVariable(variables, pragma)) { |
| return; |
| } |
| context.report({ |
| node, |
| message: NOT_DEFINED_MESSAGE, |
| data: { |
| name: pragma |
| } |
| }); |
| } |
| |
| return { |
| JSXOpeningElement: checkIfReactIsInScope, |
| JSXOpeningFragment: checkIfReactIsInScope |
| }; |
| } |
| }; |