rubydex 0.1.0.beta11 → 0.1.0.beta13

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 (108) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +23 -23
  3. data/README.md +125 -125
  4. data/THIRD_PARTY_LICENSES.html +2018 -945
  5. data/exe/rdx +47 -47
  6. data/ext/rubydex/declaration.c +453 -388
  7. data/ext/rubydex/declaration.h +23 -23
  8. data/ext/rubydex/definition.c +284 -197
  9. data/ext/rubydex/definition.h +28 -28
  10. data/ext/rubydex/diagnostic.c +6 -6
  11. data/ext/rubydex/diagnostic.h +11 -11
  12. data/ext/rubydex/document.c +97 -98
  13. data/ext/rubydex/document.h +10 -10
  14. data/ext/rubydex/extconf.rb +146 -127
  15. data/ext/rubydex/graph.c +701 -512
  16. data/ext/rubydex/graph.h +10 -10
  17. data/ext/rubydex/handle.h +44 -44
  18. data/ext/rubydex/location.c +22 -22
  19. data/ext/rubydex/location.h +15 -15
  20. data/ext/rubydex/reference.c +123 -104
  21. data/ext/rubydex/reference.h +15 -16
  22. data/ext/rubydex/rubydex.c +22 -22
  23. data/ext/rubydex/utils.c +108 -86
  24. data/ext/rubydex/utils.h +34 -28
  25. data/lib/rubydex/comment.rb +17 -17
  26. data/lib/rubydex/declaration.rb +11 -0
  27. data/lib/rubydex/diagnostic.rb +21 -21
  28. data/lib/rubydex/failures.rb +15 -15
  29. data/lib/rubydex/graph.rb +98 -92
  30. data/lib/rubydex/keyword.rb +17 -0
  31. data/lib/rubydex/keyword_parameter.rb +13 -0
  32. data/lib/rubydex/location.rb +90 -90
  33. data/lib/rubydex/mixin.rb +22 -0
  34. data/lib/rubydex/version.rb +5 -5
  35. data/lib/rubydex.rb +24 -20
  36. data/rbi/rubydex.rbi +425 -310
  37. data/rust/Cargo.lock +1851 -1851
  38. data/rust/Cargo.toml +29 -29
  39. data/rust/about.toml +10 -10
  40. data/rust/{about.hbs → about_templates/about.hbs} +81 -78
  41. data/rust/about_templates/mingw_licenses.hbs +1071 -0
  42. data/rust/rubydex/Cargo.toml +42 -42
  43. data/rust/rubydex/src/compile_assertions.rs +13 -13
  44. data/rust/rubydex/src/diagnostic.rs +110 -109
  45. data/rust/rubydex/src/errors.rs +28 -28
  46. data/rust/rubydex/src/indexing/local_graph.rs +224 -224
  47. data/rust/rubydex/src/indexing/rbs_indexer.rs +1551 -1554
  48. data/rust/rubydex/src/indexing/ruby_indexer.rs +2329 -6753
  49. data/rust/rubydex/src/indexing/ruby_indexer_tests.rs +4962 -0
  50. data/rust/rubydex/src/indexing.rs +210 -210
  51. data/rust/rubydex/src/integrity.rs +279 -278
  52. data/rust/rubydex/src/job_queue.rs +199 -205
  53. data/rust/rubydex/src/lib.rs +17 -17
  54. data/rust/rubydex/src/listing.rs +371 -272
  55. data/rust/rubydex/src/main.rs +160 -160
  56. data/rust/rubydex/src/model/built_in.rs +83 -0
  57. data/rust/rubydex/src/model/comment.rs +24 -24
  58. data/rust/rubydex/src/model/declaration.rs +679 -588
  59. data/rust/rubydex/src/model/definitions.rs +1682 -1602
  60. data/rust/rubydex/src/model/document.rs +222 -252
  61. data/rust/rubydex/src/model/encoding.rs +22 -22
  62. data/rust/rubydex/src/model/graph.rs +3782 -3556
  63. data/rust/rubydex/src/model/id.rs +110 -110
  64. data/rust/rubydex/src/model/identity_maps.rs +58 -58
  65. data/rust/rubydex/src/model/ids.rs +60 -38
  66. data/rust/rubydex/src/model/keywords.rs +256 -256
  67. data/rust/rubydex/src/model/name.rs +298 -298
  68. data/rust/rubydex/src/model/references.rs +111 -111
  69. data/rust/rubydex/src/model/string_ref.rs +50 -50
  70. data/rust/rubydex/src/model/visibility.rs +41 -41
  71. data/rust/rubydex/src/model.rs +15 -14
  72. data/rust/rubydex/src/offset.rs +147 -147
  73. data/rust/rubydex/src/position.rs +6 -6
  74. data/rust/rubydex/src/query.rs +1841 -1700
  75. data/rust/rubydex/src/resolution.rs +1852 -5895
  76. data/rust/rubydex/src/resolution_tests.rs +4701 -0
  77. data/rust/rubydex/src/stats/memory.rs +71 -71
  78. data/rust/rubydex/src/stats/orphan_report.rs +264 -263
  79. data/rust/rubydex/src/stats/timer.rs +127 -127
  80. data/rust/rubydex/src/stats.rs +11 -11
  81. data/rust/rubydex/src/test_utils/context.rs +226 -226
  82. data/rust/rubydex/src/test_utils/graph_test.rs +730 -679
  83. data/rust/rubydex/src/test_utils/local_graph_test.rs +602 -602
  84. data/rust/rubydex/src/test_utils.rs +52 -52
  85. data/rust/rubydex/src/visualization/dot.rs +192 -176
  86. data/rust/rubydex/src/visualization.rs +6 -6
  87. data/rust/rubydex/tests/cli.rs +185 -167
  88. data/rust/rubydex-mcp/Cargo.toml +28 -28
  89. data/rust/rubydex-mcp/src/main.rs +48 -48
  90. data/rust/rubydex-mcp/src/server.rs +1145 -1145
  91. data/rust/rubydex-mcp/src/tools.rs +49 -49
  92. data/rust/rubydex-mcp/tests/mcp.rs +302 -302
  93. data/rust/rubydex-sys/Cargo.toml +20 -20
  94. data/rust/rubydex-sys/build.rs +14 -14
  95. data/rust/rubydex-sys/cbindgen.toml +12 -12
  96. data/rust/rubydex-sys/src/declaration_api.rs +485 -469
  97. data/rust/rubydex-sys/src/definition_api.rs +443 -352
  98. data/rust/rubydex-sys/src/diagnostic_api.rs +99 -99
  99. data/rust/rubydex-sys/src/document_api.rs +85 -54
  100. data/rust/rubydex-sys/src/graph_api.rs +1017 -700
  101. data/rust/rubydex-sys/src/lib.rs +79 -9
  102. data/rust/rubydex-sys/src/location_api.rs +79 -79
  103. data/rust/rubydex-sys/src/name_api.rs +187 -135
  104. data/rust/rubydex-sys/src/reference_api.rs +267 -195
  105. data/rust/rubydex-sys/src/utils.rs +70 -70
  106. data/rust/rustfmt.toml +2 -2
  107. metadata +16 -9
  108. data/lib/rubydex/librubydex_sys.so +0 -0
