@alexlit/config-eslint 161.4.0 → 162.1.0

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/plugins/vue.js CHANGED
@@ -5,254 +5,267 @@ import typescript from 'typescript-eslint';
5
5
  import { DATA_FILES, TEST_FILES, VUE_FILES } from '../base.js';
6
6
  import { NO_RESTRICTED_SYNTAX } from '../rules/restricted-syntax.js';
7
7
 
8
- /** @see [eslint-plugin-vue](https://eslint.vuejs.org/rules/) */
9
- export const vue = defineConfig([
10
- ...plugin.configs['flat/recommended'].map((config) => ({
11
- ...config,
12
- ignores: [...(config.ignores ?? []), ...DATA_FILES],
13
- })),
8
+ /**
9
+ * Правила для Vue.js.
10
+ *
11
+ * @returns {import('eslint').Linter.Config[]}
12
+ *
13
+ * @see [eslint-plugin-vue](https://eslint.vuejs.org/rules/)
14
+ */
15
+ export const vue = () =>
16
+ defineConfig([
17
+ ...plugin.configs['flat/recommended'].map((config) => ({
18
+ ...config,
19
+ ignores: [...(config.ignores ?? []), ...DATA_FILES],
20
+ })),
14
21
 
15
- {
16
- files: VUE_FILES,
17
- languageOptions: { parserOptions: { parser: typescript.parser } },
18
- rules: {
19
- '@typescript-eslint/no-empty-object-type': [
20
- 'error',
21
- { allowWithName: 'Props$' },
22
- ],
23
- 'no-restricted-syntax': [
24
- 'error',
25
- // Merge the shared list, do not replace it
26
- ...NO_RESTRICTED_SYNTAX,
27
- {
28
- message:
29
- 'Запрещено использовать имя "Props". Используйте именованный формат, например: <ИмяКомпонента>Props.',
30
- selector:
31
- "TSInterfaceDeclaration[id.name='Props'], TSTypeAliasDeclaration[id.name='Props']",
32
- },
33
- {
34
- message:
35
- 'При вызове useRoute() переменная должна называться строго "$route" (const $route = useRoute()).',
36
- selector:
37
- 'VariableDeclarator[init.callee.name="useRoute"][id.name!="$route"]',
38
- },
39
- {
40
- message:
41
- 'При вызове useRouter() переменная должна называться строго "$router" (const $router = useRouter()).',
42
- selector:
43
- 'VariableDeclarator[init.callee.name="useRouter"][id.name!="$router"]',
44
- },
45
- ],
46
- 'vue/attributes-order': ['error', { alphabetical: true }],
47
- 'vue/block-lang': [
48
- 'error',
49
- { script: { lang: 'ts' }, style: {}, template: {} },
50
- ],
51
- 'vue/block-order': ['error', { order: ['script', 'template', 'style'] }],
52
- 'vue/component-api-style': ['error', ['script-setup']],
53
- 'vue/component-definition-name-casing': ['error', 'PascalCase'],
54
- 'vue/component-name-in-template-casing': [
55
- 'error',
56
- 'PascalCase',
57
- {
58
- ignores: [String.raw`/^[A-Z][a-zA-Z]*\.[A-Z][a-zA-Z]*$/`],
59
- registeredComponentsOnly: false,
60
- },
61
- ],
62
- 'vue/component-options-name-casing': ['error', 'PascalCase'],
63
- 'vue/custom-event-name-casing': ['error', 'camelCase', { ignores: [] }],
64
- 'vue/define-emits-declaration': ['error'],
65
- 'vue/define-macros-order': [
66
- 'error',
67
- {
68
- defineExposeLast: true,
69
- order: [
70
- 'definePageMeta', // nuxt
22
+ {
23
+ files: VUE_FILES,
24
+ languageOptions: { parserOptions: { parser: typescript.parser } },
25
+ rules: {
26
+ '@typescript-eslint/no-empty-object-type': [
27
+ 'error',
28
+ { allowWithName: 'Props$' },
29
+ ],
30
+ 'no-restricted-syntax': [
31
+ 'error',
32
+ // Merge the shared list, do not replace it
33
+ ...NO_RESTRICTED_SYNTAX,
34
+ {
35
+ message:
36
+ 'Запрещено использовать имя "Props". Используйте именованный формат, например: <ИмяКомпонента>Props.',
37
+ selector:
38
+ "TSInterfaceDeclaration[id.name='Props'], TSTypeAliasDeclaration[id.name='Props']",
39
+ },
40
+ {
41
+ message:
42
+ 'При вызове useRoute() переменная должна называться строго "$route" (const $route = useRoute()).',
43
+ selector:
44
+ 'VariableDeclarator[init.callee.name="useRoute"][id.name!="$route"]',
45
+ },
46
+ {
47
+ message:
48
+ 'При вызове useRouter() переменная должна называться строго "$router" (const $router = useRouter()).',
49
+ selector:
50
+ 'VariableDeclarator[init.callee.name="useRouter"][id.name!="$router"]',
51
+ },
52
+ ],
53
+ 'vue/attributes-order': ['error', { alphabetical: true }],
54
+ 'vue/block-lang': [
55
+ 'error',
56
+ { script: { lang: 'ts' }, style: {}, template: {} },
57
+ ],
58
+ 'vue/block-order': [
59
+ 'error',
60
+ { order: ['script', 'template', 'style'] },
61
+ ],
62
+ 'vue/component-api-style': ['error', ['script-setup']],
63
+ 'vue/component-definition-name-casing': ['error', 'PascalCase'],
64
+ 'vue/component-name-in-template-casing': [
65
+ 'error',
66
+ 'PascalCase',
67
+ {
68
+ ignores: [String.raw`/^[A-Z][a-zA-Z]*\.[A-Z][a-zA-Z]*$/`],
69
+ registeredComponentsOnly: false,
70
+ },
71
+ ],
72
+ 'vue/component-options-name-casing': ['error', 'PascalCase'],
73
+ 'vue/custom-event-name-casing': ['error', 'camelCase', { ignores: [] }],
74
+ 'vue/define-emits-declaration': ['error'],
75
+ 'vue/define-macros-order': [
76
+ 'error',
77
+ {
78
+ defineExposeLast: true,
79
+ order: [
80
+ 'definePageMeta', // nuxt
71
81
 
72
- 'defineProps',
73
- 'defineModel',
74
- 'defineEmits',
75
- 'defineOptions',
76
- 'defineSlots',
82
+ 'defineProps',
83
+ 'defineModel',
84
+ 'defineEmits',
85
+ 'defineOptions',
86
+ 'defineSlots',
77
87
 
78
- // nuxt (can use props)
79
- 'createUseAsyncData',
80
- 'createUseFetch',
88
+ // nuxt (can use props)
89
+ 'createUseAsyncData',
90
+ 'createUseFetch',
81
91
 
82
- 'onPrehydrate',
83
- // /nuxt (can use props)
92
+ 'onPrehydrate',
93
+ // /nuxt (can use props)
84
94
 
85
- // nuxi-ui
86
- 'defineLocale',
87
- 'defineShortcuts',
88
- 'extendLocale',
89
- 'extractShortcuts',
90
- // /nuxi-ui
91
- ],
92
- },
93
- ],
94
- 'vue/define-props-declaration': ['error'],
95
- 'vue/define-props-destructuring': [
96
- 'warn',
97
- { destructure: 'only-when-assigned' },
98
- ],
99
- 'vue/dot-notation': ['error'],
100
- 'vue/enforce-style-attribute': ['error', { allow: ['scoped'] }],
101
- 'vue/eqeqeq': ['error'],
102
- 'vue/html-button-has-type': ['error'],
103
- 'vue/html-comment-content-newline': ['warn'],
104
- 'vue/html-comment-content-spacing': ['warn'],
105
- 'vue/html-comment-indent': ['warn'],
106
- 'vue/html-end-tags': ['error'],
107
- 'vue/html-self-closing': [
108
- 'error',
109
- {
110
- html: { component: 'always', normal: 'never', void: 'always' },
111
- math: 'always',
112
- svg: 'always',
113
- },
114
- ],
115
- // Keep in sync with `unicorn/filename-case` in `unicorn.js`:
116
- // components live in kebab-case files, so the component name is
117
- // derived from a kebab-case file name instead of being required to be
118
- // PascalCase in the file name itself.
119
- 'vue/match-component-file-name': [
120
- 'error',
121
- { extensions: ['vue'], shouldMatchCase: false },
122
- ],
123
- 'vue/match-component-import-name': ['error'],
124
- 'vue/max-attributes-per-line': ['error', { singleline: 3 }],
125
- 'vue/max-lines-per-block': [
126
- 'warn',
127
- { script: 500, skipBlankLines: true, style: 500, template: 500 },
128
- ],
129
- 'vue/new-line-between-multi-line-property': 'off',
130
- 'vue/next-tick-style': ['error', 'promise'],
131
- 'vue/no-child-content': ['error'],
132
- 'vue/no-console': ['error'],
133
- 'vue/no-custom-modifiers-on-v-model': 'off',
134
- 'vue/no-deprecated-delete-set': ['error'],
135
- 'vue/no-deprecated-model-definition': ['error'],
136
- 'vue/no-deprecated-scope-attribute': ['error'],
137
- 'vue/no-deprecated-slot-attribute': ['error'],
138
- 'vue/no-deprecated-slot-scope-attribute': ['error'],
139
- 'vue/no-duplicate-attr-inheritance': ['error'],
140
- 'vue/no-duplicate-class-names': ['error'],
141
- 'vue/no-empty-component-block': ['error'],
142
- 'vue/no-import-compiler-macros': ['error'],
143
- 'vue/no-irregular-whitespace': ['error'],
144
- 'vue/no-loss-of-precision': ['error'],
145
- 'vue/no-multiple-objects-in-class': ['error'],
146
- 'vue/no-multiple-template-root': 'off',
147
- 'vue/no-negated-condition': ['error'],
148
- 'vue/no-negated-v-if-condition': ['error'],
149
- 'vue/no-parsing-error': ['error'],
150
- 'vue/no-potential-component-option-typo': ['error'],
151
- 'vue/no-ref-object-reactivity-loss': ['error'],
152
- 'vue/no-required-prop-with-default': ['error', { autofix: true }],
153
- 'vue/no-reserved-component-names': [
154
- 'error',
155
- {
156
- disallowVue3BuiltInComponents: true,
157
- disallowVueBuiltInComponents: true,
158
- },
159
- ],
160
- 'vue/no-restricted-component-names': ['error'],
161
- 'vue/no-restricted-component-options': ['error'],
162
- 'vue/no-restricted-props': ['error'],
163
- 'vue/no-root-v-if': ['error'],
164
- 'vue/no-setup-props-reactivity-loss': ['error'],
165
- 'vue/no-shadow-native-events': ['error'],
166
- 'vue/no-static-inline-styles': ['error', { allowBinding: true }],
167
- 'vue/no-this-in-before-route-enter': ['error'],
168
- 'vue/no-undef-components': ['error'],
169
- 'vue/no-undef-directives': ['error'],
170
- 'vue/no-unsupported-features': ['error'],
171
- 'vue/no-unused-components': ['error'],
172
- 'vue/no-unused-emit-declarations': ['error'],
173
- 'vue/no-unused-properties': [
174
- 'error',
175
- { groups: ['inject', 'props', 'asyncData', 'computed', 'methods'] },
176
- ],
177
- 'vue/no-unused-refs': ['error'],
178
- 'vue/no-use-computed-property-like-method': ['error'],
179
- 'vue/no-use-v-else-with-v-for': ['warn'],
180
- 'vue/no-use-v-if-with-v-for': ['warn', { allowUsingIterationVar: true }],
181
- 'vue/no-useless-mustaches': ['error'],
182
- 'vue/no-useless-template-attributes': ['error'],
183
- 'vue/no-useless-v-bind': ['error'],
184
- 'vue/no-v-for-template-key': 'off',
185
- 'vue/no-v-html': ['error', { ignorePattern: '^html' }],
186
- 'vue/no-v-model-argument': 'off',
187
- 'vue/no-v-text': ['error'],
188
- 'vue/no-v-text-v-html-on-component': ['error'],
189
- 'vue/object-shorthand': ['error'],
190
- 'vue/order-in-components': 'off',
191
- 'vue/padding-line-between-blocks': ['error'],
192
- 'vue/padding-line-between-tags': [
193
- 'error',
194
- [{ blankLine: 'always', next: '*', prev: '*' }],
195
- ],
196
- 'vue/padding-lines-in-component-definition': [
197
- 'error',
198
- { groupSingleLineProperties: true },
199
- ],
200
- 'vue/prefer-define-options': ['error'],
201
- 'vue/prefer-prop-type-boolean-first': ['error'],
202
- 'vue/prefer-separate-static-class': ['error'],
203
- 'vue/prefer-single-event-payload': ['error'],
204
- 'vue/prefer-true-attribute-shorthand': ['error'],
205
- 'vue/prefer-use-template-ref': ['error'],
206
- 'vue/prefer-v-model': ['error'],
207
- 'vue/quote-props': ['error', 'as-needed'],
208
- 'vue/require-direct-export': 'off',
209
- 'vue/require-explicit-slots': ['warn'],
210
- 'vue/require-macro-variable-name': [
211
- 'error',
212
- {
213
- defineEmits: '$emit',
214
- defineProps: '$props',
215
- defineSlots: '$slots',
216
- useAttrs: '$attrs',
217
- useSlots: '$slots',
218
- },
219
- ],
220
- 'vue/require-typed-object-prop': ['error'],
221
- 'vue/require-typed-ref': ['error'],
222
- 'vue/slot-name-casing': ['error', 'kebab-case'],
223
- 'vue/sort-keys': 'off',
224
- 'vue/static-class-names-order': ['warn'],
225
- 'vue/this-in-template': ['error', 'never'],
226
- 'vue/v-bind-style': [
227
- 'error',
228
- 'shorthand',
229
- { sameNameShorthand: 'always' },
230
- ],
231
- 'vue/v-for-delimiter-style': ['error'],
232
- 'vue/v-if-else-key': ['error'],
233
- 'vue/v-on-event-hyphenation': ['error'],
234
- 'vue/v-on-handler-style': ['error', 'inline-function'],
235
- 'vue/valid-define-options': ['error'],
236
- 'vue/valid-next-tick': ['error'],
237
- 'vue/valid-v-bind-sync': ['error'],
238
- 'vue/valid-v-slot': ['error'],
95
+ // nuxi-ui
96
+ 'defineLocale',
97
+ 'defineShortcuts',
98
+ 'extendLocale',
99
+ 'extractShortcuts',
100
+ // /nuxi-ui
101
+ ],
102
+ },
103
+ ],
104
+ 'vue/define-props-declaration': ['error'],
105
+ 'vue/define-props-destructuring': [
106
+ 'warn',
107
+ { destructure: 'only-when-assigned' },
108
+ ],
109
+ 'vue/dot-notation': ['error'],
110
+ 'vue/enforce-style-attribute': ['error', { allow: ['scoped'] }],
111
+ 'vue/eqeqeq': ['error'],
112
+ 'vue/html-button-has-type': ['error'],
113
+ 'vue/html-comment-content-newline': ['warn'],
114
+ 'vue/html-comment-content-spacing': ['warn'],
115
+ 'vue/html-comment-indent': ['warn'],
116
+ 'vue/html-end-tags': ['error'],
117
+ 'vue/html-self-closing': [
118
+ 'error',
119
+ {
120
+ html: { component: 'always', normal: 'never', void: 'always' },
121
+ math: 'always',
122
+ svg: 'always',
123
+ },
124
+ ],
125
+ // Keep in sync with `unicorn/filename-case` in `unicorn.js`:
126
+ // components live in kebab-case files, so the component name is
127
+ // derived from a kebab-case file name instead of being required to be
128
+ // PascalCase in the file name itself.
129
+ 'vue/match-component-file-name': [
130
+ 'error',
131
+ { extensions: ['vue'], shouldMatchCase: false },
132
+ ],
133
+ 'vue/match-component-import-name': ['error'],
134
+ 'vue/max-attributes-per-line': ['error', { singleline: 3 }],
135
+ 'vue/max-lines-per-block': [
136
+ 'warn',
137
+ { script: 500, skipBlankLines: true, style: 500, template: 500 },
138
+ ],
139
+ 'vue/new-line-between-multi-line-property': 'off',
140
+ 'vue/next-tick-style': ['error', 'promise'],
141
+ 'vue/no-child-content': ['error'],
142
+ 'vue/no-console': ['error'],
143
+ 'vue/no-custom-modifiers-on-v-model': 'off',
144
+ 'vue/no-deprecated-delete-set': ['error'],
145
+ 'vue/no-deprecated-model-definition': ['error'],
146
+ 'vue/no-deprecated-scope-attribute': ['error'],
147
+ 'vue/no-deprecated-slot-attribute': ['error'],
148
+ 'vue/no-deprecated-slot-scope-attribute': ['error'],
149
+ 'vue/no-duplicate-attr-inheritance': ['error'],
150
+ 'vue/no-duplicate-class-names': ['error'],
151
+ 'vue/no-empty-component-block': ['error'],
152
+ 'vue/no-import-compiler-macros': ['error'],
153
+ 'vue/no-irregular-whitespace': ['error'],
154
+ 'vue/no-loss-of-precision': ['error'],
155
+ 'vue/no-multiple-objects-in-class': ['error'],
156
+ 'vue/no-multiple-template-root': 'off',
157
+ 'vue/no-negated-condition': ['error'],
158
+ 'vue/no-negated-v-if-condition': ['error'],
159
+ 'vue/no-parsing-error': ['error'],
160
+ 'vue/no-potential-component-option-typo': ['error'],
161
+ 'vue/no-ref-object-reactivity-loss': ['error'],
162
+ 'vue/no-required-prop-with-default': ['error', { autofix: true }],
163
+ 'vue/no-reserved-component-names': [
164
+ 'error',
165
+ {
166
+ disallowVue3BuiltInComponents: true,
167
+ disallowVueBuiltInComponents: true,
168
+ },
169
+ ],
170
+ 'vue/no-restricted-component-names': ['error'],
171
+ 'vue/no-restricted-component-options': ['error'],
172
+ 'vue/no-restricted-props': ['error'],
173
+ 'vue/no-root-v-if': ['error'],
174
+ 'vue/no-setup-props-reactivity-loss': ['error'],
175
+ 'vue/no-shadow-native-events': ['error'],
176
+ 'vue/no-static-inline-styles': ['error', { allowBinding: true }],
177
+ 'vue/no-this-in-before-route-enter': ['error'],
178
+ 'vue/no-undef-components': ['error'],
179
+ 'vue/no-undef-directives': ['error'],
180
+ 'vue/no-unsupported-features': ['error'],
181
+ 'vue/no-unused-components': ['error'],
182
+ 'vue/no-unused-emit-declarations': ['error'],
183
+ 'vue/no-unused-properties': [
184
+ 'error',
185
+ { groups: ['inject', 'props', 'asyncData', 'computed', 'methods'] },
186
+ ],
187
+ 'vue/no-unused-refs': ['error'],
188
+ 'vue/no-use-computed-property-like-method': ['error'],
189
+ 'vue/no-use-v-else-with-v-for': ['warn'],
190
+ 'vue/no-use-v-if-with-v-for': [
191
+ 'warn',
192
+ { allowUsingIterationVar: true },
193
+ ],
194
+ 'vue/no-useless-mustaches': ['error'],
195
+ 'vue/no-useless-template-attributes': ['error'],
196
+ 'vue/no-useless-v-bind': ['error'],
197
+ 'vue/no-v-for-template-key': 'off',
198
+ 'vue/no-v-html': ['error', { ignorePattern: '^html' }],
199
+ 'vue/no-v-model-argument': 'off',
200
+ 'vue/no-v-text': ['error'],
201
+ 'vue/no-v-text-v-html-on-component': ['error'],
202
+ 'vue/object-shorthand': ['error'],
203
+ 'vue/order-in-components': 'off',
204
+ 'vue/padding-line-between-blocks': ['error'],
205
+ 'vue/padding-line-between-tags': [
206
+ 'error',
207
+ [{ blankLine: 'always', next: '*', prev: '*' }],
208
+ ],
209
+ 'vue/padding-lines-in-component-definition': [
210
+ 'error',
211
+ { groupSingleLineProperties: true },
212
+ ],
213
+ 'vue/prefer-define-options': ['error'],
214
+ 'vue/prefer-prop-type-boolean-first': ['error'],
215
+ 'vue/prefer-separate-static-class': ['error'],
216
+ 'vue/prefer-single-event-payload': ['error'],
217
+ 'vue/prefer-true-attribute-shorthand': ['error'],
218
+ 'vue/prefer-use-template-ref': ['error'],
219
+ 'vue/prefer-v-model': ['error'],
220
+ 'vue/quote-props': ['error', 'as-needed'],
221
+ 'vue/require-direct-export': 'off',
222
+ 'vue/require-explicit-slots': ['warn'],
223
+ 'vue/require-macro-variable-name': [
224
+ 'error',
225
+ {
226
+ defineEmits: '$emit',
227
+ defineProps: '$props',
228
+ defineSlots: '$slots',
229
+ useAttrs: '$attrs',
230
+ useSlots: '$slots',
231
+ },
232
+ ],
233
+ 'vue/require-typed-object-prop': ['error'],
234
+ 'vue/require-typed-ref': ['error'],
235
+ 'vue/slot-name-casing': ['error', 'kebab-case'],
236
+ 'vue/sort-keys': 'off',
237
+ 'vue/static-class-names-order': ['warn'],
238
+ 'vue/this-in-template': ['error', 'never'],
239
+ 'vue/v-bind-style': [
240
+ 'error',
241
+ 'shorthand',
242
+ { sameNameShorthand: 'always' },
243
+ ],
244
+ 'vue/v-for-delimiter-style': ['error'],
245
+ 'vue/v-if-else-key': ['error'],
246
+ 'vue/v-on-event-hyphenation': ['error'],
247
+ 'vue/v-on-handler-style': ['error', 'inline-function'],
248
+ 'vue/valid-define-options': ['error'],
249
+ 'vue/valid-next-tick': ['error'],
250
+ 'vue/valid-v-bind-sync': ['error'],
251
+ 'vue/valid-v-slot': ['error'],
252
+ },
239
253
  },
240
- },
241
254
 
242
- {
243
- files: ['**/*.ts', '**/*.js', '**/*.cjs', '**/*.mjs'],
244
- rules: { 'vue/order-in-components': 'off' },
245
- },
255
+ {
256
+ files: ['**/*.ts', '**/*.js', '**/*.cjs', '**/*.mjs'],
257
+ rules: { 'vue/order-in-components': 'off' },
258
+ },
246
259
 
247
- {
248
- files: [
249
- '**/app/*.vue',
250
- '**/src/*.vue',
251
- '**/layouts/**/*.vue',
252
- '**/pages/**/*.vue',
253
- ],
254
- rules: { 'vue/multi-word-component-names': 'off' },
255
- },
260
+ {
261
+ files: [
262
+ '**/app/*.vue',
263
+ '**/src/*.vue',
264
+ '**/layouts/**/*.vue',
265
+ '**/pages/**/*.vue',
266
+ ],
267
+ rules: { 'vue/multi-word-component-names': 'off' },
268
+ },
256
269
 
257
- { files: TEST_FILES, rules: { 'vue/one-component-per-file': 'off' } },
258
- ]);
270
+ { files: TEST_FILES, rules: { 'vue/one-component-per-file': 'off' } },
271
+ ]);
package/plugins/zod.js CHANGED
@@ -3,14 +3,21 @@ import { defineConfig } from 'eslint/config';
3
3
 
4
4
  import { FILES } from '../base.js';
5
5
 
6
- /** @see [eslint-plugin-zod](https://github.com/marcalexiei/eslint-zod/tree/main/plugins/eslint-plugin-zod) */
7
- export const zod = defineConfig([
8
- {
9
- ...plugin.configs.recommended,
10
- files: FILES,
11
- rules: {
12
- ...plugin.configs.recommended.rules,
13
- 'zod/consistent-import': ['error', { syntax: 'named' }],
6
+ /**
7
+ * Правила для Zod-схем.
8
+ *
9
+ * @returns {import('eslint').Linter.Config[]}
10
+ *
11
+ * @see [eslint-plugin-zod](https://github.com/marcalexiei/eslint-zod/tree/main/plugins/eslint-plugin-zod)
12
+ */
13
+ export const zod = () =>
14
+ defineConfig([
15
+ {
16
+ ...plugin.configs.recommended,
17
+ files: FILES,
18
+ rules: {
19
+ ...plugin.configs.recommended.rules,
20
+ 'zod/consistent-import': ['error', { syntax: 'named' }],
21
+ },
14
22
  },
15
- },
16
- ]);
23
+ ]);
@@ -3,7 +3,7 @@
3
3
  /**
4
4
  * Shared TypeScript rules.
5
5
  *
6
- * `format: null` disables the format check for destructured variables — their
6
+ * `format: null` disables the format check for destructured variables - their
7
7
  * names may be arbitrary.
8
8
  */
9
9
  export const TS_RULES = {