summaryrefslogtreecommitdiff
path: root/lib/irb/ruby-lex.rb
AgeCommit message (Collapse)Author
2021-12-03[ruby/irb] Examine indentation of in keyword when trying to type includeKaíque Kandy Koga
Use in_keyword_case_scope? Return fast https://github.com/ruby/irb/commit/8acc7f8dc7
2021-12-03[ruby/irb] Fix bug infinite loop when pasting multilines fo code in Ruby 2.6manga_osyo
Fix bug infinite loop when pasting multilines fo code in Ruby 2.6. This is not reproduced in Ruby 2.7. Changes added in https://github.com/ruby/irb/pull/242/files#diff-612b926e42ed78aed1a889ac1944f7d22229b3a489cc08f837a7f75eca3d3399R155 are also reflected in Ruby 2.6. https://github.com/ruby/irb/commit/0a77f75bf0
2021-12-02Compatibility with IRBschneems
Instead of accessing the struct as an array, access it via methods. There are other places inside of this file already using this API (for example https://github.com/ruby/ruby/blob/e0a5c3d2b71dfad038d7562fdd33f02ffd79232d/lib/irb/ruby-lex.rb#L829-L830). This commit moves all struct array-ish calls to use their method calls instead. It is also ~1.23 faster accessing values via a method instead of as an array according to this microbenchmark: ```ruby Elem = Struct.new(:pos, :event, :tok, :state, :message) do def initialize(pos, event, tok, state, message = nil) super(pos, event, tok, State.new(state), message) end # ... def to_a a = super a.pop unless a.empty? a end end class ElemClass attr_accessor :pos, :event, :tok, :state, :message def initialize(pos, event, tok, state, message = nil) @pos = pos @event = event @tok = tok @state = State.new(state) @message = message end def to_a if @message [@pos, @event, @tok, @state, @message] else [@pos, @event, @tok, @state] end end end # stub state class creation for now class State; def initialize(val); end; end ``` ```ruby Benchmark.ips do |x| x.report("struct") { struct[1] } x.report("class ") { from_class.event } x.compare! end; nil ``` ``` Warming up -------------------------------------- struct 1.624M i/100ms class 1.958M i/100ms Calculating ------------------------------------- struct 17.139M (± 2.6%) i/s - 86.077M in 5.025801s class 21.104M (± 3.4%) i/s - 105.709M in 5.015193s Comparison: class : 21103826.3 i/s struct: 17139201.5 i/s - 1.23x (± 0.00) slower ``` Notes: Merged: https://github.com/ruby/ruby/pull/5093
2021-10-07[ruby/irb] Update descriptions of methodsKaíque Kandy Koga
From Reidline to Reline Update description used in take_corresponding_syntax_to_kw_do and is_the_in_correspond_to_a_for methods Use possessive noun correctly Second element https://github.com/ruby/irb/commit/4fa9714d6f
2021-09-22[ruby/irb] Use typed spaces when the line is inside the here documentsKaíque Kandy Koga
Use first method instead of square brackets to support 2.5 and 2.6 versions Use tokens Clear check_newline_depth_difference https://github.com/ruby/irb/commit/6fec2a5d46
2021-09-10[ruby/irb] Support symbol with backtickaycabta
https://github.com/ruby/irb/commit/0aa2425883
2021-07-23[ruby/irb] Fix #256manga_osyo
Support int that follow on symbeg in IRB https://github.com/ruby/irb/commit/90cb27b1bd
2021-07-10[ruby/irb] Pass local variables from workspace binding to lexerJeremy Evans
This fixes at least an issue where irb will incorrectly assume code opens a heredoc when it does not, such as this code: ```ruby s1 = 'testing' s2 = 'this' s2 <<s1 p s1 s1 ``` Ruby parses the `s2 <<s1` as `s2.<<(s1)`, not as a heredoc, because `s2` is a local variable in scope. irb was using ripper without letting ripper know that `s2` was a local variable, so ripper would lex it as a heredoc instead of a method call. Fix the situation by prepending a line at line 0 with all local variable definitions in scope whenever lexing. This fixes the heredoc issue, and potentially other issues that depend on whether an identifier is a local variable or not. Fixes [Bug #17530] https://github.com/ruby/irb/commit/4ed2187f76
2021-04-26[ruby/irb] Fix typo ture -> true [ci skip]Ryuta Kamizono
https://github.com/ruby/irb/commit/783a0569e8
2021-04-03[ruby/irb] Evaluate each toplevel statementaycabta
https://github.com/ruby/irb/commit/bc1b1d8bc3
2021-03-24[ruby/irb] Change ripper_lex_without_warning to a class methodaycabta
https://github.com/ruby/irb/commit/d9f8abc17e
2021-03-05[ruby/irb] Do not continue line if last expression is an endless rangeJeremy Evans
Fixes [Bug #14824] https://github.com/ruby/irb/commit/63414f8465
2021-02-03[ruby/irb] follow up the actual line numberNobuhiro IMAI
https://github.com/ruby/irb/commit/7aed8fe3b1
2021-01-27[ruby/irb] use `RubyLex::TerminateLineInput` appropriately [Bug #17564]Nobuhiro IMAI
* using the appropriciate exception instead of `break` so that the session can be continue after the `irb_source` and `irb_load` commands * suppress extra new line due to one more `#prompt` call https://github.com/ruby/irb/commit/bdefaa7cfd
2021-01-24[ruby/irb] Indent correctly with method calling with receiveraycabta
https://github.com/ruby/irb/commit/e7c68e74a0
2021-01-24[ruby/irb] Indent correctly with keyword "for" and "in"aycabta
https://github.com/ruby/irb/commit/47c83ea724
2021-01-22[ruby/irb] Delete a doodle-level memo comment...aycabta
https://github.com/ruby/irb/commit/fc3e1d9e0c
2021-01-05[ruby/irb] Ensure to restore $VERBOSENobuyoshi Nakada
https://github.com/ruby/irb/commit/cef474a76a
2021-01-05[ruby/irb] Use error tokens if there are no correct tokens in the same placeaycabta
For example, the broken code "%www" will result in only one error token. https://github.com/ruby/irb/commit/9fa39a7cf3
2021-01-05[ruby/irb] Use Ripper::Lexer#scan to take broken tokensaycabta
ref. https://github.com/ruby/reline/pull/242 https://github.com/ruby/irb/commit/54f90cb6c9
2021-01-05[ruby/irb] Heredoc may contain multiple newlines in a single tokenaycabta
Use the start token as the indentation criteria so that it works properly in heredoc. ref. https://github.com/ruby/reline/pull/242 https://github.com/ruby/irb/commit/9704808dfd
2021-01-05[ruby/irb] Handle indentations related to keyword "do" correctlyaycabta
This fixes ruby/irb#158. https://github.com/ruby/irb/commit/964643400b
2021-01-05[ruby/irb] Newline in oneliner def doesn't reset indentaycabta
This closes ruby/irb#132. https://github.com/ruby/irb/commit/43456dcf5e
2020-12-23[ruby/irb] Suppress "shadowing outer" warningaycabta
https://github.com/ruby/irb/commit/8b83fbef69
2020-12-23[ruby/reline] [ruby/irb] Handle multiple newlines in a token correctlyaycabta
Co-authored-by: manga_osyo <manga.osyo@gmail.com> Co-authored-by: ima1zumi <mariimaizumi5@gmail.com> https://github.com/ruby/irb/commit/c59a9be82f https://github.com/ruby/reline/commit/a7922da16b
2020-12-22[ruby/irb] Change variables handling for compatibilityaycabta
https://github.com/ruby/irb/commit/26fd1a75cf
2020-12-20[ruby/irb] Handle rest of tokens correctly if no newline at lastaycabta
https://github.com/ruby/irb/commit/f3c8edad2a
2020-12-19[ruby/reline] [ruby/irb] Call ripper only once when generating dynamic promptaycabta
https://github.com/ruby/irb/commit/babb122a48 https://github.com/ruby/reline/commit/e6dbcb3b42
2020-12-17[ruby/irb] Fixed a typo in a comment [ci skip]Nobuyoshi Nakada
https://github.com/ruby/irb/commit/ce373417f3
2020-12-17[ruby/irb] workaround for lack of tokens from `Ripper.lex`Nobuhiro IMAI
* Fixes #38 https://github.com/ruby/irb/commit/905fb8e52e
2020-11-22[ruby/irb] Add a fallback for check_code_block that does not depend on ↵Benoit Daloze
implementation-private APIs * Fixes https://github.com/ruby/irb/issues/133 https://github.com/ruby/irb/commit/5eb3ef3293
2020-11-22[ruby/irb] support more body argument for oneliner method definitionNobuhiro IMAI
https://github.com/ruby/irb/commit/2ff1295533
2020-08-18[ruby/irb] Support shortening lambda notetion for nesting level of promptaycabta
https://github.com/ruby/irb/commit/f1a775af47
2020-08-18[ruby/irb] Support shortening lambda notationaycabta
https://github.com/ruby/irb/commit/8e3f81d428
2020-08-18[ruby/irb] Support oneline method definitionaycabta
https://github.com/ruby/irb/commit/826ae909c9
2020-07-23Suppress "assigned but unused variable" warningsYusuke Endoh
2020-07-22[ruby/irb] handle rescue modifier properlyNobuhiro IMAI
https://github.com/ruby/irb/commit/6de1341f5e
2020-07-22[ruby/irb] Simplify RubyLex.compile_with_errors_suppressedaycabta
nobu-san reviewed, https://github.com/ruby/irb/pull/106#pullrequestreview-423400033 > How about lexer = Ripper::Lexer.new(";\n#{code}", nil, 0)? > Encoding pragma is effective only at the beginning. > And the semicolon and newline will be skipped because the position is before > the initial pos. I employ the way. Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org> https://github.com/ruby/irb/commit/e593cc65b7
2020-07-22[ruby/irb] Suppress incomplete encoding magic comment erroraycabta
https://github.com/ruby/irb/commit/443e90af80
2020-07-22[ruby/irb] Suppress incomplete coding magic comment erroraycabta
https://github.com/ruby/irb/commit/6a457edbd1
2020-03-29[ruby/irb] Require jruby lib to get JRuby.compile_irCharles Oliver Nutter
https://github.com/ruby/irb/commit/dc59afe4f6
2020-03-26[ruby/irb] Suppress crashing when EncodingError has occurred without linenoaycabta
https://github.com/ruby/irb/commit/13572d8cdc
2020-02-12[ruby/irb] Fix auto indent with closed braceaycabta
A closed brace in auto-indent shouldn't affect the next brace in the same line, but it behaves like below: p() { } It's a bug. https://github.com/ruby/irb/commit/fbe59e344f
2020-01-14[ruby/irb] Fix crashing when multiple open braces per lineBen
https://github.com/ruby/irb/issues/55 If we had put multiple open braces on a line the with no closing brace spaces_of_nest array keeps getting '0' added to it. This means that when we pop off of this array we are saying that we should be in position zero for the next line. This is an issue because we don't always want to be in position 0 after a closing brace. Example: ``` [[[ ] ] ] ``` In the above example the 'spaces_of_nest' array looks like this after the first line is entered: [0,0,0]. We really want to be indented 4 spaces for the 1st closing brace 2 for the 2nd and 0 for the 3rd. i.e. we want it to be: [0,2,4]. We also saw this issue with a heredoc inside of an array. ``` [<<FOO] hello FOO ``` https://github.com/ruby/irb/commit/80c69c8272
2020-01-14[ruby/irb] Fix newline depth with multiple bracesBen
This commit fixes the check_newline_depth_difference method to multiple open braces on one line into account. Before this change we were subtracting from the depth in check_newline_depth_difference on every open brace. This is the right thing to do if the opening and closing brace are on the same line. For example in a method definition we have an opening and closing parentheses we want to add 1 to our depth, and then remove it. ``` def foo() end ``` However this isn't the correct behavior when the brace spans multiple lines. If a brace spans multiple lines we don't want to subtract from check_newline_depth_difference and we want to treat the braces the same way as we do `end` and allow check_corresponding_token_depth to pop the correct depth. Example of bad behavior: ``` def foo() [ ] puts 'bar' end ``` Example of desired behavior: ``` def foo() [ ] puts 'bar' end ``` https://github.com/ruby/irb/commit/7dc8af01e0
2019-12-22[ruby/irb] Make nesting level up for `1.times do`Yusuke Endoh
Follow up of the previous commit https://github.com/ruby/irb/commit/ab207353d3
2019-12-22[ruby/irb] Fix auto-indent for `1.times do`Yusuke Endoh
Fixes #47 https://github.com/ruby/irb/commit/6b8eca4635
2019-12-03Fix auto-indent behavior correctlyaycabta
2019-11-29Revert "Treat :@1, :@@1, @1, and @@1 correctly to check termination"aycabta
This reverts commit 5e275dd2af4d9d24cdb1cfc0f232f348dae9c2cd. ...The @1 type numberd parameter is reverted from Ruby syntax.
2019-11-25Remove e2mmap dependencyaycabta