Sha256: 5a1ed9ee2c0fb5509e7a175f1cf686a90bac88a6dba249439b50783f570467a6

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

require "language_server/protocol/interfaces/completion_item"
require "language_server/protocol/constants/completion_item_kind"

require "rcodetools/completion"

module LanguageServer
  module CompletionProvider
    class Filter < ::Rcodetools::XMPCompletionFilter
      @candidates_with_description_flag = true

      def completion_code(*args)
        candidates_with_class(*args)
      rescue NewCodeError, RuntimeDataError, NoCandidates
        [nil, []]
      end
    end

    class Rcodetools
      def initialize(uri:, line:, character:, file_store:)
        @uri = uri
        @line = line
        @character = character
        @file_store = file_store
      end

      def call
        _, candidates = Filter.run(source, lineno: @line + 1, column: @character)
        candidates.map do |candidate|
          method_name, description = candidate.split(/\0/, 2)
          Protocol::Interfaces::CompletionItem.new(
            label: method_name,
            detail: description,
            kind: Protocol::Constants::CompletionItemKind::METHOD
          )
        end
      end

      private

      def source
        @file_store.read_remote_uri(@uri)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
language_server-0.4.0 lib/language_server/completion_provider/rcodetools.rb