Class: RubyLsp::Requests::FoldingRanges

Inherits:
BaseRequest
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/ruby_lsp/requests/folding_ranges.rb

Overview

![Folding ranges demo](../../misc/folding_ranges.gif)

The [folding ranges](microsoft.github.io/language-server-protocol/specification#textDocument_foldingRange) request informs the editor of the ranges where and how code can be folded.

# Example

“‘ruby def say_hello # <– folding range start

puts "Hello"

end # <– folding range end “‘

Defined Under Namespace

Classes: PartialRange

Constant Summary collapse

SIMPLE_FOLDABLES =
T.let([
  SyntaxTree::ArrayLiteral,
  SyntaxTree::BraceBlock,
  SyntaxTree::Case,
  SyntaxTree::ClassDeclaration,
  SyntaxTree::Command,
  SyntaxTree::DoBlock,
  SyntaxTree::FCall,
  SyntaxTree::For,
  SyntaxTree::HashLiteral,
  SyntaxTree::Heredoc,
  SyntaxTree::If,
  SyntaxTree::ModuleDeclaration,
  SyntaxTree::SClass,
  SyntaxTree::Unless,
  SyntaxTree::Until,
  SyntaxTree::While,
  SyntaxTree::Else,
  SyntaxTree::Ensure,
  SyntaxTree::Begin,
].freeze, T::Array[T.class_of(SyntaxTree::Node)])
NODES_WITH_STATEMENTS =
T.let([
  SyntaxTree::Elsif,
  SyntaxTree::In,
  SyntaxTree::Rescue,
  SyntaxTree::When,
].freeze, T::Array[T.class_of(SyntaxTree::Node)])
StatementNode =
T.type_alias do
  T.any(
    SyntaxTree::Elsif,
    SyntaxTree::In,
    SyntaxTree::Rescue,
    SyntaxTree::When,
  )
end

Instance Method Summary collapse

Methods inherited from BaseRequest

#range_from_syntax_tree_node

Constructor Details

#initialize(document) ⇒ FoldingRanges

Returns a new instance of FoldingRanges.



60
61
62
63
64
65
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 60

def initialize(document)
  super

  @ranges = T.let([], T::Array[LanguageServer::Protocol::Interface::FoldingRange])
  @partial_range = T.let(nil, T.nilable(PartialRange))
end

Instance Method Details

#runObject



68
69
70
71
72
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 68

def run
  visit(@document.tree)
  emit_partial_range
  @ranges
end