// Diagnose computes diagnostics for fillable struct literals overlapping with // the provided start and end position of file f. // // The diagnostic contains a lazy fix; the actual patch is computed // (via the ApplyFix command) by a call to [SuggestedFix]. // // If either start or end is invalid, the entire file is inspected. func Diagnose(f *ast.File, start, end token.Pos, pkg *types.Package, info *types.Info) []analysis.Diagnostic { … } const FixCategory … // SuggestedFix computes the suggested fix for the kinds of // diagnostics produced by the Analyzer above. func SuggestedFix(fset *token.FileSet, start, end token.Pos, content []byte, file *ast.File, pkg *types.Package, info *types.Info) (*token.FileSet, *analysis.SuggestedFix, error) { … } // indent works line by line through str, indenting (prefixing) each line with // ind. func indent(str, ind []byte) []byte { … } // populateValue constructs an expression to fill the value of a struct field. // // When the type of a struct field is a basic literal or interface, we return // default values. For other types, such as maps, slices, and channels, we create // empty expressions such as []T{} or make(chan T) rather than using default values. // // The reasoning here is that users will call fillstruct with the intention of // initializing the struct, in which case setting these fields to nil has no effect. // // populateValue returns nil if the value cannot be filled. func populateValue(f *ast.File, pkg *types.Package, typ types.Type) ast.Expr { … }