1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-pry

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Pry

Pry Build Status

Code Climate

Gem Version

Documentation Status

Downloads

© John Mair (banisterfiend) 2018 (Creator)

© Kyrylo Silin (kyrylosilin) 2018 (Maintainer)

Alumni:

  • Conrad Irwin
  • Ryan Fitzgerald
  • Robert Gleeson

Links:

Table of Contents

  • Введение
  • Основные функции
  • Установка
  • Обзор
    • Команды
    • Навигация по состоянию
    • Вызов во время выполнения
    • Интеграция с командной оболочкой
    • Просмотр кода
    • Просмотр документации
    • Редактирование методов
    • Система живой помощи
    • Использование Pry в качестве консоли Rails
    • Подсветка синтаксиса
  • Поддерживаемые версии Ruby
  • Контакты
  • Лицензия
  • Участники

Введение

Pry — это консоль разработчика и альтернатива IRB с мощными возможностями самоанализа. Pry стремится быть больше, чем заменой IRB. Это попытка привнести программирование на основе REPL в язык Ruby.

Основные функции

  • Просмотр исходного кода (включая исходный код ядра C с помощью pry-doc gem)
  • Просмотр документации
  • Система живой помощи
  • Открытие методов в редакторах (edit Class#method)
  • Подсветка синтаксиса
  • Интеграция с командной оболочкой (запуск редакторов, запуск git и rake из Pry)
  • Интеграция Gist
  • Навигация по состоянию (cd, ls и др.)
  • Вызов во время выполнения (использование Pry в качестве консоли разработчика или отладчика)
  • Поддержка экзотических объектов (экземпляры BasicObject, IClasses и т. д.)
  • Мощная и гибкая система команд
  • Возможность просмотра и воспроизведения истории
  • Множество удобных команд, вдохновлённых IPython, Smalltalk и другими продвинутыми REPL
  • Широкий спектр плагинов, которые предоставляют удалённые сеансы, полную функциональность отладки и многое другое.

Установка

Bundler

gem 'pry', '~> 0.14.2'

Вручную

gem install pry

Обзор

Pry довольно гибкий и позволяет значительно настраивать пользователя. Его можно легко читать из любого объекта, у которого есть метод readline, и записывать в любой объект, у которого есть метод puts. Многие другие аспекты Pry также настраиваются, что делает его хорошим выбором для реализации пользовательских оболочек.

Pry поставляется с исполняемым файлом, поэтому его можно вызывать в командной строке. Просто введите pry, чтобы начать. Файл pryrc в $XDG_CONFIG_HOME/pry/ или домашнем каталоге пользователя будет загружен, если он существует. Введите pry --help в командной строке для получения дополнительной информации.

Команды

Почти каждая функция в сеансе Pry реализована как команда. Команды не являются методами и должны начинаться с начала строки без пробелов между ними. Команды поддерживают гибкий синтаксис и позволяют использовать «параметры» так же, как команды оболочки, например, следующая команда Pry покажет список всех частных методов экземпляра (в области видимости), начинающихся с «pa». ### Перемещение по состояниям

Pry позволяет нам перемещаться между различными областями видимости (объектами) с помощью команды cd. Это позволяет исследовать представление программы или библиотеки во время выполнения. Чтобы просмотреть, какие переменные и методы доступны в определённой области видимости, мы используем универсальную команду ls.

Здесь мы начнём Pry на верхнем уровне, затем Pry в классе, а затем в переменной экземпляра внутри этого класса:

pry(main)> class Hello
pry(main)*   @x = 20
pry(main)* end
=> 20
pry(main)> cd Hello
pry(Hello):1> ls -i
instance variables: @x
pry(Hello):1> cd @x
pry(20):2> self + 10
=> 30
pry(20):2> cd ..
pry(Hello):1> cd ..
pry(main)> cd ..

Число после : в приглашении pry указывает уровень вложенности. Чтобы отобразить больше информации о вложении, используйте команду nesting. Например:

pry("friend"):3> nesting
Nesting status:
0. main (Pry top level)
1. Hello
2. 100
3. "friend"
=> nil

Затем мы можем вернуться к любому из предыдущих уровней вложенности, используя команду jump-to:

pry("friend"):3> jump-to 1
=> 100
pry(Hello):1>

Вызов во время выполнения

Pry можно вызвать в середине работающей программы. Он открывает сеанс Pry в точке вызова и делает доступным всё состояние программы в этой точке. Его можно вызвать для любого объекта, используя синтаксис my_object.pry, или для текущей привязки (или любой привязки), используя binding.pry. Сеанс Pry начнётся в области действия объекта (или привязки). Когда сеанс заканчивается, программа продолжает работу с любыми внесёнными вами изменениями.

Эту функциональность можно использовать для таких целей, как отладка, реализация консолей разработчика и применение горячих исправлений.

Код:

# test.rb
require 'pry'

class A
  def hello() puts "hello world!" end
end

a = A.new

# start a REPL session
binding.pry

# program resumes here (after pry session)
puts "program resumes here."

Сеанс Pry:

pry(main)> a.hello
hello world!
=> nil
pry(main)> def a.goodbye
pry(main)*   puts "goodbye cruel world!"
pry(main)* end
=> :goodbye
pry(main)> a.goodbye
goodbye cruel world!
=> nil
pry(main)> exit

program resumes here.

Интеграция с командной оболочкой

Строка ввода, начинающаяся с точки, будет передана в командную оболочку. Это позволяет нам перемещаться по файловой системе, запускать редакторы и напрямую запускать git и rake из Pry.

Кроме того, мы можем использовать команду shell-mode, чтобы включить текущий рабочий каталог в приглашение Pry и включить (ограниченное на данном этапе, извините) завершение имени файла. Мы также можем интерполировать код Ruby непосредственно в оболочку, используя обычный синтаксис интерполяции строк #{}.

В приведённом ниже коде мы переключимся в режим shell-mode и отредактируем файл pryrc. Затем мы выведем его содержимое и перезагрузим файл.

pry(main)> shell-mode
pry main:/home/john/ruby/projects/pry $ .cd ~
pry main:/home/john $ .emacsclient .pryrc
pry main:/home/john $ .cat .pryrc
def hello_world
  puts "hello world!"
end
pry main:/home/john $ load ".pryrc"
=> true
pry main:/home/john $ hello_world
hello world!

Мы также можем интерполировать код Ruby в оболочку. В приведённом ниже примере мы используем команду оболочки cat для случайного файла из текущего каталога и подсчитываем количество строк в этом файле с помощью wc:

pry main:/home/john $ .cat #{Dir['*.*'].sample} | wc -l
44

Просмотр кода

Вы можете просматривать исходный код метода с помощью команды show-source. Почти все методы Ruby (и некоторые методы C, с гемом pry-doc) могут просматривать свой исходный код. Код, который длиннее страницы, отправляется через пейджер (например, less), и весь код правильно выделяется синтаксисом (даже код C).

Команда show-source принимает два синтаксиса: типичный синтаксис ri Class#method и просто имя метода, находящегося в области видимости. При желании вы можете передать параметр -l команде show-source, чтобы включить номера строк в вывод.

В следующем примере мы войдём в класс Pry, перечислим методы экземпляра, начинающиеся с «se», и отобразим исходный код для set_input. Метод set_last_result:

pry(main)> cd Pry
pry(Pry):1> ls -M --grep se
Pry#methods: raise_up  raise_up!  raise_up_common  reset_eval_string  select_prompt  set_last_result
pry(Pry):1> show-source set_last_result -l

From: /home/john/ruby/projects/pry/lib/pry/pry_instance.rb:405:
Owner: Pry
Visibility: public
Signature: set_last_result(result, code=?)
Number of lines: 6

405: def set_last_result(result, code = "")
406:   @last_remark_is_exception = false
407:   @output_ring << result
408:
409:   self.last_result = result unless code =~ /\A\s*\z/
410: end

Примечание: мы также можем просматривать методы C (из Ruby Core) с помощью плагина pry-doc; также демонстрируем альтернативный синтаксис для show-source:

pry(main)> show-source Array#select

From: array.c in Ruby Core (C Method):
Number of lines: 15

static VALUE
rb_ary_select(VALUE ary)
{
    VALUE result;
    long i;

    RETURN_ENUMERATOR(ary, 0, 0);
    result = rb_ary_new2(RARRAY_LEN(ary));
    for (i = 0; i < RARRAY_LEN(ary); i++) {
        if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) {
            rb_ary_push(result, rb_ary_elt(ary, i));
        }
    }
    return result;
}

