Black Lives Matter. Support the Equal Justice Initiative.

Source file src/go/types/api_notypeparams.go

Documentation: go/types

     1  // Copyright 2021 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  //go:build !typeparams
     6  // +build !typeparams
     7  
     8  package types
     9  
    10  import "go/ast"
    11  
    12  // Info holds result type information for a type-checked package.
    13  // Only the information for which a map is provided is collected.
    14  // If the package has type errors, the collected information may
    15  // be incomplete.
    16  type Info struct {
    17  	// Types maps expressions to their types, and for constant
    18  	// expressions, also their values. Invalid expressions are
    19  	// omitted.
    20  	//
    21  	// For (possibly parenthesized) identifiers denoting built-in
    22  	// functions, the recorded signatures are call-site specific:
    23  	// if the call result is not a constant, the recorded type is
    24  	// an argument-specific signature. Otherwise, the recorded type
    25  	// is invalid.
    26  	//
    27  	// The Types map does not record the type of every identifier,
    28  	// only those that appear where an arbitrary expression is
    29  	// permitted. For instance, the identifier f in a selector
    30  	// expression x.f is found only in the Selections map, the
    31  	// identifier z in a variable declaration 'var z int' is found
    32  	// only in the Defs map, and identifiers denoting packages in
    33  	// qualified identifiers are collected in the Uses map.
    34  	Types map[ast.Expr]TypeAndValue
    35  
    36  	// Defs maps identifiers to the objects they define (including
    37  	// package names, dots "." of dot-imports, and blank "_" identifiers).
    38  	// For identifiers that do not denote objects (e.g., the package name
    39  	// in package clauses, or symbolic variables t in t := x.(type) of
    40  	// type switch headers), the corresponding objects are nil.
    41  	//
    42  	// For an embedded field, Defs returns the field *Var it defines.
    43  	//
    44  	// Invariant: Defs[id] == nil || Defs[id].Pos() == id.Pos()
    45  	Defs map[*ast.Ident]Object
    46  
    47  	// Uses maps identifiers to the objects they denote.
    48  	//
    49  	// For an embedded field, Uses returns the *TypeName it denotes.
    50  	//
    51  	// Invariant: Uses[id].Pos() != id.Pos()
    52  	Uses map[*ast.Ident]Object
    53  
    54  	// Implicits maps nodes to their implicitly declared objects, if any.
    55  	// The following node and object types may appear:
    56  	//
    57  	//     node               declared object
    58  	//
    59  	//     *ast.ImportSpec    *PkgName for imports without renames
    60  	//     *ast.CaseClause    type-specific *Var for each type switch case clause (incl. default)
    61  	//     *ast.Field         anonymous parameter *Var (incl. unnamed results)
    62  	//
    63  	Implicits map[ast.Node]Object
    64  
    65  	// Selections maps selector expressions (excluding qualified identifiers)
    66  	// to their corresponding selections.
    67  	Selections map[*ast.SelectorExpr]*Selection
    68  
    69  	// Scopes maps ast.Nodes to the scopes they define. Package scopes are not
    70  	// associated with a specific node but with all files belonging to a package.
    71  	// Thus, the package scope can be found in the type-checked Package object.
    72  	// Scopes nest, with the Universe scope being the outermost scope, enclosing
    73  	// the package scope, which contains (one or more) files scopes, which enclose
    74  	// function scopes which in turn enclose statement and function literal scopes.
    75  	// Note that even though package-level functions are declared in the package
    76  	// scope, the function scopes are embedded in the file scope of the file
    77  	// containing the function declaration.
    78  	//
    79  	// The following node types may appear in Scopes:
    80  	//
    81  	//     *ast.File
    82  	//     *ast.FuncType
    83  	//     *ast.BlockStmt
    84  	//     *ast.IfStmt
    85  	//     *ast.SwitchStmt
    86  	//     *ast.TypeSwitchStmt
    87  	//     *ast.CaseClause
    88  	//     *ast.CommClause
    89  	//     *ast.ForStmt
    90  	//     *ast.RangeStmt
    91  	//
    92  	Scopes map[ast.Node]*Scope
    93  
    94  	// InitOrder is the list of package-level initializers in the order in which
    95  	// they must be executed. Initializers referring to variables related by an
    96  	// initialization dependency appear in topological order, the others appear
    97  	// in source order. Variables without an initialization expression do not
    98  	// appear in this list.
    99  	InitOrder []*Initializer
   100  }
   101  
   102  func getInferred(info *Info) map[ast.Expr]_Inferred {
   103  	return nil
   104  }
   105  

View as plain text