code: func (p *fileParser) parseFile(importPath string, file *ast.File) (*model.Package, error) {
  	allImports, dotImports := importsOfFile(file)
  	// Don't stomp imports provided by -imports. Those should take precedence.
  	for pkg, path := range allImports {
  		if _, ok := p.imports[pkg]; !ok {
  			p.imports[pkg] = path
  		}
  	}
  	// Add imports from auxiliary files, which might be needed for embedded interfaces.
  	// Don't stomp any other imports.
  	for _, f := range p.auxFiles {
  		auxImports, _ := importsOfFile(f)
  		for pkg, path := range auxImports {
  			if _, ok := p.imports[pkg]; !ok {
  				p.imports[pkg] = path
  			}
  		}
  	}
  
  	var is []*model.Interface
  	for ni := range iterInterfaces(file) {
  		i, err := p.parseInterface(ni.name.String(), importPath, ni.it)
  		if err != nil {
  			return nil, err
  		}
  		is = append(is, i)
  	}
  	return &model.Package{
  		Name:       file.Name.String(),
  		Interfaces: is,
  		DotImports: dotImports,
  	}, nil
  }
docs: // parseFile loads all file imports and auxiliary files import into the
  // fileParser, parses all file interfaces and returns package model.