prism 1.2.0 → 1.3.0
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 +4 -4
- data/CHANGELOG.md +23 -1
- data/Makefile +1 -1
- data/config.yml +420 -2
- data/docs/build_system.md +8 -11
- data/docs/relocation.md +34 -0
- data/ext/prism/api_node.c +18 -10
- data/ext/prism/extconf.rb +13 -36
- data/ext/prism/extension.c +68 -0
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +426 -2
- data/include/prism/defines.h +22 -7
- data/include/prism/version.h +2 -2
- data/include/prism.h +47 -0
- data/lib/prism/dot_visitor.rb +10 -0
- data/lib/prism/dsl.rb +4 -4
- data/lib/prism/ffi.rb +49 -2
- data/lib/prism/inspect_visitor.rb +2 -0
- data/lib/prism/node.rb +1838 -95
- data/lib/prism/parse_result/errors.rb +1 -1
- data/lib/prism/parse_result.rb +2 -2
- data/lib/prism/reflection.rb +2 -2
- data/lib/prism/relocation.rb +504 -0
- data/lib/prism/serialize.rb +5 -5
- data/lib/prism/string_query.rb +30 -0
- data/lib/prism/translation/parser/compiler.rb +36 -26
- data/lib/prism/translation/ruby_parser.rb +12 -3
- data/lib/prism.rb +6 -4
- data/prism.gemspec +7 -1
- data/rbi/prism/dsl.rbi +4 -4
- data/rbi/prism/node.rbi +22 -10
- data/rbi/prism/string_query.rbi +12 -0
- data/sig/prism/dsl.rbs +2 -2
- data/sig/prism/node.rbs +12 -8
- data/sig/prism/relocation.rbs +185 -0
- data/sig/prism/string_query.rbs +11 -0
- data/src/node.c +18 -0
- data/src/prettyprint.c +32 -0
- data/src/prism.c +364 -81
- data/src/regexp.c +7 -3
- data/src/serialize.c +12 -0
- data/src/static_literals.c +1 -1
- data/src/util/pm_char.c +1 -1
- data/src/util/pm_string.c +1 -0
- metadata +9 -3
@@ -188,7 +188,7 @@ module Prism
|
|
188
188
|
rescue_clause.exceptions.any? ? builder.array(nil, visit_all(rescue_clause.exceptions), nil) : nil,
|
189
189
|
token(rescue_clause.operator_loc),
|
190
190
|
visit(rescue_clause.reference),
|
191
|
-
srange_find(find_start_offset, find_end_offset,
|
191
|
+
srange_find(find_start_offset, find_end_offset, ";"),
|
192
192
|
visit(rescue_clause.statements)
|
193
193
|
)
|
194
194
|
end until (rescue_clause = rescue_clause.subsequent).nil?
|
@@ -294,7 +294,7 @@ module Prism
|
|
294
294
|
visit_all(arguments),
|
295
295
|
token(node.closing_loc),
|
296
296
|
),
|
297
|
-
srange_find(node.message_loc.end_offset, node.arguments.arguments.last.location.start_offset,
|
297
|
+
srange_find(node.message_loc.end_offset, node.arguments.arguments.last.location.start_offset, "="),
|
298
298
|
visit(node.arguments.arguments.last)
|
299
299
|
),
|
300
300
|
block
|
@@ -311,7 +311,7 @@ module Prism
|
|
311
311
|
if name.end_with?("=") && !message_loc.slice.end_with?("=") && node.arguments && block.nil?
|
312
312
|
builder.assign(
|
313
313
|
builder.attr_asgn(visit(node.receiver), call_operator, token(message_loc)),
|
314
|
-
srange_find(message_loc.end_offset, node.arguments.location.start_offset,
|
314
|
+
srange_find(message_loc.end_offset, node.arguments.location.start_offset, "="),
|
315
315
|
visit(node.arguments.arguments.last)
|
316
316
|
)
|
317
317
|
else
|
@@ -733,10 +733,10 @@ module Prism
|
|
733
733
|
visit(node.index),
|
734
734
|
token(node.in_keyword_loc),
|
735
735
|
visit(node.collection),
|
736
|
-
if node.do_keyword_loc
|
737
|
-
token(
|
736
|
+
if (do_keyword_loc = node.do_keyword_loc)
|
737
|
+
token(do_keyword_loc)
|
738
738
|
else
|
739
|
-
srange_find(node.collection.location.end_offset, (node.statements&.location || node.end_keyword_loc).start_offset,
|
739
|
+
srange_find(node.collection.location.end_offset, (node.statements&.location || node.end_keyword_loc).start_offset, ";")
|
740
740
|
end,
|
741
741
|
visit(node.statements),
|
742
742
|
token(node.end_keyword_loc)
|
@@ -865,10 +865,10 @@ module Prism
|
|
865
865
|
builder.condition(
|
866
866
|
token(node.if_keyword_loc),
|
867
867
|
visit(node.predicate),
|
868
|
-
if node.then_keyword_loc
|
869
|
-
token(
|
868
|
+
if (then_keyword_loc = node.then_keyword_loc)
|
869
|
+
token(then_keyword_loc)
|
870
870
|
else
|
871
|
-
srange_find(node.predicate.location.end_offset, (node.statements&.location || node.subsequent&.location || node.end_keyword_loc).start_offset,
|
871
|
+
srange_find(node.predicate.location.end_offset, (node.statements&.location || node.subsequent&.location || node.end_keyword_loc).start_offset, ";")
|
872
872
|
end,
|
873
873
|
visit(node.statements),
|
874
874
|
case node.subsequent
|
@@ -931,7 +931,11 @@ module Prism
|
|
931
931
|
token(node.in_loc),
|
932
932
|
pattern,
|
933
933
|
guard,
|
934
|
-
|
934
|
+
if (then_loc = node.then_loc)
|
935
|
+
token(then_loc)
|
936
|
+
else
|
937
|
+
srange_find(node.pattern.location.end_offset, node.statements&.location&.start_offset, ";")
|
938
|
+
end,
|
935
939
|
visit(node.statements)
|
936
940
|
)
|
937
941
|
end
|
@@ -1781,10 +1785,10 @@ module Prism
|
|
1781
1785
|
builder.condition(
|
1782
1786
|
token(node.keyword_loc),
|
1783
1787
|
visit(node.predicate),
|
1784
|
-
if node.then_keyword_loc
|
1785
|
-
token(
|
1788
|
+
if (then_keyword_loc = node.then_keyword_loc)
|
1789
|
+
token(then_keyword_loc)
|
1786
1790
|
else
|
1787
|
-
srange_find(node.predicate.location.end_offset, (node.statements&.location || node.else_clause&.location || node.end_keyword_loc).start_offset,
|
1791
|
+
srange_find(node.predicate.location.end_offset, (node.statements&.location || node.else_clause&.location || node.end_keyword_loc).start_offset, ";")
|
1788
1792
|
end,
|
1789
1793
|
visit(node.else_clause),
|
1790
1794
|
token(node.else_clause&.else_keyword_loc),
|
@@ -1812,7 +1816,11 @@ module Prism
|
|
1812
1816
|
:until,
|
1813
1817
|
token(node.keyword_loc),
|
1814
1818
|
visit(node.predicate),
|
1815
|
-
|
1819
|
+
if (do_keyword_loc = node.do_keyword_loc)
|
1820
|
+
token(do_keyword_loc)
|
1821
|
+
else
|
1822
|
+
srange_find(node.predicate.location.end_offset, (node.statements&.location || node.closing_loc).start_offset, ";")
|
1823
|
+
end,
|
1816
1824
|
visit(node.statements),
|
1817
1825
|
token(node.closing_loc)
|
1818
1826
|
)
|
@@ -1832,10 +1840,10 @@ module Prism
|
|
1832
1840
|
builder.when(
|
1833
1841
|
token(node.keyword_loc),
|
1834
1842
|
visit_all(node.conditions),
|
1835
|
-
if node.then_keyword_loc
|
1836
|
-
token(
|
1843
|
+
if (then_keyword_loc = node.then_keyword_loc)
|
1844
|
+
token(then_keyword_loc)
|
1837
1845
|
else
|
1838
|
-
srange_find(node.conditions.last.location.end_offset, node.statements&.location&.start_offset,
|
1846
|
+
srange_find(node.conditions.last.location.end_offset, node.statements&.location&.start_offset, ";")
|
1839
1847
|
end,
|
1840
1848
|
visit(node.statements)
|
1841
1849
|
)
|
@@ -1852,7 +1860,11 @@ module Prism
|
|
1852
1860
|
:while,
|
1853
1861
|
token(node.keyword_loc),
|
1854
1862
|
visit(node.predicate),
|
1855
|
-
|
1863
|
+
if (do_keyword_loc = node.do_keyword_loc)
|
1864
|
+
token(do_keyword_loc)
|
1865
|
+
else
|
1866
|
+
srange_find(node.predicate.location.end_offset, (node.statements&.location || node.closing_loc).start_offset, ";")
|
1867
|
+
end,
|
1856
1868
|
visit(node.statements),
|
1857
1869
|
token(node.closing_loc)
|
1858
1870
|
)
|
@@ -1985,18 +1997,16 @@ module Prism
|
|
1985
1997
|
Range.new(source_buffer, offset_cache[start_offset], offset_cache[end_offset])
|
1986
1998
|
end
|
1987
1999
|
|
1988
|
-
# Constructs a new source range by finding the given
|
1989
|
-
# given start offset and end offset. If the needle is not found, it
|
2000
|
+
# Constructs a new source range by finding the given character between
|
2001
|
+
# the given start offset and end offset. If the needle is not found, it
|
1990
2002
|
# returns nil. Importantly it does not search past newlines or comments.
|
1991
2003
|
#
|
1992
2004
|
# Note that end_offset is allowed to be nil, in which case this will
|
1993
2005
|
# search until the end of the string.
|
1994
|
-
def srange_find(start_offset, end_offset,
|
1995
|
-
if (match = source_buffer.source.byteslice(start_offset...end_offset)
|
1996
|
-
|
1997
|
-
|
1998
|
-
|
1999
|
-
[token, Range.new(source_buffer, offset_cache[token_offset], offset_cache[token_offset + token.bytesize])]
|
2006
|
+
def srange_find(start_offset, end_offset, character)
|
2007
|
+
if (match = source_buffer.source.byteslice(start_offset...end_offset)[/\A\s*#{character}/])
|
2008
|
+
final_offset = start_offset + match.bytesize
|
2009
|
+
[character, Range.new(source_buffer, offset_cache[final_offset - character.bytesize], offset_cache[final_offset])]
|
2000
2010
|
end
|
2001
2011
|
end
|
2002
2012
|
|
@@ -881,6 +881,7 @@ module Prism
|
|
881
881
|
# Visit the interpolated content of the string-like node.
|
882
882
|
private def visit_interpolated_parts(parts)
|
883
883
|
visited = []
|
884
|
+
|
884
885
|
parts.each do |part|
|
885
886
|
result = visit(part)
|
886
887
|
|
@@ -892,6 +893,7 @@ module Prism
|
|
892
893
|
else
|
893
894
|
visited << result
|
894
895
|
end
|
896
|
+
visited << :space
|
895
897
|
elsif result[0] == :dstr
|
896
898
|
if !visited.empty? && part.parts[0].is_a?(StringNode)
|
897
899
|
# If we are in the middle of an implicitly concatenated string,
|
@@ -907,8 +909,9 @@ module Prism
|
|
907
909
|
end
|
908
910
|
|
909
911
|
state = :beginning #: :beginning | :string_content | :interpolated_content
|
912
|
+
results = []
|
910
913
|
|
911
|
-
visited.
|
914
|
+
visited.each_with_index do |result, index|
|
912
915
|
case state
|
913
916
|
when :beginning
|
914
917
|
if result.is_a?(String)
|
@@ -923,7 +926,9 @@ module Prism
|
|
923
926
|
state = :interpolated_content
|
924
927
|
end
|
925
928
|
when :string_content
|
926
|
-
if result
|
929
|
+
if result == :space
|
930
|
+
# continue
|
931
|
+
elsif result.is_a?(String)
|
927
932
|
results[0] << result
|
928
933
|
elsif result.is_a?(Array) && result[0] == :str
|
929
934
|
results[0] << result[1]
|
@@ -932,7 +937,9 @@ module Prism
|
|
932
937
|
state = :interpolated_content
|
933
938
|
end
|
934
939
|
when :interpolated_content
|
935
|
-
if result
|
940
|
+
if result == :space
|
941
|
+
# continue
|
942
|
+
elsif visited[index - 1] != :space && result.is_a?(Array) && result[0] == :str && results[-1][0] == :str && (results[-1].line_max == result.line)
|
936
943
|
results[-1][1] << result[1]
|
937
944
|
results[-1].line_max = result.line_max
|
938
945
|
else
|
@@ -940,6 +947,8 @@ module Prism
|
|
940
947
|
end
|
941
948
|
end
|
942
949
|
end
|
950
|
+
|
951
|
+
results
|
943
952
|
end
|
944
953
|
|
945
954
|
# -> { it }
|
data/lib/prism.rb
CHANGED
@@ -24,7 +24,9 @@ module Prism
|
|
24
24
|
autoload :Pack, "prism/pack"
|
25
25
|
autoload :Pattern, "prism/pattern"
|
26
26
|
autoload :Reflection, "prism/reflection"
|
27
|
+
autoload :Relocation, "prism/relocation"
|
27
28
|
autoload :Serialize, "prism/serialize"
|
29
|
+
autoload :StringQuery, "prism/string_query"
|
28
30
|
autoload :Translation, "prism/translation"
|
29
31
|
autoload :Visitor, "prism/visitor"
|
30
32
|
|
@@ -75,13 +77,13 @@ require_relative "prism/parse_result"
|
|
75
77
|
# it's going to require the built library. Otherwise, it's going to require a
|
76
78
|
# module that uses FFI to call into the library.
|
77
79
|
if RUBY_ENGINE == "ruby" and !ENV["PRISM_FFI_BACKEND"]
|
78
|
-
require "prism/prism"
|
79
|
-
|
80
80
|
# The C extension is the default backend on CRuby.
|
81
81
|
Prism::BACKEND = :CEXT
|
82
|
-
else
|
83
|
-
require_relative "prism/ffi"
|
84
82
|
|
83
|
+
require "prism/prism"
|
84
|
+
else
|
85
85
|
# The FFI backend is used on other Ruby implementations.
|
86
86
|
Prism::BACKEND = :FFI
|
87
|
+
|
88
|
+
require_relative "prism/ffi"
|
87
89
|
end
|
data/prism.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "prism"
|
5
|
-
spec.version = "1.
|
5
|
+
spec.version = "1.3.0"
|
6
6
|
spec.authors = ["Shopify"]
|
7
7
|
spec.email = ["ruby@shopify.com"]
|
8
8
|
|
@@ -35,6 +35,7 @@ Gem::Specification.new do |spec|
|
|
35
35
|
"docs/parser_translation.md",
|
36
36
|
"docs/parsing_rules.md",
|
37
37
|
"docs/releasing.md",
|
38
|
+
"docs/relocation.md",
|
38
39
|
"docs/ripper_translation.md",
|
39
40
|
"docs/ruby_api.md",
|
40
41
|
"docs/ruby_parser_translation.md",
|
@@ -88,7 +89,9 @@ Gem::Specification.new do |spec|
|
|
88
89
|
"lib/prism/polyfill/byteindex.rb",
|
89
90
|
"lib/prism/polyfill/unpack1.rb",
|
90
91
|
"lib/prism/reflection.rb",
|
92
|
+
"lib/prism/relocation.rb",
|
91
93
|
"lib/prism/serialize.rb",
|
94
|
+
"lib/prism/string_query.rb",
|
92
95
|
"lib/prism/translation.rb",
|
93
96
|
"lib/prism/translation/parser.rb",
|
94
97
|
"lib/prism/translation/parser33.rb",
|
@@ -109,6 +112,7 @@ Gem::Specification.new do |spec|
|
|
109
112
|
"rbi/prism/node.rbi",
|
110
113
|
"rbi/prism/parse_result.rbi",
|
111
114
|
"rbi/prism/reflection.rbi",
|
115
|
+
"rbi/prism/string_query.rbi",
|
112
116
|
"rbi/prism/translation/parser.rbi",
|
113
117
|
"rbi/prism/translation/parser33.rbi",
|
114
118
|
"rbi/prism/translation/parser34.rbi",
|
@@ -128,7 +132,9 @@ Gem::Specification.new do |spec|
|
|
128
132
|
"sig/prism/parse_result.rbs",
|
129
133
|
"sig/prism/pattern.rbs",
|
130
134
|
"sig/prism/reflection.rbs",
|
135
|
+
"sig/prism/relocation.rbs",
|
131
136
|
"sig/prism/serialize.rbs",
|
137
|
+
"sig/prism/string_query.rbs",
|
132
138
|
"sig/prism/visitor.rbs",
|
133
139
|
"src/diagnostic.c",
|
134
140
|
"src/encoding.c",
|
data/rbi/prism/dsl.rbi
CHANGED
@@ -451,14 +451,14 @@ module Prism::DSL
|
|
451
451
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, predicate: Prism::Node, then_keyword_loc: T.nilable(Prism::Location), statements: T.nilable(Prism::StatementsNode), else_clause: T.nilable(Prism::ElseNode), end_keyword_loc: T.nilable(Prism::Location)).returns(Prism::UnlessNode) }
|
452
452
|
def unless_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, predicate: default_node(source, location), then_keyword_loc: nil, statements: nil, else_clause: nil, end_keyword_loc: nil); end
|
453
453
|
|
454
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).returns(Prism::UntilNode) }
|
455
|
-
def until_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, closing_loc: nil, predicate: default_node(source, location), statements: nil); end
|
454
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, do_keyword_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).returns(Prism::UntilNode) }
|
455
|
+
def until_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, do_keyword_loc: nil, closing_loc: nil, predicate: default_node(source, location), statements: nil); end
|
456
456
|
|
457
457
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, conditions: T::Array[Prism::Node], then_keyword_loc: T.nilable(Prism::Location), statements: T.nilable(Prism::StatementsNode)).returns(Prism::WhenNode) }
|
458
458
|
def when_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, conditions: [], then_keyword_loc: nil, statements: nil); end
|
459
459
|
|
460
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).returns(Prism::WhileNode) }
|
461
|
-
def while_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, closing_loc: nil, predicate: default_node(source, location), statements: nil); end
|
460
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, do_keyword_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).returns(Prism::WhileNode) }
|
461
|
+
def while_node(source: default_source, node_id: 0, location: default_location, flags: 0, keyword_loc: location, do_keyword_loc: nil, closing_loc: nil, predicate: default_node(source, location), statements: nil); end
|
462
462
|
|
463
463
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, content_loc: Prism::Location, closing_loc: Prism::Location, unescaped: String).returns(Prism::XStringNode) }
|
464
464
|
def x_string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, content_loc: location, closing_loc: location, unescaped: ""); end
|
data/rbi/prism/node.rbi
CHANGED
@@ -408,8 +408,8 @@ end
|
|
408
408
|
# foo in [1, 2]
|
409
409
|
# ^^^^^^^^^^^^^
|
410
410
|
#
|
411
|
-
# foo in *
|
412
|
-
#
|
411
|
+
# foo in *bar
|
412
|
+
# ^^^^^^^^^^^
|
413
413
|
#
|
414
414
|
# foo in Bar[]
|
415
415
|
# ^^^^^^^^^^^^
|
@@ -8244,6 +8244,9 @@ class Prism::UntilNode < Prism::Node
|
|
8244
8244
|
sig { returns(Prism::Location) }
|
8245
8245
|
def keyword_loc; end
|
8246
8246
|
|
8247
|
+
sig { returns(T.nilable(Prism::Location)) }
|
8248
|
+
def do_keyword_loc; end
|
8249
|
+
|
8247
8250
|
sig { returns(T.nilable(Prism::Location)) }
|
8248
8251
|
def closing_loc; end
|
8249
8252
|
|
@@ -8253,8 +8256,8 @@ class Prism::UntilNode < Prism::Node
|
|
8253
8256
|
sig { returns(T.nilable(Prism::StatementsNode)) }
|
8254
8257
|
def statements; end
|
8255
8258
|
|
8256
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).void }
|
8257
|
-
def initialize(source, node_id, location, flags, keyword_loc, closing_loc, predicate, statements); end
|
8259
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, do_keyword_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).void }
|
8260
|
+
def initialize(source, node_id, location, flags, keyword_loc, do_keyword_loc, closing_loc, predicate, statements); end
|
8258
8261
|
|
8259
8262
|
sig { override.params(visitor: Prism::Visitor).returns(T.untyped) }
|
8260
8263
|
def accept(visitor); end
|
@@ -8271,8 +8274,8 @@ class Prism::UntilNode < Prism::Node
|
|
8271
8274
|
sig { override.returns(T::Array[T.any(Prism::Node, Prism::Location)]) }
|
8272
8275
|
def comment_targets; end
|
8273
8276
|
|
8274
|
-
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).returns(Prism::UntilNode) }
|
8275
|
-
def copy(node_id: self.node_id, location: self.location, flags: self.flags, keyword_loc: self.keyword_loc, closing_loc: self.closing_loc, predicate: self.predicate, statements: self.statements); end
|
8277
|
+
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, do_keyword_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).returns(Prism::UntilNode) }
|
8278
|
+
def copy(node_id: self.node_id, location: self.location, flags: self.flags, keyword_loc: self.keyword_loc, do_keyword_loc: self.do_keyword_loc, closing_loc: self.closing_loc, predicate: self.predicate, statements: self.statements); end
|
8276
8279
|
|
8277
8280
|
sig { params(keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.untyped]) }
|
8278
8281
|
def deconstruct_keys(keys); end
|
@@ -8280,6 +8283,9 @@ class Prism::UntilNode < Prism::Node
|
|
8280
8283
|
sig { returns(String) }
|
8281
8284
|
def keyword; end
|
8282
8285
|
|
8286
|
+
sig { returns(T.nilable(String)) }
|
8287
|
+
def do_keyword; end
|
8288
|
+
|
8283
8289
|
sig { returns(T.nilable(String)) }
|
8284
8290
|
def closing; end
|
8285
8291
|
|
@@ -8366,6 +8372,9 @@ class Prism::WhileNode < Prism::Node
|
|
8366
8372
|
sig { returns(Prism::Location) }
|
8367
8373
|
def keyword_loc; end
|
8368
8374
|
|
8375
|
+
sig { returns(T.nilable(Prism::Location)) }
|
8376
|
+
def do_keyword_loc; end
|
8377
|
+
|
8369
8378
|
sig { returns(T.nilable(Prism::Location)) }
|
8370
8379
|
def closing_loc; end
|
8371
8380
|
|
@@ -8375,8 +8384,8 @@ class Prism::WhileNode < Prism::Node
|
|
8375
8384
|
sig { returns(T.nilable(Prism::StatementsNode)) }
|
8376
8385
|
def statements; end
|
8377
8386
|
|
8378
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).void }
|
8379
|
-
def initialize(source, node_id, location, flags, keyword_loc, closing_loc, predicate, statements); end
|
8387
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, do_keyword_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).void }
|
8388
|
+
def initialize(source, node_id, location, flags, keyword_loc, do_keyword_loc, closing_loc, predicate, statements); end
|
8380
8389
|
|
8381
8390
|
sig { override.params(visitor: Prism::Visitor).returns(T.untyped) }
|
8382
8391
|
def accept(visitor); end
|
@@ -8393,8 +8402,8 @@ class Prism::WhileNode < Prism::Node
|
|
8393
8402
|
sig { override.returns(T::Array[T.any(Prism::Node, Prism::Location)]) }
|
8394
8403
|
def comment_targets; end
|
8395
8404
|
|
8396
|
-
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).returns(Prism::WhileNode) }
|
8397
|
-
def copy(node_id: self.node_id, location: self.location, flags: self.flags, keyword_loc: self.keyword_loc, closing_loc: self.closing_loc, predicate: self.predicate, statements: self.statements); end
|
8405
|
+
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, keyword_loc: Prism::Location, do_keyword_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location), predicate: Prism::Node, statements: T.nilable(Prism::StatementsNode)).returns(Prism::WhileNode) }
|
8406
|
+
def copy(node_id: self.node_id, location: self.location, flags: self.flags, keyword_loc: self.keyword_loc, do_keyword_loc: self.do_keyword_loc, closing_loc: self.closing_loc, predicate: self.predicate, statements: self.statements); end
|
8398
8407
|
|
8399
8408
|
sig { params(keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.untyped]) }
|
8400
8409
|
def deconstruct_keys(keys); end
|
@@ -8402,6 +8411,9 @@ class Prism::WhileNode < Prism::Node
|
|
8402
8411
|
sig { returns(String) }
|
8403
8412
|
def keyword; end
|
8404
8413
|
|
8414
|
+
sig { returns(T.nilable(String)) }
|
8415
|
+
def do_keyword; end
|
8416
|
+
|
8405
8417
|
sig { returns(T.nilable(String)) }
|
8406
8418
|
def closing; end
|
8407
8419
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
class Prism::StringQuery
|
4
|
+
sig { params(string: String).returns(T::Boolean) }
|
5
|
+
def self.local?(string); end
|
6
|
+
|
7
|
+
sig { params(string: String).returns(T::Boolean) }
|
8
|
+
def self.constant?(string); end
|
9
|
+
|
10
|
+
sig { params(string: String).returns(T::Boolean) }
|
11
|
+
def self.method_name?(string); end
|
12
|
+
end
|
data/sig/prism/dsl.rbs
CHANGED
@@ -300,11 +300,11 @@ module Prism
|
|
300
300
|
|
301
301
|
def unless_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?predicate: Prism::node, ?then_keyword_loc: Location?, ?statements: StatementsNode?, ?else_clause: ElseNode?, ?end_keyword_loc: Location?) -> UnlessNode
|
302
302
|
|
303
|
-
def until_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?closing_loc: Location?, ?predicate: Prism::node, ?statements: StatementsNode?) -> UntilNode
|
303
|
+
def until_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?do_keyword_loc: Location?, ?closing_loc: Location?, ?predicate: Prism::node, ?statements: StatementsNode?) -> UntilNode
|
304
304
|
|
305
305
|
def when_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?conditions: Array[Prism::node], ?then_keyword_loc: Location?, ?statements: StatementsNode?) -> WhenNode
|
306
306
|
|
307
|
-
def while_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?closing_loc: Location?, ?predicate: Prism::node, ?statements: StatementsNode?) -> WhileNode
|
307
|
+
def while_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?do_keyword_loc: Location?, ?closing_loc: Location?, ?predicate: Prism::node, ?statements: StatementsNode?) -> WhileNode
|
308
308
|
|
309
309
|
def x_string_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location, ?content_loc: Location, ?closing_loc: Location, ?unescaped: String) -> XStringNode
|
310
310
|
|
data/sig/prism/node.rbs
CHANGED
@@ -184,8 +184,8 @@ module Prism
|
|
184
184
|
# foo in [1, 2]
|
185
185
|
# ^^^^^^^^^^^^^
|
186
186
|
#
|
187
|
-
# foo in *
|
188
|
-
#
|
187
|
+
# foo in *bar
|
188
|
+
# ^^^^^^^^^^^
|
189
189
|
#
|
190
190
|
# foo in Bar[]
|
191
191
|
# ^^^^^^^^^^^^
|
@@ -3336,14 +3336,16 @@ module Prism
|
|
3336
3336
|
def begin_modifier?: () -> bool
|
3337
3337
|
|
3338
3338
|
attr_reader keyword_loc: Location
|
3339
|
+
attr_reader do_keyword_loc: Location?
|
3339
3340
|
attr_reader closing_loc: Location?
|
3340
3341
|
attr_reader predicate: Prism::node
|
3341
3342
|
attr_reader statements: StatementsNode?
|
3342
3343
|
|
3343
|
-
def initialize: (Source source, Integer node_id, Location location, Integer flags, Location keyword_loc, Location? closing_loc, Prism::node predicate, StatementsNode? statements) -> void
|
3344
|
-
def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?closing_loc: Location?, ?predicate: Prism::node, ?statements: StatementsNode?) -> UntilNode
|
3345
|
-
def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, keyword_loc: Location, closing_loc: Location?, predicate: Prism::node, statements: StatementsNode? }
|
3344
|
+
def initialize: (Source source, Integer node_id, Location location, Integer flags, Location keyword_loc, Location? do_keyword_loc, Location? closing_loc, Prism::node predicate, StatementsNode? statements) -> void
|
3345
|
+
def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?do_keyword_loc: Location?, ?closing_loc: Location?, ?predicate: Prism::node, ?statements: StatementsNode?) -> UntilNode
|
3346
|
+
def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, keyword_loc: Location, do_keyword_loc: Location?, closing_loc: Location?, predicate: Prism::node, statements: StatementsNode? }
|
3346
3347
|
def keyword: () -> String
|
3348
|
+
def do_keyword: () -> String?
|
3347
3349
|
def closing: () -> String?
|
3348
3350
|
def type: () -> :until_node
|
3349
3351
|
| ...
|
@@ -3387,14 +3389,16 @@ module Prism
|
|
3387
3389
|
def begin_modifier?: () -> bool
|
3388
3390
|
|
3389
3391
|
attr_reader keyword_loc: Location
|
3392
|
+
attr_reader do_keyword_loc: Location?
|
3390
3393
|
attr_reader closing_loc: Location?
|
3391
3394
|
attr_reader predicate: Prism::node
|
3392
3395
|
attr_reader statements: StatementsNode?
|
3393
3396
|
|
3394
|
-
def initialize: (Source source, Integer node_id, Location location, Integer flags, Location keyword_loc, Location? closing_loc, Prism::node predicate, StatementsNode? statements) -> void
|
3395
|
-
def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?closing_loc: Location?, ?predicate: Prism::node, ?statements: StatementsNode?) -> WhileNode
|
3396
|
-
def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, keyword_loc: Location, closing_loc: Location?, predicate: Prism::node, statements: StatementsNode? }
|
3397
|
+
def initialize: (Source source, Integer node_id, Location location, Integer flags, Location keyword_loc, Location? do_keyword_loc, Location? closing_loc, Prism::node predicate, StatementsNode? statements) -> void
|
3398
|
+
def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?keyword_loc: Location, ?do_keyword_loc: Location?, ?closing_loc: Location?, ?predicate: Prism::node, ?statements: StatementsNode?) -> WhileNode
|
3399
|
+
def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, keyword_loc: Location, do_keyword_loc: Location?, closing_loc: Location?, predicate: Prism::node, statements: StatementsNode? }
|
3397
3400
|
def keyword: () -> String
|
3401
|
+
def do_keyword: () -> String?
|
3398
3402
|
def closing: () -> String?
|
3399
3403
|
def type: () -> :while_node
|
3400
3404
|
| ...
|
@@ -0,0 +1,185 @@
|
|
1
|
+
module Prism
|
2
|
+
module Relocation
|
3
|
+
interface _Value
|
4
|
+
def start_line: () -> Integer
|
5
|
+
def end_line: () -> Integer
|
6
|
+
def start_offset: () -> Integer
|
7
|
+
def end_offset: () -> Integer
|
8
|
+
def start_character_offset: () -> Integer
|
9
|
+
def end_character_offset: () -> Integer
|
10
|
+
def cached_start_code_units_offset: (_CodeUnitsCache cache) -> Integer
|
11
|
+
def cached_end_code_units_offset: (_CodeUnitsCache cache) -> Integer
|
12
|
+
def start_column: () -> Integer
|
13
|
+
def end_column: () -> Integer
|
14
|
+
def start_character_column: () -> Integer
|
15
|
+
def end_character_column: () -> Integer
|
16
|
+
def cached_start_code_units_column: (_CodeUnitsCache cache) -> Integer
|
17
|
+
def cached_end_code_units_column: (_CodeUnitsCache cache) -> Integer
|
18
|
+
def leading_comments: () -> Array[Comment]
|
19
|
+
def trailing_comments: () -> Array[Comment]
|
20
|
+
end
|
21
|
+
|
22
|
+
interface _Field
|
23
|
+
def fields: (_Value value) -> entry_values
|
24
|
+
end
|
25
|
+
|
26
|
+
type entry_value = untyped
|
27
|
+
type entry_values = Hash[Symbol, entry_value]
|
28
|
+
|
29
|
+
class Entry
|
30
|
+
class MissingValueError < StandardError
|
31
|
+
end
|
32
|
+
|
33
|
+
def initialize: (Repository repository) -> void
|
34
|
+
|
35
|
+
def filepath: () -> String
|
36
|
+
|
37
|
+
def start_line: () -> Integer
|
38
|
+
def end_line: () -> Integer
|
39
|
+
|
40
|
+
def start_offset: () -> Integer
|
41
|
+
def end_offset: () -> Integer
|
42
|
+
def start_character_offset: () -> Integer
|
43
|
+
def end_character_offset: () -> Integer
|
44
|
+
def start_code_units_offset: () -> Integer
|
45
|
+
def end_code_units_offset: () -> Integer
|
46
|
+
|
47
|
+
def start_column: () -> Integer
|
48
|
+
def end_column: () -> Integer
|
49
|
+
def start_character_column: () -> Integer
|
50
|
+
def end_character_column: () -> Integer
|
51
|
+
def start_code_units_column: () -> Integer
|
52
|
+
def end_code_units_column: () -> Integer
|
53
|
+
|
54
|
+
def leading_comments: () -> Array[CommentsField::Comment]
|
55
|
+
def trailing_comments: () -> Array[CommentsField::Comment]
|
56
|
+
def comments: () -> Array[CommentsField::Comment]
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def fetch_value: (Symbol name) -> entry_value
|
61
|
+
def values: () -> entry_values
|
62
|
+
end
|
63
|
+
|
64
|
+
class Source
|
65
|
+
attr_reader value: untyped
|
66
|
+
|
67
|
+
def initialize: (untyped value) -> void
|
68
|
+
|
69
|
+
def result: () -> ParseResult
|
70
|
+
def code_units_cache: (Encoding encoding) -> _CodeUnitsCache
|
71
|
+
end
|
72
|
+
|
73
|
+
class SourceFilepath < Source
|
74
|
+
def result: () -> ParseResult
|
75
|
+
end
|
76
|
+
|
77
|
+
class SourceString < Source
|
78
|
+
def result: () -> ParseResult
|
79
|
+
end
|
80
|
+
|
81
|
+
class FilepathField
|
82
|
+
attr_reader value: String
|
83
|
+
|
84
|
+
def initialize: (String value) -> void
|
85
|
+
|
86
|
+
def fields: (_Value value) -> entry_values
|
87
|
+
end
|
88
|
+
|
89
|
+
class LinesField
|
90
|
+
def fields: (_Value value) -> entry_values
|
91
|
+
end
|
92
|
+
|
93
|
+
class OffsetsField
|
94
|
+
def fields: (_Value value) -> entry_values
|
95
|
+
end
|
96
|
+
|
97
|
+
class CharacterOffsetsField
|
98
|
+
def fields: (_Value value) -> entry_values
|
99
|
+
end
|
100
|
+
|
101
|
+
class CodeUnitOffsetsField
|
102
|
+
attr_reader repository: Repository
|
103
|
+
attr_reader encoding: Encoding
|
104
|
+
|
105
|
+
def initialize: (Repository repository, Encoding encoding) -> void
|
106
|
+
def fields: (_Value value) -> entry_values
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
def cache: () -> _CodeUnitsCache
|
111
|
+
end
|
112
|
+
|
113
|
+
class ColumnsField
|
114
|
+
def fields: (_Value value) -> entry_values
|
115
|
+
end
|
116
|
+
|
117
|
+
class CharacterColumnsField
|
118
|
+
def fields: (_Value value) -> entry_values
|
119
|
+
end
|
120
|
+
|
121
|
+
class CodeUnitColumnsField
|
122
|
+
attr_reader repository: Repository
|
123
|
+
attr_reader encoding: Encoding
|
124
|
+
|
125
|
+
def initialize: (Repository repository, Encoding encoding) -> void
|
126
|
+
def fields: (_Value value) -> entry_values
|
127
|
+
|
128
|
+
private
|
129
|
+
|
130
|
+
def cache: () -> _CodeUnitsCache
|
131
|
+
end
|
132
|
+
|
133
|
+
class CommentsField
|
134
|
+
class Comment
|
135
|
+
attr_reader slice: String
|
136
|
+
|
137
|
+
def initialize: (String slice) -> void
|
138
|
+
end
|
139
|
+
|
140
|
+
private
|
141
|
+
|
142
|
+
def comments: (entry_value value) -> Array[Comment]
|
143
|
+
end
|
144
|
+
|
145
|
+
class LeadingCommentsField < CommentsField
|
146
|
+
def fields: (_Value value) -> entry_values
|
147
|
+
end
|
148
|
+
|
149
|
+
class TrailingCommentsField < CommentsField
|
150
|
+
def fields: (_Value value) -> entry_values
|
151
|
+
end
|
152
|
+
|
153
|
+
class Repository
|
154
|
+
class ConfigurationError < StandardError
|
155
|
+
end
|
156
|
+
|
157
|
+
attr_reader source: Source
|
158
|
+
attr_reader fields: Hash[Symbol, _Field]
|
159
|
+
attr_reader entries: Hash[Integer, Hash[Symbol, Entry]]
|
160
|
+
|
161
|
+
def initialize: (Source source) -> void
|
162
|
+
|
163
|
+
def code_units_cache: (Encoding encoding) -> _CodeUnitsCache
|
164
|
+
|
165
|
+
def filepath: () -> self
|
166
|
+
def lines: () -> self
|
167
|
+
def offsets: () -> self
|
168
|
+
def character_offsets: () -> self
|
169
|
+
def code_unit_offsets: (Encoding encoding) -> self
|
170
|
+
def columns: () -> self
|
171
|
+
def character_columns: () -> self
|
172
|
+
def code_unit_columns: (Encoding encoding) -> self
|
173
|
+
def leading_comments: () -> self
|
174
|
+
def trailing_comments: () -> self
|
175
|
+
def comments: () -> self
|
176
|
+
|
177
|
+
private
|
178
|
+
|
179
|
+
def field: (Symbol name, _Field) -> self
|
180
|
+
end
|
181
|
+
|
182
|
+
def self.filepath: (String value) -> Repository
|
183
|
+
def self.string: (String value) -> Repository
|
184
|
+
end
|
185
|
+
end
|