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.
Files changed (88) hide show
  1. package/index.d.ts +22 -0
  2. package/index.d.ts.map +1 -0
  3. package/index.js +38 -0
  4. package/package.json +3 -3
  5. package/rules/blocklist-elements.d.ts +4 -0
  6. package/rules/blocklist-elements.d.ts.map +1 -0
  7. package/rules/blocklist-elements.js +127 -0
  8. package/rules/enforce-default-message.d.ts +4 -0
  9. package/rules/enforce-default-message.d.ts.map +1 -0
  10. package/rules/enforce-default-message.js +57 -0
  11. package/rules/enforce-description.d.ts +4 -0
  12. package/rules/enforce-description.d.ts.map +1 -0
  13. package/rules/enforce-description.js +54 -0
  14. package/rules/enforce-id.d.ts +4 -0
  15. package/rules/enforce-id.d.ts.map +1 -0
  16. package/rules/enforce-id.js +125 -0
  17. package/rules/enforce-placeholders.d.ts +4 -0
  18. package/rules/enforce-placeholders.d.ts.map +1 -0
  19. package/rules/enforce-placeholders.js +118 -0
  20. package/rules/enforce-plural-rules.d.ts +4 -0
  21. package/rules/enforce-plural-rules.d.ts.map +1 -0
  22. package/rules/enforce-plural-rules.js +104 -0
  23. package/rules/no-camel-case.d.ts +4 -0
  24. package/rules/no-camel-case.d.ts.map +1 -0
  25. package/rules/no-camel-case.js +77 -0
  26. package/rules/no-complex-selectors.d.ts +4 -0
  27. package/rules/no-complex-selectors.d.ts.map +1 -0
  28. package/rules/no-complex-selectors.js +99 -0
  29. package/rules/no-emoji.d.ts +4 -0
  30. package/rules/no-emoji.d.ts.map +1 -0
  31. package/rules/no-emoji.js +47 -0
  32. package/rules/no-id.d.ts +4 -0
  33. package/rules/no-id.d.ts.map +1 -0
  34. package/rules/no-id.js +52 -0
  35. package/rules/no-invalid-icu.d.ts +4 -0
  36. package/rules/no-invalid-icu.d.ts.map +1 -0
  37. package/rules/no-invalid-icu.js +54 -0
  38. package/rules/no-literal-string-in-jsx.d.ts +4 -0
  39. package/rules/no-literal-string-in-jsx.d.ts.map +1 -0
  40. package/rules/no-literal-string-in-jsx.js +166 -0
  41. package/rules/no-multiple-plurals.d.ts +4 -0
  42. package/rules/no-multiple-plurals.d.ts.map +1 -0
  43. package/rules/no-multiple-plurals.js +71 -0
  44. package/rules/no-multiple-whitespaces.d.ts +4 -0
  45. package/rules/no-multiple-whitespaces.d.ts.map +1 -0
  46. package/rules/no-multiple-whitespaces.js +146 -0
  47. package/rules/no-offset.d.ts +4 -0
  48. package/rules/no-offset.d.ts.map +1 -0
  49. package/rules/no-offset.js +70 -0
  50. package/util.d.ts +24 -0
  51. package/util.d.ts.map +1 -0
  52. package/util.js +240 -0
  53. package/BUILD +0 -89
  54. package/CHANGELOG.md +0 -892
  55. package/index.ts +0 -38
  56. package/rules/blocklist-elements.ts +0 -159
  57. package/rules/enforce-default-message.ts +0 -71
  58. package/rules/enforce-description.ts +0 -68
  59. package/rules/enforce-id.ts +0 -171
  60. package/rules/enforce-placeholders.ts +0 -161
  61. package/rules/enforce-plural-rules.ts +0 -134
  62. package/rules/no-camel-case.ts +0 -97
  63. package/rules/no-complex-selectors.ts +0 -125
  64. package/rules/no-emoji.ts +0 -60
  65. package/rules/no-id.ts +0 -63
  66. package/rules/no-invalid-icu.ts +0 -69
  67. package/rules/no-literal-string-in-jsx.ts +0 -213
  68. package/rules/no-multiple-plurals.ts +0 -89
  69. package/rules/no-multiple-whitespaces.ts +0 -194
  70. package/rules/no-offset.ts +0 -88
  71. package/tests/blocklist-elements.test.ts +0 -120
  72. package/tests/enforce-default-message.test.ts +0 -260
  73. package/tests/enforce-description.test.ts +0 -117
  74. package/tests/enforce-id.test.ts +0 -209
  75. package/tests/enforce-placeholders.test.ts +0 -170
  76. package/tests/enforce-plural-rules.test.ts +0 -86
  77. package/tests/fixtures.ts +0 -15
  78. package/tests/no-camel-case.test.ts +0 -31
  79. package/tests/no-complex-selectors.test.ts +0 -125
  80. package/tests/no-id.test.ts +0 -151
  81. package/tests/no-invalid-icu.test.ts +0 -106
  82. package/tests/no-literal-string-in-jsx.test.ts +0 -213
  83. package/tests/no-multiple-plurals.test.ts +0 -42
  84. package/tests/no-multiple-whitespaces.test.ts +0 -100
  85. package/tests/no-offset.test.ts +0 -41
  86. package/tests/util.ts +0 -26
  87. package/tsconfig.json +0 -5
  88. package/util.ts +0 -307
