Commit graph

45 commits

Author SHA1 Message Date
Kevin Newton
aa473489a2 [ruby/prism] Various cleanup for initializers and typechecks
86cf82794a
2024-07-11 14:25:54 -04:00
Kevin Newton
ca48fb76fb [ruby/prism] Move location to second position for node initializers
4cc0eda4ca
2024-07-11 14:25:54 -04:00
Kevin Newton
678dd769e5 [ruby/prism] Reconfigure error tests
fb7e1ebb7f
2024-07-11 14:25:54 -04:00
Kevin Newton
e6340258f8 [ruby/prism] Autoload newlines and comment visitors
Having the @newline instance variable in every node adds up, and
since it is so rarely used, we only want to add it when necessary.

Moving this into an autoloaded file and moving the instance variable
out of the default initializers reduces allocated memory because the
nodes are now smaller and some fit into the compact list. On my
machine, I'm seeing about an 8% drop.

eea92c07d2
2024-05-13 15:34:47 +00:00
Kevin Newton
d4a6d0c177 [ruby/prism] Prism::Location#adjoin
a298db68e3
2024-05-03 19:14:03 +00:00
Vinicius Stock
4fbb208185 [ruby/prism] Create specialized ASCIISource with asciionly optimizations
40993166a8
2024-05-03 18:10:21 +00:00
Kevin Newton
7c0cf71049 [ruby/prism] Node#script_lines and supporting infra
cb4a8ab772
2024-05-02 15:27:18 +00:00
Kevin Newton
9688093124 [ruby/prism] Location#slice_lines, Node#slice_lines
9b61f6fdb3
2024-04-26 19:05:32 +00:00
Kevin Newton
23be6599a2 [ruby/prism] Split parse result based on type
17194e096d
2024-04-19 19:25:32 +00:00
Kevin Newton
cd516ebd20 [ruby/prism] Add Location#chop
5dd57f4b84
2024-04-11 18:53:30 +00:00
Kevin Newton
d266b71467 [ruby/prism] Use the diagnostic types in the parser translation layer
1a8a0063dc
2024-03-06 21:42:54 -05:00
Kevin Newton
38c2774420 [ruby/prism] Expose types on diagnostics
a735c2262f
2024-03-06 21:42:54 -05:00
Ufuk Kayserilioglu
de411ef0b6 [ruby/prism] Small changes to make type-checking pass
5b2970e75b
2024-03-06 21:37:54 +00:00
Ufuk Kayserilioglu
8dfe0c7c28 [ruby/prism] Fix some type-checking errors by using different method calls
For example, use `.fetch` or `.dig` instead of `[]`, and use `===` instead of `is_a?` for checking types of objects.

548b54915f
2024-03-06 21:37:52 +00:00
Kevin Newton
804b2a3787 [ruby/prism] Rebase against main
813e20d449
2024-02-24 03:39:29 +00:00
Gopal Patel
aa8841405b [ruby/prism] Less code modifications. More steep:ignore for now
7905bdbf83
2024-02-24 03:39:28 +00:00
Gopal Patel
66565e36ea [ruby/prism] Add documentation for Location#source!
467e1cc2c4
2024-02-24 03:39:26 +00:00
Gopal Patel
8fa1843523 [ruby/prism] Relax Location#source to be optional
9f00fe7510
2024-02-24 03:39:26 +00:00
Gopal Patel
935d4fab62 [ruby/prism] Remove Ripper from public RBS, type-assert remaining issues
5fda7a0760
2024-02-24 03:39:23 +00:00
Gopal Patel
7556fd937c [ruby/prism] Split private types
0209d093ec
2024-02-24 03:39:22 +00:00
Kevin Newton
ae3e82a525 [ruby/prism] Fix up comment state
c6561becf0
2024-02-19 19:50:46 +00:00
Kevin Newton
792804e32f [ruby/prism] Split up comments between leading and trailing
Also make them lazy to allocate the array, and also expose ParseResult#encoding.

08ec7683ae
2024-02-18 20:57:13 +00:00
Benoit Daloze
1b9b960963 [ruby/prism] Make location methods thread-safe
* Before it could result in NoMethodError if multiple threads were
  calling location methods: https://gist.github.com/eregon/b78b7f266d7ee0a278a389cfd1782232

ff762dcccd
2024-02-15 23:04:38 +00:00
Kevin Newton
14a7277da1 [ruby/prism] Speed up creating Ruby AST
When creating the Ruby AST, we were previously allocating Location
objects for every node and every inner location. Instead, this
commit changes it to pack both the start offset and length into a
single u64 and pass that into the nodes. Then, when the locations
are requested via a reader method, we lazily allocate the Location
objects.

de203dca83

