`-T rust -t rust` still excludes Rust files instead of honoring the later type selection

Đang mở
#196 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

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
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
rust
Lĩnh vực
cli, search

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

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của microsoft/tgrep

Tất cả issue của microsoft/tgrep

Issue tương tự

Thêm issue về Rust

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.