var GoVersionRE = lazyregexp.New(`([1-9][0-9]*)\.(0|[1-9][0-9]*)`)
func AutoQuote(s string) string
AutoQuote returns s or, if quoting is required for s to appear in a go.mod, the quotation of s.
func Format(f *FileSyntax) []byte
func IsDirectoryPath(ns string) bool
IsDirectoryPath reports whether the given path should be interpreted as a directory path. Just like on the go command line, relative paths and rooted paths are directory paths; the rest are module paths.
func ModulePath(mod []byte) string
ModulePath returns the module path from the gomod file text. If it cannot find a module path, it returns an empty string. It is tolerant of unrelated problems in the go.mod file.
func MustQuote(s string) bool
MustQuote reports whether s must be quoted in order to appear as a single token in a go.mod line.
func ParseGopkgIn(path string) (root, repo, major, subdir string, ok bool)
ParseGopkgIn splits gopkg.in import paths into their constituent parts
type Comment struct { Start Position Token string // without trailing newline Suffix bool // an end of line (not whole line) comment }
A Comment represents a single // comment.
type CommentBlock struct { Comments Start Position }
A CommentBlock represents a top-level block of comments separate from any rule.
func (x *CommentBlock) Span() (start, end Position)
type Comments struct { Before []Comment // whole-line comments before this expression Suffix []Comment // end-of-line comments after this expression // For top-level expressions only, After lists whole-line // comments following the expression. After []Comment }
Comments collects the comments associated with an expression.
func (c *Comments) Comment() *Comments
Comment returns the receiver. This isn't useful by itself, but a Comments struct is embedded into all the expression implementation types, and this gives each of those a Comment method to satisfy the Expr interface.
type Error struct { Verb string ModPath string Err error }
func (e *Error) Error() string
func (e *Error) Unwrap() error
type Exclude struct { Mod module.Version Syntax *Line }
An Exclude is a single exclude statement.
type Expr interface { // Span returns the start and end position of the expression, // excluding leading or trailing comments. Span() (start, end Position) // Comment returns the comments attached to the expression. // This method would normally be named 'Comments' but that // would interfere with embedding a type of the same name. Comment() *Comments }
An Expr represents an input element.
type File struct { Module *Module Go *Go Require []*Require Exclude []*Exclude Replace []*Replace Syntax *FileSyntax }
A File is the parsed, interpreted form of a go.mod file.
func Parse(file string, data []byte, fix VersionFixer) (*File, error)
Parse parses the data, reported in errors as being from file, into a File struct. It applies fix, if non-nil, to canonicalize all module versions found.
func ParseLax(file string, data []byte, fix VersionFixer) (*File, error)
ParseLax is like Parse but ignores unknown statements. It is used when parsing go.mod files other than the main module, under the theory that most statement types we add in the future will only apply in the main module, like exclude and replace, and so we get better gradual deployments if old go commands simply ignore those statements when found in go.mod files in dependencies.
func (f *File) AddComment(text string)
func (f *File) AddExclude(path, vers string) error
func (f *File) AddGoStmt(version string) error
func (f *File) AddModuleStmt(path string) error
func (f *File) AddNewRequire(path, vers string, indirect bool)
func (f *File) AddReplace(oldPath, oldVers, newPath, newVers string) error
func (f *File) AddRequire(path, vers string) error
func (f *File) Cleanup()
Cleanup cleans up the file f after any edit operations. To avoid quadratic behavior, modifications like DropRequire clear the entry but do not remove it from the slice. Cleanup cleans out all the cleared entries.
func (f *File) DropExclude(path, vers string) error
func (f *File) DropReplace(oldPath, oldVers string) error
func (f *File) DropRequire(path string) error
func (f *File) Format() ([]byte, error)
func (f *File) SetRequire(req []*Require)
func (f *File) SortBlocks()
type FileSyntax struct { Name string // file path Comments Stmt []Expr }
A FileSyntax represents an entire go.mod file.
func (x *FileSyntax) Cleanup()
Cleanup cleans up the file syntax x after any edit operations. To avoid quadratic behavior, removeLine marks the line as dead by setting line.Token = nil but does not remove it from the slice in which it appears. After edits have all been indicated, calling Cleanup cleans out the dead lines.
func (x *FileSyntax) Span() (start, end Position)
type Go struct { Version string // "1.23" Syntax *Line }
A Go is the go statement.
type LParen struct { Comments Pos Position }
An LParen represents the beginning of a parenthesized line block. It is a place to store suffix comments.
func (x *LParen) Span() (start, end Position)
type Line struct { Comments Start Position Token []string InBlock bool End Position }
A Line is a single line of tokens.
func (x *Line) Span() (start, end Position)
type LineBlock struct { Comments Start Position LParen LParen Token []string Line []*Line RParen RParen }
A LineBlock is a factored block of lines, like
require ( "x" "y" )
func (x *LineBlock) Span() (start, end Position)
type Module struct { Mod module.Version Syntax *Line }
A Module is the module statement.
type Position struct { Line int // line in input (starting at 1) LineRune int // rune in line (starting at 1) Byte int // byte in input (starting at 0) }
A Position describes the position between two bytes of input.
type RParen struct { Comments Pos Position }
An RParen represents the end of a parenthesized line block. It is a place to store whole-line (before) comments.
func (x *RParen) Span() (start, end Position)
type Replace struct { Old module.Version New module.Version Syntax *Line }
A Replace is a single replace statement.
type Require struct { Mod module.Version Indirect bool // has "// indirect" comment Syntax *Line }
A Require is a single require statement.
type VersionFixer func(path, version string) (string, error)