diff --git a/internal/fsext/ls.go b/internal/fsext/ls.go index 5fef4a594dea49fbb0d1fd257401f0f84abe8765..2c1df52b4470dba771f7da5966be4ecc990c29e3 100644 --- a/internal/fsext/ls.go +++ b/internal/fsext/ls.go @@ -206,16 +206,20 @@ func (dl *directoryLister) getIgnore(path string) ignore.IgnoreParser { } type ( - DirectoryLister func(initialPath string, ignorePatterns []string, depth, limit int) ([]string, bool, error) + DirectoryLister func(initialPath string, ignorePatterns []string) ([]string, bool, error) DirectoryListerResolver func() DirectoryLister ) -func ResolveDirectoryLister() DirectoryLister { - return listDirectory +func ResolveDirectoryLister(maxDepth, limit int) DirectoryListerResolver { + return func() DirectoryLister { + return listDirectory(maxDepth, limit) + } } -func listDirectory(initialPath string, ignorePatterns []string, depth, limit int) ([]string, bool, error) { - return ListDirectory(initialPath, ignorePatterns, depth, limit) +func listDirectory(maxDepth, limit int) func(initialPath string, ignorePatterns []string) ([]string, bool, error) { + return func(initialPath string, ignorePatterns []string) ([]string, bool, error) { + return ListDirectory(initialPath, ignorePatterns, maxDepth, limit) + } } // ListDirectory lists files and directories in the specified path, diff --git a/internal/tui/components/chat/editor/editor.go b/internal/tui/components/chat/editor/editor.go index 97254f20b51864b1495323b7b7250aee2867fc46..8f5f7122f353e0e8fdb62129697d1eccdc558485 100644 --- a/internal/tui/components/chat/editor/editor.go +++ b/internal/tui/components/chat/editor/editor.go @@ -336,7 +336,8 @@ func (m *editorCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.isCompletionsOpen = true m.currentQuery = "" m.completionsStartIndex = curIdx - cmds = append(cmds, m.startCompletions) + + cmds = append(cmds, m.startCompletions()) case m.isCompletionsOpen && curIdx <= m.completionsStartIndex: cmds = append(cmds, util.CmdHandler(completions.CloseCompletionsMsg{})) } @@ -547,27 +548,27 @@ func (m *editorCmp) SetPosition(x, y int) tea.Cmd { return nil } -func (m *editorCmp) startCompletions() tea.Msg { - ls := m.app.Config().Options.TUI.Completions - depth, limit := ls.Limits() - files, _, _ := m.listDirResolver()(".", nil, depth, limit) - slices.Sort(files) - completionItems := make([]completions.Completion, 0, len(files)) - for _, file := range files { - file = strings.TrimPrefix(file, "./") - completionItems = append(completionItems, completions.Completion{ - Title: file, - Value: FileCompletionItem{ - Path: file, - }, - }) - } +func (m *editorCmp) startCompletions() func() tea.Msg { + return func() tea.Msg { + files, _, _ := m.listDirResolver()(".", nil) + slices.Sort(files) + completionItems := make([]completions.Completion, 0, len(files)) + for _, file := range files { + file = strings.TrimPrefix(file, "./") + completionItems = append(completionItems, completions.Completion{ + Title: file, + Value: FileCompletionItem{ + Path: file, + }, + }) + } - x, y := m.completionsPosition() - return completions.OpenCompletionsMsg{ - Completions: completionItems, - X: x, - Y: y, + x, y := m.completionsPosition() + return completions.OpenCompletionsMsg{ + Completions: completionItems, + X: x, + Y: y, + } } } @@ -661,5 +662,6 @@ func newEditor(app *app.App, resolveDirLister fsext.DirectoryListerResolver) *ed } func New(app *app.App) Editor { - return newEditor(app, fsext.ResolveDirectoryLister) + ls := app.Config().Options.TUI.Completions.Limits + return newEditor(app, fsext.ResolveDirectoryLister(ls())) } diff --git a/internal/tui/components/chat/editor/editor_test.go b/internal/tui/components/chat/editor/editor_test.go index 6526e38e0a8cc1151fd1586d695db54145cf7994..82cd2045794d4a0dbc73c69bb4acdbd4ab210ccb 100644 --- a/internal/tui/components/chat/editor/editor_test.go +++ b/internal/tui/components/chat/editor/editor_test.go @@ -108,7 +108,7 @@ func assertBatchContainsOpenCompletionsMsg(t *testing.T, batchMsg tea.BatchMsg, func mockDirLister(paths []string) fsext.DirectoryListerResolver { return func() fsext.DirectoryLister { - return func(initialPath string, ignorePatterns []string, limit int) ([]string, bool, error) { + return func(initialPath string, ignorePatterns []string) ([]string, bool, error) { return paths, false, nil } } @@ -130,10 +130,6 @@ func simulateUpdate(up updater, msg tea.Msg) (updater, tea.Msg) { var pngMagicNumberData = []byte("\x89PNG\x0D\x0A\x1A\x0A") -func mockResolveAbs(path string) (string, error) { - return path, nil -} - func TestEditorTypingForwardSlashOpensCompletions(t *testing.T) { testEditor := newEditor(&app.App{}, mockDirLister([]string{})) require.NotNil(t, testEditor)