1
1
const { isPrimerComponent} = require ( '../utils/is-primer-component' )
2
+ const { getJSXOpeningElementName} = require ( '../utils/get-jsx-opening-element-name' )
2
3
const { pick} = require ( '@styled-system/props' )
3
4
const { some, last} = require ( 'lodash' )
4
5
@@ -12,18 +13,31 @@ const utilityComponents = new Set(['Box', 'Text'])
12
13
13
14
// Components for which we allow a set of prop names
14
15
const excludedComponentProps = new Map ( [
16
+ [ 'ActionMenu.Overlay' , new Set ( [ 'width' , 'height' , 'maxHeight' , 'position' , 'top' , 'right' , 'bottom' , 'left' ] ) ] ,
17
+ [ 'Autocomplete.Overlay' , new Set ( [ 'width' , 'height' , 'maxHeight' , 'position' , 'top' , 'right' , 'bottom' , 'left' ] ) ] ,
15
18
[ 'AnchoredOverlay' , new Set ( [ 'width' , 'height' ] ) ] ,
16
19
[ 'Avatar' , new Set ( [ 'size' ] ) ] ,
17
20
[ 'AvatarToken' , new Set ( [ 'size' ] ) ] ,
18
21
[ 'CircleOcticon' , new Set ( [ 'size' ] ) ] ,
19
22
[ 'Dialog' , new Set ( [ 'width' , 'height' ] ) ] ,
20
23
[ 'IssueLabelToken' , new Set ( [ 'size' ] ) ] ,
24
+ [ 'Overlay' , new Set ( [ 'width' , 'height' , 'maxHeight' , 'position' , 'top' , 'right' , 'bottom' , 'left' ] ) ] ,
21
25
[ 'ProgressBar' , new Set ( [ 'bg' ] ) ] ,
22
26
[ 'Spinner' , new Set ( [ 'size' ] ) ] ,
27
+ [ 'SplitPageLayout.Header' , new Set ( [ 'padding' ] ) ] ,
28
+ [ 'SplitPageLayout.Footer' , new Set ( [ 'padding' ] ) ] ,
29
+ [ 'SplitPageLayout.Pane' , new Set ( [ 'padding' , 'position' , 'width' ] ) ] ,
30
+ [ 'SplitPageLayout.Content' , new Set ( [ 'padding' , 'width' ] ) ] ,
23
31
[ 'StyledOcticon' , new Set ( [ 'size' ] ) ] ,
24
32
[ 'PointerBox' , new Set ( [ 'bg' ] ) ] ,
33
+ [ 'TextInput' , new Set ( [ 'size' ] ) ] ,
34
+ [ 'TextInputWithTokens' , new Set ( [ 'size' , 'maxHeight' ] ) ] ,
25
35
[ 'Token' , new Set ( [ 'size' ] ) ] ,
26
36
[ 'PageLayout' , new Set ( [ 'padding' ] ) ] ,
37
+ [ 'PageLayout.Header' , new Set ( [ 'padding' ] ) ] ,
38
+ [ 'PageLayout.Footer' , new Set ( [ 'padding' ] ) ] ,
39
+ [ 'PageLayout.Pane' , new Set ( [ 'padding' , 'position' , 'width' ] ) ] ,
40
+ [ 'PageLayout.Content' , new Set ( [ 'padding' , 'width' ] ) ] ,
27
41
[ 'ProgressBar' , new Set ( [ 'bg' ] ) ] ,
28
42
[ 'PointerBox' , new Set ( [ 'bg' ] ) ]
29
43
] )
@@ -65,7 +79,10 @@ module.exports = {
65
79
return {
66
80
JSXOpeningElement ( jsxNode ) {
67
81
if ( ! skipImportCheck && ! isPrimerComponent ( jsxNode . name , context . getScope ( jsxNode ) ) ) return
68
- if ( excludedComponents . has ( jsxNode . name . name ) ) return
82
+
83
+ const componentName = getJSXOpeningElementName ( jsxNode )
84
+
85
+ if ( excludedComponents . has ( componentName ) ) return
69
86
70
87
// Create an object mapping from prop name to the AST node for that attribute
71
88
const propsByNameObject = jsxNode . attributes . reduce ( ( object , attribute ) => {
@@ -80,8 +97,8 @@ module.exports = {
80
97
// Create an array of system prop attribute nodes
81
98
let systemProps = Object . values ( pick ( propsByNameObject ) )
82
99
83
- const excludedProps = excludedComponentProps . has ( jsxNode . name . name )
84
- ? new Set ( [ ...alwaysExcludedProps , ...excludedComponentProps . get ( jsxNode . name . name ) ] )
100
+ const excludedProps = excludedComponentProps . has ( componentName )
101
+ ? new Set ( [ ...alwaysExcludedProps , ...excludedComponentProps . get ( componentName ) ] )
85
102
: alwaysExcludedProps
86
103
87
104
// Filter out our exceptional props
@@ -94,7 +111,7 @@ module.exports = {
94
111
node : jsxNode ,
95
112
messageId : 'noSystemProps' ,
96
113
data : {
97
- componentName : jsxNode . name . name ,
114
+ componentName,
98
115
propNames : systemProps . map ( a => a . name . name ) . join ( ', ' )
99
116
} ,
100
117
fix ( fixer ) {
0 commit comments