Sha256: dca4afd93b012053de71bc4780f03accda91a60438d7122dfe087dff1dbd63d6
Contents?: true
Size: 1.91 KB
Versions: 1
Compression:
Stored size: 1.91 KB
Contents
require 'language_server/project/parser' module LanguageServer class Project def initialize(file_store) @file_store = file_store @result_store = {} fetch_result end def recalculate_result(uri) path = file_store.path_from_remote_uri(uri) result_store[path] = calculate(file_store.read(path), path) end 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 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 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 private attr_reader :file_store, :result_store def lazy_constants result_store.each_value.lazy.flat_map(&:constants) end def lazy_modules result_store.each_value.lazy.flat_map(&:modules) end def lazy_classes result_store.each_value.lazy.flat_map(&:classes) end def fetch_result file_store.each {|content, path| result_store[path] = calculate(content, path) } end def find_nearest_node(uri:, line:, character:) result = result_store[file_store.path_from_remote_uri(uri)] (result.modules + result.classes).select {|node| node.lines.include?(line) }.min_by {|node| node.lines.size } end def calculate(content, path) Parser.parse(content, path) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
language_server-0.4.0 | lib/language_server/project.rb |