package lib import ( "fmt" "plandex-cli/fs" "plandex-cli/types" ) type ParseInputPathsParams struct { FileOrDirPaths []string BaseDir string ProjectPaths *types.ProjectPaths LoadParams *types.LoadContextParams } func ParseInputPaths(params ParseInputPathsParams) ([]string, error) { fileOrDirPaths := params.FileOrDirPaths baseDir := params.BaseDir projectPaths := params.ProjectPaths loadParams := params.LoadParams resPaths := []string{} for path := range projectPaths.AllPaths { // see if it's a child of any of the fileOrDirPaths found := false for _, p := range fileOrDirPaths { var err error found, err = fs.IsSubpathOf(p, path, baseDir) if err != nil { return nil, fmt.Errorf("error checking if %s is a subpath of %s: %s", path, p, err) } if found { break } } if !found { continue } if projectPaths.AllDirs[path] { if !(loadParams.Recursive || loadParams.NamesOnly || loadParams.DefsOnly) { // log.Println("path", path, "info.Name()", info.Name()) return nil, fmt.Errorf("cannot process directory %s: requires --recursive/-r, --tree, or --map flag", path) } // calculate directory depth from base // depth := strings.Count(path[len(p):], string(filepath.Separator)) // if params.MaxDepth != -1 && depth > params.MaxDepth { // return filepath.SkipDir // } if loadParams.NamesOnly { // add directory name to results resPaths = append(resPaths, path) } } else { // add file path to results resPaths = append(resPaths, path) } } return resPaths, nil }