prism 0.15.1 → 0.17.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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +35 -1
  3. data/Makefile +12 -0
  4. data/README.md +3 -1
  5. data/config.yml +66 -50
  6. data/docs/configuration.md +2 -0
  7. data/docs/fuzzing.md +1 -1
  8. data/docs/javascript.md +90 -0
  9. data/docs/releasing.md +27 -0
  10. data/docs/ruby_api.md +2 -0
  11. data/docs/serialization.md +28 -29
  12. data/ext/prism/api_node.c +856 -826
  13. data/ext/prism/api_pack.c +20 -9
  14. data/ext/prism/extension.c +494 -119
  15. data/ext/prism/extension.h +1 -1
  16. data/include/prism/ast.h +3157 -747
  17. data/include/prism/defines.h +40 -8
  18. data/include/prism/diagnostic.h +36 -3
  19. data/include/prism/enc/pm_encoding.h +119 -28
  20. data/include/prism/node.h +38 -30
  21. data/include/prism/options.h +204 -0
  22. data/include/prism/pack.h +44 -33
  23. data/include/prism/parser.h +445 -199
  24. data/include/prism/prettyprint.h +26 -0
  25. data/include/prism/regexp.h +16 -2
  26. data/include/prism/util/pm_buffer.h +102 -18
  27. data/include/prism/util/pm_char.h +162 -48
  28. data/include/prism/util/pm_constant_pool.h +128 -34
  29. data/include/prism/util/pm_list.h +68 -38
  30. data/include/prism/util/pm_memchr.h +18 -3
  31. data/include/prism/util/pm_newline_list.h +71 -28
  32. data/include/prism/util/pm_state_stack.h +25 -7
  33. data/include/prism/util/pm_string.h +115 -27
  34. data/include/prism/util/pm_string_list.h +25 -6
  35. data/include/prism/util/pm_strncasecmp.h +32 -0
  36. data/include/prism/util/pm_strpbrk.h +31 -17
  37. data/include/prism/version.h +28 -3
  38. data/include/prism.h +229 -36
  39. data/lib/prism/compiler.rb +5 -5
  40. data/lib/prism/debug.rb +43 -13
  41. data/lib/prism/desugar_compiler.rb +1 -1
  42. data/lib/prism/dispatcher.rb +27 -26
  43. data/lib/prism/dsl.rb +16 -16
  44. data/lib/prism/ffi.rb +138 -61
  45. data/lib/prism/lex_compat.rb +26 -16
  46. data/lib/prism/mutation_compiler.rb +11 -11
  47. data/lib/prism/node.rb +426 -227
  48. data/lib/prism/node_ext.rb +23 -16
  49. data/lib/prism/node_inspector.rb +1 -1
  50. data/lib/prism/pack.rb +79 -40
  51. data/lib/prism/parse_result/comments.rb +7 -2
  52. data/lib/prism/parse_result/newlines.rb +4 -0
  53. data/lib/prism/parse_result.rb +157 -21
  54. data/lib/prism/pattern.rb +14 -3
  55. data/lib/prism/ripper_compat.rb +28 -10
  56. data/lib/prism/serialize.rb +935 -307
  57. data/lib/prism/visitor.rb +9 -5
  58. data/lib/prism.rb +20 -2
  59. data/prism.gemspec +11 -2
  60. data/rbi/prism.rbi +7305 -0
  61. data/rbi/prism_static.rbi +196 -0
  62. data/sig/prism.rbs +4468 -0
  63. data/sig/prism_static.rbs +123 -0
  64. data/src/diagnostic.c +56 -53
  65. data/src/enc/pm_big5.c +1 -0
  66. data/src/enc/pm_euc_jp.c +1 -0
  67. data/src/enc/pm_gbk.c +1 -0
  68. data/src/enc/pm_shift_jis.c +1 -0
  69. data/src/enc/pm_tables.c +316 -80
  70. data/src/enc/pm_unicode.c +54 -9
  71. data/src/enc/pm_windows_31j.c +1 -0
  72. data/src/node.c +357 -345
  73. data/src/options.c +170 -0
  74. data/src/prettyprint.c +7697 -1643
  75. data/src/prism.c +1964 -1125
  76. data/src/regexp.c +153 -95
  77. data/src/serialize.c +432 -397
  78. data/src/token_type.c +3 -1
  79. data/src/util/pm_buffer.c +88 -23
  80. data/src/util/pm_char.c +103 -57
  81. data/src/util/pm_constant_pool.c +52 -22
  82. data/src/util/pm_list.c +12 -4
  83. data/src/util/pm_memchr.c +5 -3
  84. data/src/util/pm_newline_list.c +25 -63
  85. data/src/util/pm_state_stack.c +9 -3
  86. data/src/util/pm_string.c +95 -85
  87. data/src/util/pm_string_list.c +14 -15
  88. data/src/util/pm_strncasecmp.c +10 -3
  89. data/src/util/pm_strpbrk.c +25 -19
  90. metadata +12 -3
  91. data/docs/prism.png +0 -0
