[ruby/prism] Fix parser translator tokens for comment-only file

In https://github.com/ruby/prism/pull/3393 I made a mistake.
When there is no previous token, it wraps around to -1. Oops

Additionally, if a comment has no newline then the offset should be kept as is

3c266f1de4
This commit is contained in:
Earlopain 2025-01-12 15:11:00 +01:00 committed by git
parent f56f3eaae5
commit d0deec3ef3
3 changed files with 23 additions and 5 deletions

View file

@ -281,14 +281,14 @@ module Prism
location = range(token.location.start_offset, lexed[index][0].location.end_offset) location = range(token.location.start_offset, lexed[index][0].location.end_offset)
index += 1 index += 1
else else
value.chomp! is_at_eol = value.chomp!.nil?
location = range(token.location.start_offset, token.location.end_offset - 1) location = range(token.location.start_offset, token.location.end_offset + (is_at_eol ? 0 : -1))
prev_token = lexed[index - 2][0] prev_token = lexed[index - 2][0] if index - 2 >= 0
next_token = lexed[index][0] next_token = lexed[index][0]
is_inline_comment = prev_token.location.start_line == token.location.start_line is_inline_comment = prev_token&.location&.start_line == token.location.start_line
if is_inline_comment && !COMMENT_CONTINUATION_TYPES.include?(next_token&.type) if is_inline_comment && !is_at_eol && !COMMENT_CONTINUATION_TYPES.include?(next_token&.type)
tokens << [:tCOMMENT, [value, location]] tokens << [:tCOMMENT, [value, location]]
nl_location = range(token.location.end_offset - 1, token.location.end_offset) nl_location = range(token.location.end_offset - 1, token.location.end_offset)

View file

@ -0,0 +1 @@
foo # Bar

View file

@ -0,0 +1,17 @@
@ ProgramNode (location: (1,0)-(1,3))
├── flags: ∅
├── locals: []
└── statements:
@ StatementsNode (location: (1,0)-(1,3))
├── flags: ∅
└── body: (length: 1)
└── @ CallNode (location: (1,0)-(1,3))
├── flags: newline, variable_call, ignore_visibility
├── receiver: ∅
├── call_operator_loc: ∅
├── name: :foo
├── message_loc: (1,0)-(1,3) = "foo"
├── opening_loc: ∅
├── arguments: ∅
├── closing_loc: ∅
└── block: ∅