Class: LanguageServer::Project

Inherits:
Object
  • Object
show all
Defined in:
lib/language_server/project.rb,
lib/language_server/project/node.rb,
lib/language_server/project/parser.rb

Defined Under Namespace

Classes: Class, ConstPathRef, Constant, LiteralValue, Module, Node, Parser, VarRef

Instance Method Summary collapse

Constructor Details

#initialize(file_store) ⇒ Project

Returns a new instance of Project.



5
6
7
8
9
10
# File 'lib/language_server/project.rb', line 5

def initialize(file_store)
  @file_store = file_store
  @result_store = {}

  fetch_result
end

Instance Method Details

#classes(uri: nil, line: nil, character: nil) ⇒ Object



39
40
41
42
43
# File 'lib/language_server/project.rb', line 39

def classes(uri: nil, line: nil, character: nil)
  node = find_nearest_node(uri: uri, line: line, character: character) if uri && line && character

  lazy_classes.select { |n| n.names[0..-2] == Array(node && node.names).first(n.names.size - 1) }.force
end

#constants(uri: nil, line: nil, character: nil) ⇒ Object



27
28
29
30
31
# File 'lib/language_server/project.rb', line 27

def constants(uri: nil, line: nil, character: nil)
  node = find_nearest_node(uri: uri, line: line, character: character) if uri && line && character

  lazy_constants.select { |n| n.names[0..-2] == Array(node && node.names).first(n.names.size - 1) }.force
end

#find_definitions(uri:, line:, character:) ⇒ Object



12
13
14
15
16
17
18
19
20
# File 'lib/language_server/project.rb', line 12

def find_definitions(uri:, line:, character:)
  result = result_store[file_store.path_from_remote_uri(uri)]

  ref = result.refs.select { |node| node.lines.include?(line) && node.characters.include?(character) }.min_by { |node| node.characters.size }

  return [] unless ref

  lazy_modules.select { |n| n.full_name == ref.full_name }.force + lazy_classes.select { |n| n.full_name == ref.full_name }.force
end

#modules(uri: nil, line: nil, character: nil) ⇒ Object



33
34
35
36
37
# File 'lib/language_server/project.rb', line 33

def modules(uri: nil, line: nil, character: nil)
  node = find_nearest_node(uri: uri, line: line, character: character) if uri && line && character

  lazy_modules.select { |n| n.names[0..-2] == Array(node && node.names).first(n.names.size - 1) }.force
end

#recalculate_result(uri) ⇒ Object



22
23
24
25
# File 'lib/language_server/project.rb', line 22

def recalculate_result(uri)
  path = file_store.path_from_remote_uri(uri)
  calculate(file_store.read(path), path)
end