src/handle-glamorous-references.js
function getName(path) {
    let namedNode

    path.find(parentPath => {
      if (parentPath.isObjectProperty()) {
        // const X = { Y: glamorous }
        namedNode = parentPath.node.key
      } else if (parentPath.isVariableDeclarator()) {
        // let X; X = glamorous
        namedNode = parentPath.node.id
      } else if (parentPath.isStatement()) {
        // we've hit a statement, we should stop crawling up
        return true
      }

      // we've got an displayName (if we need it) no need to continue
      if (namedNode) {
        return true
      }
      return false
    })

    // identifiers are the only thing we can reliably get a name from
    return t.isIdentifier(namedNode) ? namedNode.name : undefined
  }
function getName(path) {
    let namedNode

    path.find(parentPath => {
      if (parentPath.isObjectProperty()) {
        // const X = { Y: glamorous }
        namedNode = parentPath.node.key
      } else if (parentPath.isVariableDeclarator()) {
        // let X; X = glamorous
        namedNode = parentPath.node.id
      } else if (parentPath.isStatement()) {
        // we've hit a statement, we should stop crawling up
        return true
      }

      // we've got an displayName (if we need it) no need to continue
      if (namedNode) {
        return true
      }
      return false
    })

    // identifiers are the only thing we can reliably get a name from
    return t.isIdentifier(namedNode) ? namedNode.name : undefined
  }
function getName ( path ) { let namedNode path . find ( parentPath => { if ( parentPath . isObjectProperty ( ) ) { // const X = { Y: glamorous } namedNode = parentPath . node . key } else if ( parentPath . isVariableDeclarator ( ) ) { // let X; X = glamorous namedNode = parentPath . node . id } else if ( parentPath . isStatement ( ) ) { // we've hit a statement, we should stop crawling up return true } // we've got an displayName (if we need it) no need to continue if ( namedNode ) { return true } return false } ) // identifiers are the only thing we can reliably get a name from return t . isIdentifier ( namedNode ) ? namedNode . name : undefined }
credit: https://github.com/styled-components/babel-plugin-styled-components/blob/37a13e9c21c52148ce6e403100df54c0b1561a88/src/utils/getName.js
credit : https : // github . com / styled - components / babel - plugin - styled - components / blob / 37a13e9c21c52148ce6e403100df54c0b1561a88 / src / utils / getName . js