Skip to content

Commit a8c09cb

Browse files
committed
Implement smart filtering rules system
- Integrate rule-based filtering architecture - Add context detection for project types - Create specialized rules for different filtering strategies - Enhance CLI with rule control options - Update docs with examples of filtering features
1 parent 8b2a862 commit a8c09cb

23 files changed

+407
-26
lines changed

README.MD

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ $ smart-tree
5555
- **Immediately spot what matters** - Recent changes and important files stand out
5656
- **Project-aware** - Understands different project types (Rust, JavaScript, Python, etc.)
5757
- **No visual clutter** - Automatically filters system directories like `.git` and `node_modules`
58+
- **Smart rule system** - Uses context-aware rules to decide what to show and what to hide
5859
- **Rich context** - File sizes, modification times, and directory statistics
5960
- **Beautiful visualization** - Color-coded file types and emoji icons
6061
- **Lightning fast** - Navigates even massive repositories with ease
@@ -88,7 +89,50 @@ Smart Tree's context-preserving output is ideal for AI assistants like GitHub Co
8889
smart-tree --max-lines 25 --detailed
8990
```
9091

91-
### 4. Repository Exploration
92+
### 4. Smart Filtering for Different Project Types
93+
94+
```
95+
$ smart-tree --list-rules
96+
Available filtering rules:
97+
98+
gitignore - Files/directories matched by .gitignore patterns
99+
vcs - Version control system directories (.git, .svn, .hg, .jj)
100+
build_output - Build output directories (target, dist, build)
101+
dependencies - Dependency directories (node_modules, venv)
102+
dev_environment - Development environment configs (.vscode, .idea)
103+
104+
Usage examples:
105+
106+
--disable-rule vcs # Show VCS directories
107+
--disable-rule dependencies # Show dependency directories
108+
--show-hidden # Show all items that would be filtered
109+
```
110+
111+
Smart Tree understands your project's context and automatically applies the most appropriate filtering rules for your specific language or framework:
112+
113+
```
114+
$ smart-tree
115+
.
116+
├── .git (1 files, 1.0MB, modified just now) [folded: system]
117+
├── .gitignore (13B, modified just now)
118+
├── .vscode (1 files, 1.0MB, modified just now) [folded: system]
119+
├── Cargo.toml (0B, modified just now)
120+
├── README.md (0B, modified just now)
121+
├── examples (1 files, 0B, modified just now)
122+
│ └── demo.rs (0B, modified just now)
123+
├── file1.bak (0B, modified just now) [[gitignored]]
124+
├── src (2 files, 0B, modified just now)
125+
│ ├── main.rs (0B, modified just now)
126+
│ └── lib.rs (0B, modified just now)
127+
└── target (10 files, 14B, modified just now) [folded: system]
128+
```
129+
130+
The tool automatically:
131+
- Detects Rust projects by `Cargo.toml` and filters `target/` as build output
132+
- Respects `.gitignore` rules (notice `file1.bak` is marked as gitignored)
133+
- Identifies and filters system directories like `.git` and `.vscode`
134+
135+
### 5. Repository Exploration
92136

93137
```bash
94138
$ smart-tree --emoji --color-sizes --color-theme dark
@@ -138,12 +182,21 @@ smart-tree -L 3
138182
# Show system directories (like .git, node_modules, etc.)
139183
smart-tree --show-system-dirs
140184

185+
# Show items that would normally be filtered out
186+
smart-tree --show-hidden
187+
141188
# Customize filtering rules
142189
smart-tree --disable-rule vcs --disable-rule build_output
143190

144191
# List all available rules
145192
smart-tree --list-rules
146193