Просмотр документации

Один из вариантов использования Pry — исследовать программу во время выполнения, входя и выходя из объектов, просматривая и вызывая методы. В процессе исследования может быть полезно прочитать документацию по конкретному методу, который вы встречаете. Команда show-source поддерживает два синтаксиса — нормальный синтаксис ri, а также принимает имя любого метода, который в данный момент находится в области видимости.

Система документации Pry не полагается на предварительно сгенерированные rdoc или ri, вместо этого она захватывает комментарии непосредственно над методом по запросу. Это приводит к более быстрому извлечению документации и позволяет системе Pry извлекать документацию для методов, которые не были бы обнаружены с помощью rdoc. Pry также имеет базовое понимание форматов rdoc и yard и попытается соответствующим образом выделить синтаксис документации.

Тем не менее функциональность ri очень хороша и имеет преимущество перед системой Pry в том, что она позволяет искать документацию как для классов, так и для методов. Поэтому Pry хорошо интегрируется с ri через команду ri. Синтаксис команды точно такой же, как и в командной строке, поэтому нет необходимости заключать строки в кавычки.

В нашем примере мы войдём в класс Gem и просмотрим документацию для метода try_activate:

pry(main)> cd Gem
pry(Gem):1> show-source try_activate -d

From: /Users/john/rbenv/versions/2.7.1/lib/ruby/2.7.0/rubygems.rb:194:
Owner: #<Class:Gem>
Visibility: public
Signature: try_activate(path)
Number of lines: 28

