summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
| * repl: correctly calculate overhang for empty linesKyrylo Silin2018-10-221-13/+13
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This improves on https://github.com/pry/pry/pull/1813. I spotted a problem with the way it works: sometimes, if you enter an empty line, the output would span across two lines: ``` [1] pry(main)> [2] pry(main)> [3] pry(main)> ``` This is because overhang is bigger than the current line. I also noticed a bug with method definition, where defining a method leaves an unwanted empty line: ``` [3] pry(main)> def foo | end => :foo ``` To fix this I changed the way we calculate overhang. First and the most important change is that I stopped calculating overhang for emacs mode. This is because it's too risky to introduce this change because it's the default mode and 99% of our users use this, so there's no need to change this behaviour. Another reason is that emacs mode users typically don't use any mode indicators (because emacs has no modes), so it strikes me as a more pragmatic solution. With Vi mode we calculate overhang and still support custom indicators.
* Merge pull request #1819 from pry/rubocop-lint-assignment-in-conditionKyrylo Silin2018-10-2110-29/+14
|\ | | | | rubocop: fix offences of the Lint/AssignmentInCondition cop
| * rubocop: fix offences of the Lint/AssignmentInCondition copKyrylo Silin2018-10-2110-29/+14
|/
* Merge pull request #1818 from pry/ring-refactoringKyrylo Silin2018-10-215-158/+159
|\ | | | | ring: rewrite the class to improve API
| * ring: rewrite the class to improve APIKyrylo Silin2018-10-215-158/+159
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, the Ring class is written with help of Hash as backend store. According to the comments, the implementation should behave like a circular buffer, however it doesn't. Upon reaching maximum capacity Ring doesn't replace old elements but keeps writing to new cells, deleting old cells, so that the hash contains `nil` entries. The new implementation is based on Array and seems to be closer to the actual Ring. Older elemens get overwritten with newer ones. This class also includes Enumerable, however none of our APIs take advantage of it, so it seems like an overkill. There was also a problem with with this API because of the above-mentioned nils. For example, if the ring exceeds its maximum size, then callin `Enumerable#first` on it returns `nil`. The new implementation deals with this with removal of Enumerable. The `#[]` syntax is preserved, and now `ring[0]` returns an actual element instead of `nil`. In case users need the Enumerable functionality, they can call `Ring#to_a` to build the array, which supports the wanted methods. As for the speed, the new implementation is: * slower overall because it's thread-safe * faster without mutexes for `#<<` * slower without mutexes for `#[]` Benchmark for old implementation: ``` Warming up -------------------------------------- Ring#<< 223.451k i/100ms Ring#[] 2.837k i/100ms Calculating ------------------------------------- Ring#<< 223.157B (± 3.4%) i/s - 778.097B Ring#[] 82.485M (± 9.4%) i/s - 402.602M in 4.957792s ``` Benchmark for this implementation: ``` Warming up -------------------------------------- Ring#<< 211.587k i/100ms Ring#[] 1.974k i/100ms Calculating ------------------------------------- Ring#<< 211.385B (± 2.8%) i/s - 698.439B Ring#[] 40.292M (±17.0%) i/s - 190.069M in 4.971195s ``` The benchmark: ```rb require './lib/pry' require 'benchmark/ips' Benchmark.ips do |x| empty_ring = Pry::Ring.new(100) populated_ring = Pry::Ring.new(100) 150.times { |i| populated_ring << i } x.report("Ring#<<") do |times| empty_ring << times end x.report("Ring#[]") do |times| populated_ring[0] populated_ring[1] populated_ring[2] populated_ring[-1] populated_ring[-2] populated_ring[-3] populated_ring[1..2] populated_ring[-2..-1] populated_ring[-2..3] populated_ring[0..-1] populated_ring[2..-1] populated_ring[-1..10] populated_ring[-1..0] populated_ring[-1..1] end end ```
* gitignore: ignore '.ackrc'Kyrylo Silin2018-10-201-0/+1
| | | | | | | | | | | | I need to add `.ackrc` to help me filter garbage when I search for a string and get results from built YARD documentation. I don't want to commit the file itself because not everybody uses ack. In case you are curious, this is my `.ackrc`: ``` --ignore-dir=doc ```
* Properly clear after indenting (#1813)W2018-10-201-2/+18
| | | Fixes #1812
* Merge pull request #1817 from pry/output-input-array-deprecationKyrylo Silin2018-10-201-0/+21
|\ | | | | pry_instance: deprecate '#output_array' & '#input_array'
| * pry_instance: deprecate '#output_array' & '#input_array'Kyrylo Silin2018-10-201-0/+21
|/ | | | I figured it's better to deprecate them to let plugin authors update their API.
* Merge pull request #1814 from pry/history-array-refactoringKyrylo Silin2018-10-209-56/+57
|\ | | | | Rename HistoryArray to Ring
| * Rename '{input/output}_array' to '{input/output}_ring'Kyrylo Silin2018-10-207-31/+32
| |
| * Rename HistoryArray to RingKyrylo Silin2018-10-205-29/+29
|/ | | | | | | | | | | | `HistoryArray` is a very specific name and it doesn't tell the reader what it *really* means unless you read its code or the docs of the class. On the other hand, `Ring` is a [very well-known term][1], which means exactly what `HistoryArray` does. The alias name for it is circular buffer. I chose `Ring` because it is shorter and used by Golang, so I expect programmers to be familiar with `Ring`. [1]: https://en.wikipedia.org/wiki/Circular_buffer
* Merge pull request #1816 from pry/rubocop-style-numeric-predicateKyrylo Silin2018-10-202-16/+3
|\ | | | | rubocop: disable the Style/NumericPredicate cop
| * rubocop: disable the Style/NumericPredicate copKyrylo Silin2018-10-202-16/+3
|/ | | | This is very opinionated and not necessary to follow.
* Merge pull request #1815 from pry/rubocop-style-multiline-ternary-operatorKyrylo Silin2018-10-206-38/+24
|\ | | | | rubocop: fix offences of the Style/MultilineTernaryOperator cop
| * rubocop: fix offences of the Style/MultilineTernaryOperator copKyrylo Silin2018-10-206-38/+24
|/
* Merge pull request #1811 from pry/redefined-respond-to-fixKyrylo Silin2018-10-172-1/+7
|\ | | | | core_extensions: make '__binding__' work with redefined #respond_to?
| * core_extensions: make '__binding__' work with redefined #respond_to?Kyrylo Silin2018-10-172-1/+7
|/ | | | | | | | | | | | | | | | | | | | | Fixes https://github.com/pry/pry/issues/1596 (Unable to inspect object built from class) Replaces https://github.com/pry/pry/pull/1719 Big thanks to @egwspiti for the repro case and the proposed PR. When a class redefines `respond_to?` or `method_missing` this leads to some problems and confuses Pry. I found another example where Pry misbehaves: ``` [1] pry(main)> cd Class.new { def method_missing(*) end; def respond_to_missing?(*) true end; }.new NoMethodError: private method `eval' called for nil:NilClass from /Users/kyrylo/.gem/ruby/2.4.2/gems/pry-0.11.3/lib/pry/pry_instance.rb:163:in `inject_local' ``` By using `method_defined?` we can work around these bugs since this method doesn't check whether the receiver responds to a certain message but checks whether this method is defined (so we don't redefine it later). Seems like a win-win.
* Merge pull request #1810 from pry/custom-ruby-dockerfileKyrylo Silin2018-10-162-0/+160
|\ | | | | circle: add Dockerfiles for custom Rubies
| * circle: add Dockerfiles for custom RubiesKyrylo Silin2018-10-162-0/+160
|/ | | | | | | | | CircleCI doesn't provide images for these Rubies since they are no onger suported. I had to build them manually and push to dockerhub so we can continue testing using those Rubies. I am committing these Dockerfiles since they belong to this project and in case we need to modify them.
* Merge pull request #1809 from pry/tablify-pry-configKyrylo Silin2018-10-162-10/+12
|\ | | | | ommands/ls/formatter,helpers/table: pass local Pry config
| * ommands/ls/formatter,helpers/table: pass local Pry configKyrylo Silin2018-10-162-10/+12
|/ | | | | | | | | | | | | | | | | Replaces #1713 (Pry local config The following methods take a third required argument, an instance of Pry) This fulfills queries to `_pry_.config` in: * Pry::Helpers.tablify * Pry::Helpers.tablify_to_screen_width * Pry::Helpers.tablify_or_one_line Unlike #1713 this PR doesn't introduce any breaking changes thanks to the default parameter value trick, *except* the `Table#new` signature. Overall, this brings the code in line with how the rest of Pry works.
* Merge pull request #1808 from ↵Kyrylo Silin2018-10-164-11/+3
|\ | | | | | | | | pry/rubocop-lint-string-conversion-in-interpolation rubocop: fix offences of the Lint/StringConversionInInterpolation
| * rubocop: fix offences of the Lint/StringConversionInInterpolationKyrylo Silin2018-10-164-11/+3
|/
* Merge pull request #1807 from pry/rubocop-unneeded-require-statementKyrylo Silin2018-10-163-10/+0
|\ | | | | rubocop: fix offences of the Lint/UnneededRequireStatement cop
| * rubocop: fix offences of the Lint/UnneededRequireStatement copKyrylo Silin2018-10-163-10/+0
|/
* Merge pull request #1806 from pry/rubocop-lint-ambiguous-block-assosicationKyrylo Silin2018-10-168-33/+50
|\ | | | | rubocop: fix offences of the Lint/AmbiguousBlockAssociation cop
| * rubocop: fix offences of the Lint/AmbiguousBlockAssociation coprubocop-lint-ambiguous-block-assosicationKyrylo Silin2018-10-168-33/+50
|/
* Merge pull request #1805 from pry/travis-removalKyrylo Silin2018-10-162-42/+1
|\ | | | | Stop building on TravisCI
| * README: replace the Travis badge with the Circle oneKyrylo Silin2018-10-161-1/+1
| |
| * Stop building on TravisCIKyrylo Silin2018-10-161-41/+0
|/ | | | | | | | TravisCI was a good companion in the early days but nowadays it loses in terms of speed against CircleCI. CircleCI support was added in https://github.com/pry/pry/pull/1802. With this change we no longer build on Travis and use Circle from now on.
* Merge pull request #1802 from pry/circleciKyrylo Silin2018-10-162-3/+170
|\ | | | | Test with help of CircleCI
| * circle: make sure TERM is setKyrylo Silin2018-10-161-0/+3
| | | | | | | | Otherwise, some tests fail.
| * circle: install nanoKyrylo Silin2018-10-161-0/+8
| | | | | | | | | | The presense of supported text editor is required to make the test suite pass. Specifically, the editor tests.
| * Gemfile: delete gems that were needed for GuardKyrylo Silin2018-10-161-3/+0
| | | | | | | | | | | | | | | | `rb-inotify` has a dependency on `ffi`, which fails to compile on Ruby 1.9.3 while running on CircleCI. I don't think anyone who develops Pry (seems to be just me so far) uses Guard in their worfklow. Our repo is missing an obligatory Guardfile, too, which makes me think it's a very safe change to make (rather than wasting time with`ffi` and CircleCI).
| * Test with help of CircleCIKyrylo Silin2018-10-161-0/+159
| | | | | | | | | | | | | | | | | | | | CircleCI provides much faster builds than TravisCI: CircleCI - less than 1 minute TravisCI- 6 minutes The cost is the complexity of the config: https://circleci.com/docs/2.0/configuration-reference/
* | Merge pull request #1803 from arlandism/rubocop-empty-line-after-guard-clauseKyrylo Silin2018-10-1438-5/+57
|\ \ | |/ |/| Fix rubocop empty line after guard clause style violations
| * Fix rubocop empty line after guard clause style violationsArlandis Word2018-10-1438-5/+57
|/
* Merge pull request #1801 from pry/rubocop-lint-unused-method-argumentKyrylo Silin2018-10-1418-30/+25
|\ | | | | rubocop: fix offences of the Lint/UnusedMethodArgument cop
| * command: fix YARD warning for '#complete'Kyrylo Silin2018-10-141-1/+1
| |
| * method/disowned: delete unused 'binding' parameterKyrylo Silin2018-10-141-1/+1
| | | | | | | | | | This was added by 97f1be86b29e41e0a786cf0177d934c4c22e8572 and it feels like a mishap, thus removing.
| * commands/watch_expression: add a todo to fix arguments laterKyrylo Silin2018-10-141-0/+2
| | | | | | | | | | | | b031df2f2f5850ee6e9018f33d35f3485a9b0423 added this command but never made use of this variable. The method is being passed an argument but it never uses it. Why? Idk, needs investigation.
| * commands/import_set: add a comment to figure out what it does laterKyrylo Silin2018-10-141-0/+1
| | | | | | | | | | This command is quite obscure: no docs and the parameter it expects is not used in the method. For simplicity, I am leaving the comment to check later.
| * commands/amend_line: refactor 'amended_input'Kyrylo Silin2018-10-141-3/+2
| | | | | | | | | | | | The way it's written is still a little bit confusing, however for simplicity of https://github.com/pry/pry/pull/1801 I am leaving this as is and resolving the parameter issue only.
| * code: delete unused 'top_module' parameterKyrylo Silin2018-10-141-2/+1
| | | | | | | | | | | | | | | | This was added by 6fd797d302a63f29d10cf5834bfa25cec7f1ac74. I inspected it closely and I cannot seem to find the reason for this parameter. I don't see it being used anywhere and it doesn't seem to do what it declares. Therefore, I am deleting it.
| * rubocop: fix offences of the Lint/UnusedMethodArgument copKyrylo Silin2018-10-1418-26/+20
|/
* Merge pull request #1800 from pry/rubocop-layout-empty-line-between-defsKyrylo Silin2018-10-1420-24/+84
|\ | | | | rubocop: fix offences of the Layout/EmptyLineBetweenDefs cop
| * rubocop: fix offences of the Layout/EmptyLineBetweenDefs copKyrylo Silin2018-10-1420-24/+84
|/
* Merge pull request #1798 from pry/rubocop-style-hash-syntaxKyrylo Silin2018-10-1364-397/+390
|\ | | | | rubocop: fix offences of the Style/HashSyntax cop
| * rubocop: fix offences of the Style/HashSyntax copKyrylo Silin2018-10-1364-397/+390
|/