class RubyLsp::Xlsxrb::CompletionListener
CompletionListener provides intelligent, context-aware method completions for all xlsxrb public block variables (StreamWriter, WorkbookBuilder, WorksheetProxy, StreamSheet, Elements::Workbook, Elements::Worksheet, Elements::Row, Elements::Cell, ChartBuilder, StyleBuilder).
Note: This is an interim enhancer for Ruby LSP until native RBS block argument type propagation is fully supported upstream in Ruby LSP / language server tools.
Constants
- CELL_ELEMENT_ITEMS
- CHART_BUILDER_ITEMS
- CLASS_NAMES
- ITEMS_BY_TYPE
- ROW_ELEMENT_ITEMS
- STREAM_SHEET_ITEMS
- STREAM_WRITER_ITEMS
- STYLE_BUILDER_ITEMS
- WORKBOOK_BUILDER_ITEMS
- WORKBOOK_ELEMENT_ITEMS
- WORKSHEET_ELEMENT_ITEMS
- WORKSHEET_PROXY_ITEMS
Public Class Methods
# File lib/ruby_lsp/xlsxrb/completion_listener.rb, line 649 def initialize(response_builder, node_context, dispatcher, global_state) @response_builder = response_builder @node_context = node_context @global_state = global_state dispatcher.register(self, :on_call_node_enter) end
Public Instance Methods
Source
# File lib/ruby_lsp/xlsxrb/completion_listener.rb, line 657 def on_call_node_enter(node) receiver = node.receiver receiver_name = receiver.name if receiver.is_a?(Prism::LocalVariableReadNode) || (receiver.is_a?(Prism::CallNode) && receiver.receiver.nil?) return unless receiver_name target_type = infer_target_type(receiver_name) return unless target_type items = ITEMS_BY_TYPE[target_type] return unless items detail_prefix = "(#{CLASS_NAMES[target_type]}) " items.each_with_index do |item, index| sort_key = "#{index.to_s.rjust(3, "0")}_#{item[:label]}" @response_builder << ::RubyLsp::Interface::CompletionItem.new( label: item[:label], kind: ::RubyLsp::Constant::CompletionItemKind::METHOD, detail: "#{detail_prefix}#{item[:detail]}", sort_text: sort_key, documentation: { kind: ::RubyLsp::Constant::MarkupKind::MARKDOWN, value: item[:documentation] } ) end end