ruby-lsp-cell 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 178572be5a2fb9118cec4c384a4d2ef55263d9c689021e3e5ef849f8f73059e3
4
- data.tar.gz: e12e41a2e2204d4ab27cecbd670ddff43cf47a8e22b432eb477fb6b1627d6041
3
+ metadata.gz: af2de44e3dcfc2374fd50bfcfe41227029465fdfc55a4af05a4f9bf478681ca3
4
+ data.tar.gz: 79d0086b44a359a5473a50950149df9d2465f0cbe92364cdeb357a0c7eb0c9d4
5
5
  SHA512:
6
- metadata.gz: d99a39479620e9becaf3d94d3e928d68f1c8228d1d162e0a02e0a3c79e7337d853b365338416c4cbf30673b62df1f48f26e890aa12213df5fc8177735751f7bd
7
- data.tar.gz: f8fcbfa1bef3a640d57c4551ccea2ab9a3f6c4303f9b8fb8abda2960720bf7bc1a05db00455460f5df732ef7d1d816630d76adc8528f8655ed3e6f4ee6920531
6
+ metadata.gz: 4794c22ccc66ac0d1f7bc8d4cd3bc81c68faa9f37eb1d7138491cb524c59c16e49ff28c22fbffb9ede5240343b3ec868b6a48c736fef0037e0fed2b7802b92a4
7
+ data.tar.gz: 79fe3cb7d38cd34e5491458d92788512f0892091fde0ed20606a103b955795c0d8499071a609b08fd47f372dd7036ec6f59c1dc593013d6ce07068d9b081872a
@@ -3,6 +3,6 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Cell
6
- VERSION = "0.1.1"
6
+ VERSION = "0.1.3"
7
7
  end
8
8
  end
@@ -29,6 +29,8 @@ module RubyLsp
29
29
 
30
30
  sig { params(global_state: RubyLsp::GlobalState, message_queue: Thread::Queue).void }
31
31
  def activate(global_state, message_queue)
32
+ return unless are_required_libraries_installed?
33
+
32
34
  @message_queue = message_queue
33
35
  @global_state = global_state
34
36
  @settings = @global_state.settings_for_addon(name) || {}
@@ -66,6 +68,14 @@ module RubyLsp
66
68
  def version
67
69
  RubyLsp::Cell::VERSION
68
70
  end
71
+
72
+ def are_required_libraries_installed?
73
+ Bundler.definition.specs.any? do |spec|
74
+ spec.name == "cells"
75
+ end
76
+ rescue Bundler::GemNotFound
77
+ false
78
+ end
69
79
  end
70
80
  end
71
81
  end
@@ -9,14 +9,12 @@ module RubyLsp
9
9
 
10
10
  include ::RubyLsp::Requests::Support::Common
11
11
 
12
- REQUIRED_LIBRARY = T.let("cells-rails", String)
13
-
14
12
  ResponseType = type_member { { fixed: T::Array[CodeRay] } }
15
13
 
16
14
  sig do
