Module: Prism
- Defined in:
- lib/prism.rb,
lib/prism/ffi.rb,
lib/prism/pack.rb,
lib/prism/debug.rb,
lib/prism/pattern.rb,
lib/prism/node_ext.rb,
lib/prism/lex_compat.rb,
lib/prism/translation.rb,
lib/prism/parse_result.rb,
lib/prism/ripper_compat.rb,
lib/prism/node_inspector.rb,
lib/prism/desugar_compiler.rb,
lib/prism/translation/parser.rb,
lib/prism/parse_result/comments.rb,
lib/prism/parse_result/newlines.rb,
lib/prism/translation/parser/lexer.rb,
lib/prism/translation/parser/rubocop.rb,
lib/prism/translation/parser/compiler.rb
Overview
Here we are reopening the prism module to provide methods on nodes that aren’t templated and are meant as convenience methods.
Defined Under Namespace
Modules: Pack, Translation Classes: Comment, ConstantPathNode, ConstantPathTargetNode, ConstantReadNode, DesugarCompiler, EmbDocComment, FloatNode, ImaginaryNode, InlineComment, IntegerNode, InterpolatedMatchLastLineNode, InterpolatedRegularExpressionNode, InterpolatedStringNode, InterpolatedXStringNode, Location, MagicComment, MatchLastLineNode, NodeInspector, ParametersNode, ParseError, ParseResult, ParseWarning, Pattern, RationalNode, RegularExpressionNode, RipperCompat, Source, StringNode, Token, XStringNode
Constant Summary collapse
- BACKEND =
:FFI
- VERSION =
The version constant is set by reading the result of calling pm_version.
LibRubyParser.pm_version.read_string
Class Method Summary collapse
-
.dump(code, **options) ⇒ Object
Mirror the Prism.dump API by using the serialization API.
-
.dump_file(filepath, **options) ⇒ Object
Mirror the Prism.dump_file API by using the serialization API.
-
.lex(code, **options) ⇒ Object
Mirror the Prism.lex API by using the serialization API.
-
.lex_compat(source, **options) ⇒ Object
:call-seq: Prism::lex_compat(source, **options) -> ParseResult.
-
.lex_file(filepath, **options) ⇒ Object
Mirror the Prism.lex_file API by using the serialization API.
-
.lex_ripper(source) ⇒ Object
:call-seq: Prism::lex_ripper(source) -> Array.
-
.load(source, serialized) ⇒ Object
:call-seq: Prism::load(source, serialized) -> ParseResult.
-
.parse(code, **options) ⇒ Object
Mirror the Prism.parse API by using the serialization API.
-
.parse_comments(code, **options) ⇒ Object
Mirror the Prism.parse_comments API by using the serialization API.
-
.parse_failure?(source, **options) ⇒ Boolean
:call-seq: Prism::parse_failure?(source, **options) -> bool.
-
.parse_file(filepath, **options) ⇒ Object
Mirror the Prism.parse_file API by using the serialization API.
-
.parse_file_comments(filepath, **options) ⇒ Object
Mirror the Prism.parse_file_comments API by using the serialization API.
-
.parse_file_failure?(filepath, **options) ⇒ Boolean
:call-seq: Prism::parse_file_failure?(filepath, **options) -> bool.
-
.parse_file_success?(filepath, **options) ⇒ Boolean
Mirror the Prism.parse_file_success? API by using the serialization API.
-
.parse_lex(code, **options) ⇒ Object
Mirror the Prism.parse_lex API by using the serialization API.
-
.parse_lex_file(filepath, **options) ⇒ Object
Mirror the Prism.parse_lex_file API by using the serialization API.
-
.parse_success?(code, **options) ⇒ Boolean
Mirror the Prism.parse_success? API by using the serialization API.
Class Method Details
.dump(code, **options) ⇒ Object
Mirror the Prism.dump API by using the serialization API.
182 183 184 185 186 187 |
# File 'lib/prism/ffi.rb', line 182 def dump(code, **) LibRubyParser::PrismBuffer.with do |buffer| LibRubyParser.pm_serialize_parse(buffer.pointer, code, code.bytesize, ()) buffer.read end end |
.dump_file(filepath, **options) ⇒ Object
Mirror the Prism.dump_file API by using the serialization API.
190 191 192 193 194 |
# File 'lib/prism/ffi.rb', line 190 def dump_file(filepath, **) LibRubyParser::PrismString.with(filepath) do |string| dump(string.read, **, filepath: filepath) end end |
.lex(code, **options) ⇒ Object
Mirror the Prism.lex API by using the serialization API.
197 198 199 200 201 202 |
# File 'lib/prism/ffi.rb', line 197 def lex(code, **) LibRubyParser::PrismBuffer.with do |buffer| LibRubyParser.pm_serialize_lex(buffer.pointer, code, code.bytesize, ()) Serialize.load_tokens(Source.new(code), buffer.read) end end |
.lex_compat(source, **options) ⇒ Object
:call-seq:
Prism::lex_compat(source, **options) -> ParseResult
Returns a parse result whose value is an array of tokens that closely resembles the return value of Ripper::lex. The main difference is that the ‘:on_sp` token is not emitted.
For supported options, see Prism::parse.
47 48 49 |
# File 'lib/prism.rb', line 47 def self.lex_compat(source, **) LexCompat.new(source, **).result end |
.lex_file(filepath, **options) ⇒ Object
Mirror the Prism.lex_file API by using the serialization API.
205 206 207 208 209 |
# File 'lib/prism/ffi.rb', line 205 def lex_file(filepath, **) LibRubyParser::PrismString.with(filepath) do |string| lex(string.read, **, filepath: filepath) end end |
.lex_ripper(source) ⇒ Object
:call-seq:
Prism::lex_ripper(source) -> Array
This lexes with the Ripper lex. It drops any space events but otherwise returns the same tokens. Raises SyntaxError if the syntax in source is invalid.
57 58 59 |
# File 'lib/prism.rb', line 57 def self.lex_ripper(source) LexRipper.new(source).result end |
.load(source, serialized) ⇒ Object
:call-seq:
Prism::load(source, serialized) -> ParseResult
Load the serialized AST using the source as a reference into a tree.
65 66 67 |
# File 'lib/prism.rb', line 65 def self.load(source, serialized) Serialize.load(source, serialized) end |
.parse(code, **options) ⇒ Object
Mirror the Prism.parse API by using the serialization API.
212 213 214 |
# File 'lib/prism/ffi.rb', line 212 def parse(code, **) Prism.load(code, dump(code, **)) end |
.parse_comments(code, **options) ⇒ Object
Mirror the Prism.parse_comments API by using the serialization API.
226 227 228 229 230 231 232 233 234 235 236 237 238 |
# File 'lib/prism/ffi.rb', line 226 def parse_comments(code, **) LibRubyParser::PrismBuffer.with do |buffer| LibRubyParser.pm_serialize_parse_comments(buffer.pointer, code, code.bytesize, ()) source = Source.new(code) loader = Serialize::Loader.new(source, buffer.read) loader.load_header loader.load_encoding loader.load_start_line loader.load_comments end end |
.parse_failure?(source, **options) ⇒ Boolean
:call-seq:
Prism::parse_failure?(source, **options) -> bool
Returns true if the source parses with errors.
73 74 75 |
# File 'lib/prism.rb', line 73 def self.parse_failure?(source, **) !parse_success?(source, **) end |
.parse_file(filepath, **options) ⇒ Object
Mirror the Prism.parse_file API by using the serialization API. This uses native strings instead of Ruby strings because it allows us to use mmap when it is available.
219 220 221 222 223 |
# File 'lib/prism/ffi.rb', line 219 def parse_file(filepath, **) LibRubyParser::PrismString.with(filepath) do |string| parse(string.read, **, filepath: filepath) end end |
.parse_file_comments(filepath, **options) ⇒ Object
Mirror the Prism.parse_file_comments API by using the serialization API. This uses native strings instead of Ruby strings because it allows us to use mmap when it is available.
243 244 245 246 247 |
# File 'lib/prism/ffi.rb', line 243 def parse_file_comments(filepath, **) LibRubyParser::PrismString.with(filepath) do |string| parse_comments(string.read, **, filepath: filepath) end end |
.parse_file_failure?(filepath, **options) ⇒ Boolean
:call-seq:
Prism::parse_file_failure?(filepath, **options) -> bool
Returns true if the file at filepath parses with errors.
81 82 83 |
# File 'lib/prism.rb', line 81 def self.parse_file_failure?(filepath, **) !parse_file_success?(filepath, **) end |
.parse_file_success?(filepath, **options) ⇒ Boolean
Mirror the Prism.parse_file_success? API by using the serialization API.
278 279 280 281 282 |
# File 'lib/prism/ffi.rb', line 278 def parse_file_success?(filepath, **) LibRubyParser::PrismString.with(filepath) do |string| parse_success?(string.read, **, filepath: filepath) end end |
.parse_lex(code, **options) ⇒ Object
Mirror the Prism.parse_lex API by using the serialization API.
250 251 252 253 254 255 256 257 258 259 260 261 262 263 |
# File 'lib/prism/ffi.rb', line 250 def parse_lex(code, **) LibRubyParser::PrismBuffer.with do |buffer| LibRubyParser.pm_serialize_parse_lex(buffer.pointer, code, code.bytesize, ()) source = Source.new(code) loader = Serialize::Loader.new(source, buffer.read) tokens = loader.load_tokens node, comments, magic_comments, data_loc, errors, warnings = loader.load_nodes tokens.each { |token,| token.value.force_encoding(loader.encoding) } ParseResult.new([node, tokens], comments, magic_comments, data_loc, errors, warnings, source) end end |
.parse_lex_file(filepath, **options) ⇒ Object
Mirror the Prism.parse_lex_file API by using the serialization API.
266 267 268 269 270 |
# File 'lib/prism/ffi.rb', line 266 def parse_lex_file(filepath, **) LibRubyParser::PrismString.with(filepath) do |string| parse_lex(string.read, **, filepath: filepath) end end |
.parse_success?(code, **options) ⇒ Boolean
Mirror the Prism.parse_success? API by using the serialization API.
273 274 275 |
# File 'lib/prism/ffi.rb', line 273 def parse_success?(code, **) LibRubyParser.pm_parse_success_p(code, code.bytesize, ()) end |