@@ -1,260 +0,0 @@
1
- import enforceDefaultMessage from '../rules/enforce-default-message'
2
- import {noMatch, spreadJsx, emptyFnCall, dynamicMessage} from './fixtures'
3
- import {ruleTester, vueRuleTester} from './util'
4
-
5
- ruleTester.run('enforce-default-message', enforceDefaultMessage, {
6
- valid: [
7
- `import {defineMessage} from 'react-intl'
8
- defineMessage({
9
- defaultMessage: 'this is default message',
10
- description: 'asd'
11
- })`,
12
- `intl.formatMessage({
13
- defaultMessage: 'this is default message',
14
- description: 'asd'
15
- })`,
16
- `intl.formatMessage({
17
- defaultMessage: 'this is default message' + 'vvv',
18
- description: 'asd'
19
- })`,
20
- `intl.formatMessage({
21
- defaultMessage: \`a template
22
- literal
23
- \`,
24
- description: 'asd'
25
- })`,
26
- `import {FormattedMessage} from 'react-intl'
27
- const a = <FormattedMessage defaultMessage={'asf' + 'bar'}/>`,
28
- dynamicMessage,
29
- noMatch,
30
- spreadJsx,
31
- emptyFnCall,
32
- ],
33
- invalid: [
34
- {
35
- code: `
36
- import {defineMessage} from 'react-intl'
37
- defineMessage({
38
- description: 'this is default message'
39
- })`,
40
- errors: [
41
- {
42
- message: '`defaultMessage` has to be specified in message descriptor',
43
- },
44
- ],
45
- },
46
- {
47
- code: `
48
- import {defineMessage} from 'react-intl'
49
- defineMessage({
50
- description: 'this is default message'
51
- })`,
52
- errors: [
53
- {
54
- message: '`defaultMessage` has to be specified in message descriptor',
55
- },
56
- ],
57
- },
58
- {
59
- code: `
60
- import {defineMessage} from 'react-intl'
61
- defineMessage({
62
- defaultMessage,
63
- description: 'this is default message'
64
- })`,
65
- errors: [
66
- {
67
- message: `"defaultMessage" must be:
68
- - a string literal or
69
- - template literal without variable`,
70
- },
71
- ],
72
- options: ['literal'],
73
- },
74
- {
75
- code: `
76
- intl.formatMessage({
77
- defaultMessage,
78
- description: 'this is default message'
79
- })`,
80
- errors: [
81
- {
82
- message: `"defaultMessage" must be:
83
- - a string literal or
84
- - template literal without variable`,
85
- },
86
- ],
87
- options: ['literal'],
88
- },
89
- {
90
- code: `
91
- import {defineMessage} from 'react-intl'
92
- defineMessage({
93
- defaultMessage: foo
94
- })`,
95
- errors: [
96
- {
97
- message: `"defaultMessage" must be:
98
- - a string literal or
99
- - template literal without variable`,
100
- },
101
- ],
102
- options: ['literal'],
103
- },
104
- {
105
- code: `
106
- intl.formatMessage({
107
- description: 'this is description'
108
- })`,
109
- errors: [
110
- {
111
- message: '`defaultMessage` has to be specified in message descriptor',
112
- },
113
- ],
114
- },
115
- {
116
- code: `
117
- import {defineMessages} from 'react-intl'
118
- defineMessages({
119
- foo: {
120
- description: 'this is description'
121
- }
122
- })`,
123
- errors: [
124
- {
125
- message: '`defaultMessage` has to be specified in message descriptor',
126
- },
127
- ],
128
- },
129
- {
130
- code: `
131
- import {FormattedMessage} from 'react-intl'
132
- const a = <FormattedMessage description="this is description"/>`,
133
- errors: [
134
- {
135
- message: '`defaultMessage` has to be specified in message descriptor',
136
- },
137
- ],
138
- },
139
- {
140
- code: `
141
- import {FormattedMessage} from 'react-intl'
142
- const a = <FormattedMessage />`,
143
- errors: [
144
- {
145
- message: '`defaultMessage` has to be specified in message descriptor',
146
- },
147
- ],
148
- },
149
- {
150
- code: `
151
- import {FormattedMessage} from 'react-intl'
152
- const a = <FormattedMessage description="this is description"></FormattedMessage>`,
153
- errors: [
154
- {
155
- message: '`defaultMessage` has to be specified in message descriptor',
156
- },
157
- ],
158
- },
159
- {
160
- code: `
161
- import {FormattedMessage} from 'react-intl'
162
- const a = <FormattedMessage defaultMessage={defaultMessage} description="this is description"/>`,
163
- errors: [
164
- {
165
- message: `"defaultMessage" must be:
166
- - a string literal or
167
- - template literal without variable`,
168
- },
169
- ],
170
- options: ['literal'],
171
- },
172
- {
173
- code: `
174
- import {FormattedMessage} from 'react-intl'
175
- const a = <FormattedMessage defaultMessage={defaultMessage}/>`,
176
- errors: [
177
- {
178
- message: `"defaultMessage" must be:
179
- - a string literal or
180
- - template literal without variable`,
181
- },
182
- ],
183
- options: ['literal'],
184
- },
185
- {
186
- code: `
187
- import {FormattedMessage} from 'react-intl'
188
- const a = <FormattedMessage defaultMessage={\`asf \${foo}\`} description="this is description"></FormattedMessage>`,
189
- errors: [
190
- {
191
- message: `"defaultMessage" must be:
192
- - a string literal or
193
- - template literal without variable`,
194
- },
195
- ],
196
- options: ['literal'],
197
- },
198
- {
199
- code: `
200
- import {FormattedMessage} from 'react-intl'
201
- const a = <FormattedMessage defaultMessage={\`asf \${aas}\`}/>`,
202
- errors: [
203
- {
204
- message: `"defaultMessage" must be:
205
- - a string literal or
206
- - template literal without variable`,
207
- },
208
- ],
209
- options: ['literal'],
210
- },
211
- ],
212
- })
213
-
214
- vueRuleTester.run('vue/enforce-default-message', enforceDefaultMessage, {
215
- valid: [
216
- `<template>
217
- <p>{{$formatMessage({
218
- defaultMessage: 'this is default message',
219
- description: 'asd'
220
- })}}</p></template>`,
221
- `<script>intl.formatMessage({
222
- defaultMessage: 'this is default message',
223
- description: 'asd'
224
- })</script>`,
225
- `<script>intl.formatMessage({
226
- defaultMessage: 'this is default message' + 'vvv',
227
- description: 'asd'
228
- })</script>`,
229
- ],
230
- invalid: [
231
- {
232
- code: `
233
- <template>
234
- <p>{{$formatMessage({
235
- description: 'this is default message'
236
- })}}</p></template>`,
237
- errors: [
238
- {
239
- message: '`defaultMessage` has to be specified in message descriptor',
240
- },
241
- ],
242
- },
243
- {
244
- code: `
245
- <template>
246
- <p>{{$formatMessage({
247
- defaultMessage,
248
- description: 'this is default message'
249
- })}}</p></template>`,
250
- errors: [
251
- {
252
- message: `"defaultMessage" must be:
253
- - a string literal or
254
- - template literal without variable`,
255
- },
256
- ],
257
- options: ['literal'],
258
- },
259
- ],
260
- })
@@ -1,117 +0,0 @@
1
- import enforceDescription from '../rules/enforce-description'
2
- import {noMatch, spreadJsx, emptyFnCall, dynamicMessage} from './fixtures'
3
- import {ruleTester} from './util'
4
-
5
- ruleTester.run('enforce-description', enforceDescription, {
6
- valid: [
7
- `import {defineMessage} from 'react-intl'
8
- defineMessage({
9
- defaultMessage: '{count, plural, one {#} other {# more}}',
10
- description: 'asd'
11
- })`,
12
- `intl.formatMessage({
13
- defaultMessage: '{count, plural, one {#} other {# more}}',
14
- description: 'asd'
15
- })`,
16
- `intl.formatMessage({
17
- defaultMessage: '{count, plural, one {#} other {# more}}',
18
- description: 'asd' + 'aaz'
19
- })`,
20
- `import {FormattedMessage} from 'react-intl'
21
- const a = <FormattedMessage defaultMessage="{count2, plural, one {#} other {# more}}"
22
- description={'asd' + 'azz'}
23
- />`,
24
- dynamicMessage,
25
- noMatch,
26
- spreadJsx,
27
- emptyFnCall,
28
- ],
29
- invalid: [
30
- {
31
- code: `
32
- import {defineMessage} from 'react-intl'
33
- defineMessage({
34
- defaultMessage: '{count, plural, one {#} other {# more}}'
35
- })`,
36
- errors: [
37
- {
38
- message: '`description` has to be specified in message descriptor',
39
- },
40
- ],
41
- },
42
- {
43
- code: `
44
- import {defineMessage} from 'react-intl'
45
- defineMessage({
46
- defaultMessage: '{count, plural, one {#} other {# more}}',
47
- description: foo
48
- })`,
49
- errors: [
50
- {
51
- message:
52
- '`description` has to be a string literal (not function call or variable)',
53
- },
54
- ],
55
- options: ['literal'],
56
- },
57
- {
58
- code: `
59
- intl.formatMessage({
60
- defaultMessage: '{count, plural, one {#} other {# more}}'
61
- })`,
62
- errors: [
63
- {
64
- message: '`description` has to be specified in message descriptor',
65
- },
66
- ],
67
- },
68
- {
69
- code: `
70
- import {defineMessages} from 'react-intl'
71
- defineMessages({
72
- foo: {
73
- defaultMessage: '{count2, plural, one {#} other {# more}}'
74
- }
75
- })`,
76
- errors: [
77
- {
78
- message: '`description` has to be specified in message descriptor',
79
- },
80
- ],
81
- },
82
- {
83
- code: `
84
- import {defineMessage} from 'react-intl'
85
- defineMessage({
86
- foo: {
87
- defaultMessage: '{count2, plural, one {#} other {# more}}'
88
- }
89
- })`,
90
- errors: [
91
- {
92
- message: '`description` has to be specified in message descriptor',
93
- },
94
- ],
95
- },
96
- {
97
- code: `
98
- import {FormattedMessage} from 'react-intl'
99
- const a = <FormattedMessage defaultMessage="{count2, plural, one {#} other {# more}}"/>`,
100
- errors: [
101
- {
102
- message: '`description` has to be specified in message descriptor',
103
- },
104
- ],
105
- },
106
- {
107
- code: `
108
- import {FormattedMessage} from 'react-intl'
109
- const a = <FormattedMessage defaultMessage="{count2, plural, one {#} other {# more}}"></FormattedMessage>`,
110
- errors: [
111
- {
112
- message: '`description` has to be specified in message descriptor',
113
- },
114
- ],
115
- },
116
- ],
117
- })
@@ -1,209 +0,0 @@
1
- import enforceId from '../rules/enforce-id'
2
- import {ruleTester} from './util'
3
- import {noMatch, spreadJsx, emptyFnCall} from './fixtures'
4
- const options = [{idInterpolationPattern: '[sha512:contenthash:base64:6]'}]
5
- ruleTester.run('enforce-id', enforceId, {
6
- valid: [
7
- {
8
- code: `intl.formatMessage({ id: 'j9qhn+', defaultMessage: '{count, plural, one {#} other {# more}}', description: 'asd'})`,
9
- options,
10
- },
11
- {
12
- code: `<FormattedMessage id="/e77jM" defaultMessage="{count, plural, one {#} other {# more}}" values={{foo: 1}} />`,
13
- options,
14
- },
15
- `<FormattedMessage id="manual id" defaultMessage="{count, plural, one {#} other {# more}}" values={{foo: 1}} />`,
16
- {code: noMatch, options},
17
- {code: spreadJsx, options},
18
- {code: emptyFnCall, options},
19
- ],
20
- invalid: [
21
- {
22
- code: `
23
- intl.formatMessage({ id: 'foo', defaultMessage: '{count, plural, one {#} other {# more}}', description: 'asd'})`,
24
- errors: [
25
- {
26
- message: `"id" does not match with hash pattern [sha512:contenthash:base64:6].
27
- Expected: j9qhn+
28
- Actual: foo`,
29
- },
30
- ],
31
- options,
32
- output: `
33
- intl.formatMessage({ id: 'j9qhn+', defaultMessage: '{count, plural, one {#} other {# more}}', description: 'asd'})`,
34
- },
35
- {
36
- code: `
37
- intl.formatMessage({defaultMessage: '{count, plural, one {#} other {# more}}', description: 'asd'})`,
38
- errors: [
39
- {
40
- message: `id must be specified`,
41
- },
42
- ],
43
- },
44
- {
45
- code: `
46
- intl.formatMessage({defaultMessage: '{count, plural, one {#} other {# more}}', description: 'asd'})`,
47
- errors: [
48
- {
49
- message: `"id" does not match with hash pattern [sha512:contenthash:base64:6].
50
- Expected: j9qhn+
51
- Actual: undefined`,
52
- },
53
- ],
54
- options,
55
- output: `
56
- intl.formatMessage({defaultMessage: '{count, plural, one {#} other {# more}}', id: 'j9qhn+', description: 'asd'})`,
57
- },
58
- {
59
- code: `
60
- intl.formatMessage({ id: 'bar', defaultMessage: '{aDifferentKey, plural, one {#} other {# more}}', description: 'asd'
61
- }, {foo: 1})`,
62
- errors: [
63
- {
64
- message: `"id" does not match with hash pattern [sha512:contenthash:base64:6].
65
- Expected: 73owpx
66
- Actual: bar`,
67
- },
68
- ],
69
- options,
70
- output: `
71
- intl.formatMessage({ id: '73owpx', defaultMessage: '{aDifferentKey, plural, one {#} other {# more}}', description: 'asd'
72
- }, {foo: 1})`,
73
- },
74
- {
75
- code: `
76
- import {FormattedMessage} from 'react-intl'
77
- const a = <FormattedMessage
78
- id={id}
79
- defaultMessage="{count, plural, one {#} other {# more}}"
80
- />`,
81
- errors: [
82
- {
83
- message: `"id" does not match with hash pattern [sha512:contenthash:base64:6].
84
- Expected: /e77jM
85
- Actual: undefined`,
86
- },
87
- ],
88
- options,
89
- output: `
90
- import {FormattedMessage} from 'react-intl'
91
- const a = <FormattedMessage
92
- id="/e77jM"
93
- defaultMessage="{count, plural, one {#} other {# more}}"
94
- />`,
95
- },
96
- {
97
- code: `
98
- import {FormattedMessage} from 'react-intl'
99
- const a = (
100
- <FormattedMessage id="bas" defaultMessage="{count, plural, one {#} other {# more}}" values={{foo: 1}} />
101
- )`,
102
- errors: [
103
- {
104
- message: `"id" does not match with hash pattern [sha512:contenthash:base64:6].
105
- Expected: /e77jM
106
- Actual: bas`,
107
- },
108
- ],
109
- options,
110
- output: `
111
- import {FormattedMessage} from 'react-intl'
112
- const a = (
113
- <FormattedMessage id="/e77jM" defaultMessage="{count, plural, one {#} other {# more}}" values={{foo: 1}} />
114
- )`,
115
- },
116
- {
117
- code: `
118
- import {FormattedMessage} from 'react-intl'
119
- const a = (
120
- <FormattedMessage defaultMessage="{count, plural, one {#} other {# more}}" values={{foo: 1}} />
121
- )`,
122
- errors: [
123
- {
124
- message: `"id" does not match with hash pattern [sha512:contenthash:base64:6].
125
- Expected: /e77jM
126
- Actual: undefined`,
127
- },
128
- ],
129
- options,
130
- output: `
131
- import {FormattedMessage} from 'react-intl'
132
- const a = (
133
- <FormattedMessage defaultMessage="{count, plural, one {#} other {# more}}" id="/e77jM" values={{foo: 1}} />
134
- )`,
135
- },
136
- {
137
- code: `
138
- intl.formatMessage({ id, defaultMessage: '{count, plural, one {<a>#</a>} other {# more}}', description: 'asd'
139
- }, {
140
- count: 1,
141
- })`,
142
- errors: [
143
- {
144
- message: `"id" does not match with hash pattern [sha512:contenthash:base64:6].
145
- Expected: UoHSIG
146
- Actual: undefined`,
147
- },
148
- ],
149
- options,
150
- output: `
151
- intl.formatMessage({ id: 'UoHSIG', defaultMessage: '{count, plural, one {<a>#</a>} other {# more}}', description: 'asd'
152
- }, {
153
- count: 1,
154
- })`,
155
- },
156
- {
157
- code: `
158
- import { defineMessages } from 'react-intl'
159
-
160
- defineMessages({ example: { defaultMessage: 'example' } })`,
161
- errors: [
162
- {
163
- message: `"id" does not match with hash pattern [sha512:contenthash:base64:6].
164
- Expected: O7Eu2j
165
- Actual: undefined`,
166
- },
167
- ],
168
- options,
169
- output: `
170
- import { defineMessages } from 'react-intl'
171
-
172
- defineMessages({ example: { defaultMessage: 'example', id: 'O7Eu2j' } })`,
173
- },
174
- ],
175
- })
176
-
177
- const optionsWithWhitelist = [
178
- {
179
- idInterpolationPattern: '[sha512:contenthash:base64:6]',
180
- idWhitelist: ['\\.', '^payment_.*'],
181
- },
182
- ]
183
- ruleTester.run('enforce-id', enforceId, {
184
- valid: [
185
- {
186
- options: optionsWithWhitelist,
187
- code: `
188
- import { defineMessages } from 'react-intl'
189
- defineMessages({ example: { defaultMessage: 'example1', id: 'my.custom.id' } })
190
- defineMessages({ example: { defaultMessage: 'example2', id: 'payment_string' } })`,
191
- },
192
- ],
193
- invalid: [
194
- {
195
- code: `
196
- intl.formatMessage({defaultMessage: '{count, plural, one {#} other {# more}}', description: 'asd'})`,
197
- errors: [
198
- {
199
- message: `"id" does not match with hash pattern [sha512:contenthash:base64:6] or allowlisted patterns ["/\\./i", "/^payment_.*/i"].
200
- Expected: j9qhn+
201
- Actual: undefined`,
202
- },
203
- ],
204
- options: optionsWithWhitelist,
205
- output: `
206
- intl.formatMessage({defaultMessage: '{count, plural, one {#} other {# more}}', id: 'j9qhn+', description: 'asd'})`,
207
- },
208
- ],
209
- })