docs: function (node) {
        let currentNode = node;
        let i;
        let j;
        let k;
        let l;
        // Get the component path
        const componentPath = [];
        while (currentNode) {
          if (currentNode.property && currentNode.property.type === 'Identifier') {
            componentPath.push(currentNode.property.name);
          }
          if (currentNode.object && currentNode.object.type === 'Identifier') {
            componentPath.push(currentNode.object.name);
          }
          currentNode = currentNode.object;
        }
        componentPath.reverse();
  
        // Find the variable in the current scope
        const variableName = componentPath.shift();
        if (!variableName) {
          return null;
        }
        let variableInScope;
        const variables = context.getScope().variables;
        for (i = 0, j = variables.length; i < j; i++) { // eslint-disable-line no-plusplus
          if (variables[i].name === variableName) {
            variableInScope = variables[i];
            break;
          }
        }
        if (!variableInScope) {
          return null;
        }
  
        // Find the variable declaration
        let defInScope;
        const defs = variableInScope.defs;
        for (i = 0, j = defs.length; i < j; i++) { // eslint-disable-line no-plusplus
          if (
            defs[i].type === 'ClassName' ||
            defs[i].type === 'FunctionName' ||
            defs[i].type === 'Variable'
          ) {
            defInScope = defs[i];
            break;
          }
        }
        if (!defInScope) {
          return null;
        }
        currentNode = defInScope.node.init || defInScope.node;
  
        // Traverse the node properties to the component declaration
        for (i = 0, j = componentPath.length; i < j; i++) { // eslint-disable-line no-plusplus
          if (!currentNode.properties) {
            continue; // eslint-disable-line no-continue
          }
          for (k = 0, l = currentNode.properties.length; k < l; k++) { // eslint-disable-line no-plusplus, max-len
            if (currentNode.properties[k].key.name === componentPath[i]) {
              currentNode = currentNode.properties[k];
              break;
            }
          }
          if (!currentNode) {
            return null;
          }
          currentNode = currentNode.value;
        }
  
        // Return the component
        return components.get(currentNode);
      }