mirror of
https://github.com/lukaszraczylo/filepuff-mcp.git
synced 2026-10-18 05:48:00 +00:00
fixup! Update, bugfixes on diff and edit handling
This commit is contained in:
@@ -131,6 +131,11 @@ func (s *Searcher) Search(ctx context.Context, req *Request) (*SearchResults, er
|
||||
WithRemediation("Provide a non-empty search pattern")
|
||||
}
|
||||
|
||||
// Validate that at least one provided path is allowed
|
||||
if err := s.validatePaths(req.Paths); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Build ripgrep command
|
||||
args := s.buildArgs(req)
|
||||
|
||||
@@ -238,6 +243,22 @@ func (s *Searcher) buildArgs(req *Request) []string {
|
||||
return args
|
||||
}
|
||||
|
||||
// validatePaths checks that at least one caller-provided path is allowed.
|
||||
// Returns an error if paths were provided but none passed IsPathAllowed.
|
||||
func (s *Searcher) validatePaths(paths []string) error {
|
||||
if len(paths) == 0 {
|
||||
return nil // no explicit paths — will default to workspace root
|
||||
}
|
||||
for _, p := range paths {
|
||||
if s.cfg.IsPathAllowed(p) {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return errors.New(errors.ErrPathNotAllowed, "all provided search paths are outside the workspace root").
|
||||
WithContext("paths", fmt.Sprintf("%v", paths)).
|
||||
WithRemediation("Provide paths within the workspace root")
|
||||
}
|
||||
|
||||
// parseOutput parses ripgrep JSON output.
|
||||
func (s *Searcher) parseOutput(output *bytes.Buffer, maxResults int) (*SearchResults, error) {
|
||||
results := &SearchResults{
|
||||
|
||||
@@ -43,9 +43,10 @@ func TestBuildArgs(t *testing.T) {
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
req *Request
|
||||
expected []string
|
||||
name string
|
||||
req *Request
|
||||
expected []string
|
||||
notExpected []string // T-06: verify absence of unexpected flags
|
||||
}{
|
||||
{
|
||||
name: "basic search",
|
||||
@@ -54,7 +55,8 @@ func TestBuildArgs(t *testing.T) {
|
||||
ContextLines: 2,
|
||||
Regex: true,
|
||||
},
|
||||
expected: []string{"--json", "--context=2", "--", "test", "."},
|
||||
expected: []string{"--json", "--context=2", "--", "test", "."},
|
||||
notExpected: []string{"--ignore-case", "--fixed-strings", "--max-total-count=0"},
|
||||
},
|
||||
{
|
||||
name: "ignore case",
|
||||
@@ -63,7 +65,8 @@ func TestBuildArgs(t *testing.T) {
|
||||
IgnoreCase: true,
|
||||
Regex: true,
|
||||
},
|
||||
expected: []string{"--json", "--ignore-case", "--", "test", "."},
|
||||
expected: []string{"--json", "--ignore-case", "--", "test", "."},
|
||||
notExpected: []string{"--fixed-strings"},
|
||||
},
|
||||
{
|
||||
name: "fixed strings",
|
||||
@@ -71,7 +74,8 @@ func TestBuildArgs(t *testing.T) {
|
||||
Pattern: "test",
|
||||
Regex: false,
|
||||
},
|
||||
expected: []string{"--json", "--fixed-strings", "--", "test", "."},
|
||||
expected: []string{"--json", "--fixed-strings", "--", "test", "."},
|
||||
notExpected: []string{"--ignore-case"},
|
||||
},
|
||||
{
|
||||
name: "with file types",
|
||||
@@ -80,7 +84,8 @@ func TestBuildArgs(t *testing.T) {
|
||||
FileTypes: []string{"go", "ts"},
|
||||
Regex: true,
|
||||
},
|
||||
expected: []string{"--json", "--type", "go", "--type", "ts", "--", "test", "."},
|
||||
expected: []string{"--json", "--type", "go", "--type", "ts", "--", "test", "."},
|
||||
notExpected: []string{"--ignore-case", "--fixed-strings"},
|
||||
},
|
||||
{
|
||||
name: "with max results",
|
||||
@@ -89,7 +94,8 @@ func TestBuildArgs(t *testing.T) {
|
||||
MaxResults: 10,
|
||||
Regex: true,
|
||||
},
|
||||
expected: []string{"--json", "--max-total-count=10", "--", "test", "."},
|
||||
expected: []string{"--json", "--max-total-count=10", "--", "test", "."},
|
||||
notExpected: []string{"--ignore-case", "--fixed-strings"},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -110,6 +116,16 @@ func TestBuildArgs(t *testing.T) {
|
||||
t.Errorf("expected arg %q not found in %v", exp, args)
|
||||
}
|
||||
}
|
||||
|
||||
// T-06: Check that unexpected args are absent
|
||||
for _, notExp := range tt.notExpected {
|
||||
for _, arg := range args {
|
||||
if arg == notExp {
|
||||
t.Errorf("unexpected arg %q found in %v", notExp, args)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user