Co-Authored-By: Aaron Patterson <tenderlove@ruby-lang.org>
2024-02-15 20:39:50 +00:00
Benoit Daloze
c2d8d6eba6 Initialize the Prism::Source directly with all 3 fields for the C extension
* Faster that way:
  $ ruby -Ilib -rprism -rbenchmark/ips -e 'Benchmark.ips { |x| x.report("parse") { Prism.parse("1 + 2") } }'
  195.722k (± 0.5%) i/s
  rb_iv_set():
  179.609k (± 0.5%) i/s
  rb_funcall():
  190.030k (± 0.3%) i/s
  before this PR:
  183.319k (± 0.4%) i/s
2024-02-14 15:48:33 +00:00
Benoit Daloze
1b2708b123 [ruby/prism] Remove attr_writer's for ParseResult#start_line and #offsets
* As the user should not set these.
* Use #instance_variable_set/rb_iv_set() instead internally.

cace09fb8c
2024-02-14 15:48:33 +00:00
Benoit Daloze
f0f6ffef42 [ruby/prism] Serialize the newline_list to avoid recomputing it again later
* Fixes https://github.com/ruby/prism/issues/2380

4eaaa90114
2024-02-14 15:48:32 +00:00
Kevin Newton
b1964a9204 [ruby/prism] Add code unit APIs to location
LSPs need this because the protocol dictates that you return code
units for offsets. None of our existing APIs provided that
information, and since we hid the source it's not nearly as useful
for them. Now they can pass an encoding directly to:

* Location#start_code_units_offset
* Location#end_code_units_offset
* Location#start_code_units_column
* Location#end_code_units_column

4757a2cc06

Co-Authored-By: Vinicius Stock <vinicius.stock@shopify.com>
2024-02-13 20:10:25 +00:00
Kevin Newton
aad3c36bdf [ruby/prism] Support for Ruby 2.7
1a15b70a8e
2024-02-07 16:54:34 +00:00
Kevin Newton
e337c9478a [ruby/prism] Error follow-up
Split up the diagnostic levels so that error and warning levels
aren't mixed. Also fix up deconstruct_keys implementation.

bd3eeb308d

Co-authored-by: Benoit Daloze <eregontp@gmail.com>
2024-01-27 18:46:16 +00:00
Benoit Daloze
c2e2d2398b [ruby/prism] Call #inspect on diagnostic levels
* So it's clear it is a Symbol.
  Before:
  ... @level=warning_verbose_true>
  After:
  ... @level=:warning_verbose_true>

84503643b9
2024-01-27 18:41:07 +00:00
Benoit Daloze
de135bc247 [ruby/prism] Add level to warnings and errors to categorize them
* Fixes https://github.com/ruby/prism/issues/2082

7a74576357
2024-01-26 21:34:34 +00:00
Kevin Newton
80da9b1547 [ruby/prism] Clarify __END__ comment
3e36d5eabc
2024-01-09 19:02:26 +00:00
Kevin Newton
c798943a4a [ruby/prism] Move DATA parsing into its own parse result field
42b60b6e95
2023-11-28 13:25:48 +00:00
Kevin Newton
f2ed7eaba0 [ruby/prism] Add character APIs for locations
(https://github.com/ruby/prism/pull/1809)

d493ccd093
2023-11-20 16:07:06 +00:00
Kevin Newton
4b5f516f2e [ruby/prism] Split comment
We were previously holding a type field on Comment to tell what
kind of comment it was. Instead, let's just use actual classes for
this.

e76830ca6e
2023-11-03 14:35:08 +00:00
Kevin Newton
8587d9a8bf
[ruby/prism] Wire up options through the Java parser
13fa262669
2023-11-03 10:13:50 -04:00
Kevin Newton
d7d3243364
[ruby/prism] Properly support the start line option
33cc75a4b7
2023-11-03 10:13:50 -04:00
Kevin Newton
79034fbd50 [ruby/prism] More Ruby docs
ca9a660f52
2023-11-01 13:10:29 -04:00
Kevin Newton
953138698e [ruby/prism] Docs for node.rb and parse_result.rb
085da4feb9
2023-11-01 13:10:29 -04:00
Kevin Newton
d1bb858d47 [ruby/prism] Match existing Ruby prettyprint
6d8358c083
2023-10-26 15:19:43 -04:00
Kevin Newton
5523a23469 [ruby/prism] Attach magic comments to the parse result
c7ef25a79a
2023-10-16 15:40:19 -07:00
gazayas
488c0ed051 [ruby/prism] Remove trailing parenthesis in Location#pretty_print
8eaa199a28
2023-10-04 17:00:09 +00:00
Kevin Newton
4f73a7c2f7 Sync to prism rename commits 2023-09-27 13:57:38 -04:00
Kevin Newton
8ab56869a6 Rename YARP filepaths to prism filepaths 2023-09-27 13:57:38 -04:00
Renamed from lib/yarp/parse_result.rb (Browse further)