@itcase/lint 1.0.1 → 1.0.3

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.
@@ -0,0 +1,125 @@
1
+ // In what order they are written, that’s how they will be sorted
2
+ const eslintStyleObjects = [
3
+ // Size and positioning
4
+ // Размер и позиционирование
5
+ 'width',
6
+ 'height',
7
+ 'flex',
8
+ 'flexDirection',
9
+ 'justifyContent',
10
+ 'alignItems',
11
+ 'alignSelf',
12
+ 'flexGrow',
13
+ 'flexShrink',
14
+ 'flexBasis',
15
+ 'flexWrap',
16
+ 'position',
17
+ 'top',
18
+ 'right',
19
+ 'bottom',
20
+ 'left',
21
+ 'zIndex',
22
+ 'minWidth',
23
+ 'maxWidth',
24
+ 'minHeight',
25
+ 'maxHeight',
26
+ 'aspectRatio',
27
+
28
+ // Indents and margins
29
+ // Отступы и поля
30
+ 'margin',
31
+ 'marginTop',
32
+ 'marginRight',
33
+ 'marginBottom',
34
+ 'marginLeft',
35
+ 'marginHorizontal',
36
+ 'marginVertical',
37
+ 'padding',
38
+ 'paddingTop',
39
+ 'paddingRight',
40
+ 'paddingBottom',
41
+ 'paddingLeft',
42
+ 'paddingHorizontal',
43
+ 'paddingVertical',
44
+ 'gap',
45
+
46
+ // Borders and shadows
47
+ // Границы и тени
48
+ 'borderWidth',
49
+ 'borderColor',
50
+ 'borderRadius',
51
+ 'borderTopWidth',
52
+ 'borderRightWidth',
53
+ 'borderBottomWidth',
54
+ 'borderLeftWidth',
55
+ 'borderTopColor',
56
+ 'borderRightColor',
57
+ 'borderBottomColor',
58
+ 'borderLeftColor',
59
+ 'borderStyle',
60
+ 'borderEndWidth',
61
+ 'borderStartWidth',
62
+ 'borderTopLeftRadius',
63
+ 'borderTopRightRadius',
64
+ 'borderBottomLeftRadius',
65
+ 'borderBottomRightRadius',
66
+ 'shadowColor',
67
+ 'shadowOffset',
68
+ 'shadowOpacity',
69
+ 'shadowRadius',
70
+ 'elevation',
71
+
72
+ // Color and background
73
+ // Цвет и фон
74
+ 'backgroundColor',
75
+ 'opacity',
76
+
77
+ // Fonts and text
78
+ // Шрифты и текст
79
+ 'color',
80
+ 'fontSize',
81
+ 'fontWeight',
82
+ 'fontStyle',
83
+ 'fontFamily',
84
+ 'lineHeight',
85
+ 'letterSpacing',
86
+ 'textAlign',
87
+ 'textDecorationLine',
88
+ 'textDecorationStyle',
89
+ 'textDecorationColor',
90
+ 'textTransform',
91
+ 'textShadowColor',
92
+ 'textShadowOffset',
93
+ 'textShadowRadius',
94
+ 'includeFontPadding',
95
+ 'textAlignVertical',
96
+ 'writingDirection',
97
+
98
+ // Other
99
+ // Прочее
100
+ 'overflow',
101
+ 'display',
102
+ 'resizeMode',
103
+ 'backfaceVisibility',
104
+ 'tintColor',
105
+ 'overlayColor',
106
+ 'end',
107
+ 'start',
108
+ 'direction',
109
+ 'transform',
110
+ 'transformOrigin',
111
+ 'translateX',
112
+ 'translateY',
113
+ 'scale',
114
+ 'rotate',
115
+ 'rotateX',
116
+ 'rotateY',
117
+ 'perspective',
118
+ 'cursor',
119
+ ]
120
+
121
+ const eslintStyleObjectsCustomGroups = {}
122
+
123
+ eslintStyleObjects.forEach((key) => (eslintStyleObjectsCustomGroups[key] = key))
124
+
125
+ export { eslintStyleObjects, eslintStyleObjectsCustomGroups }
@@ -0,0 +1,67 @@
1
+ // In what order they are written, that’s how they will be sorted
2
+ const eslintStyleProps = [
3
+ 'width',
4
+ 'height',
5
+ 'minWidth',
6
+ 'minHeight',
7
+ 'maxWidth',
8
+ 'maxHeight',
9
+ 'aspectRatio',
10
+ 'font',
11
+ 'color',
12
+ 'labelTextColor',
13
+ 'labelTextSize',
14
+ 'fill',
15
+ 'fillHover',
16
+ 'background',
17
+ 'background-position',
18
+ 'background-repeat',
19
+ 'background-size',
20
+ 'padding',
21
+ 'margin',
22
+ 'border',
23
+ 'borderWidth',
24
+ 'borderColor',
25
+ 'borderStyle',
26
+ 'borderRadius',
27
+ 'borderLeft',
28
+ 'borderTop',
29
+ 'borderRight',
30
+ 'borderBottom',
31
+ 'float',
32
+ 'clear',
33
+ 'position',
34
+ 'overflow',
35
+ 'content',
36
+ 'display',
37
+ 'flex',
38
+ 'flexDirection',
39
+ 'flexWrap',
40
+ 'flexFlow',
41
+ 'order',
42
+ 'justify-content',
43
+ 'align-items',
44
+ 'align-self',
45
+ 'align-content',
46
+ 'flexGrow',
47
+ 'flexShrink',
48
+ 'flexBasis',
49
+ 'visibility',
50
+ 'box-sizing',
51
+ 'box-shadow',
52
+ 'left',
53
+ 'top',
54
+ 'right',
55
+ 'bottom',
56
+ 'verticalAlign',
57
+ 'zIndex',
58
+ 'transform',
59
+ 'transition',
60
+ 'opacity',
61
+ 'cursor',
62
+ ]
63
+
64
+ const eslintStylePropsCustomGroups = {}
65
+ eslintStyleProps.forEach((key) => (eslintStylePropsCustomGroups[key] = key))
66
+
67
+ export { eslintStyleProps, eslintStylePropsCustomGroups }
package/eslint/index.js CHANGED
@@ -6,75 +6,14 @@ import eslintReact from 'eslint-plugin-react'
6
6
  import eslintReactHooks from 'eslint-plugin-react-hooks'
