rubydex 0.1.0.beta12-aarch64-linux

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.
Files changed (109) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +23 -0
  3. data/README.md +125 -0
  4. data/THIRD_PARTY_LICENSES.html +4562 -0
  5. data/exe/rdx +47 -0
  6. data/ext/rubydex/declaration.c +453 -0
  7. data/ext/rubydex/declaration.h +23 -0
  8. data/ext/rubydex/definition.c +284 -0
  9. data/ext/rubydex/definition.h +28 -0
  10. data/ext/rubydex/diagnostic.c +6 -0
  11. data/ext/rubydex/diagnostic.h +11 -0
  12. data/ext/rubydex/document.c +97 -0
  13. data/ext/rubydex/document.h +10 -0
  14. data/ext/rubydex/extconf.rb +138 -0
  15. data/ext/rubydex/graph.c +681 -0
  16. data/ext/rubydex/graph.h +10 -0
  17. data/ext/rubydex/handle.h +44 -0
  18. data/ext/rubydex/location.c +22 -0
  19. data/ext/rubydex/location.h +15 -0
  20. data/ext/rubydex/reference.c +123 -0
  21. data/ext/rubydex/reference.h +15 -0
  22. data/ext/rubydex/rubydex.c +22 -0
  23. data/ext/rubydex/utils.c +108 -0
  24. data/ext/rubydex/utils.h +34 -0
  25. data/lib/rubydex/3.2/rubydex.so +0 -0
  26. data/lib/rubydex/3.3/rubydex.so +0 -0
  27. data/lib/rubydex/3.4/rubydex.so +0 -0
  28. data/lib/rubydex/4.0/rubydex.so +0 -0
  29. data/lib/rubydex/comment.rb +17 -0
  30. data/lib/rubydex/diagnostic.rb +21 -0
  31. data/lib/rubydex/failures.rb +15 -0
  32. data/lib/rubydex/graph.rb +98 -0
  33. data/lib/rubydex/keyword.rb +17 -0
  34. data/lib/rubydex/keyword_parameter.rb +13 -0
  35. data/lib/rubydex/librubydex_sys.so +0 -0
  36. data/lib/rubydex/location.rb +90 -0
  37. data/lib/rubydex/mixin.rb +22 -0
  38. data/lib/rubydex/version.rb +5 -0
  39. data/lib/rubydex.rb +23 -0
  40. data/rbi/rubydex.rbi +422 -0
  41. data/rust/Cargo.lock +1851 -0
  42. data/rust/Cargo.toml +29 -0
  43. data/rust/about.hbs +78 -0
  44. data/rust/about.toml +10 -0
  45. data/rust/rubydex/Cargo.toml +42 -0
  46. data/rust/rubydex/src/compile_assertions.rs +13 -0
  47. data/rust/rubydex/src/diagnostic.rs +110 -0
  48. data/rust/rubydex/src/errors.rs +28 -0
  49. data/rust/rubydex/src/indexing/local_graph.rs +224 -0
  50. data/rust/rubydex/src/indexing/rbs_indexer.rs +1551 -0
  51. data/rust/rubydex/src/indexing/ruby_indexer.rs +2329 -0
  52. data/rust/rubydex/src/indexing/ruby_indexer_tests.rs +4962 -0
  53. data/rust/rubydex/src/indexing.rs +210 -0
  54. data/rust/rubydex/src/integrity.rs +279 -0
  55. data/rust/rubydex/src/job_queue.rs +205 -0
  56. data/rust/rubydex/src/lib.rs +17 -0
  57. data/rust/rubydex/src/listing.rs +371 -0
  58. data/rust/rubydex/src/main.rs +160 -0
  59. data/rust/rubydex/src/model/built_in.rs +83 -0
  60. data/rust/rubydex/src/model/comment.rs +24 -0
  61. data/rust/rubydex/src/model/declaration.rs +671 -0
  62. data/rust/rubydex/src/model/definitions.rs +1682 -0
  63. data/rust/rubydex/src/model/document.rs +222 -0
  64. data/rust/rubydex/src/model/encoding.rs +22 -0
  65. data/rust/rubydex/src/model/graph.rs +3754 -0
  66. data/rust/rubydex/src/model/id.rs +110 -0
  67. data/rust/rubydex/src/model/identity_maps.rs +58 -0
  68. data/rust/rubydex/src/model/ids.rs +60 -0
  69. data/rust/rubydex/src/model/keywords.rs +256 -0
  70. data/rust/rubydex/src/model/name.rs +298 -0
  71. data/rust/rubydex/src/model/references.rs +111 -0
  72. data/rust/rubydex/src/model/string_ref.rs +50 -0
  73. data/rust/rubydex/src/model/visibility.rs +41 -0
  74. data/rust/rubydex/src/model.rs +15 -0
  75. data/rust/rubydex/src/offset.rs +147 -0
  76. data/rust/rubydex/src/position.rs +6 -0
  77. data/rust/rubydex/src/query.rs +1841 -0
  78. data/rust/rubydex/src/resolution.rs +6517 -0
  79. data/rust/rubydex/src/stats/memory.rs +71 -0
  80. data/rust/rubydex/src/stats/orphan_report.rs +264 -0
  81. data/rust/rubydex/src/stats/timer.rs +127 -0
  82. data/rust/rubydex/src/stats.rs +11 -0
  83. data/rust/rubydex/src/test_utils/context.rs +226 -0
  84. data/rust/rubydex/src/test_utils/graph_test.rs +730 -0
  85. data/rust/rubydex/src/test_utils/local_graph_test.rs +602 -0
  86. data/rust/rubydex/src/test_utils.rs +52 -0
  87. data/rust/rubydex/src/visualization/dot.rs +192 -0
  88. data/rust/rubydex/src/visualization.rs +6 -0
  89. data/rust/rubydex/tests/cli.rs +185 -0
  90. data/rust/rubydex-mcp/Cargo.toml +28 -0
  91. data/rust/rubydex-mcp/src/main.rs +48 -0
  92. data/rust/rubydex-mcp/src/server.rs +1145 -0
  93. data/rust/rubydex-mcp/src/tools.rs +49 -0
  94. data/rust/rubydex-mcp/tests/mcp.rs +302 -0
  95. data/rust/rubydex-sys/Cargo.toml +20 -0
  96. data/rust/rubydex-sys/build.rs +14 -0
  97. data/rust/rubydex-sys/cbindgen.toml +12 -0
  98. data/rust/rubydex-sys/src/declaration_api.rs +485 -0
  99. data/rust/rubydex-sys/src/definition_api.rs +443 -0
  100. data/rust/rubydex-sys/src/diagnostic_api.rs +99 -0
  101. data/rust/rubydex-sys/src/document_api.rs +85 -0
  102. data/rust/rubydex-sys/src/graph_api.rs +948 -0
  103. data/rust/rubydex-sys/src/lib.rs +79 -0
  104. data/rust/rubydex-sys/src/location_api.rs +79 -0
  105. data/rust/rubydex-sys/src/name_api.rs +135 -0
  106. data/rust/rubydex-sys/src/reference_api.rs +267 -0
  107. data/rust/rubydex-sys/src/utils.rs +70 -0
  108. data/rust/rustfmt.toml +2 -0
  109. metadata +159 -0
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubydex
4
+ class Mixin
5
+ #: ConstantReference
6
+ attr_reader :constant_reference
7
+
8
+ #: (ConstantReference) -> void
9
+ def initialize(constant_reference)
10
+ @constant_reference = constant_reference
11
+ end
12
+ end
13
+
14
+ # Represents `include SomeModule`
15
+ class Include < Mixin; end
16
+
17
+ # Represents `prepend SomeModule`
18
+ class Prepend < Mixin; end
19
+
20
+ # Represents `extend SomeModule`
21
+ class Extend < Mixin; end
22
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubydex
4
+ VERSION = "0.1.0.beta12"
5
+ end
data/lib/rubydex.rb ADDED
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler"
4
+ require "uri"
5
+ require "rubydex/version"
6
+ require "rubydex/mixin"
7
+
8
+ begin
9
+ # Load the precompiled version of the library
10
+ ruby_version = /(\d+\.\d+)/.match(RUBY_VERSION)
11
+ require "rubydex/#{ruby_version}/rubydex"
12
+ rescue LoadError
13
+ # It's important to leave for users that can not or don't want to use the gem with precompiled binaries.
14
+ require "rubydex/rubydex"
15
+ end
16
+
17
+ require "rubydex/failures"
18
+ require "rubydex/location"
19
+ require "rubydex/comment"
20
+ require "rubydex/diagnostic"
21
+ require "rubydex/keyword"
22
+ require "rubydex/keyword_parameter"
23
+ require "rubydex/graph"
data/rbi/rubydex.rbi ADDED
@@ -0,0 +1,422 @@
1
+ # frozen_string_literal: true
2
+ # typed: strict
3
+
4
+ module Rubydex; end
5
+
6
+ class Rubydex::Comment
7
+ sig { params(string: String, location: Rubydex::Location).void }
8
+ def initialize(string:, location:); end
9
+
10
+ sig { returns(Rubydex::Location) }
11
+ def location; end
12
+
13
+ sig { returns(String) }
14
+ def string; end
15
+ end
16
+
17
+ class Rubydex::ConstantReference < Rubydex::Reference
18
+ sig { returns(Rubydex::Location) }
19
+ def location; end
20
+
21
+ class << self
22
+ private
23
+
24
+ def new(*args); end
25
+ end
26
+ end
27
+
28
+ class Rubydex::UnresolvedConstantReference < Rubydex::ConstantReference
29
+ sig { returns(String) }
30
+ def name; end
31
+ end
32
+
33
+ class Rubydex::ResolvedConstantReference < Rubydex::ConstantReference
34
+ sig { returns(Rubydex::Declaration) }
35
+ def declaration; end
36
+ end
37
+
38
+ class Rubydex::Declaration
39
+ sig { returns(T::Enumerable[Rubydex::Definition]) }
40
+ def definitions; end
41
+
42
+ sig { returns(String) }
43
+ def name; end
44
+
45
+ sig { returns(Rubydex::Declaration) }
46
+ def owner; end
47
+
48
+ sig { returns(String) }
49
+ def unqualified_name; end
50
+
51
+ class << self
52
+ private
53
+
54
+ def new(*args); end
55
+ end
56
+ end
57
+
58
+ class Rubydex::GlobalVariable < Rubydex::Declaration
59
+ sig { returns(T::Array[T.untyped]) }
60
+ def references; end
61
+ end
62
+
63
+ class Rubydex::InstanceVariable < Rubydex::Declaration
64
+ sig { returns(T::Array[T.untyped]) }
65
+ def references; end
66
+ end
67
+
68
+ class Rubydex::Constant < Rubydex::Declaration
69
+ sig { returns(T::Enumerable[Rubydex::ConstantReference]) }
70
+ def references; end
71
+ end
72
+
73
+ class Rubydex::ConstantAlias < Rubydex::Declaration
74
+ sig { returns(T::Enumerable[Rubydex::ConstantReference]) }
75
+ def references; end
76
+ end
77
+
78
+ class Rubydex::ClassVariable < Rubydex::Declaration
79
+ sig { returns(T::Array[T.untyped]) }
80
+ def references; end
81
+ end
82
+
83
+ class Rubydex::Method < Rubydex::Declaration
84
+ sig { returns(T::Enumerable[Rubydex::MethodReference]) }
85
+ def references; end
86
+ end
87
+
88
+ class Rubydex::Namespace < Rubydex::Declaration
89
+ sig { returns(T::Enumerable[Rubydex::ConstantReference]) }
90
+ def references; end
91
+
92
+ sig { returns(T::Enumerable[Rubydex::Namespace]) }
93
+ def ancestors; end
94
+
95
+ sig { returns(T::Enumerable[Rubydex::Namespace]) }
96
+ def descendants; end
97
+
98
+ sig { returns(T::Enumerable[Rubydex::Declaration]) }
99
+ def members; end
100
+
101
+ sig { params(name: String).returns(T.nilable(Rubydex::Declaration)) }
102
+ def member(name); end
103
+
104
+ sig { params(name: String, only_inherited: T::Boolean).returns(T.nilable(Rubydex::Declaration)) }
105
+ def find_member(name, only_inherited: false); end
106
+
107
+ sig { returns(T.nilable(Rubydex::SingletonClass)) }
108
+ def singleton_class; end
109
+ end
110
+
111
+ class Rubydex::Class < Rubydex::Namespace; end
112
+ class Rubydex::Module < Rubydex::Namespace; end
113
+ class Rubydex::SingletonClass < Rubydex::Namespace; end
114
+
115
+ class Rubydex::Definition
116
+ sig { returns(T::Array[Rubydex::Comment]) }
117
+ def comments; end
118
+
119
+ sig { returns(T::Boolean) }
120
+ def deprecated?; end
121
+
122
+ sig { returns(Rubydex::Location) }
123
+ def location; end
124
+
125
+ sig { returns(String) }
126
+ def name; end
127
+
128
+ sig { returns(T.nilable(Rubydex::Location)) }
129
+ def name_location; end
130
+
131
+ class << self
132
+ private
133
+
134
+ def new(*args); end
135
+ end
136
+ end
137
+
138
+ class Rubydex::AttrAccessorDefinition < Rubydex::Definition; end
139
+ class Rubydex::AttrReaderDefinition < Rubydex::Definition; end
140
+ class Rubydex::AttrWriterDefinition < Rubydex::Definition; end
141
+ class Rubydex::ClassVariableDefinition < Rubydex::Definition; end
142
+ class Rubydex::ConstantAliasDefinition < Rubydex::Definition; end
143
+ class Rubydex::ConstantDefinition < Rubydex::Definition; end
144
+ class Rubydex::GlobalVariableAliasDefinition < Rubydex::Definition; end
145
+ class Rubydex::GlobalVariableDefinition < Rubydex::Definition; end
146
+ class Rubydex::InstanceVariableDefinition < Rubydex::Definition; end
147
+ class Rubydex::MethodAliasDefinition < Rubydex::Definition; end
148
+ class Rubydex::MethodDefinition < Rubydex::Definition; end
149
+ class Rubydex::ModuleDefinition < Rubydex::Definition
150
+ sig { returns(T::Array[Rubydex::Mixin]) }
151
+ def mixins; end
152
+ end
153
+
154
+ class Rubydex::SingletonClassDefinition < Rubydex::Definition
155
+ sig { returns(T::Array[Rubydex::Mixin]) }
156
+ def mixins; end
157
+ end
158
+
159
+ class Rubydex::ClassDefinition < Rubydex::Definition
160
+ sig { returns(T.nilable(Rubydex::ConstantReference)) }
161
+ def superclass; end
162
+
163
+ sig { returns(T::Array[Rubydex::Mixin]) }
164
+ def mixins; end
165
+ end
166
+
167
+ class Rubydex::Mixin
168
+ sig { returns(Rubydex::ConstantReference) }
169
+ attr_reader :constant_reference
170
+
171
+ sig { params(constant_reference: Rubydex::ConstantReference).void }
172
+ def initialize(constant_reference); end
173
+ end
174
+
175
+ class Rubydex::Include < Rubydex::Mixin; end
176
+ class Rubydex::Prepend < Rubydex::Mixin; end
177
+ class Rubydex::Extend < Rubydex::Mixin; end
178
+
179
+ class Rubydex::Diagnostic
180
+ sig { params(rule: Symbol, message: String, location: Rubydex::Location).void }
181
+ def initialize(rule:, message:, location:); end
182
+
183
+ sig { returns(Rubydex::Location) }
184
+ def location; end
185
+
186
+ sig { returns(String) }
187
+ def message; end
188
+
189
+ sig { returns(Symbol) }
190
+ def rule; end
191
+ end
192
+
193
+ class Rubydex::Keyword
194
+ sig { params(name: String, documentation: String).void }
195
+ def initialize(name, documentation); end
196
+
197
+ sig { returns(String) }
198
+ def name; end
199
+
200
+ sig { returns(String) }
201
+ def documentation; end
202
+ end
203
+
204
+ class Rubydex::KeywordParameter
205
+ sig { params(name: String).void }
206
+ def initialize(name); end
207
+
208
+ sig { returns(String) }
209
+ def name; end
210
+ end
211
+
212
+ class Rubydex::Document
213
+ sig { returns(T::Enumerable[Rubydex::Definition]) }
214
+ def definitions; end
215
+
216
+ sig { returns(String) }
217
+ def uri; end
218
+
219
+ class << self
220
+ private
221
+
222
+ def new(*args); end
223
+ end
224
+ end
225
+
226
+ class Rubydex::Error < StandardError; end
227
+
228
+ class Rubydex::Failure
229
+ sig { params(message: String).void }
230
+ def initialize(message); end
231
+
232
+ sig { returns(String) }
233
+ def message; end
234
+ end
235
+
236
+ class Rubydex::IntegrityFailure < Rubydex::Failure; end
237
+
238
+ class Rubydex::Graph
239
+ IGNORED_DIRECTORIES = T.let(T.unsafe(nil), T::Array[String])
240
+
241
+ sig { params(workspace_path: T.nilable(String)).void }
242
+ def initialize(workspace_path: nil); end
243
+
244
+ sig { params(fully_qualified_name: String).returns(T.nilable(Rubydex::Declaration)) }
245
+ def [](fully_qualified_name); end
246
+
247
+ sig { returns(T::Enumerable[Rubydex::ConstantReference]) }
248
+ def constant_references; end
249
+
250
+ sig { returns(T::Enumerable[Rubydex::Declaration]) }
251
+ def declarations; end
252
+
253
+ sig { params(uri: String).returns(T.nilable(Rubydex::Document)) }
254
+ def delete_document(uri); end
255
+
256
+ sig { returns(T::Array[Rubydex::Diagnostic]) }
257
+ def diagnostics; end
258
+
259
+ sig { returns(T::Enumerable[Rubydex::Document]) }
260
+ def documents; end
261
+
262
+ sig { params(file_paths: T::Array[String]).returns(T::Array[String]) }
263
+ def index_all(file_paths); end
264
+
265
+ sig { params(uri: String, source: String, language_id: String).void }
266
+ def index_source(uri, source, language_id); end
267
+
268
+ # Index all files and dependencies of the workspace that exists in `@workspace_path`
269
+ sig { returns(T::Array[String]) }
270
+ def index_workspace; end
271
+
272
+ sig { returns(T::Enumerable[Rubydex::MethodReference]) }
273
+ def method_references; end
274
+
275
+ sig { params(load_paths: T::Array[String]).returns(T::Array[String]) }
276
+ def require_paths(load_paths); end
277
+
278
+ sig { returns(T.self_type) }
279
+ def resolve; end
280
+
281
+ sig { params(name: String, nesting: T::Array[String]).returns(T.nilable(Rubydex::Declaration)) }
282
+ def resolve_constant(name, nesting); end
283
+
284
+ sig { params(require_path: String, load_paths: T::Array[String]).returns(T.nilable(Rubydex::Document)) }
285
+ def resolve_require_path(require_path, load_paths); end
286
+
287
+ sig { params(query: String).returns(T::Enumerable[Rubydex::Declaration]) }
288
+ def search(query); end
289
+
290
+ sig { params(query: String).returns(T::Enumerable[Rubydex::Declaration]) }
291
+ def fuzzy_search(query); end
292
+
293
+ sig { params(encoding: String).void }
294
+ def encoding=(encoding); end
295
+
296
+ sig { returns(String) }
297
+ def workspace_path; end
298
+
299
+ sig { params(workspace_path: String).returns(String) }
300
+ def workspace_path=(workspace_path); end
301
+
302
+ sig { returns(T::Array[String]) }
303
+ def workspace_paths; end
304
+
305
+ sig { returns(T::Array[Rubydex::Failure]) }
306
+ def check_integrity; end
307
+
308
+ # Returns completion candidates for an expression context. This includes all keywords, constants, methods, instance
309
+ # variables, class variables and global variables reachable from the current lexical scope and self type.
310
+ #
311
+ # The nesting array represents the lexical scope stack, where the last element is the self type. An empty array
312
+ # defaults to `Object` as the self type (top-level context).
313
+ sig { params(nesting: T::Array[String]).returns(T::Array[T.any(Rubydex::Declaration, Rubydex::Keyword)]) }
314
+ def complete_expression(nesting); end
315
+
316
+ # Returns completion candidates after a namespace access operator (e.g., `Foo::`). This includes all constants and
317
+ # singleton methods for the namespace and its ancestors.
318
+ sig { params(name: String).returns(T::Array[Rubydex::Declaration]) }
319
+ def complete_namespace_access(name); end
320
+
321
+ # Returns completion candidates after a method call operator (e.g., `foo.`). This includes all methods that exist on
322
+ # the type of the receiver and its ancestors.
323
+ sig { params(name: String).returns(T::Array[Rubydex::Method]) }
324
+ def complete_method_call(name); end
325
+
326
+ # Returns completion candidates inside a method call's argument list (e.g., `foo.bar(|)`). This includes everything
327
+ # that expression completion provides plus keyword argument names of the method being called.
328
+ #
329
+ # The nesting array represents the lexical scope stack, where the last element is the self type.
330
+ sig { params(name: String, nesting: T::Array[String]).returns(T::Array[T.any(Rubydex::Declaration, Rubydex::Keyword, Rubydex::KeywordParameter)]) }
331
+ def complete_method_argument(name, nesting); end
332
+
333
+ private
334
+
335
+ sig { params(paths: T::Array[String]).void }
336
+ def add_core_rbs_definition_paths(paths); end
337
+
338
+ sig { params(paths: T::Array[String]).void }
339
+ def add_workspace_dependency_paths(paths); end
340
+
341
+ sig { params(paths: T::Array[String]).void }
342
+ def exclude_paths(paths); end
343
+
344
+ sig { returns(T::Array[String]) }
345
+ def excluded_paths; end
346
+ end
347
+
348
+ class Rubydex::DisplayLocation < Rubydex::Location
349
+ sig { returns([String, Integer, Integer, Integer, Integer]) }
350
+ def comparable_values; end
351
+
352
+ sig { returns(Rubydex::DisplayLocation) }
353
+ def to_display; end
354
+
355
+ sig { returns(String) }
356
+ def to_s; end
357
+ end
358
+
359
+ class Rubydex::Location
360
+ include ::Comparable
361
+
362
+ sig do
363
+ params(
364
+ uri: String,
365
+ start_line: Integer,
366
+ end_line: Integer,
367
+ start_column: Integer,
368
+ end_column: Integer,
369
+ ).void
370
+ end
371
+ def initialize(uri:, start_line:, end_line:, start_column:, end_column:); end
372
+
373
+ sig { params(other: T.untyped).returns(T.nilable(Integer)) }
374
+ def <=>(other); end
375
+
376
+ sig { returns([String, Integer, Integer, Integer, Integer]) }
377
+ def comparable_values; end
378
+
379
+ sig { returns(Integer) }
380
+ def end_column; end
381
+
382
+ sig { returns(Integer) }
383
+ def end_line; end
384
+
385
+ sig { returns(String) }
386
+ def to_file_path; end
387
+
388
+ sig { returns(Integer) }
389
+ def start_column; end
390
+
391
+ sig { returns(Integer) }
392
+ def start_line; end
393
+
394
+ sig { returns(Rubydex::DisplayLocation) }
395
+ def to_display; end
396
+
397
+ sig { returns(String) }
398
+ def to_s; end
399
+
400
+ sig { returns(String) }
401
+ def uri; end
402
+
403
+ class NotFileUriError < StandardError; end
404
+ end
405
+
406
+ class Rubydex::MethodReference < Rubydex::Reference
407
+ sig { returns(Rubydex::Location) }
408
+ def location; end
409
+
410
+ sig { returns(String) }
411
+ def name; end
412
+ end
413
+
414
+ class Rubydex::Reference
415
+ class << self
416
+ private
417
+
418
+ def new(*args); end
419
+ end
420
+ end
421
+
422
+ Rubydex::VERSION = T.let(T.unsafe(nil), String)