Попробуйте активировать гем, содержащий путь. Возвращает true, если активация прошла успешно или не была необходима, потому что он уже был активирован. Возвращает false, если он не может найти путь в геме.

def self.try_activate(путь)
  # находит самую последнюю версию... независимо от загруженных спецификаций и их зависимостей
  # если другой гем имел требование, которое означало бы, что мы не должны
  # активировать последнюю версию, то либо она уже была активирована,
  # либо если это было неоднозначно (и, таким образом, неразрешено), код в нашем пользовательском
  # require попытается активировать более конкретную версию.

  spec = Gem::Specification.find_by_path путь
pry(Gem):1>

Мы также можем использовать ri обычным способом:

pry(main) ri Array#each
----------------------------------------------------------- Array#each
     array.each {|item| block }   ->   array
------------------------------------------------------------------------
     Вызывает _block_ один раз для каждого элемента в _self_, передавая этот элемент
     в качестве параметра.

        a = [ "a", "b", "c" ]
        a.each {|x| print x, " -- " }

     производит:

        a -- b -- c --

Редактирование методов

Вы можете использовать edit Class#method или edit my_method (если метод находится в области действия), чтобы открыть метод для редактирования непосредственно в вашем любимом редакторе. Pry знает о нескольких разных редакторах и попытается открыть файл в строке, где определён метод. Pry.editor

Аксессор Pry.editor по умолчанию будет использовать переменную $EDITOR или, если таковой нет, nano в качестве резервного варианта по умолчанию. Файл, который редактируется, будет автоматически перезагружен после выхода из редактора — перезагрузку можно подавить, передав параметр --no-reload команде edit.

В приведённом ниже примере мы установим наш редактор по умолчанию на «emacsclient» и откроем метод Pry#repl для редактирования:

pry(main)> Pry.editor = "emacsclient"
pry(main)> edit Pry#repl

Live Help System

Многие другие команды доступны в Pry; чтобы увидеть полный список, введите help в командной строке. Краткое описание каждой команды предоставляется с основными инструкциями по использованию; некоторые команды имеют более обширную справку, доступ к которой можно получить, набрав command_name --help. В описании команды обычно указывается, доступна ли опция --help.

Используйте Pry в качестве консоли Rails

Вы можете запустить консоль Pry в среде вашего приложения, используя флаг -r:

pry -r ./config/environment

Или запустите консоль rails (bin/rails console), а затем введите pry. Также можно использовать Pry в качестве вашей консоли Rails, добавив гем pry-rails в свой Gemfile. Это заменяет стандартную консоль на Pry, а также загружает помощники консоли Rails и добавляет несколько полезных команд, специфичных для Rails.

Обратите внимание, что pry-rails в настоящее время не поддерживается.

Также ознакомьтесь с вики для получения дополнительной информации об интеграции Pry с Rails.

Подсветка синтаксиса

Подсветка синтаксиса включена в Pry по умолчанию. Если вы хотите изменить цвета, ознакомьтесь с гемом pry-theme.

Вы можете включить и отключить подсветку синтаксиса в сеансе с помощью команды toggle-color. Кроме того, вы можете отключить её навсегда, поместив строку Pry.color = false в файл pryrc.

Поддерживаемые версии Ruby

  • CRuby >= 2.0.0
  • JRuby >= 9.0

Контакты

Если у вас возникла проблема, вопрос или сообщение об ошибке, не стесняйтесь:

Лицензия

Проект использует лицензию MIT. Подробнее см. в файле LICENSE.md.

Участники

Pry — это в первую очередь работа Джона Мейра (banisterfiend), полный список участников см. на графике участников.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Pry — мощный инструмент, который может заменить стандартную оболочку IRB в Ruby, а также является консолью разработчика для управления выполнением кода. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-pry.git
git@api.gitlife.ru:oschina-mirror/mirrors-pry.git
oschina-mirror
mirrors-pry
mirrors-pry
master