@@ -204,12 +204,14 @@ local remove_filtered = function(source_items, filtered_items)
204204 local hidden = {}
205205 local show_gitignored = filtered_items and filtered_items .hide_gitignored == false
206206 local show_ignored = filtered_items and filtered_items .hide_ignored == false
207+ local check_ignore_status = show_gitignored or show_gitignored
207208 for _ , item in ipairs (source_items ) do
208209 local fby = item .filtered_by
209210 if not fby or item .contains_reveal_target then
210211 visible [# visible + 1 ] = item
211212 else
212213 while fby do
214+ -- items that should always be hidden/perma-hidden/visible
213215 if fby .never_show then
214216 -- pretend it doesn't exist
215217 break
@@ -219,20 +221,24 @@ local remove_filtered = function(source_items, filtered_items)
219221 elseif fby .name or fby .pattern or fby .dotfiles or fby .hidden then
220222 hidden [# hidden + 1 ] = item
221223 break
222- elseif show_gitignored and fby .gitignored then
223- visible [# visible + 1 ] = item
224- break
225- elseif show_ignored and fby .ignored then
226- visible [# visible + 1 ] = item
227- break
228- elseif fby .parent then
229- fby = fby .parent
230- -- continue to next iteration
231- else
224+ end
225+
226+ if check_ignore_status and fby .ignored or fby .gitignored then
227+ local hidden_by_gitignore = fby .gitignored and not show_gitignored
228+ local hidden_by_ignore = fby .ignored and not show_ignored
229+ if not hidden_by_gitignore and not hidden_by_ignore then
230+ visible [# visible + 1 ] = item
231+ break
232+ end
233+ end
234+
235+ if not fby .parent then
232236 -- filtered by some other reason
233237 hidden [# hidden + 1 ] = item
234238 break
235239 end
240+
241+ fby = fby .parent
236242 end
237243 end
238244 end
0 commit comments