194+
# Show details about rule application
195+
smart-tree --rule-debug
196+
197+
# Disable all rules completely
198+
smart-tree --no-rules
199+
147200
# Show help with all options
148201
smart-tree --help
149202
```

docs/images/available-rules.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Available filtering rules:
2+
3+
gitignore - Files/directories matched by .gitignore patterns
4+
vcs - Version control system directories (.git, .svn, .hg, .jj)
5+
build_output - Build output directories (target, dist, build)
6+
dependencies - Dependency directories (node_modules, venv)
7+
dev_environment - Development environment configs (.vscode, .idea)
8+
9+
Usage examples:
10+
11+
--disable-rule vcs # Show VCS directories
12+
--disable-rule dependencies # Show dependency directories
13+
--show-hidden # Show all items that would be filtered
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.
2+
├── .git (1 files, 1.0MB, modified 1m ago) [folded: system]
3+
├── .gitignore (13B, modified 1m ago)
4+
├── .vscode (1 files, 1.0MB, modified 1m ago) [folded: system]
5+
├── Cargo.toml (0B, modified 1m ago)
6+
├── README.md (0B, modified 1m ago)
7+
├── examples (1 files, 0B, modified 1m ago)
8+
│ └── demo.rs (0B, modified 1m ago)
9+
├── file1.bak (0B, modified 1m ago) [[gitignored]]
10+
├── src (2 files, 0B, modified 1m ago)
11+
│ ├── main.rs (0B, modified 1m ago)
12+
│ └── lib.rs (0B, modified 1m ago)
13+
└── target (10 files, 14B, modified 1m ago) [folded: system]
14+

docs/images/example.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.
2+
├── .git (1 files, 1.0MB, modified 1m ago) [folded: system]
3+
├── .gitignore (13B, modified 1m ago)
4+
├── .vscode (1 files, 1.0MB, modified 1m ago) [folded: system]
5+
├── Cargo.toml (0B, modified 1m ago)
6+
├── README.md (0B, modified 1m ago)
7+
├── examples (1 files, 0B, modified 1m ago)
8+
│ └── demo.rs (0B, modified 1m ago)
9+
├── file1.bak (0B, modified 1m ago) [[gitignored]]
10+
├── src (2 files, 0B, modified 1m ago)
11+
│ ├── main.rs (0B, modified 1m ago)
12+
│ └── lib.rs (0B, modified 1m ago)
13+
└── target (10 files, 14B, modified 1m ago) [folded: system]
14+

docs/images/smart-tree-rules.png

151 KB
Loading

out.png

81.4 KB
Loading

output1.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.
2+
├── .git (1 files, 1.0MB, modified just now) [folded: system]
3+
├── .gitignore (13B, modified just now)
4+
├── .vscode (1 files, 1.0MB, modified just now) [folded: system]
5+
├── Cargo.toml (0B, modified just now)
6+
├── README.md (0B, modified just now)
7+
├── examples (1 files, 0B, modified just now)
8+
│ └── demo.rs (0B, modified just now)
9+
├── file1.bak (0B, modified just now) [[gitignored]]
10+
├── src (2 files, 0B, modified just now)
11+
│ ├── main.rs (0B, modified just now)
12+
│ └── lib.rs (0B, modified just now)
13+
└── target (10 files, 14B, modified just now) [folded: system]
14+

output2.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.
2+
├── .git (1 files, 1.0MB, modified just now) [folded: system]
3+
├── .gitignore (13B, modified just now)
4+
├── .vscode (1 files, 1.0MB, modified just now) [folded: system]
5+
├── Cargo.toml (0B, modified just now)
6+
├── README.md (0B, modified just now)
7+
├── examples (1 files, 0B, modified just now)
8+
│ └── demo.rs (0B, modified just now)
9+
├── file1.bak (0B, modified just now) [[gitignored]]
10+
├── src (2 files, 0B, modified just now)
11+
│ ├── main.rs (0B, modified just now)
12+
│ └── lib.rs (0B, modified just now)
13+
└── target (10 files, 14B, modified just now) [folded: system]
14+

output3.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.
2+
├── .git (1 files, 1.0MB, modified just now) [folded: system]
3+
├── .gitignore (13B, modified just now)
4+
├── .vscode (1 files, 1.0MB, modified just now) [folded: system]
5+
├── Cargo.toml (0B, modified just now)
6+
├── README.md (0B, modified just now)
7+
├── examples (1 files, 0B, modified just now)
8+
│ └── demo.rs (0B, modified just now)
9+
├── file1.bak (0B, modified just now) [[gitignored]]
10+
├── src (2 files, 0B, modified just now)
11+
│ ├── main.rs (0B, modified just now)
12+
│ └── lib.rs (0B, modified just now)
13+
└── target (10 files, 14B, modified just now) [folded: system]
14+

sample/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
target
2+
*.bak

0 commit comments

Comments
 (0)