Skip to content

Schneems/use native prism#256

Draft
schneems wants to merge 10 commits intomainfrom
schneems/use-native-prism
Draft

Schneems/use native prism#256
schneems wants to merge 10 commits intomainfrom
schneems/use-native-prism

Conversation

@schneems
Copy link
Copy Markdown
Collaborator

@schneems schneems commented Apr 7, 2026

No description provided.

Earlopain and others added 10 commits April 7, 2026 12:05
It mostly continues to rely on tokens.
But for a few things like endless method defs
and multiline method continuations
it uses AST. These are either very difficult
or not possible to find just by checking tokens.

Because of multiline method calls, comments now don't need to be trimmed anymore.
Say what the method does, versus saying why we're using it
This might never be a hotspot, but I had to optimize away some sorts in other locations. My preference is to sort once if the value won't be changing (this also assumes we won't re-use a visitor once used, perhaps we need to check and error if that assumption doesn't hold).
Every other file in the project already has this pragma.
visitor.rb was the only one missing it.

standardrb intentionally excludes the frozen_string_literal cop
(standardrb/standard#181) so the linter
wouldn't flag this.
`code_line.rb` was calling `visitor.consecutive_lines.include?` which
is an O(n) array scan inside an O(n) loop over source lines — O(n²)
total. `token.rb` was calling
`visitor.endless_def_keyword_locs.include?` which is O(n) per token.

Add `consecutive_line?(line)` backed by the existing hash for O(1)
lookup, and `endless_def_loc?(location)` backed by a new hash keyed
on `start_offset` for O(1) lookup.

Freeze both hashes after `visit` to signal they are read-only after
construction.
@schneems schneems mentioned this pull request Apr 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants