prism 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|