7
7
  import eslintTypeScript from 'typescript-eslint'
8
8
 
9
- const eslintStyleProps = [
10
- 'width',
11
- 'height',
12
- 'minWidth',
13
- 'minHeight',
14
- 'maxWidth',
15
- 'maxHeight',
16
- 'aspectRatio',
17
- 'font',
18
- 'color',
19
- 'labelTextColor',
20
- 'labelTextSize',
21
- 'fill',
22
- 'fillHover',
23
- 'background',
24
- 'background-position',
25
- 'background-repeat',
26
- 'background-size',
27
- 'padding',
28
- 'margin',
29
- 'border',
30
- 'borderWidth',
31
- 'borderColor',
32
- 'borderStyle',
33
- 'borderRadius',
34
- 'borderLeft',
35
- 'borderTop',
36
- 'borderRight',
37
- 'borderBottom',
38
- 'float',
39
- 'clear',
40
- 'position',
41
- 'overflow',
42
- 'content',
43
- 'display',
44
- 'flex',
45
- 'flexDirection',
46
- 'flexWrap',
47
- 'flexFlow',
48
- 'order',
49
- 'justify-content',
50
- 'align-items',
51
- 'align-self',
52
- 'align-content',
53
- 'flexGrow',
54
- 'flexShrink',
55
- 'flexBasis',
56
- 'visibility',
57
- 'box-sizing',
58
- 'box-shadow',
59
- 'left',
60
- 'top',
61
- 'right',
62
- 'bottom',
63
- 'verticalAlign',
64
- 'zIndex',
65
- 'transform',
66
- 'transition',
67
- 'opacity',
68
- 'cursor',
69
- ]
70
-
71
- const eslintStylePropsCustomGroups = {}
72
- eslintStyleProps.forEach((key) => (eslintStylePropsCustomGroups[key] = key))
9
+ import { eslintStyleObjects, eslintStyleObjectsCustomGroups } from './eslint.styleObjects.js'
10
+ import { eslintStyleProps, eslintStylePropsCustomGroups } from './eslint.styleProps.js'
73
11
 
