Class: PlatformosCheck::LanguageServer::ObjectAttributeCompletionProvider

Inherits:
CompletionProvider
  • Object
show all
Defined in:
lib/platformos_check/language_server/completion_providers/object_attribute_completion_provider.rb

Constant Summary

Constants included from RegexHelpers

RegexHelpers::HTML_LIQUID_PLACEHOLDER, RegexHelpers::LIQUID_TAG, RegexHelpers::LIQUID_TAG_OR_VARIABLE, RegexHelpers::LIQUID_VARIABLE, RegexHelpers::START_OR_END_QUOTE

Constants included from CompletionHelper

CompletionHelper::WORD

Instance Attribute Summary

Attributes inherited from CompletionProvider

#storage

Instance Method Summary collapse

Methods inherited from CompletionProvider

all, #doc_hash, #format_hash, inherited, #initialize

Methods included from RegexHelpers

#matches

Methods included from CompletionHelper

#cursor_on_first_word?, #cursor_on_start_content?, #first_word

Constructor Details

This class inherits a constructor from PlatformosCheck::LanguageServer::CompletionProvider

Instance Method Details

#completions(context, child_lookup = nil) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/platformos_check/language_server/completion_providers/object_attribute_completion_provider.rb', line 6

def completions(context, child_lookup = nil)
  content = context.content
  cursor = context.cursor

  return [] if content.nil?
  return [] unless (variable_lookup = VariableLookupFinder.lookup(context))
  return [] if content[cursor - 1] == "." && content[cursor - 2] == "."

  variable_lookup.lookups = variable_lookup.lookups + child_lookup.lookups if child_lookup&.lookups&.any?

  if variable_lookup.file_path
    function_completion(variable_lookup)
  elsif variable_lookup.lookups.first&.start_with?('graphql/')
    graphql_completion(variable_lookup)
  else
    # Navigate through lookups until the last valid [object, property] level
    object, property = VariableLookupTraverser.lookup_object_and_property(variable_lookup)

    # If the last lookup level is incomplete/invalid, use the partial term
    # to filter object properties.
    partial = partial_property_name(property, variable_lookup)

    return [] unless object

    object
      .properties
      .select { |prop| partial.nil? || prop.name.start_with?(partial) }
      .map { |prop| property_to_completion(prop) }
  end
end