This repository was archived by the owner on Dec 29, 2022. It is now read-only.
tracking issue: wishlistย #142
Open
Description
This is a grab bag of things I'd like the RLS to be able to do some day - some are easy, some are hard. I'll add more as I think of them.
Search/navigation
- type info for path segments
- find impls of trait
- find impls for type
- find overriding/overriden method
- find (transitive) sub/super traits
- find callers/callees
- text search/regex search
- identifier search (already in RLS, but not exposed in LSP)
- goto type (for expressions, etc.)
- goto def for macros
- for
extern crate
, show all names imported into the program (with find all uses links for each name) - for a module or crate, show all public names (including via paths)
Refactoring
- glob -> list import
- remove unused imports
- alias an import
- inline module <-> file module <-> directory module
- module <-> crate
- move code between modules, adjusting imports as necessary
- extract/line variable
- extract function/inline function
- bare function <-> method (note autoref for users)
- match <-> if let
- elide/reify lifetimes
- change local/arg <-> field of a struct (e.g.,
fn foo(x, y, s) { ..x..y..} <-> fn foo(s) { ..s.x...s.y... }
Code generation
- external mod
- impl for type/type + trait
- auto-imports
- create
new
function for struct - add/erase type/lifetime arg
- match, given an expression
- generate function stub from call
Errors
- show notes/other sub-errors
- gracefully link errors with their notes
- apply suggestions
Performance
- lazy compilation
- compiler-driven code completion (obsoletes Racer)
Visualisation, etc.
- macro expansion, partial expansion
- visualise lifetimes
- better support for documentation
Applicability
- non-cargo projects
- projects with multiple workspaces, targets, etc. (Tracking issue: multiple targets/workspaces/packages, etc.ย #132)
Misc
- debugging (probably not in the RLS, but perhaps we should think of integration)
- build commands
- doing non-check builds, running tests
- customising builds, passing args to the RLS