| /** |
| * @fileoverview Utility functions for React pragma configuration |
| * @author Yannick Croissant |
| */ |
| |
| 'use strict'; |
| |
| const JSX_ANNOTATION_REGEX = /^\*\s*@jsx\s+([^\s]+)/; |
| // Does not check for reserved keywords or unicode characters |
| const JS_IDENTIFIER_REGEX = /^[_$a-zA-Z][_$a-zA-Z0-9]*$/; |
| |
| |
| function getCreateClassFromContext(context) { |
| let pragma = 'createReactClass'; |
| // .eslintrc shared settings (http://eslint.org/docs/user-guide/configuring#adding-shared-settings) |
| if (context.settings.react && context.settings.react.createClass) { |
| pragma = context.settings.react.createClass; |
| } |
| if (!JS_IDENTIFIER_REGEX.test(pragma)) { |
| throw new Error(`createClass pragma ${pragma} is not a valid function name`); |
| } |
| return pragma; |
| } |
| |
| function getFragmentFromContext(context) { |
| let pragma = 'Fragment'; |
| // .eslintrc shared settings (http://eslint.org/docs/user-guide/configuring#adding-shared-settings) |
| if (context.settings.react && context.settings.react.fragment) { |
| pragma = context.settings.react.fragment; |
| } |
| if (!JS_IDENTIFIER_REGEX.test(pragma)) { |
| throw new Error(`Fragment pragma ${pragma} is not a valid identifier`); |
| } |
| return pragma; |
| } |
| |
| function getFromContext(context) { |
| let pragma = 'React'; |
| |
| const sourceCode = context.getSourceCode(); |
| const pragmaNode = sourceCode.getAllComments().find(node => JSX_ANNOTATION_REGEX.test(node.value)); |
| |
| if (pragmaNode) { |
| const matches = JSX_ANNOTATION_REGEX.exec(pragmaNode.value); |
| pragma = matches[1].split('.')[0]; |
| // .eslintrc shared settings (http://eslint.org/docs/user-guide/configuring#adding-shared-settings) |
| } else if (context.settings.react && context.settings.react.pragma) { |
| pragma = context.settings.react.pragma; |
| } |
| |
| if (!JS_IDENTIFIER_REGEX.test(pragma)) { |
| throw new Error(`React pragma ${pragma} is not a valid identifier`); |
| } |
| return pragma; |
| } |
| |
| module.exports = { |
| getCreateClassFromContext, |
| getFragmentFromContext, |
| getFromContext |
| }; |