17
15
  params(
18
16
  response_builder: RubyLsp::ResponseBuilders::CollectionResponseBuilder,
19
- uri: URI::Generic,
17
+ uri: URI::File,
20
18
  dispatcher: Prism::Dispatcher,
21
19
  global_state: RubyLsp::GlobalState,
22
20
  enabled: T::Boolean,
@@ -33,25 +31,48 @@ module RubyLsp
33
31
  @class_name = T.let("", String)
34
32
  @pattern = T.let("_cell", String)
35
33
  @default_view_filename = T.let(default_view_filename, String)
36
- dispatcher.register(self, :on_class_node_enter, :on_def_node_leave)
34
+ @in_cell_class = T.let(false, T::Boolean)
35
+ @nesting = T.let([], T::Array[String])
36
+ dispatcher.register(
37
+ self,
38
+ :on_module_node_enter,
39
+ :on_module_node_leave,
40
+ :on_class_node_enter,
41
+ :on_class_node_leave,
42
+ :on_def_node_enter,
43
+ )
44
+ end
45
+
46
+ sig { params(node: Prism::ModuleNode).void }
47
+ def on_module_node_enter(node)
48
+ @nesting.push(node.constant_path.slice)
49
+ end
50
+
51
+ sig { params(node: Prism::ModuleNode).void }
52
+ def on_module_node_leave(node)
53
+ @nesting.pop
37
54
  end
38
55
 
39
56
  sig { params(node: Prism::ClassNode).void }
40
57
  def on_class_node_enter(node)
41
- @class_name = node.constant_path.slice
42
- return unless @class_name.end_with?("Cell")
58
+ @nesting.push(node.constant_path.slice)
59
+ class_name = @nesting.join("::")
60
+ return unless class_name.end_with?("Cell")
61
+ return unless @global_state.index.linearized_ancestors_of(class_name).include?("Cell::ViewModel")
43
62
 
63
+ @in_cell_class = true
44
64
  add_default_goto_code_lens(node)
45
65
  end
46
66
 
47
67
  sig { params(node: Prism::ClassNode).void }
48
68
  def on_class_node_leave(node)
49
- @class_name = ""
69
+ @nesting.pop
70
+ @in_cell_class = false
50
71
  end
51
72
 
52
73
  sig { params(node: Prism::DefNode).void }
53
- def on_def_node_leave(node)
54
- return unless @class_name.end_with?("Cell")
74
+ def on_def_node_enter(node)
75
+ return unless @in_cell_class
55
76
  return unless contains_render_call?(node.body)
56
77
 
57
78
  add_function_goto_code_lens(node, node.name.to_s)
@@ -61,44 +82,27 @@ module RubyLsp
61
82
 
62
83
  sig { params(node: Prism::Node).void }
63
84
  def add_default_goto_code_lens(node)
64
- return unless are_required_libraries_installed?
65
-
66
85
  erb_filename = remove_last_pattern_in_string @default_view_filename, ".erb"
67
86
  uri = compute_erb_view_path @default_view_filename
68
87
 
69
- @response_builder << create_code_lens(
70
- node,
71
- title: "Go to #{erb_filename}",
72
- command_name: "vscode.open",
73
- arguments: [uri],
74
- data: { type: "goToFile" },
75
- )
88
+ create_go_to_file_code_lens(node, erb_filename, uri)
76
89
  end
77
90
 
78
91
  sig { params(node: T.nilable(Prism::Node)).returns(T::Boolean) }
79
92
  def contains_render_call?(node)
80
93
  return false if node.nil?
81
94
 
82
- return true if node.is_a?(Prism::CallNode) &&
83
- node.receiver.nil? &&
84
- node.message == "render"
95
+ if node.is_a?(Prism::CallNode)
96
+ return true if node.receiver.nil? && node.name == :render
97
+ end
85
98
 
86
99
  node.child_nodes.any? { |child| contains_render_call?(child) }
87
100
  end
88
101
 
89
102
  sig { params(node: Prism::Node, name: String).void }
90
103
  def add_function_goto_code_lens(node, name)
91
- return unless are_required_libraries_installed?
92
-
93
104
  uri = compute_erb_view_path("#{name}.erb")
94
-
95
- @response_builder << create_code_lens(
96
- node,
97
- title: "Go to #{name}",
98
- command_name: "vscode.open",
99
- arguments: [uri],
100
- data: { type: "goToFile" },
101
- )
105
+ create_go_to_file_code_lens(node, name, uri)
102
106
  end
103
107
 
104
108
  sig { params(string: String, pattern: String).returns(String) }
@@ -111,12 +115,20 @@ module RubyLsp
111
115
  escaped_pattern = Regexp.escape(@pattern)
112
116
  base_path = @path.sub(/#{escaped_pattern}\.rb$/, "")
113
117
  folder = File.basename(base_path)
114
- File.join(File.dirname(base_path), folder, name)
118
+ path = File.join(File.dirname(base_path), folder, name)
119
+ uri = URI::File.from_path(path: path).to_s
120
+ uri
115
121
  end
116
122
 
117
- sig { returns(T::Boolean) }
118
- def are_required_libraries_installed?
119
- Bundler.locked_gems.dependencies.keys.include?(REQUIRED_LIBRARY)
123
+ sig { params(node: Prism::Node, name: String, uri: String).void }
124
+ def create_go_to_file_code_lens(node, name, uri)
125
+ @response_builder << create_code_lens(
126
+ node,
127
+ title: "Go to #{name}",
128
+ command_name: "rubyLsp.openFile",
129
+ arguments: [[uri]],
130
+ data: { type: "file" },
131
+ )
120
132
  end
121
133
  end
122
134
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("lib", __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require "ruby_lsp/cell/version"
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "ruby-lsp-cell"
9
+ spec.version = RubyLsp::Cell::VERSION
10
+ spec.authors = ["Edgar Guzmán"]
11
+ spec.email = ["guzmanem@hotmail.com"]
12
+
13
+ spec.summary = "Ruby LSP addon for cell-based development support"
14
+ spec.description = "A Ruby LSP extension that provides additional language server features for cell-based development workflows"
15
+ spec.homepage = "https://github.com/guzmanem/ruby-lsp-cell"
16
+ spec.license = "MIT"
17
+ spec.required_ruby_version = ">= 3.0.0"
18
+
19
+ spec.metadata["homepage_uri"] = spec.homepage
20
+ spec.metadata["source_code_uri"] = "https://github.com/guzmanem/ruby-lsp-cell"
21
+ spec.metadata["changelog_uri"] = "https://github.com/guzmanem/ruby-lsp-cell/blob/main/CHANGELOG.md"
22
+ spec.metadata["rubygems_mfa_required"] = "true"
23
+
24
+ # Specify which files should be added to the gem when it is released.
25
+ spec.files = Dir.chdir(__dir__) do
26
+ %x(git ls-files -z).split("\x0").reject do |f|
27
+ (File.expand_path(f) == __FILE__) ||
28
+ f.start_with?(
29
+ "bin/",
30
+ "test/",
31
+ "spec/",
32
+ "features/",
33
+ "examples/",
34
+ ".git",
35
+ ".circleci",
36
+ "rubocop.yml",
37
+ "appveyor",
38
+ "Gemfile",
39
+ "misc/",
40
+ "sorbet/",
41
+ )
42
+ end
43
+ end
44
+
45
+ spec.bindir = "exe"
46
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
47
+ spec.require_paths = ["lib"]
48
+ end
@@ -0,0 +1,8 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ raise "Do not load this file!" unless defined?(RubyIndexer)
5
+
6
+ module Cell
7
+ class ViewModel; end
8
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-lsp-cell
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edgar Guzmán
@@ -28,6 +28,8 @@ files:
28
28
  - lib/ruby_lsp/cell/version.rb
29
29
  - lib/ruby_lsp/ruby-lsp-cell/addon.rb
30
30
  - lib/ruby_lsp/ruby-lsp-cell/code_lens.rb
31
+ - ruby-lsp-cell.gemspec
32
+ - tools/cell_fake.rb
31
33
  homepage: https://github.com/guzmanem/ruby-lsp-cell
32
34
  licenses:
33
35
  - MIT