fix(edit_match): prefer literal paths over glob#133
Open
tobwen wants to merge 2 commits into
Open
Conversation
Existing paths with brackets are now treated as literal files instead of glob patterns. Falls back to glob when the path does not exist or validation fails.
Addresses Greptile P2: the Err(_) => true catch-all silently routed unknown validate_path errors to the glob handler. Return false instead so the single-file handler re-validates and surfaces the error. Dead code today (all errors use path_outside_root), zero behavior change.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #132
What and why?
Existing paths with brackets are now treated as literal files instead of glob patterns. Falls back to glob when the path doesn't exist or validation fails.
Need help on this PR? Tag
/codesmithwith what you need. Autofix is disabled.Summary by cubic
Prefer literal paths over globs in
edit_matchwhen the path exists on disk, even if it contains [ ] * ? { }. We now fall back to glob only when the path doesn’t exist.should_treat_as_globto prefer literal whenvalidate_pathresolves an existing path; use glob only if the candidate doesn’t exist. Onvalidate_patherrors (includingpath_outside_rootand unknown), defer to the single-file flow so errors surface correctly.Written for commit 56ca4d5. Summary will update on new commits.
Greptile Summary
This PR fixes issue #132 by introducing
should_treat_as_glob, which replaces the old bareis_glob_patterncharacter-scan with a disk-existence check: ifvalidate_pathresolves the path to something that already exists on disk, it is treated as a literal file even when the name contains[,],*,?, or{.edit_match.rs:should_treat_as_globcallsctx.validate_pathto canonicalize the path and then checkscandidate.exists();path_outside_rootand any other validation errors both returnfalse, correctly deferring tohandle_single_file_edit_match(which re-validates and surfaces the proper error).edit_test.rs: Three new integration tests cover absolute bracketed paths, relative bracketed paths (withrestrict_to_project_root), and a parentheses sanity check.Confidence Score: 5/5
Safe to merge — the change is a targeted, well-tested fix that only affects paths containing glob metacharacters.
The new
should_treat_as_globfunction mirrors the exact same path-resolution logic thathandle_single_file_edit_matchuses internally, so the literal-vs-glob decision stays consistent with how the file is ultimately opened. The catch-all error arm returnsfalse(nottrue), so unknown future validation errors fall through to the single-file handler and surface as proper error responses rather than being silently swallowed into a glob dispatch. Three integration tests cover the primary regression scenario (absolute and relative bracketed paths) plus a non-metacharacter sanity case.No files require special attention.
Important Files Changed
is_glob_patterncheck withshould_treat_as_glob, which prefers literal path handling whenvalidate_pathresolves an existing path on disk. Logic is sound:path_outside_rootand other validation errors correctly fall through to the single-file handler rather than promoting to glob.Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD A[handle_edit_match] --> B{should_treat_as_glob?} B -->|is_glob_pattern = false| C[return false\nliteral path] B -->|is_glob_pattern = true| D[ctx.validate_path] D -->|Ok path| E{candidate.exists?} E -->|yes - file exists| F[return false\nprefer literal] E -->|no - file absent| G[return true\nuse glob] D -->|Err path_outside_root| H[return false\ndefer to single-file] D -->|Err other| I[log debug\nreturn false\ndefer to single-file] C --> J[handle_single_file_edit_match] F --> J H --> J I --> J G --> K[handle_glob_edit_match]%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%% flowchart TD A[handle_edit_match] --> B{should_treat_as_glob?} B -->|is_glob_pattern = false| C[return false\nliteral path] B -->|is_glob_pattern = true| D[ctx.validate_path] D -->|Ok path| E{candidate.exists?} E -->|yes - file exists| F[return false\nprefer literal] E -->|no - file absent| G[return true\nuse glob] D -->|Err path_outside_root| H[return false\ndefer to single-file] D -->|Err other| I[log debug\nreturn false\ndefer to single-file] C --> J[handle_single_file_edit_match] F --> J H --> J I --> J G --> K[handle_glob_edit_match]Reviews (2): Last reviewed commit: "fix(edit_match): fail-safe on unknown va..." | Re-trigger Greptile