74
12
  const eslintConfig = [
75
13
  eslintJs.configs.recommended,
76
- eslintPluginPrettierRecommended,
77
14
  ...eslintTypeScript.configs.recommended,
15
+ eslintPluginPrettierRecommended,
16
+
78
17
  {
79
18
  plugins: {
80
19
  react: eslintReact,
@@ -82,16 +21,16 @@ const eslintConfig = [
82
21
  perfectionist: eslintPerfectionist,
83
22
  },
84
23
  },
24
+
85
25
  {
86
26
  ignores: ['dist', 'node_modules', 'eslint.config.mjs'],
87
27
  },
28
+
88
29
  {
89
30
  files: ['**/*.{js,jsx,mjs,cjs,ts,tsx}'],
90
31
  rules: {
32
+ // react-hooks configs recommended rules
91
33
  ...eslintReactHooks.configs.recommended.rules,
92
- camelcase: 'off',
93
- 'multiline-ternary': 'off',
94
- 'object-shorthand': ['warn', 'consistent'],
95
34
 
96
35
  // @typescript-eslint
97
36
  '@typescript-eslint/ban-ts-comment': 'off',
@@ -105,6 +44,11 @@ const eslintConfig = [
105
44
  'react-hooks/exhaustive-deps': 'warn',
106
45
  'react-hooks/rules-of-hooks': 'error',
107
46
 
47
+ // disables the requirement to format ternary operators in multiline form
48
+ 'multiline-ternary': 'off',
49
+ // shorthand for methods and properties of objects
50
+ 'object-shorthand': ['warn', 'consistent'],
51
+
108
52
  // Class
109
53
  'perfectionist/sort-classes': [
110
54
  'error',
@@ -142,6 +86,7 @@ const eslintConfig = [
142
86
  'isDesktop',
143
87
  'id',
144
88
  'children',
89
+ ...eslintStyleObjects,
145
90
  'device',
146
91
  'is',
147
92
  'unknown',
@@ -153,6 +98,7 @@ const eslintConfig = [
153
98
  isMobile: 'isMobile*',
154
99
  isTablet: 'isTablet*',
155
100
  isDesktop: 'isDesktop*',
101
+ ...eslintStyleObjectsCustomGroups,
156
102
  is: 'is*',
157
103
  callback: 'on*',
158
104
  },
@@ -166,7 +112,10 @@ const eslintConfig = [
166
112
  type: 'natural',
167
113
  order: 'asc',
168
114
  groups: [
169
- 'top',
115
+ 'className',
116
+ 'key',
117
+ 'ref',
118
+ 'name',
170
119
  ...eslintStyleProps,
171
120
  'shorthand',
172
121
  'unknown',
@@ -176,11 +125,14 @@ const eslintConfig = [
176
125
  'callback',
177
126
  ],
178
127
  customGroups: {
179
- top: ['className', 'key', 'ref', 'name'],
128
+ className: 'className',
129
+ key: 'key',
130
+ ref: 'ref',
131
+ name: 'name',
132
+ ...eslintStylePropsCustomGroups,
180
133
  is: 'is*',
181
134
  callback: 'on*',
182
135
  set: ['set*'],
183
- ...eslintStylePropsCustomGroups,
184
136
  },
185
137
  },
186
138
  ],
@@ -0,0 +1,20 @@
1
+ import eslintMobx from 'eslint-plugin-mobx'
2
+
3
+ export default [
4
+ {
5
+ plugins: {
6
+ mobx: eslintMobx,
7
+ },
8
+ },
9
+
10
+ {
11
+ rules: {
12
+ // mobx
13
+ 'mobx/exhaustive-make-observable': 'warn',
14
+ 'mobx/missing-make-observable': 'error',
15
+ 'mobx/missing-observer': 'warn',
16
+ 'mobx/no-anonymous-observer': 'warn',
17
+ 'mobx/unconditional-make-observable': 'error',
18
+ },
19
+ },
20
+ ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itcase/lint",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "author": "ITCase",
5
5
  "description": "Code style linter configuration presets",
6
6
  "engines": {
package/readme.md CHANGED
@@ -1,72 +1,54 @@
1
1
  # ITCase Lint
2
2
 
3
- Пакет с пресетами конфигураций линтеров.
3
+ Presets of linter configurations
4
4
 
5
- ## Использование
6
-
7
- ### Установка
5
+ ## Installation
8
6
 
9
7
  ```bash
10
8
  $ npm i -D @itcase/lint eslint stylelint prettier
11
9
  ```
12
10
 
13
- ### Конфигурация
14
-
15
- #### С помощью `package.json`
16
-
17
- ```json
18
- {
19
- "prettier": "@itcase/lint/prettier",
20
- "eslintConfig": {
21
- "extends": "./node_modules/@itcase/lint/eslint/index.js"
22
- },
23
- "stylelint": {
24
- "extends": "@itcase/lint/stylelint"
25
- }
26
- }
27
- ```
28
-
29
- #### С помощью отдельных конфигурационных файлов
11
+ ## Usage
30
12
 
31
- ##### ESLint
13
+ ## ESLint
32
14
 
33
- Создать в корне проекта файл `.eslintrc.js` со следующим содержимым:
15
+ Create a `eslint.config.mjs` configuration file in the root of your project with the following content:
34
16
 
35
17
  ```js
36
- module.exports = {
37
- extends: require.resolve('@itcase/lint/eslint'),
38
- };
18
+ import eslint from '@itcase/lint/eslint/index.js'
19
+
20
+ export default eslint
39
21
  ```
40
22
 
41
- ##### Stylelint
23
+ ## Stylelint
42
24
 
43
- Создать в корне проекта файл `stylelint.config.js` со следующим содержимым:
25
+ Create a `eslint.config.mjs` configuration file in the root of your project with the following content:
44
26
 
45
27
  ```js
46
- module.exports = {
47
- extends: require.resolve('@itcase/lint/stylelint'),
48
- };
28
+ export default {
29
+ extends: ['@itcase/lint/stylelint/index.js'],
30
+ }
49
31
  ```
50
32
 
51
- ##### Prettier
52
-
53
- Создать в корне проекта файл `.prettierrc.js` со следующим содержимым:
33
+ ## Prettier
34
+ Create a `prettier.config.mjs` configuration file in the root of your project with the following content:
54
35
 
55
36
  ```js
56
- module.exports = require('@itcase/lint/prettier');
57
- ```
37
+ import prettier from '@itcase/lint/prettier/index.js'
58
38
 
59
- ### Настройка git-хуков
39
+ export default prettier
60
40
 
61
- Удобно использовать `husky` в связке с `lint-staged`, для этого необходимо:
41
+ ```
42
+
43
+ ## git-hook
62
44
 
63
- 1. Установить пакеты
45
+ 1. Use `husky` and `lint-staged`
64
46
 
65
47
  ```bash
66
48
  npm i -D husky lint-staged
67
49
  ```
68
50
 
69
- 2. Создать в корне проекта файл `.lintstagedrc` со следующим содержимым:
51
+ 2. Create a `.lintstagedrc` configuration file in the root of your project with the following content:
70
52
 
71
53
  ```json
72
54
  {
@@ -80,7 +62,13 @@ npm i -D husky lint-staged
80
62
 
81
63
  ```
82
64
 
83
- 3. Добавить **pre-commit** хук согласно документации husky: `npx lint-staged`
65
+ 3. Add **pre-commit** hook in `.husky/pre-commit`
84
66
 
85
- https://typicode.github.io/husky/how-to.html#adding-a-new-hook
67
+ ```bash
68
+ #!/bin/bash
86
69
 
70
+ if grep --include=*.{json,css,html} --exclude-dir={dist,node_modules,bower_components,.git} -nri --color -B 1 -A 1 '<\{7\} HEAD\|^\=\.{7\}\|>\.{7\}' .; then
71
+ echo 'Fix conflicts'
72
+ exit 1
73
+ else ./node_modules/lint-staged/bin/lint-staged.js; fi
74
+ ```