Resolve builds the context result for a task.
(task *model.Task, opts Options)
| 77 | |
| 78 | // Resolve builds the context result for a task. |
| 79 | func Resolve(task *model.Task, opts Options) (*Result, error) { |
| 80 | files := resolveScopeFiles(task.Touches, opts.Scopes) |
| 81 | files = append(files, resolveExplicitFiles(task.Context)...) |
| 82 | files = deduplicateFiles(files) |
| 83 | checkExistence(files, opts.ProjectRoot) |
| 84 | |
| 85 | if opts.Resolve { |
| 86 | files = expandDirectories(files, opts.ProjectRoot) |
| 87 | } |
| 88 | |
| 89 | if opts.IncludeContent { |
| 90 | inlineContents(files, opts.ProjectRoot) |
| 91 | } |
| 92 | |
| 93 | if opts.MaxFiles > 0 { |
| 94 | files = capFiles(files, opts.MaxFiles) |
| 95 | } |
| 96 | |
| 97 | result := &Result{ |
| 98 | TaskID: task.ID, |
| 99 | Title: task.Title, |
| 100 | Files: files, |
| 101 | } |
| 102 | |
| 103 | body := strings.TrimSpace(task.Body) |
| 104 | if body != "" { |
| 105 | result.TaskBody = body |
| 106 | } |
| 107 | |
| 108 | return result, nil |
| 109 | } |
| 110 | |
| 111 | // resolveScopeFiles maps touches to file paths via scope definitions. |
| 112 | func resolveScopeFiles(touches []string, scopes ScopeMap) []FileEntry { |