Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Improve performance of finding indexables (#2082)
* Improve performance of finding indexables Currently, all folders and files in the current tree are turned into IndexablePath, and then excluded files are filtered out after. When there are large file trees that are meant to be excluded, this results in a lot of unnecessary work. ActiveStorage stores files in the `tmp` directory in many many small folders. So does Bootsnap. Additionally, node_modules can become quite large. Ruby LSP has to traverse all of these files, even though the entire directory should just be ignored. Instead we can skip any top-level directories whose paths have been excluded. We still need to loop through all IndexablePath objects compare them to the exclude_patterns, in case nested folders or file name patterns were excluded. Still, skipping some large top-level directories proves to be a big performance improvement. Before this PR in my Rails app, `indexables` took 76 seconds to run. Now it takes, 0.17 seconds. Before and after code both return the same exact file list. * Avoid unnecessary iterations with filter_map * Exclude spec and test directories entirely * Avoid computing the same value N times * Remove unnecessary suffix delete * Re-exclude **/*_test.rb. They're not inside test/**/*.
- Loading branch information