@@ -124,6 +124,36 @@ function peek(arr) {
124124 return arr [ arr . length - 1 ]
125125}
126126
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+
127157/**
128158 * Checks if the node is an assignment to an ignored variable
129159 * @param {Node } node
@@ -137,17 +167,10 @@ function isIgnoredAssignment(node, ignoredVars) {
137167 const left = expr . left
138168 // istanbul ignore else
139169 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 )
150172 }
173+ // istanbul ignore next
151174 // fallback
152175 return false
153176}
0 commit comments