src/pkg/go/doc/doc.go - The Go Programming Language

Golang

Source file src/pkg/go/doc/doc.go

     1	// Copyright 2009 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	// Package doc extracts source code documentation from a Go AST.
     6	package doc
     7	
     8	import (
     9		"go/ast"
    10		"go/token"
    11	)
    12	
    13	// Package is the documentation for an entire package.
    14	type Package struct {
    15		Doc        string
    16		Name       string
    17		ImportPath string
    18		Imports    []string
    19		Filenames  []string
    20		Bugs       []string
    21	
    22		// declarations
    23		Consts []*Value
    24		Types  []*Type
    25		Vars   []*Value
    26		Funcs  []*Func
    27	}
    28	
    29	// Value is the documentation for a (possibly grouped) var or const declaration.
    30	type Value struct {
    31		Doc   string
    32		Names []string // var or const names in declaration order
    33		Decl  *ast.GenDecl
    34	
    35		order int
    36	}
    37	
    38	// Type is the documentation for a type declaration.
    39	type Type struct {
    40		Doc  string
    41		Name string
    42		Decl *ast.GenDecl
    43	
    44		// associated declarations
    45		Consts  []*Value // sorted list of constants of (mostly) this type
    46		Vars    []*Value // sorted list of variables of (mostly) this type
    47		Funcs   []*Func  // sorted list of functions returning this type
    48		Methods []*Func  // sorted list of methods (including embedded ones) of this type
    49	}
    50	
    51	// Func is the documentation for a func declaration.
    52	type Func struct {
    53		Doc  string
    54		Name string
    55		Decl *ast.FuncDecl
    56	
    57		// methods
    58		// (for functions, these fields have the respective zero value)
    59		Recv  string // actual   receiver "T" or "*T"
    60		Orig  string // original receiver "T" or "*T"
    61		Level int    // embedding level; 0 means not embedded
    62	}
    63	
    64	// Mode values control the operation of New.
    65	type Mode int
    66	
    67	const (
    68		// extract documentation for all package-level declarations,
    69		// not just exported ones
    70		AllDecls Mode = 1 << iota
    71	
    72		// show all embedded methods, not just the ones of
    73		// invisible (unexported) anonymous fields
    74		AllMethods
    75	)
    76	
    77	// New computes the package documentation for the given package AST.
    78	// New takes ownership of the AST pkg and may edit or overwrite it.
    79	//
    80	func New(pkg *ast.Package, importPath string, mode Mode) *Package {
    81		var r reader
    82		r.readPackage(pkg, mode)
    83		r.computeMethodSets()
    84		r.cleanupTypes()
    85		return &Package{
    86			Doc:        r.doc,
    87			Name:       pkg.Name,
    88			ImportPath: importPath,
    89			Imports:    sortedKeys(r.imports),
    90			Filenames:  r.filenames,
    91			Bugs:       r.bugs,
    92			Consts:     sortedValues(r.values, token.CONST),
    93			Types:      sortedTypes(r.types, mode&AllMethods != 0),
    94			Vars:       sortedValues(r.values, token.VAR),
    95			Funcs:      sortedFuncs(r.funcs, true),
    96		}
    97	}