@@ -124,6 +124,36 @@ function peek(arr) {
124
124
return arr [ arr . length - 1 ]
125
125
}
126
126
127
+ /**
128
+ * Gets the full object name for a MemberExpression or Identifier
129
+ * @param {import('estree').MemberExpression | import('estree').Identifier } node
130
+ * @returns {string }
131
+ */
132
+ function getFullObjectName ( node ) {
133
+ if ( node . type === 'Identifier' ) {
134
+ return node . name
135
+ }
136
+ const objectName = getFullObjectName ( node . object )
137
+ const propertyName = node . property . name
138
+ return `${ objectName } ${ node . computed ? '[' : '.' } ${ propertyName } ${ node . computed ? ']' : '' } `
139
+ }
140
+
141
+ /**
142
+ * Checks if the given name starts with an ignored variable
143
+ * @param {string } name
144
+ * @param {string[] } ignoredVars
145
+ * @returns {boolean }
146
+ */
147
+ function startsWithIgnoredVar ( name , ignoredVars ) {
148
+ return ignoredVars . some (
149
+ ( ignoredVar ) =>
150
+ name === ignoredVar ||
151
+ ( name . startsWith ( ignoredVar ) &&
152
+ ( name . charAt ( ignoredVar . length ) === '.' ||
153
+ name . charAt ( ignoredVar . length ) === '[' ) ) ,
154
+ )
155
+ }
156
+
127
157
/**
128
158
* Checks if the node is an assignment to an ignored variable
129
159
* @param {Node } node
@@ -137,17 +167,10 @@ function isIgnoredAssignment(node, ignoredVars) {
137
167
const left = expr . left
138
168
// istanbul ignore else
139
169
if ( left . type === 'MemberExpression' ) {
140
- if ( left . object . type === 'Identifier' ) {
141
- return ignoredVars . includes ( left . object . name )
142
- }
143
- if (
144
- left . object . type === 'MemberExpression' &&
145
- left . object . object . type === 'Identifier'
146
- ) {
147
- const fullName = `${ left . object . object . name } .${ left . object . property . name } `
148
- return ignoredVars . includes ( fullName )
149
- }
170
+ const fullName = getFullObjectName ( left . object )
171
+ return startsWithIgnoredVar ( fullName , ignoredVars )
150
172
}
173
+ // istanbul ignore next
151
174
// fallback
152
175
return false
153
176
}
0 commit comments