@@ -1,111 +1,111 @@
1
- use crate::{
2
- assert_mem_size,
3
- model::ids::{NameId, ReferenceId, StringId, UriId},
4
- offset::Offset,
5
- };
6
-
7
- /// A reference to a constant
8
- #[derive(Debug)]
9
- pub struct ConstantReference {
10
- /// The name ID of this reference
11
- name_id: NameId,
12
- /// The document where we found the reference
13
- uri_id: UriId,
14
- /// The offsets inside of the document where we found the reference
15
- offset: Offset,
16
- }
17
- assert_mem_size!(ConstantReference, 24);
18
-
19
- impl ConstantReference {
20
- #[must_use]
21
- pub fn new(name_id: NameId, uri_id: UriId, offset: Offset) -> Self {
22
- Self {
23
- name_id,
24
- uri_id,
25
- offset,
26
- }
27
- }
28
-
29
- #[must_use]
30
- pub fn name_id(&self) -> &NameId {
31
- &self.name_id
32
- }
33
-
34
- #[must_use]
35
- pub fn uri_id(&self) -> UriId {
36
- self.uri_id
37
- }
38
-
39
- #[must_use]
40
- pub fn offset(&self) -> &Offset {
41
- &self.offset
42
- }
43
-
44
- #[must_use]
45
- pub fn id(&self) -> ReferenceId {
46
- ReferenceId::from(&format!(
47
- "{}:{}:{}-{}",
48
- self.name_id,
49
- self.uri_id,
50
- self.offset.start(),
51
- self.offset.end()
52
- ))
53
- }
54
- }
55
-
56
- /// A reference to a method
57
- #[derive(Debug)]
58
- pub struct MethodRef {
59
- /// The unqualified name of the method
60
- str: StringId,
61
- /// The document where we found the reference
62
- uri_id: UriId,
63
- /// The offsets inside of the document where we found the reference
64
- offset: Offset,
65
- /// The receiver of the method call if it's a constant
66
- receiver: Option<NameId>,
67
- }
68
- assert_mem_size!(MethodRef, 32);
69
-
70
- impl MethodRef {
71
- #[must_use]
72
- pub fn new(str: StringId, uri_id: UriId, offset: Offset, receiver: Option<NameId>) -> Self {
73
- Self {
74
- str,
75
- uri_id,
76
- offset,
77
- receiver,
78
- }
79
- }
80
-
81
- #[must_use]
82
- pub fn str(&self) -> &StringId {
83
- &self.str
84
- }
85
-
86
- #[must_use]
87
- pub fn uri_id(&self) -> UriId {
88
- self.uri_id
89
- }
90
-
91
- #[must_use]
92
- pub fn offset(&self) -> &Offset {
93
- &self.offset
94
- }
95
-
96
- #[must_use]
97
- pub fn receiver(&self) -> Option<NameId> {
98
- self.receiver
99
- }
100
-
101
- #[must_use]
102
- pub fn id(&self) -> ReferenceId {
103
- ReferenceId::from(&format!(
104
- "{}:{}:{}-{}",
105
- self.str,
106
- self.uri_id,
107
- self.offset.start(),
108
- self.offset.end()
109
- ))
110
- }
111
- }
1
+ use crate::{
2
+ assert_mem_size,
3
+ model::ids::{ConstantReferenceId, MethodReferenceId, NameId, StringId, UriId},
4
+ offset::Offset,
5
+ };
6
+
7
+ /// A reference to a constant
8
+ #[derive(Debug)]
9
+ pub struct ConstantReference {
10
+ /// The name ID of this reference
11
+ name_id: NameId,
12
+ /// The document where we found the reference
13
+ uri_id: UriId,
14
+ /// The offsets inside of the document where we found the reference
15
+ offset: Offset,
16
+ }
17
+ assert_mem_size!(ConstantReference, 24);
18
+
19
+ impl ConstantReference {
20
+ #[must_use]
21
+ pub fn new(name_id: NameId, uri_id: UriId, offset: Offset) -> Self {
22
+ Self {
23
+ name_id,
24
+ uri_id,
25
+ offset,
26
+ }
27
+ }
28
+
29
+ #[must_use]
30
+ pub fn name_id(&self) -> &NameId {
31
+ &self.name_id
32
+ }
33
+
34
+ #[must_use]
35
+ pub fn uri_id(&self) -> UriId {
36
+ self.uri_id
37
+ }
38
+
39
+ #[must_use]
40
+ pub fn offset(&self) -> &Offset {
41
+ &self.offset
42
+ }
43
+
44
+ #[must_use]
45
+ pub fn id(&self) -> ConstantReferenceId {
46
+ ConstantReferenceId::from(&format!(
47
+ "{}:{}:{}-{}",
48
+ self.name_id,
49
+ self.uri_id,
50
+ self.offset.start(),
51
+ self.offset.end()
52
+ ))
53
+ }
54
+ }
55
+
56
+ /// A reference to a method
57
+ #[derive(Debug)]
58
+ pub struct MethodRef {
59
+ /// The unqualified name of the method
60
+ str: StringId,
61
+ /// The document where we found the reference
62
+ uri_id: UriId,
63
+ /// The offsets inside of the document where we found the reference
64
+ offset: Offset,
65
+ /// The receiver of the method call if it's a constant
66
+ receiver: Option<NameId>,
67
+ }
68
+ assert_mem_size!(MethodRef, 32);
69
+
70
+ impl MethodRef {
71
+ #[must_use]
72
+ pub fn new(str: StringId, uri_id: UriId, offset: Offset, receiver: Option<NameId>) -> Self {
73
+ Self {
74
+ str,
75
+ uri_id,
76
+ offset,
77
+ receiver,
78
+ }
79
+ }
80
+
81
+ #[must_use]
82
+ pub fn str(&self) -> &StringId {
83
+ &self.str
84
+ }
85
+
86
+ #[must_use]
87
+ pub fn uri_id(&self) -> UriId {
88
+ self.uri_id
89
+ }
90
+
91
+ #[must_use]
92
+ pub fn offset(&self) -> &Offset {
93
+ &self.offset
94
+ }
95
+
96
+ #[must_use]
97
+ pub fn receiver(&self) -> Option<NameId> {
98
+ self.receiver
99
+ }
100
+
101
+ #[must_use]
102
+ pub fn id(&self) -> MethodReferenceId {
103
+ MethodReferenceId::from(&format!(
104
+ "{}:{}:{}-{}",
105
+ self.str,
106
+ self.uri_id,
107
+ self.offset.start(),
108
+ self.offset.end()
109
+ ))
110
+ }
111
+ }
@@ -1,50 +1,50 @@
1
- use std::ops::Deref;
2
-
3
- /// A reference-counted string used in the graph.
4
- ///
5
- /// This struct wraps a `String` with a reference count to track how many times
6
- /// the string is used across the graph. When a document is removed, we decrement
7
- /// the reference count for each string it uses, and remove the string from the
8
- /// graph when its count reaches zero.
9
- #[derive(Debug)]
10
- pub struct StringRef {
11
- value: String,
12
- ref_count: u32,
13
- }
14
-
15
- impl StringRef {
16
- #[must_use]
17
- pub fn new(value: String) -> Self {
18
- Self { value, ref_count: 1 }
19
- }
20
-
21
- #[must_use]
22
- pub fn ref_count(&self) -> u32 {
23
- self.ref_count
24
- }
25
-
26
- /// # Panics
27
- ///
28
- /// This function will panic if the reference count would exceed `u32::MAX`
29
- pub fn increment_ref_count(&mut self, count: u32) {
30
- self.ref_count = self
31
- .ref_count
32
- .checked_add(count)
33
- .expect("Should not exceed maximum string ref count");
34
- }
35
-
36
- #[must_use]
37
- pub fn decrement_ref_count(&mut self) -> bool {
38
- debug_assert!(self.ref_count > 0);
39
- self.ref_count -= 1;
40
- self.ref_count > 0
41
- }
42
- }
43
-
44
- impl Deref for StringRef {
45
- type Target = String;
46
-
47
- fn deref(&self) -> &Self::Target {
48
- &self.value
49
- }
50
- }
1
+ use std::ops::Deref;
2
+
3
+ /// A reference-counted string used in the graph.
4
+ ///
5
+ /// This struct wraps a `String` with a reference count to track how many times
6
+ /// the string is used across the graph. When a document is removed, we decrement
7
+ /// the reference count for each string it uses, and remove the string from the
8
+ /// graph when its count reaches zero.
9
+ #[derive(Debug)]
10
+ pub struct StringRef {
11
+ value: String,
12
+ ref_count: u32,
13
+ }
14
+
15
+ impl StringRef {
16
+ #[must_use]
17
+ pub fn new(value: String) -> Self {
18
+ Self { value, ref_count: 1 }
19
+ }
20
+
21
+ #[must_use]
22
+ pub fn ref_count(&self) -> u32 {
23
+ self.ref_count
24
+ }
25
+
26
+ /// # Panics
27
+ ///
28
+ /// This function will panic if the reference count would exceed `u32::MAX`
29
+ pub fn increment_ref_count(&mut self, count: u32) {
30
+ self.ref_count = self
31
+ .ref_count
32
+ .checked_add(count)
33
+ .expect("Should not exceed maximum string ref count");
34
+ }
35
+
36
+ #[must_use]
37
+ pub fn decrement_ref_count(&mut self) -> bool {
38
+ debug_assert!(self.ref_count > 0);
39
+ self.ref_count -= 1;
40
+ self.ref_count > 0
41
+ }
42
+ }
43
+
44
+ impl Deref for StringRef {
45
+ type Target = String;
46
+
47
+ fn deref(&self) -> &Self::Target {
48
+ &self.value
49
+ }
50
+ }
@@ -1,41 +1,41 @@
1
- use core::fmt;
2
- use std::fmt::Display;
3
-
4
- #[derive(Debug, Clone, Copy, PartialEq, Eq)]
5
- pub enum Visibility {
6
- Public,
7
- Protected,
8
- Private,
9
- ModuleFunction,
10
- }
11
-
12
- impl Visibility {
13
- /// Parse a visibility from a string.
14
- ///
15
- /// Valid values are `public`, `protected`, and `private`.
16
- ///
17
- /// # Panics
18
- ///
19
- /// Panics if the string is not a valid visibility
20
- #[must_use]
21
- pub fn from_string(str: &str) -> Self {
22
- match str {
23
- "public" => Self::Public,
24
- "protected" => Self::Protected,
25
- "private" => Self::Private,
26
- "module_function" => Self::ModuleFunction,
27
- _ => panic!("Invalid visibility: {str}"),
28
- }
29
- }
30
- }
31
-
32
- impl Display for Visibility {
33
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34
- match self {
35
- Self::Public => write!(f, "public"),
36
- Self::Protected => write!(f, "protected"),
37
- Self::Private => write!(f, "private"),
38
- Self::ModuleFunction => write!(f, "module_function"),
39
- }
40
- }
41
- }
1
+ use core::fmt;
2
+ use std::fmt::Display;
3
+
4
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
5
+ pub enum Visibility {
6
+ Public,
7
+ Protected,
8
+ Private,
9
+ ModuleFunction,
10
+ }
11
+
12
+ impl Visibility {
13
+ /// Parse a visibility from a string.
14
+ ///
15
+ /// Valid values are `public`, `protected`, and `private`.
16
+ ///
17
+ /// # Panics
18
+ ///
19
+ /// Panics if the string is not a valid visibility
20
+ #[must_use]
21
+ pub fn from_string(str: &str) -> Self {
22
+ match str {
23
+ "public" => Self::Public,
24
+ "protected" => Self::Protected,
25
+ "private" => Self::Private,
26
+ "module_function" => Self::ModuleFunction,
27
+ _ => panic!("Invalid visibility: {str}"),
28
+ }
29
+ }
30
+ }
31
+
32
+ impl Display for Visibility {
33
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34
+ match self {
35
+ Self::Public => write!(f, "public"),
36
+ Self::Protected => write!(f, "protected"),
37
+ Self::Private => write!(f, "private"),
38
+ Self::ModuleFunction => write!(f, "module_function"),
39
+ }
40
+ }
41
+ }
@@ -1,14 +1,15 @@
1
- pub mod comment;
2
- pub mod declaration;
3
- pub mod definitions;
4
- pub mod document;
5
- pub mod encoding;
6
- pub mod graph;
7
- pub mod id;
8
- pub mod identity_maps;
9
- pub mod ids;
10
- pub mod keywords;
11
- pub mod name;
12
- pub mod references;
13
- pub mod string_ref;
14
- pub mod visibility;
1
+ pub mod built_in;
2
+ pub mod comment;
3
+ pub mod declaration;
4
+ pub mod definitions;
5
+ pub mod document;
6
+ pub mod encoding;
7
+ pub mod graph;
8
+ pub mod id;
9
+ pub mod identity_maps;
10
+ pub mod ids;
11
+ pub mod keywords;
12
+ pub mod name;
13
+ pub mod references;
14
+ pub mod string_ref;
15
+ pub mod visibility;