@@ -0,0 +1,196 @@
1
+ # typed: true
2
+
3
+ module Prism
4
+ class ParseResult
5
+ sig { returns(ProgramNode) }
6
+ def value; end
7
+
8
+ sig { returns(T::Array[Comment]) }
9
+ def comments; end
10
+
11
+ sig { returns(T::Array[ParseError]) }
12
+ def errors; end
13
+
14
+ sig { returns(T::Array[ParseWarning]) }
15
+ def warnings; end
16
+
17
+ sig { returns(Source) }
18
+ def source; end
19
+ end
20
+
21
+ class ParseError
22
+ sig { returns(String) }
23
+ def message; end
24
+
25
+ sig { returns(Location) }
26
+ def location; end
27
+ end
28
+
29
+ class ParseWarning
30
+ sig { returns(String) }
31
+ def message; end
32
+
33
+ sig { returns(Location) }
34
+ def location; end
35
+ end
36
+
37
+ class Node
38
+ sig { returns(T::Array[T.nilable(Node)]) }
39
+ def child_nodes; end
40
+
41
+ sig { returns(Location) }
42
+ def location; end
43
+
44
+ sig { returns(String) }
45
+ def slice; end
46
+ end
47
+
48
+ class Comment
49
+ sig { returns(Location) }
50
+ def location; end
51
+
52
+ sig { returns(T::Boolean) }
53
+ def trailing?; end
54
+ end
55
+
56
+ class InlineComment < Comment
57
+ sig { override.returns(T::Boolean) }
58
+ def trailing?; end
59
+ end
60
+
61
+ class EmbDocComment < Comment
62
+ end
63
+
64
+ class DATAComment < Comment
65
+ end
66
+
67
+ class Location
68
+ sig { params(source: Source, start_offset: Integer, length: Integer).void }
69
+ def initialize(source, start_offset, length); end
70
+
71
+ sig { returns(String) }
72
+ def slice; end
73
+
74
+ sig { returns(T::Array[Comment]) }
75
+ def comments; end
76
+
77
+ sig { params(options: T.untyped).returns(Location) }
78
+ def copy(**options); end
79
+
80
+ sig { returns(Integer) }
81
+ def start_offset; end
82
+
83
+ sig { returns(Integer) }
84
+ def end_offset; end
85
+
86
+ sig { returns(Integer) }
87
+ def start_line; end
88
+
89
+ sig { returns(Integer) }
90
+ def end_line; end
91
+
92
+ sig { returns(Integer) }
93
+ def start_column; end
94
+
95
+ sig { returns(Integer) }
96
+ def end_column; end
97
+ end
98
+
99
+ class Source
100
+ sig { params(source: String, start_line: Integer, offsets: T::Array[Integer]).void }
101
+ def initialize(source, start_line, offsets); end
102
+
103
+ sig { params(offset: Integer, length: Integer).returns(String) }
104
+ def slice(offset, length); end
105
+
106
+ sig { params(value: Integer).returns(Integer) }
107
+ def line(value); end
108
+
109
+ sig { params(value: Integer).returns(Integer) }
110
+ def line_offset(value); end
111
+
112
+ sig { params(value: Integer).returns(Integer) }
113
+ def column(value); end
114
+
115
+ sig { returns(String) }
116
+ def source; end
117
+
118
+ sig { returns(T::Array[Integer]) }
119
+ def offsets; end
120
+ end
121
+
122
+ class Token
123
+ sig { params(type: T.untyped, value: String, location: Location).void }
124
+ def initialize(type, value, location); end
125
+
126
+ sig { params(keys: T.untyped).returns(T.untyped) }
127
+ def deconstruct_keys(keys); end
128
+
129
+ sig { params(q: T.untyped).returns(T.untyped) }
130
+ def pretty_print(q); end
131
+
132
+ sig { params(other: T.untyped).returns(T::Boolean) }
133
+ def ==(other); end
134
+
135
+ sig { returns(T.untyped) }
136
+ def type; end
137
+
138
+ sig { returns(String) }
139
+ def value; end
140
+
141
+ sig { returns(Location) }
142
+ def location; end
143
+ end
144
+
145
+ class NodeInspector
146
+ sig { params(prefix: String).void }
147
+ def initialize(prefix); end
148
+
149
+ sig { returns(String) }
150
+ def prefix; end
151
+
152
+ sig { returns(String) }
153
+ def output; end
154
+
155
+ # Appends a line to the output with the current prefix.
156
+ sig { params(line: String).void }
157
+ def <<(line); end
158
+
159
+ # This generates a string that is used as the header of the inspect output
160
+ # for any given node.
161
+ sig { params(node: Node).returns(String) }
162
+ def header(node); end
163
+
164
+ # Generates a string that represents a list of nodes. It handles properly
165
+ # using the box drawing characters to make the output look nice.
166
+ sig { params(prefix: String, nodes: T::Array[Node]).returns(String) }
167
+ def list(prefix, nodes); end
168
+
169
+ # Generates a string that represents a location field on a node.
170
+ sig { params(value: Location).returns(String) }
171
+ def location(value); end
172
+
173
+ # Generates a string that represents a child node.
174
+ sig { params(node: Node, append: String).returns(String) }
175
+ def child_node(node, append); end
176
+
177
+ # Returns a new inspector that can be used to inspect a child node.
178
+ sig { params(append: String).returns(NodeInspector) }
179
+ def child_inspector(append); end
180
+
181
+ # Returns the output as a string.
182
+ sig { returns(String) }
183
+ def to_str; end
184
+ end
185
+
186
+ class BasicVisitor
187
+ sig { params(node: T.nilable(Node)).void }
188
+ def visit(node); end
189
+
190
+ sig { params(nodes: T::Array[T.nilable(Node)]).void }
191
+ def visit_all(nodes); end
192
+
193
+ sig { params(node: Node).void }
194
+ def visit_child_nodes(node); end
195
+ end
196
+ end