docs: function getSymbolNodes (rhs, gsnConfig) {
    gsnConfig = gsnConfig || {}
    return this.findNodes (rhs, {
      nodePredicate: function (nodeConfig, node) {
        function addLinkInfo (foundNode) {
  	return (gsnConfig.addParentLinkInfo
                  ? extend (foundNode,
                            nodeConfig.inLink
                            ? { inLink: true,
                                linkText: nodeConfig.linkText,
                                link: nodeConfig.link }
                            : { inLink: false })
                  : foundNode)
        }
        if (typeof(node) === 'object')
          switch (node.type) {
          case 'cond':
  	  if (isTraceryExpr (node)
  	      && !gsnConfig.ignoreTracery)
  	    return addLinkInfo (node.f[0])
            break
          case 'sym':
            if (!gsnConfig.ignoreSymbols)
  	    return addLinkInfo (node)
            break
          case 'lookup':
            if (gsnConfig.reportLookups)
  	    return addLinkInfo (node)
            break
          case 'assign':
            if (gsnConfig.reportAssigns)
  	    return addLinkInfo (node)
            break
          case 'func':
            if (((isLinkExpr(node) && !nodeConfig.parentLayoutLink)
                 || isLayoutLinkExpr(node))
                && gsnConfig.reportLinks) {
              return addLinkInfo (node)
            }
            if (isEvalVar(node) && gsnConfig.reportEvals)
              return addLinkInfo (node)
            break
          default:
            break
          }
        return false
      },
      makeChildConfig: function (nodeConfig, node, nChild) {
        if (typeof(node) === 'object') {
          switch (node.type) {
          case 'func':
            if (node.funcname === 'link')
              return (gsnConfig.ignoreLinkSubtrees && nChild === 1
                      ? { excludeSubtree: true }
                      : extend ({},
                                nodeConfig,
                                { inLink: true,
                                  linkText: node.args[0],
                                  link: nodeConfig.parentLayoutLink || node },
                                nodeConfig.parentLayoutLink
                                ? { parentLayoutLink: null }
                                : {}))
            else if (isLayoutLinkExpr(node) && gsnConfig.reportLinks)
              return extend ({},
                             nodeConfig,
                             { parentLayoutLink: node });
            break
          case 'cond':
            if (isTraceryExpr(node))
              return { excludeSubtree: true }
            break
          default:
            break
          }
        }
        return nodeConfig
      }
    })
  }