A frontend-independent IDE "smartness" server for Elixir. Implements the "Language Server Protocol" standard and provides debugger support via the "Debug Adapter Protocol"
Similarly to folding ranges, selection ranges works in a number of passes. Each pass generates sets of ranges, that are filtered based on cursor position and sorted from widest to narrowest.
Then ranges from each pass are recursively merged with an algorithm that sorts ranges and resolves conflicts.
This PR bases on tools built for folding ranges provider in https://github.com/elixir-lsp/elixir-ls/pull/492 with the addition of AST and Code.Fragment.
Similarly to folding ranges, selection ranges works in a number of passes. Each pass generates sets of ranges, that are filtered based on cursor position and sorted from widest to narrowest. Then ranges from each pass are recursively merged with an algorithm that sorts ranges and resolves conflicts.
Addresses https://github.com/elixir-lsp/elixir-ls/issues/534