From 6d194f9353885e9d847a963412b4d29f07304c9a Mon Sep 17 00:00:00 2001 From: Joel Drapper Date: Tue, 27 May 2025 11:54:21 +0100 Subject: [PATCH 1/2] Add RubyLSP indexing enhancement for `register_element` --- lib/phlex.rb | 2 ++ lib/ruby_lsp/phlex/addon.rb | 45 +++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 lib/ruby_lsp/phlex/addon.rb diff --git a/lib/phlex.rb b/lib/phlex.rb index b3bae6b8..2a41aedc 100644 --- a/lib/phlex.rb +++ b/lib/phlex.rb @@ -6,6 +6,8 @@ module Phlex Loader = Zeitwerk::Loader.for_gem.tap do |loader| + loader.ignore("#{__dir__}/ruby_lsp") + loader.inflector.inflect( "csv" => "CSV", "fifo" => "FIFO", diff --git a/lib/ruby_lsp/phlex/addon.rb b/lib/ruby_lsp/phlex/addon.rb new file mode 100644 index 00000000..6ec2be5a --- /dev/null +++ b/lib/ruby_lsp/phlex/addon.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +require "ruby_lsp/addon" + +module RubyLsp + module Phlex + class Addon < ::RubyLsp::Addon + def activate(global_state, message_queue) + end + + def deactivate + end + + def name + "Phlex" + end + + def version + "0.1.0" + end + end + + class IndexingEnhancement < RubyIndexer::Enhancement + def on_call_node_enter(node) + name = node.name + owner = @listener.current_owner + location = node.location + arguments = node.arguments&.arguments + + return unless owner + return unless :register_element == name + + case arguments + in [Prism::SymbolNode[unescaped: String => element_name], *] + @listener.add_method(element_name, location, [ + RubyIndexer::Entry::Signature.new([ + RubyIndexer::Entry::KeywordRestParameter.new(name: :attributes), + RubyIndexer::Entry::BlockParameter.new(name: :content), + ]), + ], visibility: :public) + end + end + end + end +end From 4e92d3934eed8cd8dc7973350ba95d6223dff46a Mon Sep 17 00:00:00 2001 From: Joel Drapper Date: Tue, 27 May 2025 12:28:16 +0100 Subject: [PATCH 2/2] Add the tag name to the comments --- lib/ruby_lsp/phlex/addon.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/ruby_lsp/phlex/addon.rb b/lib/ruby_lsp/phlex/addon.rb index 6ec2be5a..80ec0c06 100644 --- a/lib/ruby_lsp/phlex/addon.rb +++ b/lib/ruby_lsp/phlex/addon.rb @@ -31,13 +31,16 @@ def on_call_node_enter(node) return unless :register_element == name case arguments - in [Prism::SymbolNode[unescaped: String => element_name], *] - @listener.add_method(element_name, location, [ + in [Prism::SymbolNode[unescaped: String => method_name], *] + tag_name = method_name.tr("_", "-") + arguments[1] in Prism::StringNode[unescaped: String => tag_name] + + @listener.add_method(method_name, location, [ RubyIndexer::Entry::Signature.new([ RubyIndexer::Entry::KeywordRestParameter.new(name: :attributes), RubyIndexer::Entry::BlockParameter.new(name: :content), ]), - ], visibility: :public) + ], visibility: :public, comments: "Outputs a `<#{tag_name}>` tag.") end end end