eslint-plugin-formatjs 4.2.0 → 4.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +22 -0
- package/index.d.ts.map +1 -0
- package/index.js +38 -0
- package/package.json +3 -3
- package/rules/blocklist-elements.d.ts +4 -0
- package/rules/blocklist-elements.d.ts.map +1 -0
- package/rules/blocklist-elements.js +127 -0
- package/rules/enforce-default-message.d.ts +4 -0
- package/rules/enforce-default-message.d.ts.map +1 -0
- package/rules/enforce-default-message.js +57 -0
- package/rules/enforce-description.d.ts +4 -0
- package/rules/enforce-description.d.ts.map +1 -0
- package/rules/enforce-description.js +54 -0
- package/rules/enforce-id.d.ts +4 -0
- package/rules/enforce-id.d.ts.map +1 -0
- package/rules/enforce-id.js +125 -0
- package/rules/enforce-placeholders.d.ts +4 -0
- package/rules/enforce-placeholders.d.ts.map +1 -0
- package/rules/enforce-placeholders.js +118 -0
- package/rules/enforce-plural-rules.d.ts +4 -0
- package/rules/enforce-plural-rules.d.ts.map +1 -0
- package/rules/enforce-plural-rules.js +104 -0
- package/rules/no-camel-case.d.ts +4 -0
- package/rules/no-camel-case.d.ts.map +1 -0
- package/rules/no-camel-case.js +77 -0
- package/rules/no-complex-selectors.d.ts +4 -0
- package/rules/no-complex-selectors.d.ts.map +1 -0
- package/rules/no-complex-selectors.js +99 -0
- package/rules/no-emoji.d.ts +4 -0
- package/rules/no-emoji.d.ts.map +1 -0
- package/rules/no-emoji.js +47 -0
- package/rules/no-id.d.ts +4 -0
- package/rules/no-id.d.ts.map +1 -0
- package/rules/no-id.js +52 -0
- package/rules/no-invalid-icu.d.ts +4 -0
- package/rules/no-invalid-icu.d.ts.map +1 -0
- package/rules/no-invalid-icu.js +54 -0
- package/rules/no-literal-string-in-jsx.d.ts +4 -0
- package/rules/no-literal-string-in-jsx.d.ts.map +1 -0
- package/rules/no-literal-string-in-jsx.js +166 -0
- package/rules/no-multiple-plurals.d.ts +4 -0
- package/rules/no-multiple-plurals.d.ts.map +1 -0
- package/rules/no-multiple-plurals.js +71 -0
- package/rules/no-multiple-whitespaces.d.ts +4 -0
- package/rules/no-multiple-whitespaces.d.ts.map +1 -0
- package/rules/no-multiple-whitespaces.js +146 -0
- package/rules/no-offset.d.ts +4 -0
- package/rules/no-offset.d.ts.map +1 -0
- package/rules/no-offset.js +70 -0
- package/util.d.ts +24 -0
- package/util.d.ts.map +1 -0
- package/util.js +240 -0
- package/BUILD +0 -89
- package/CHANGELOG.md +0 -892
- package/index.ts +0 -38
- package/rules/blocklist-elements.ts +0 -159
- package/rules/enforce-default-message.ts +0 -71
- package/rules/enforce-description.ts +0 -68
- package/rules/enforce-id.ts +0 -171
- package/rules/enforce-placeholders.ts +0 -161
- package/rules/enforce-plural-rules.ts +0 -134
- package/rules/no-camel-case.ts +0 -97
- package/rules/no-complex-selectors.ts +0 -125
- package/rules/no-emoji.ts +0 -60
- package/rules/no-id.ts +0 -63
- package/rules/no-invalid-icu.ts +0 -69
- package/rules/no-literal-string-in-jsx.ts +0 -213
- package/rules/no-multiple-plurals.ts +0 -89
- package/rules/no-multiple-whitespaces.ts +0 -194
- package/rules/no-offset.ts +0 -88
- package/tests/blocklist-elements.test.ts +0 -120
- package/tests/enforce-default-message.test.ts +0 -260
- package/tests/enforce-description.test.ts +0 -117
- package/tests/enforce-id.test.ts +0 -209
- package/tests/enforce-placeholders.test.ts +0 -170
- package/tests/enforce-plural-rules.test.ts +0 -86
- package/tests/fixtures.ts +0 -15
- package/tests/no-camel-case.test.ts +0 -31
- package/tests/no-complex-selectors.test.ts +0 -125
- package/tests/no-id.test.ts +0 -151
- package/tests/no-invalid-icu.test.ts +0 -106
- package/tests/no-literal-string-in-jsx.test.ts +0 -213
- package/tests/no-multiple-plurals.test.ts +0 -42
- package/tests/no-multiple-whitespaces.test.ts +0 -100
- package/tests/no-offset.test.ts +0 -41
- package/tests/util.ts +0 -26
- package/tsconfig.json +0 -5
- package/util.ts +0 -307
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import enforcePlaceholders from '../rules/enforce-placeholders'
|
|
2
|
-
import {ruleTester} from './util'
|
|
3
|
-
import {dynamicMessage, noMatch, spreadJsx, emptyFnCall} from './fixtures'
|
|
4
|
-
ruleTester.run('enforce-placeholders', enforcePlaceholders, {
|
|
5
|
-
valid: [
|
|
6
|
-
`intl.formatMessage({
|
|
7
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
8
|
-
description: 'asd'
|
|
9
|
-
}, {count: 1})`,
|
|
10
|
-
`intl.formatMessage({
|
|
11
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
12
|
-
description: 'asd'
|
|
13
|
-
}, {'count': 1})`,
|
|
14
|
-
`import {FormattedMessage} from 'react-intl'
|
|
15
|
-
const a = <FormattedMessage
|
|
16
|
-
defaultMessage="{count, plural, one {#} other {# more}}"
|
|
17
|
-
values={{ count: 1}} />
|
|
18
|
-
`,
|
|
19
|
-
`import {FormattedMessage} from 'react-intl'
|
|
20
|
-
const a = <FormattedMessage
|
|
21
|
-
defaultMessage="{count, plural, one {#} other {# more}} {bar}"
|
|
22
|
-
values={{ 'count': 1, bar: 2}} />
|
|
23
|
-
`,
|
|
24
|
-
`import {defineMessages, _} from 'react-intl'
|
|
25
|
-
defineMessages({
|
|
26
|
-
foo: {
|
|
27
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
28
|
-
description: 'asd'
|
|
29
|
-
}
|
|
30
|
-
})
|
|
31
|
-
defineMessage({
|
|
32
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
33
|
-
description: 'asd'
|
|
34
|
-
})
|
|
35
|
-
`,
|
|
36
|
-
`
|
|
37
|
-
intl.formatMessage({
|
|
38
|
-
defaultMessage: '{count, plural, one {<a>#</a>} other {# more}}',
|
|
39
|
-
description: 'asd'
|
|
40
|
-
}, {
|
|
41
|
-
count: 1,
|
|
42
|
-
a: (...chunks) => <a>{chunks}</a>
|
|
43
|
-
})
|
|
44
|
-
`,
|
|
45
|
-
`
|
|
46
|
-
intl.formatMessage({
|
|
47
|
-
defaultMessage: '{count, plural, one {<a>#</a>} other {# more}}',
|
|
48
|
-
description: 'asd'
|
|
49
|
-
}, {
|
|
50
|
-
...foo,
|
|
51
|
-
count: 1,
|
|
52
|
-
a: (...chunks) => <a>{chunks}</a>
|
|
53
|
-
})
|
|
54
|
-
`,
|
|
55
|
-
dynamicMessage,
|
|
56
|
-
noMatch,
|
|
57
|
-
spreadJsx,
|
|
58
|
-
emptyFnCall,
|
|
59
|
-
{
|
|
60
|
-
code: `
|
|
61
|
-
intl.formatMessage({
|
|
62
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
63
|
-
description: 'asd'
|
|
64
|
-
})`,
|
|
65
|
-
options: [{ignoreList: ['count']}],
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
code: `
|
|
69
|
-
intl.formatMessage({
|
|
70
|
-
defaultMessage: '<b>foo</b>',
|
|
71
|
-
description: 'asd'
|
|
72
|
-
})`,
|
|
73
|
-
options: [{ignoreList: ['b']}],
|
|
74
|
-
},
|
|
75
|
-
],
|
|
76
|
-
invalid: [
|
|
77
|
-
{
|
|
78
|
-
code: `
|
|
79
|
-
intl.formatMessage({
|
|
80
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
81
|
-
description: 'asd'
|
|
82
|
-
})`,
|
|
83
|
-
errors: [
|
|
84
|
-
{
|
|
85
|
-
message: 'Missing value for placeholder "count"',
|
|
86
|
-
},
|
|
87
|
-
],
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
code: `
|
|
91
|
-
intl.formatMessage({
|
|
92
|
-
defaultMessage: '<b>foo</b>',
|
|
93
|
-
description: 'asd'
|
|
94
|
-
})`,
|
|
95
|
-
errors: [{message: 'Missing value for placeholder "b"'}],
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
code: `
|
|
99
|
-
intl.formatMessage({
|
|
100
|
-
defaultMessage: '{aDifferentKey, plural, one {#} other {# more}}',
|
|
101
|
-
description: 'asd'
|
|
102
|
-
}, {foo: 1})`,
|
|
103
|
-
errors: [
|
|
104
|
-
{
|
|
105
|
-
message: 'Missing value for placeholder "aDifferentKey"',
|
|
106
|
-
},
|
|
107
|
-
],
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
code: `
|
|
111
|
-
import {FormattedMessage} from 'react-intl'
|
|
112
|
-
const a = <FormattedMessage
|
|
113
|
-
defaultMessage="{count, plural, one {#} other {# more}}"
|
|
114
|
-
/>`,
|
|
115
|
-
errors: [
|
|
116
|
-
{
|
|
117
|
-
message: 'Missing value for placeholder "count"',
|
|
118
|
-
},
|
|
119
|
-
],
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
code: `
|
|
123
|
-
import {FormattedMessage} from 'react-intl'
|
|
124
|
-
const a = <FormattedMessage
|
|
125
|
-
defaultMessage="{count, plural, one {#} other {# more}}"
|
|
126
|
-
values={{foo: 1}}
|
|
127
|
-
/>`,
|
|
128
|
-
errors: [
|
|
129
|
-
{
|
|
130
|
-
message: 'Missing value for placeholder "count"',
|
|
131
|
-
},
|
|
132
|
-
],
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
code: `
|
|
136
|
-
import {FormattedMessage} from 'react-intl'
|
|
137
|
-
const a = <FormattedMessage id="myMessage" defaultMessage="Hello {name}" values={{ notName: "Denis" }} />`,
|
|
138
|
-
errors: [
|
|
139
|
-
{
|
|
140
|
-
message: 'Missing value for placeholder "name"',
|
|
141
|
-
},
|
|
142
|
-
],
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
code: `
|
|
146
|
-
import {FormattedMessage} from 'react-intl'
|
|
147
|
-
const a = <FormattedMessage defaultMessage="Hello <bold>{name}</bold>" values={{ bold: (msg) => <strong>{msg}</strong> }} />`,
|
|
148
|
-
errors: [
|
|
149
|
-
{
|
|
150
|
-
message: 'Missing value for placeholder "name"',
|
|
151
|
-
},
|
|
152
|
-
],
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
code: `
|
|
156
|
-
intl.formatMessage({
|
|
157
|
-
defaultMessage: '{count, plural, one {<a>#</a>} other {# more}}',
|
|
158
|
-
description: 'asd'
|
|
159
|
-
}, {
|
|
160
|
-
count: 1,
|
|
161
|
-
})
|
|
162
|
-
`,
|
|
163
|
-
errors: [
|
|
164
|
-
{
|
|
165
|
-
message: 'Missing value for placeholder "a"',
|
|
166
|
-
},
|
|
167
|
-
],
|
|
168
|
-
},
|
|
169
|
-
],
|
|
170
|
-
})
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import enforcePluralRules from '../rules/enforce-plural-rules'
|
|
2
|
-
import {ruleTester} from './util'
|
|
3
|
-
import {dynamicMessage, noMatch, spreadJsx, emptyFnCall} from './fixtures'
|
|
4
|
-
ruleTester.run('enforce-plural-rules', enforcePluralRules, {
|
|
5
|
-
valid: [
|
|
6
|
-
{
|
|
7
|
-
code: `import {defineMessage} from 'react-intl'
|
|
8
|
-
defineMessage({
|
|
9
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
10
|
-
description: 'asd'
|
|
11
|
-
})`,
|
|
12
|
-
options: [
|
|
13
|
-
{
|
|
14
|
-
one: true,
|
|
15
|
-
},
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
code: `import {defineMessage} from 'react-intl'
|
|
20
|
-
defineMessage({
|
|
21
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
22
|
-
description: 'asd'
|
|
23
|
-
})`,
|
|
24
|
-
options: [
|
|
25
|
-
{
|
|
26
|
-
other: true,
|
|
27
|
-
},
|
|
28
|
-
],
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
code: `import {defineMessage} from 'react-intl'
|
|
32
|
-
defineMessage({
|
|
33
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
34
|
-
description: 'asd'
|
|
35
|
-
})`,
|
|
36
|
-
options: [
|
|
37
|
-
{
|
|
38
|
-
one: true,
|
|
39
|
-
other: true,
|
|
40
|
-
zero: false,
|
|
41
|
-
},
|
|
42
|
-
],
|
|
43
|
-
},
|
|
44
|
-
dynamicMessage,
|
|
45
|
-
noMatch,
|
|
46
|
-
spreadJsx,
|
|
47
|
-
emptyFnCall,
|
|
48
|
-
],
|
|
49
|
-
invalid: [
|
|
50
|
-
{
|
|
51
|
-
code: `
|
|
52
|
-
import {defineMessage} from 'react-intl'
|
|
53
|
-
defineMessage({
|
|
54
|
-
defaultMessage: '{count, plural, one {#} other {# more}}'
|
|
55
|
-
})`,
|
|
56
|
-
options: [
|
|
57
|
-
{
|
|
58
|
-
one: false,
|
|
59
|
-
},
|
|
60
|
-
],
|
|
61
|
-
errors: [
|
|
62
|
-
{
|
|
63
|
-
message: 'Plural rule "one" is forbidden',
|
|
64
|
-
},
|
|
65
|
-
],
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
code: `
|
|
69
|
-
import {defineMessage} from 'react-intl'
|
|
70
|
-
defineMessage({
|
|
71
|
-
defaultMessage: '{count, plural, one {#} other{other}}'
|
|
72
|
-
})`,
|
|
73
|
-
options: [
|
|
74
|
-
{
|
|
75
|
-
one: true,
|
|
76
|
-
two: true,
|
|
77
|
-
},
|
|
78
|
-
],
|
|
79
|
-
errors: [
|
|
80
|
-
{
|
|
81
|
-
message: 'Missing plural rule "two"',
|
|
82
|
-
},
|
|
83
|
-
],
|
|
84
|
-
},
|
|
85
|
-
],
|
|
86
|
-
})
|
package/tests/fixtures.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export const noMatch = `_()`
|
|
2
|
-
export const emptyFnCall = `
|
|
3
|
-
import {defineMessage} from 'react-intl'
|
|
4
|
-
_()`
|
|
5
|
-
export const spreadJsx = `
|
|
6
|
-
import {FormattedMessage} from 'react-intl'
|
|
7
|
-
function foo (props) {
|
|
8
|
-
return (
|
|
9
|
-
<FormattedMessage {...props} />
|
|
10
|
-
)
|
|
11
|
-
}
|
|
12
|
-
`
|
|
13
|
-
export const dynamicMessage = `
|
|
14
|
-
import {defineMessage} from 'react-intl'
|
|
15
|
-
defineMessage({id, defaultMessage, description})`
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import {ruleTester} from './util'
|
|
2
|
-
import noCamelCase from '../rules/no-camel-case'
|
|
3
|
-
import {dynamicMessage, noMatch, spreadJsx, emptyFnCall} from './fixtures'
|
|
4
|
-
|
|
5
|
-
ruleTester.run('no-camel-case', noCamelCase, {
|
|
6
|
-
valid: [
|
|
7
|
-
`import {defineMessage} from 'react-intl'
|
|
8
|
-
defineMessage({
|
|
9
|
-
defaultMessage: 'a {placeholder}',
|
|
10
|
-
description: 'asd'
|
|
11
|
-
})`,
|
|
12
|
-
dynamicMessage,
|
|
13
|
-
noMatch,
|
|
14
|
-
spreadJsx,
|
|
15
|
-
emptyFnCall,
|
|
16
|
-
],
|
|
17
|
-
invalid: [
|
|
18
|
-
{
|
|
19
|
-
code: `
|
|
20
|
-
import {defineMessage} from 'react-intl'
|
|
21
|
-
defineMessage({
|
|
22
|
-
defaultMessage: 'a {placeHolder}'
|
|
23
|
-
})`,
|
|
24
|
-
errors: [
|
|
25
|
-
{
|
|
26
|
-
message: 'Camel case arguments are not allowed',
|
|
27
|
-
},
|
|
28
|
-
],
|
|
29
|
-
},
|
|
30
|
-
],
|
|
31
|
-
})
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import noComplexSelectors from '../rules/no-complex-selectors'
|
|
2
|
-
import {ruleTester} from './util'
|
|
3
|
-
import {dynamicMessage, noMatch, spreadJsx, emptyFnCall} from './fixtures'
|
|
4
|
-
ruleTester.run('no-complex-selectors', noComplexSelectors, {
|
|
5
|
-
valid: [
|
|
6
|
-
`import {defineMessage} from 'react-intl'
|
|
7
|
-
defineMessage({
|
|
8
|
-
defaultMessage: 'a {placeholder}',
|
|
9
|
-
description: 'asd'
|
|
10
|
-
})`,
|
|
11
|
-
dynamicMessage,
|
|
12
|
-
noMatch,
|
|
13
|
-
spreadJsx,
|
|
14
|
-
emptyFnCall,
|
|
15
|
-
{
|
|
16
|
-
code: `
|
|
17
|
-
import {defineMessage} from 'react-intl'
|
|
18
|
-
defineMessage({
|
|
19
|
-
defaultMessage: '{p1, plural, one{one} other{other}}'
|
|
20
|
-
})`,
|
|
21
|
-
options: [
|
|
22
|
-
{
|
|
23
|
-
limit: 2,
|
|
24
|
-
},
|
|
25
|
-
],
|
|
26
|
-
},
|
|
27
|
-
],
|
|
28
|
-
invalid: [
|
|
29
|
-
// Syntax error
|
|
30
|
-
{
|
|
31
|
-
code: `
|
|
32
|
-
import {defineMessage} from 'react-intl'
|
|
33
|
-
defineMessage({
|
|
34
|
-
defaultMessage: '{'
|
|
35
|
-
})
|
|
36
|
-
`,
|
|
37
|
-
options: [{limit: 1}],
|
|
38
|
-
errors: [{message: 'EXPECT_ARGUMENT_CLOSING_BRACE'}],
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
code: `
|
|
42
|
-
import {defineMessage} from 'react-intl'
|
|
43
|
-
defineMessage({
|
|
44
|
-
defaultMessage: '{p1, plural, one{one} other{other}} {p2, plural, one{two} other{other}}'
|
|
45
|
-
})`,
|
|
46
|
-
options: [
|
|
47
|
-
{
|
|
48
|
-
limit: 1,
|
|
49
|
-
},
|
|
50
|
-
],
|
|
51
|
-
errors: [
|
|
52
|
-
{
|
|
53
|
-
message: 'Message complexity is too high (4 vs limit at 1)',
|
|
54
|
-
},
|
|
55
|
-
],
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
code: `
|
|
59
|
-
import {defineMessage} from 'react-intl'
|
|
60
|
-
defineMessage({
|
|
61
|
-
defaultMessage: \`I have {count, plural,
|
|
62
|
-
one{a {
|
|
63
|
-
gender, select,
|
|
64
|
-
male{male}
|
|
65
|
-
female{female}
|
|
66
|
-
other{other}
|
|
67
|
-
} <b>dog</b>
|
|
68
|
-
}
|
|
69
|
-
other{many dogs}} and {count, plural,
|
|
70
|
-
one{a {
|
|
71
|
-
gender, select,
|
|
72
|
-
male{male}
|
|
73
|
-
female{female}
|
|
74
|
-
other{other}
|
|
75
|
-
} <strong>cat</strong>
|
|
76
|
-
}
|
|
77
|
-
other{many cats}}\`
|
|
78
|
-
})`,
|
|
79
|
-
options: [
|
|
80
|
-
{
|
|
81
|
-
limit: 3,
|
|
82
|
-
},
|
|
83
|
-
],
|
|
84
|
-
errors: [
|
|
85
|
-
{
|
|
86
|
-
message: 'Message complexity is too high (16 vs limit at 3)',
|
|
87
|
-
},
|
|
88
|
-
],
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
code: `
|
|
92
|
-
import {defineMessage} from 'react-intl'
|
|
93
|
-
defineMessage({
|
|
94
|
-
defaultMessage: '{p1, plural, one{{p2, plural, one{two} other{other}}} other{other}}'
|
|
95
|
-
})`,
|
|
96
|
-
options: [
|
|
97
|
-
{
|
|
98
|
-
limit: 1,
|
|
99
|
-
},
|
|
100
|
-
],
|
|
101
|
-
errors: [
|
|
102
|
-
{
|
|
103
|
-
message: 'Message complexity is too high (3 vs limit at 1)',
|
|
104
|
-
},
|
|
105
|
-
],
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
code: `
|
|
109
|
-
import {defineMessage} from 'react-intl'
|
|
110
|
-
defineMessage({
|
|
111
|
-
defaultMessage: '{p1, plural, one{one {foo, select, bar{two} baz{three} other{other}}} other{other}}'
|
|
112
|
-
})`,
|
|
113
|
-
options: [
|
|
114
|
-
{
|
|
115
|
-
limit: 1,
|
|
116
|
-
},
|
|
117
|
-
],
|
|
118
|
-
errors: [
|
|
119
|
-
{
|
|
120
|
-
message: 'Message complexity is too high (4 vs limit at 1)',
|
|
121
|
-
},
|
|
122
|
-
],
|
|
123
|
-
},
|
|
124
|
-
],
|
|
125
|
-
})
|
package/tests/no-id.test.ts
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import noId from '../rules/no-id'
|
|
2
|
-
import {ruleTester} from './util'
|
|
3
|
-
import {dynamicMessage, noMatch, spreadJsx, emptyFnCall} from './fixtures'
|
|
4
|
-
ruleTester.run('no-id', noId, {
|
|
5
|
-
valid: [
|
|
6
|
-
`intl.formatMessage({
|
|
7
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
8
|
-
description: 'asd'
|
|
9
|
-
}, {count: 1})`,
|
|
10
|
-
`intl.formatMessage({
|
|
11
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
12
|
-
description: 'asd'
|
|
13
|
-
}, {'count': 1})`,
|
|
14
|
-
`import {FormattedMessage} from 'react-intl'
|
|
15
|
-
const a = <FormattedMessage
|
|
16
|
-
defaultMessage="{count, plural, one {#} other {# more}}"
|
|
17
|
-
values={{ count: 1}} />
|
|
18
|
-
`,
|
|
19
|
-
`import {FormattedMessage} from 'react-intl'
|
|
20
|
-
const a = <FormattedMessage
|
|
21
|
-
defaultMessage="{count, plural, one {#} other {# more}} {bar}"
|
|
22
|
-
values={{ 'count': 1, bar: 2}} />
|
|
23
|
-
`,
|
|
24
|
-
`import {defineMessages, _} from 'react-intl'
|
|
25
|
-
defineMessages({
|
|
26
|
-
foo: {
|
|
27
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
28
|
-
description: 'asd'
|
|
29
|
-
}
|
|
30
|
-
})
|
|
31
|
-
defineMessage({
|
|
32
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
33
|
-
description: 'asd'
|
|
34
|
-
})
|
|
35
|
-
`,
|
|
36
|
-
`
|
|
37
|
-
intl.formatMessage({
|
|
38
|
-
defaultMessage: '{count, plural, one {<a>#</a>} other {# more}}',
|
|
39
|
-
description: 'asd'
|
|
40
|
-
}, {
|
|
41
|
-
count: 1,
|
|
42
|
-
a: (...chunks) => <a>{chunks}</a>
|
|
43
|
-
})
|
|
44
|
-
`,
|
|
45
|
-
`
|
|
46
|
-
intl.formatMessage({
|
|
47
|
-
defaultMessage: '{count, plural, one {<a>#</a>} other {# more}}',
|
|
48
|
-
description: 'asd'
|
|
49
|
-
}, {
|
|
50
|
-
...foo,
|
|
51
|
-
count: 1,
|
|
52
|
-
a: (...chunks) => <a>{chunks}</a>
|
|
53
|
-
})
|
|
54
|
-
`,
|
|
55
|
-
noMatch,
|
|
56
|
-
spreadJsx,
|
|
57
|
-
emptyFnCall,
|
|
58
|
-
],
|
|
59
|
-
invalid: [
|
|
60
|
-
{
|
|
61
|
-
code: dynamicMessage,
|
|
62
|
-
errors: [
|
|
63
|
-
{
|
|
64
|
-
message: 'Manual `id` are not allowed in message descriptor',
|
|
65
|
-
},
|
|
66
|
-
],
|
|
67
|
-
output: `
|
|
68
|
-
import {defineMessage} from 'react-intl'
|
|
69
|
-
defineMessage({ defaultMessage, description})`,
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
code: `
|
|
73
|
-
intl.formatMessage({ id: 'foo', defaultMessage: '{count, plural, one {#} other {# more}}', description: 'asd'
|
|
74
|
-
})`,
|
|
75
|
-
errors: [
|
|
76
|
-
{
|
|
77
|
-
message: 'Manual `id` are not allowed in message descriptor',
|
|
78
|
-
},
|
|
79
|
-
],
|
|
80
|
-
output: `
|
|
81
|
-
intl.formatMessage({ defaultMessage: '{count, plural, one {#} other {# more}}', description: 'asd'
|
|
82
|
-
})`,
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
code: `
|
|
86
|
-
intl.formatMessage({ id: 'bar', defaultMessage: '{aDifferentKey, plural, one {#} other {# more}}', description: 'asd'
|
|
87
|
-
}, {foo: 1})`,
|
|
88
|
-
errors: [
|
|
89
|
-
{
|
|
90
|
-
message: 'Manual `id` are not allowed in message descriptor',
|
|
91
|
-
},
|
|
92
|
-
],
|
|
93
|
-
output: `
|
|
94
|
-
intl.formatMessage({ defaultMessage: '{aDifferentKey, plural, one {#} other {# more}}', description: 'asd'
|
|
95
|
-
}, {foo: 1})`,
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
code: `
|
|
99
|
-
import {FormattedMessage} from 'react-intl'
|
|
100
|
-
const a = <FormattedMessage
|
|
101
|
-
id={id}
|
|
102
|
-
defaultMessage="{count, plural, one {#} other {# more}}"
|
|
103
|
-
/>`,
|
|
104
|
-
errors: [
|
|
105
|
-
{
|
|
106
|
-
message: 'Manual `id` are not allowed in message descriptor',
|
|
107
|
-
},
|
|
108
|
-
],
|
|
109
|
-
output: `
|
|
110
|
-
import {FormattedMessage} from 'react-intl'
|
|
111
|
-
const a = <FormattedMessage
|
|
112
|
-
|
|
113
|
-
defaultMessage="{count, plural, one {#} other {# more}}"
|
|
114
|
-
/>`,
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
code: `
|
|
118
|
-
import {FormattedMessage} from 'react-intl'
|
|
119
|
-
const a = (
|
|
120
|
-
<FormattedMessage id="bas" defaultMessage="{count, plural, one {#} other {# more}}" values={{foo: 1}} />
|
|
121
|
-
)`,
|
|
122
|
-
errors: [
|
|
123
|
-
{
|
|
124
|
-
message: 'Manual `id` are not allowed in message descriptor',
|
|
125
|
-
},
|
|
126
|
-
],
|
|
127
|
-
output: `
|
|
128
|
-
import {FormattedMessage} from 'react-intl'
|
|
129
|
-
const a = (
|
|
130
|
-
<FormattedMessage defaultMessage="{count, plural, one {#} other {# more}}" values={{foo: 1}} />
|
|
131
|
-
)`,
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
code: `
|
|
135
|
-
intl.formatMessage({ id, defaultMessage: '{count, plural, one {<a>#</a>} other {# more}}', description: 'asd'
|
|
136
|
-
}, {
|
|
137
|
-
count: 1,
|
|
138
|
-
})`,
|
|
139
|
-
errors: [
|
|
140
|
-
{
|
|
141
|
-
message: 'Manual `id` are not allowed in message descriptor',
|
|
142
|
-
},
|
|
143
|
-
],
|
|
144
|
-
output: `
|
|
145
|
-
intl.formatMessage({ defaultMessage: '{count, plural, one {<a>#</a>} other {# more}}', description: 'asd'
|
|
146
|
-
}, {
|
|
147
|
-
count: 1,
|
|
148
|
-
})`,
|
|
149
|
-
},
|
|
150
|
-
],
|
|
151
|
-
})
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import noMalformedICU from '../rules/no-invalid-icu'
|
|
2
|
-
import {ruleTester} from './util'
|
|
3
|
-
import {dynamicMessage, noMatch, spreadJsx, emptyFnCall} from './fixtures'
|
|
4
|
-
|
|
5
|
-
ruleTester.run('no-invalid-icu', noMalformedICU, {
|
|
6
|
-
valid: [
|
|
7
|
-
`intl.formatMessage({
|
|
8
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
9
|
-
description: 'asd'
|
|
10
|
-
}, {count: 1})`,
|
|
11
|
-
`intl.formatMessage({
|
|
12
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
13
|
-
description: 'asd'
|
|
14
|
-
}, {'count': 1})`,
|
|
15
|
-
`import {FormattedMessage} from 'react-intl'
|
|
16
|
-
const a = <FormattedMessage
|
|
17
|
-
defaultMessage="{count, plural, one {#} other {# more}}"
|
|
18
|
-
values={{ count: 1}} />
|
|
19
|
-
`,
|
|
20
|
-
`import {FormattedMessage} from 'react-intl'
|
|
21
|
-
const a = <FormattedMessage
|
|
22
|
-
defaultMessage="{count, plural, one {#} other {# more}} {bar}"
|
|
23
|
-
values={{ 'count': 1, bar: 2}} />
|
|
24
|
-
`,
|
|
25
|
-
`import {defineMessages, _} from 'react-intl'
|
|
26
|
-
defineMessages({
|
|
27
|
-
foo: {
|
|
28
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
29
|
-
description: 'asd'
|
|
30
|
-
}
|
|
31
|
-
})
|
|
32
|
-
defineMessage({
|
|
33
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
34
|
-
description: 'asd'
|
|
35
|
-
})
|
|
36
|
-
`,
|
|
37
|
-
`
|
|
38
|
-
intl.formatMessage({
|
|
39
|
-
defaultMessage: '{count, plural, one {<a>#</a>} other {# more}}',
|
|
40
|
-
description: 'asd'
|
|
41
|
-
}, {
|
|
42
|
-
count: 1,
|
|
43
|
-
a: (...chunks) => <a>{chunks}</a>
|
|
44
|
-
})
|
|
45
|
-
`,
|
|
46
|
-
`
|
|
47
|
-
intl.formatMessage({
|
|
48
|
-
defaultMessage: '{count, plural, one {<a>#</a>} other {# more}}',
|
|
49
|
-
description: 'asd'
|
|
50
|
-
}, {
|
|
51
|
-
...foo,
|
|
52
|
-
count: 1,
|
|
53
|
-
a: (...chunks) => <a>{chunks}</a>
|
|
54
|
-
})
|
|
55
|
-
`,
|
|
56
|
-
dynamicMessage,
|
|
57
|
-
noMatch,
|
|
58
|
-
spreadJsx,
|
|
59
|
-
emptyFnCall,
|
|
60
|
-
{
|
|
61
|
-
code: `
|
|
62
|
-
intl.formatMessage({
|
|
63
|
-
defaultMessage: '{count, plural, one {#} other {# more}}',
|
|
64
|
-
description: 'asd'
|
|
65
|
-
})`,
|
|
66
|
-
options: [{ignoreList: ['count']}],
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
code: `
|
|
70
|
-
intl.formatMessage({
|
|
71
|
-
defaultMessage: '<b>foo</b>',
|
|
72
|
-
description: 'asd'
|
|
73
|
-
})`,
|
|
74
|
-
options: [{ignoreList: ['b']}],
|
|
75
|
-
},
|
|
76
|
-
],
|
|
77
|
-
invalid: [
|
|
78
|
-
{
|
|
79
|
-
code: `
|
|
80
|
-
intl.formatMessage({
|
|
81
|
-
defaultMessage: '{count, plural, {#} other {# more}}',
|
|
82
|
-
description: 'asd'
|
|
83
|
-
}, {
|
|
84
|
-
count: 1
|
|
85
|
-
})`,
|
|
86
|
-
errors: [
|
|
87
|
-
{
|
|
88
|
-
message: 'Error parsing ICU string: EXPECT_PLURAL_ARGUMENT_SELECTOR',
|
|
89
|
-
},
|
|
90
|
-
],
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
{
|
|
94
|
-
code: `
|
|
95
|
-
intl.formatMessage({
|
|
96
|
-
defaultMessage: "{aDifferentKey, plur {#} other {# more}}" },
|
|
97
|
-
{ count: 1 }
|
|
98
|
-
)`,
|
|
99
|
-
errors: [
|
|
100
|
-
{
|
|
101
|
-
message: 'Error parsing ICU string: INVALID_ARGUMENT_TYPE',
|
|
102
|
-
},
|
|
103
|
-
],
|
|
104
|
-
},
|
|
105
|
-
],
|
|
106
|
-
})
|