`-T rust -t rust` still excludes Rust files instead of honoring the later type selection
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 45/100
Hướng nghiên cứu
Read tgrep-core/src/filetypes.rs around line 167 and tgrep-cli/src/search.rs around line 2233 to trace how selected and excluded type lists reach the filter. Reproduce the argument-order cases from the issue, then check content search and --files in scanned and indexed modes. Done means a later -t selection overrides an earlier -T exclusion for the same type, with both argument orders covered by regression tests.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
For conflicting -t and -T selections of the same file type, tgrep always gives exclusion precedence. ripgrep honors the later selection. Consequently, -T rust -t rust silently omits Rust files that ripgrep admits.
The same difference is visible in --files, which exits 0 even though its output is incomplete.
Reproduce
mkdir repro-type-order && cd repro-type-order
mkdir data
printf 'needle\n' > data/a.rs
printf 'needle\n' > data/a.txt
tgrep --no-index -T rust -t rust -l -- needle data
rg -T rust -t rust -l -- needle data
tgrep --no-index --files -T rust -t rust data
rg --files -T rust -t rust data
# Reverse-order control: both tools exclude Rust files
tgrep --no-index -t rust -T rust -l -- needle data
rg -t rust -T rust -l -- needle data
| Case | Actual: tgrep 1.2.0 | Expected: rg 15.1.0 |
|---|---|---|
-T rust -t rust content search |
No stdout, exit 1 | data/a.rs, exit 0 |
--files -T rust -t rust |
No stdout, exit 0 | data/a.rs, exit 0 |
Control: -t rust -T rust content search |
No stdout, exit 1 | No stdout, exit 1 |
The content-search cases reproduce with --no-index, an on-disk index, and tgrep serve --no-watch.
To repeat the indexed cases, run tgrep index data, remove --no-index, and keep the directory path data. For the server cases, start tgrep serve --no-watch data in another terminal and repeat those directory searches. --stats was used in the Windows harness to verify the selected backend, including (via server).
--files was separately verified in scan and local-index modes.
Environment
- tgrep 1.2.0, official Windows x86_64 release.
- Source inspected at release commit
3ba6ee02537281b68ee1366bb40df9f8b7cc54f0. - Windows; test harness run with PowerShell 7.
- ripgrep 15.1.0 (af60c2de9d).
- Verified on 2026-10-12. The shell examples describe the same fixture bytes and arguments tested on Windows.
Cause
tgrep-core/src/filetypes.rs:167 checks the exclusion matcher first and returns false immediately when it matches. tgrep-cli/src/search.rs:2233 receives separate selected/excluded type lists, so it cannot resolve the conflicting selections using their original interleaving.
Possible fix
Preserve the ordering of -t and -T operations when constructing the filter. A later selection of a type should supersede an earlier exclusion of that same type, as in ripgrep.
A regression could cover both argument orders in content search and --files, across indexed and scanned paths.
- Ngôn ngữ chính
- Rust
- Star
- 3.5k
- Fork
- 139
- Merge trung bình
- 17 giờ 20 phút
- Pull request đã merge (30 ngày)
- 27
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của microsoft/tgrep
-
v1.2.6: Watcher notification on an idle Windows checkout clears `ready` during periodic content verification (unchanged-file filter gaps)Có thể đã có người làm @shengyfu đã nhận hôm nay. Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 22/100
microsoft/tgrep#221 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của microsoft/tgrep
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
longbridge/nsh#804 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày
-
devex good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
calcit-lang/calcit#2538 ·
Maintainer thường phản hồi trong vòng 1 ngày