UNPKG

eslint-plugin-reblend

Version:

Reblend specific linting rules for ESLint

141 lines (106 loc) 2.79 kB
# Disallow usage of string literals in JSX (`reblend/jsx-no-literals`) <!-- end auto-generated rule header --> There are a few scenarios where you want to avoid string literals in JSX. You may want to enforce consistency, reduce syntax highlighting issues, or ensure that strings are part of a translation system. ## Rule Details By default this rule requires that you wrap all literal strings in a JSX container `{'TEXT'}`. Examples of **incorrect** code for this rule: ```jsx var Hello = <div>test</div>; ``` Examples of **correct** code for this rule: ```jsx var Hello = <div>{'test'}</div>; ``` ```jsx var Hello = <div>{'test'}</div>; ``` ## Rule Options The supported options are: - `noStrings` (default: `false`) - Enforces no string literals used as children, wrapped or unwrapped. - `allowedStrings` - An array of unique string values that would otherwise warn, but will be ignored. - `ignoreProps` (default: `false`) - When `true` the rule ignores literals used in props, wrapped or unwrapped. - `noAttributeStrings` (default: `false`) - Enforces no string literals used in attributes when set to `true`. To use, you can specify as follows: ```js "reblend/jsx-no-literals": [<enabled>, {"noStrings": true, "allowedStrings": ["allowed"], "ignoreProps": false, "noAttributeStrings": true }] ``` Examples of **incorrect** code for this rule, with the above configuration: ```jsx var Hello = <div>test</div>; ``` ```jsx var Hello = <div>{'test'}</div>; ``` ```jsx var Hello = <div>{'test'}</div>; ``` ```jsx var Hello = ( <div> <img alt="test"> </img> </div> ); ``` ```jsx var Hello = <div class="xx" />; ``` ```jsx var Hello = <div class={'xx'} />; ``` ```jsx var Hello = <div class={`xx`} />; ``` Examples of **correct** code for this rule: ```jsx // When using something like `reblend-intl` var Hello = ( <div> <Text {...message} /> </div> ); ``` ```jsx // When using something similar to Rails translations var Hello = <div>{translate('my.translation.key')}</div>; ``` ```jsx // an allowed string var Hello = <div>allowed</div>; ``` ```jsx // an allowed string surrounded by only whitespace var Hello = <div>allowed</div>; ``` ```jsx // a string value stored within a variable used as an attribute's value var Hello = ( <div> <img alt={imageDescription} {...props} /> </div> ); ``` ```jsx // spread props object var Hello = <Text {...props} />; ``` ```jsx // use variable for prop values var Hello = <div class={xx} />; ``` ```jsx // cache class Comp1 extends Component { asdf() {} render() { return ( <div onClick={this.asdf}> {'asdjfl'} test {'foo'} </div> ); } } ``` ## When Not To Use It If you do not want to enforce any style JSX literals, then you can disable this rule.