// packageClauseCompletions offers completions for a package declaration when // one is not present in the given file. func packageClauseCompletions(ctx context.Context, snapshot *cache.Snapshot, fh file.Handle, position protocol.Position) ([]CompletionItem, *Selection, error) { … } // packageCompletionSurrounding returns surrounding for package completion if a // package completions can be suggested at a given cursor offset. A valid location // for package completion is above any declarations or import statements. func packageCompletionSurrounding(pgf *parsego.File, offset int) (*Selection, error) { … } func cursorInComment(file *token.File, cursor token.Pos, src []byte) bool { … } // packageNameCompletions returns name completions for a package clause using // the current name as prefix. func (c *completer) packageNameCompletions(ctx context.Context, fileURI protocol.DocumentURI, name *ast.Ident) error { … } // packageSuggestions returns a list of packages from workspace packages that // have the given prefix and are used in the same directory as the given // file. This also includes test packages for these packages (<pkg>_test) and // the directory name itself. func packageSuggestions(ctx context.Context, snapshot *cache.Snapshot, fileURI protocol.DocumentURI, prefix string) (packages []candidate, err error) { … } // isValidDirName checks whether the passed directory name can be used in // a package path. Requirements for a package path can be found here: // https://golang.org/ref/mod#go-mod-file-ident. func isValidDirName(dirName string) bool { … } // convertDirNameToPkgName converts a valid directory name to a valid package name. // It leaves only letters and digits. All letters are mapped to lower case. func convertDirNameToPkgName(dirName string) golang.PackageName { … } func isLetter(ch rune) bool { … } func isDigit(ch rune) bool { … } func isAllowedPunctuation(ch rune) bool { … }