summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* config/default: add support for $XDG_CACHE_HOME for history1316-xdg-historyKyrylo Silin2018-11-032-6/+12
| | | | | Fixes #1316 (support XDG Base Directory Specification)
* Merge pull request #1842 from pry/vi-editing-mode-jrubyKyrylo Silin2018-11-031-6/+13
|\ | | | | repl: calculate JRuby overhang (or rather not)
| * repl: calculate JRuby overhang (or rather not)Kyrylo Silin2018-11-031-6/+13
|/ | | | | | Fixes #1840 (NotImplementedError: vi_editing_mode?() function is unimplemented on this machine)
* Merge pull request #1841 from pry/method-source-bumpKyrylo Silin2018-11-032-2/+14
|\ | | | | gemspec: bump require method_source >= 0.9.1
| * config: test on JRuby 9.2Kyrylo Silin2018-11-031-0/+13
| |
| * gemspec: bump require method_source >= 0.9.1Kyrylo Silin2018-11-031-2/+1
|/ | | | | Fixes #1804 (JRuby 9.2.0.0 breaks `source_location` and therefore our test suite)
* Merge pull request #1839 from pry/platform-refactoringKyrylo Silin2018-11-0226-161/+197
|\ | | | | Deprecate Pry::Platform and introduce Pry::Helpers::Platform
| * Deprecate Pry::Platform and introduce Pry::Helpers::PlatformKyrylo Silin2018-11-0226-161/+197
|/ | | | | | `Pry::Platform` really looks like a helper and therefore should be defined as one. Invoking `Pry::Platform` emits a warning now. Users are encouraged to use `Pry::Helpers::Platform`.
* Merge pull request #1838 from pry/deprecations-cleanupKyrylo Silin2018-11-014-166/+83
|\ | | | | Delete Pry::CommandSet#{before,after}_command
| * Delete Pry::CommandSet#{before,after}_commandKyrylo Silin2018-11-014-166/+83
|/ | | | These commands have been deprecated for years. It's high time to get rid of them.
* Merge pull request #1837 from pry/source-location-cleanupKyrylo Silin2018-11-011-6/+0
|\ | | | | command: delete #source_location
| * command: delete #source_locationKyrylo Silin2018-11-011-6/+0
|/ | | | | This method doesn't seem to be used anywhere, so there's no benefit in keeping it.
* Merge pull request #1834 from pry/update-copyrightsKyrylo Silin2018-10-286-24/+19
|\ | | | | Update copyrights
| * Update copyrightsKyrylo Silin2018-10-286-24/+19
| | | | | | | | | | * Added myself (should've done that years ago) * Made it look like Pry is a team effort
* | Merge pull request #1833 from pry/1738-dynamic-prompt-nameKyrylo Silin2018-10-284-4/+71
|\ \ | |/ |/| prompt: make it possible to set name dynamically
| * prompt: make it possible to set name dynamicallyKyrylo Silin2018-10-284-4/+71
|/ | | | | | | | | | | | | | Fixes #1738 (Possible to make prompt_name dynamic?) The user-facing API is the following: ```rb Pry.config.prompt_name = Pry.lazy { rand(100) } [1] 80(main)> [2] 87(main)> [3] 30(main)> ```
* Merge pull request #1832 from pry/config-code-formatKyrylo Silin2018-10-287-433/+453
|\ | | | | config: simplify structure
| * config: simplify structureconfig-code-formatKyrylo Silin2018-10-287-433/+453
|/ | | | | | | | | | | * Replace `require_relative` with `require` The project tries to use the `require` form everywhere where possible, which is the common form * `require` from `pry.rb` Spreaded `require` statements where we require internal classes is confusing * Fixed namespace definition for Config classes https://github.com/rubocop-hq/ruby-style-guide#namespace-definition recommends to use explicit nesting
* Merge pull request #1831 from pry/refactoring-prompt-classKyrylo Silin2018-10-281-59/+65
|\ | | | | prompt: refactor to reduce duplication
| * prompt: refactor to reduce duplicationKyrylo Silin2018-10-281-59/+65
|/ | | | | | | Since we always need to define two procs that look almost the same, duplication was unavoidable. With help of method wrappers around procs we can reduce it. As a bonus, the class has some YARD annotations now.
* Merge pull request #1830 from pry/safe-contexts-renamingKyrylo Silin2018-10-284-5/+5
|\ | | | | config/default: rename prompt_safe_objects to prompt_safe_contexts
| * config/default: rename prompt_safe_objects to prompt_safe_contextsKyrylo Silin2018-10-284-5/+5
|/ | | | | It makes sense to rename it because "objects" we are referring in the context of prompt are actually prompt "contexts".
* Merge pull request #1828 from pry/prompt-refactoringKyrylo Silin2018-10-287-74/+118
|\ | | | | Move prompt related code from pry.rb to prompt.rb
| * Move prompt related code from pry.rb to prompt.rbKyrylo Silin2018-10-287-58/+100
| | | | | | | | | | It makes a lot more sense to keep these procs under the `Pry::Prompt` namespace than `Pry`, which is already heavily populated by other various things.
| * prompt: use explicit nesting for class definitionKyrylo Silin2018-10-281-21/+23
|/ | | | Per https://github.com/rubocop-hq/ruby-style-guide#namespace-definition
* Merge pull request #1827 from pry/initial-pwd-refactoringKyrylo Silin2018-10-282-5/+5
|\ | | | | pry: move INITIAL_PWD to code/code_file
| * pry: move INITIAL_PWD to code/code_fileKyrylo Silin2018-10-282-5/+5
|/ | | | | This constant is not used anywhere else but this file so it makes sense to keep it there.
* Merge pull request #1825 from pry/1823-rbreadline-vi-mode-fixKyrylo Silin2018-10-261-1/+5
|\ | | | | repl: fix broken input while using rb-readline
| * repl: fix broken input while using rb-readlineKyrylo Silin2018-10-261-1/+5
|/ | | | Fixes #1823 (Broken upstream when rb-readline is enabled)
* Merge pull request #1822 from pry/1761-pry-fKyrylo Silin2018-10-221-3/+1
|\ | | | | cli: fix `-f` not suppressing load of `pryrc`
| * cli: fix `-f` not suppressing load of `pryrc`Kyrylo Silin2018-10-221-3/+1
|/ | | | | | | Fixes #1761 (`pry -f` can no longer suppress the loading of .pryrc) If I recall correctly, we split session loading in #1393 because of `Pry.start`. This broke `-f`. I think we can get away with a simple reorder in #parse_options
* Merge pull request #1821 from pry/correct-indentation-refactoringKyrylo Silin2018-10-221-11/+10
|\ | | | | indent: tidy up #correct_indentation
| * indent: tidy up #correct_indentationKyrylo Silin2018-10-221-11/+10
|/
* ring: fix #to_a exampleKyrylo Silin2018-10-221-1/+1
|
* Merge pull request #1820 from pry/overhang-improvementKyrylo Silin2018-10-221-13/+13
|\ | | | | repl: correctly calculate overhang for empty lines
| * 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