-
Notifications
You must be signed in to change notification settings - Fork 186
/
.eslintrc
172 lines (172 loc) · 5.73 KB
/
.eslintrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
{
"extends": [
"@skyscanner/eslint-config-skyscanner"
],
"env": {
"browser": true,
"jest": true
},
"settings": {
"import/resolver": {
"node": {
"extensions": [
".js",
".jsx",
".ts",
".tsx",
".json",
".android.js",
".ios.js"
]
}
}
},
"rules": {
// Temp adding this whilst migrating to the latest eslint & TS migration
// Activate this when we run the migration scripts
// "padding-line-between-statements": [
// "error",
// {
// "blankLine": "always",
// "prev": "*",
// "next": [
// "block",
// "block-like",
// "cjs-export",
// "class",
// "export",
// "import",
// "let",
// "var"
// ]
// },
// {
// "blankLine": "always",
// "prev": [
// "block",
// "block-like",
// "cjs-export",
// "class",
// "multiline-const",
// "export",
// "import",
// "let",
// "var"
// ],
// "next": "*"
// },
// {
// "blankLine": "never",
// "prev": [
// "singleline-const"
// ],
// "next": [
// "singleline-const"
// ]
// },
// {
// "blankLine": "any",
// "prev": [
// "cjs-import",
// "cjs-export",
// "export",
// "import"
// ],
// "next": [
// "cjs-import",
// "cjs-export",
// "export",
// "import",
// "singleline-const"
// ]
// }
// ],
"backpack/use-components": "off",
"react/jsx-filename-extension": "off",
"import/no-extraneous-dependencies": "off",
// TODO: Re-enable the following 7 rules
"prettier/prettier": "off",
"no-restricted-exports": "off",
"class-methods-use-this": "off",
"react/jsx-no-constructed-context-values": "off",
"react/no-unused-class-component-methods": "off",
"no-promise-executor-return": "off",
"import/no-import-module-exports": "off",
// This is superceded by jsx-a11y/label-has-associated-control
"jsx-a11y/label-has-for": "off",
// We want to keep prop-types alongside typescript types so we relax this rule to allow us to specify defaults for
// required typescript props
"react/default-props-match-prop-types": [
"error",
{
"allowRequiredDefaults": true
}
],
"react/require-default-props": "off",
"react/prefer-stateless-function": [
"error",
{
"ignorePureComponents": true
}
],
"react/sort-comp": [
"error",
{
"order": [
"type-annotations",
"static-methods",
"lifecycle",
"/^on.+$/",
"getters",
"setters",
"/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/",
"everything-else",
"/^render.+$/",
"render"
]
}
],
// Temp setting this to warn whilst migration to TS is in progress.
"no-undef": "warn",
"@skyscanner/rules/forbid-component-props": [
"error",
{
"forbid": [
{
"propName": "className",
"message":
"Prop {{prop}} is forbidden. See https://github.com/Skyscanner/eslint-plugin-rules?tab=readme-ov-file#forbid-component-props",
"allowedFor": [
"ArrowLeftIcon", // allowed for icon to continue supporting RTL with css
"ArrowRightIcon", // allowed for icon to continue supporting RTL with css
"BpkNavigationBar", // Major release required to resolve this impacting consumers risk is quite large.
"BpkSelectableChip", // allowed for prop that is part of the classnames applied to the BpkSelectableChip
"ComposedComponent", // allowed for wrapper needed for withRTLSupport HOC. Possibly not needed after icon refactor.
"CornerRadius", // allowed for a prop that is passed down in the BpkContentBubble as partof BpkFlare to a generated element and necessary to continue supporting svgClassName
"DateContainer", // allowed for a prop that is passed down in the BpkCalendarWeek to the DateContainer
"FloatingArrow", // allowed for a prop that is passed down to a generated element
"InnerContainer", // allowed for a prop that is passed down in the BpkMobileScrollContainer to a generated element
"ListElements", // allowed for a prop that is passed down in BpkList to the conditional list elements
"Pointer", // allowed for a prop that is passed down in the BpkFlareBar to a generated element and necessary to continue supporting svgClassName
"ScrimBpkModalInner", // allowed for a prop that is passed in BpkModal down to a scrim wrapped BpkModalInner component.
"TransitionComponent", // allowed for a prop that is passed in BpkCalendarGridTransition down to a "transition" component prop.
"WithOpenEventsInputComponent", // allowed for a prop as consumer className is passed in
"Slider.Root", // allowed for styling to be passed to radix-ui component
"Slider.Track", // allowed for styling to be passed to radix-ui component
"Slider.Range", // allowed for styling to be passed to radix-ui component
"Slider.Thumb" // allowed for styling to be passed to radix-ui component
]
}
]
}
]
},
"overrides": [
{
"files": ["*test*", "*examples*"],
"rules": {
"@skyscanner/rules/forbid-component-props": ["off"]
}
}
]
}