MCPcopy
hub / github.com/micro-editor/micro / FileComplete

Function FileComplete

internal/buffer/autocomplete.go:105–151  ·  view source on GitHub ↗

FileComplete autocompletes filenames

(b *Buffer)

Source from the content-addressed store, hash-verified

103
104// FileComplete autocompletes filenames
105func FileComplete(b *Buffer) ([]string, []string) {
106 c := b.GetActiveCursor()
107 input, argstart := b.GetArg()
108
109 sep := string(os.PathSeparator)
110 dirs := strings.Split(input, sep)
111
112 var files []fs.DirEntry
113 var err error
114 if len(dirs) > 1 {
115 directories := strings.Join(dirs[:len(dirs)-1], sep) + sep
116
117 directories, _ = util.ReplaceHome(directories)
118 files, err = os.ReadDir(directories)
119 } else {
120 files, err = os.ReadDir(".")
121 }
122
123 if err != nil {
124 return nil, nil
125 }
126
127 var suggestions []string
128 for _, f := range files {
129 name := f.Name()
130 if f.IsDir() {
131 name += sep
132 }
133 if strings.HasPrefix(name, dirs[len(dirs)-1]) {
134 suggestions = append(suggestions, name)
135 }
136 }
137
138 sort.Strings(suggestions)
139 completions := make([]string, len(suggestions))
140 for i := range suggestions {
141 var complete string
142 if len(dirs) > 1 {
143 complete = strings.Join(dirs[:len(dirs)-1], sep) + sep + suggestions[i]
144 } else {
145 complete = suggestions[i]
146 }
147 completions[i] = util.SliceEndStr(complete, c.X-argstart)
148 }
149
150 return completions, suggestions
151}
152
153// BufferComplete autocompletes based on previous words in the buffer
154func BufferComplete(b *Buffer) ([]string, []string) {

Callers

nothing calls this directly

Calls 6

ReplaceHomeFunction · 0.92
SliceEndStrFunction · 0.92
GetActiveCursorMethod · 0.80
GetArgMethod · 0.80
JoinMethod · 0.80
NameMethod · 0.65

Tested by

no test coverage detected