const markMethod … const eofIdentifier … // Expect invokes the supplied methods for all expectation notes found in // the exported source files. // // All exported go source files are parsed to collect the expectation // notes. // See the documentation for expect.Parse for how the notes are collected // and parsed. // // The methods are supplied as a map of name to function, and those functions // will be matched against the expectations by name. // Notes with no matching function will be skipped, and functions with no // matching notes will not be invoked. // If there are no registered markers yet, a special pass will be run first // which adds any markers declared with @mark(Name, pattern) or @name. These // call the Mark method to add the marker to the global set. // You can register the "mark" method to override these in your own call to // Expect. The bound Mark function is usable directly in your method map, so // // exported.Expect(map[string]interface{}{"mark": exported.Mark}) // // replicates the built in behavior. // // # Method invocation // // When invoking a method the expressions in the parameter list need to be // converted to values to be passed to the method. // There are a very limited set of types the arguments are allowed to be. // // expect.Note : passed the Note instance being evaluated. // string : can be supplied either a string literal or an identifier. // int : can only be supplied an integer literal. // *regexp.Regexp : can only be supplied a regular expression literal // token.Pos : has a file position calculated as described below. // token.Position : has a file position calculated as described below. // expect.Range: has a start and end position as described below. // interface{} : will be passed any value // // # Position calculation // // There is some extra handling when a parameter is being coerced into a // token.Pos, token.Position or Range type argument. // // If the parameter is an identifier, it will be treated as the name of an // marker to look up (as if markers were global variables). // // If it is a string or regular expression, then it will be passed to // expect.MatchBefore to look up a match in the line at which it was declared. // // It is safe to call this repeatedly with different method sets, but it is // not safe to call it concurrently. func (e *Exported) Expect(methods map[string]interface{ … } type Range … // Mark adds a new marker to the known set. func (e *Exported) Mark(name string, r Range) { … } func (e *Exported) getNotes() error { … } func goModMarkers(e *Exported, gomod string) ([]*expect.Note, error) { … } func (e *Exported) getMarkers() error { … } var noteType … var identifierType … var posType … var positionType … var rangeType … var fsetType … var regexType … var exportedType … type converter … type method … // buildConverter works out what function should be used to go from an ast expressions to a reflect // value of the type expected by a method. // It is called when only the target type is know, it returns converters that are flexible across // all supported expression types for that target type. func (e *Exported) buildConverter(pt reflect.Type) (converter, error) { … } func (e *Exported) rangeConverter(n *expect.Note, args []interface{ … } // newRange creates a new Range from a token.File and two valid positions within it. func newRange(file *token.File, start, end token.Pos) Range { … }