code: func (g *Generator) symbol(module, lookup string) (*symbol, error) {
  	mod, err := g.load(module)
  	if err != nil {
  		return nil, err
  	}
  
  	var lookupPath []string
  	if lookup != "" {
  		lookupPath = strings.Split(lookup, ".")
  	}
  
  	sym := &symbol{
  		Symbol:   symbols.Lookup(mod, lookupPath...),
  		Module:   module,
  		FullName: lookup,
  	}
  
  	// Let automatic linkifier know about the loaded symbols so it can start
  	// generating links to them if it encounters them in the text.
  	syms, _ := sym.Symbols()
  	for _, s := range syms {
  		g.links[s.FullName] = s
  	}
  
  	return sym, nil
  }
docs: // symbol returns a symbol from the given module.
  //
  // lookup is a field path, e.g. "a.b.c". "a" will be searched for in the
  // top-level dict of the module. If empty, the module itself will be returned.
  //
  // If the requested symbol can't be found, returns a broken symbol.