حدق -> REPL لروبي ، والذي يستحق كل هذا العناء

REPL


يرمز REPL في عالم التطوير المرتفع إلى قراءة → تقييم → حلقة الطباعة . اقرأ ، نفذ ، طبع ، ومرات عديدة.


روبي ، مثل العديد من اللغات الأخرى ، يأتي مع تطبيق REPL خاص به يسمى irb . التي ، على الرغم من أنها تتكيف مع المهام البدائية ، لا تزال غير قادرة على تلبية متطلبات المطور المميز. ولكن هناك بديل أكثر تطوراً بكثير: pry .


حدق الشعار


هنا مقتطف من الموقع الرسمي pry :


يعد Pry بديلاً قوياً لملف Ruby IRB القياسي. مع تسليط الضوء على بناء الجملة ، بنية البرنامج المساعد مرنة ، ومكالمات وقت التشغيل ، وعرض المصدر والوثائق .

وهذه ليست مجرد بلاه بلاه بلاه الإعلان. هذا صحيح. سأعرض كيفية تثبيت وضبط pry مع كل الأجراس وصفارات لإرضاء المطور الأكثر تطوراً. من المفترض أن إصدار العمل الحالي من Ruby مثبت ويعمل على الجهاز المستهدف.


تدريب


انتقل إلى وحدة التحكم وقم بتشغيل الأمر:


 $ gem install pry pry-theme awesome_print coderay 

كل شيء ، نحن مستعدون تماما. دعنا نركض ... ونتأكد من عدم وجود فرق مقارنةً بـ irb . فجأة ليست لطيفة جدا.


حسنًا ، دعنا نعلِّم pry يكون النحل أكثر ذكاءً.


ملف التكوين


هذا هو .pryrc . يوجد بالفعل ملف تكوين في الدليل الرئيسي يوضح كيفية البحث وكيفية التصرف في مجتمع لائق. إذا لم يكن الأمر كذلك ، يمكنك إنشائه باستخدام الأمر cd && touch .pryrc .


دقيق ملء تعليمات .pryrc


سأقوم بعرض الخصائص المختلفة للخطوة خطوة بخطوة. gist .pryrc الصبر: gist .pryrc .



المحرر الافتراضي


 Pry.editor = 'vi' # 'code', 'subl' 

يقوم بتكوين المحرر الذي سيتم استخدامه لتحرير السياق الحالي (أمر edit ).


موجه الأوامر


 Pry.config.prompt = [ ->(_obj, _nest_level, _) { "✎ " }, ->(*) { " " } ] 

.pryrc هو مجرد ملف .pryrc ، لذلك يمكن لهذه العملية تنفيذ أي تعليمات برمجية تريدها ، أو حتى استخراج عملات البيتكوين أثناء انتظار ظهور المطالبة التالية.


يمكن رسم المستوى الأول والمستويات المتداخلة (الكتل الداخلية) بطرق مختلفة. في السابق ، كنت أستخدم مثلثًا أسود مظللًا ، والذي يوزع محللًا غبيًا للمستوى الأول و ▷ للأحرف المتداخلة ، لكن تدريجياً توصلت إلى استنتاج مفاده أن عدم وجود أي أحرف غريبة داخل القصاصة يجعل نسخ الشظية في أي مكان أسهل بكثير. لذلك هكذا.


اللون


لدعم السمات ، يتم استخدام جوهرة pry-theme . أستخدم تلوين بناء الجملة (وعندما أشعر بالملل ، أقوم بتشغيل PRY_BW=true pry ). بالنسبة للمجلدات التي تشغل Rails (التي تحتوي على مشاريع Rails ) ، يمكن أن تكون الألوان أكثر خيالية ، لكنني أكره Rails ، وبالتالي ما يحدث هناك ، لا يمكنني القول بالتأكيد.


 unless ENV['PRY_BW'] Pry.color = true Pry.config.theme = "railscasts" Pry.config.prompt = PryRails::RAILS_PROMPT if defined?(PryRails::RAILS_PROMPT) Pry.config.prompt ||= Pry.prompt end 

القصة


هذا مجرد اكتشاف. عندما تكون في وضع التصحيح ، أو إذا تم تنفيذ الأمر قبل ذلك مباشرة ، فقط اضغط على ⏎ وسيتم تكراره. إنه مفيد للغاية للتبديل إلى التعليمات البرمجية في مصحح الأخطاء (إذا كنت ، بالطبع ، تستخدم مصحح الأخطاء على الإطلاق ، ولم تقم بإصلاح جميع الأخطاء بمظهر ثابت ، ولا تقم مطلقًا بتشغيل مصحح الأخطاء مثلي ، على سبيل المثال).


 Pry.config.history.should_save = true Pry::Commands.command /^$/, "repeat last command" do _pry_.run_command Pry.history.to_a.last end 

الأوامر


المصحح. الدراجة ليست لي ، لقد اقترضت هذه السطور الخمسة فقط من زميلي في الفريق ، الذي يقضي حياته بأكملها في تصحيح الأخطاء ، لكنهم يقولون ، إنها تعمل.


 Pry.commands.alias_command 'c', 'continue' rescue nil Pry.commands.alias_command 's', 'step' rescue nil Pry.commands.alias_command 'n', 'next' rescue nil Pry.commands.alias_command 'f', 'finish' rescue nil Pry.commands.alias_command 'l', 'whereami' rescue nil 

الوحدة النمطية / فئة وصف التكوين


 Pry.config.ls.separator = "\n" # new lines between methods Pry.config.ls.heading_color = :magenta Pry.config.ls.public_method_color = :green Pry.config.ls.protected_method_color = :yellow Pry.config.ls.private_method_color = :bright_black 

يبدو أنه لا يوجد شيء للتعليق عليه.


استدعاء نظام المرافق


يدعم Pry استدعاء أدوات النظام المساعدة (فقط أضف نقطة قبل اسم الأمر دون فراغ أو .ls أو .ps axu .ls ).


الإضافات


أدناه هو أبسط مثال لتكوين البرنامج المساعد. لا أحد يحب التكوينات المتضخمة ، فنحن نلميعها ونحملها لعقود من الزمن باستخدام آلات مختلفة. المقتطف أدناه هو مجرد مثال ( awesome الإضافي awesome ). التعليقات في الكود تتحدث عن نفسها.


 # `awesome_print` gem is a great syntax colorized printing # look at `~/.aprc` for more settings for awesome_print begin require 'awesome_print' # The following line enables awesome_print for all pry output, # and it also enables paging Pry.config.print = proc {|output, value| Pry::Helpers::BaseHelpers.stagger_output("=> #{value.ai}", output)} # If you want awesome_print without automatic pagination, use the line below module AwesomePrint Formatter.prepend(Module.new do def awesome_self(object, type) return super(object, type) unless type == :string return super(object, type) unless @options[:string_limit] return super(object, type) unless object.inspect.to_s.length > @options[:string_limit] colorize(object.inspect.to_s[0..@options[:string_limit]] + "...", type) end end) end AwesomePrint.defaults = { :string_limit => 80, :indent => 2, :multiline => true } AwesomePrint.pry! rescue LoadError => err puts "gem install awesome_print # <-- highly recommended" end 

فرق مخصصة


لم أذكر pry رائع جدا REPL؟ يمكننا حتى تحديد مجموعة من الأوامر الخاصة بنا لاستخدامها داخل pry . يوضح المثال التالي كيفية إنشاء أمر sql لتنفيذ SQL خالص من وحدة التحكم (شريطة أن يكون لدينا اتصال AR فعال) - مع الحد الأدنى لعدد ضربات المفاتيح.


 default_command_set = Pry::CommandSet.new do command "sql", "Send sql over AR." do |query| if ENV['RAILS_ENV'] || defined?(Rails) pp ActiveRecord::Base.connection.select_all(query) else pp "No rails env defined" end end end Pry.config.commands.import default_command_set 

Monkeypatches و Globals


نعم ، يمكننا تخصيص وتنفيذ أي رمز روبي مع monkeypatches الخاصة بنا ، والتي ستكون متاحة فقط في جلسات pry . على سبيل المثال ، أجد أن هذا الرمز مناسب جدًا لاختبار الكود الذي يعمل بالصفائف والتجزئة.


 class Array def self.sample(count = 10, &block) Array.new(count, &(block || :succ)) end end Hash.singleton_class.prepend(Module.new def sample(count = 10) (?a...count.times.reduce(?a) { |o| o.succ }). map(&:to_sym).zip(0...count).to_h end end) 

ملاحظة: إذا كنت تعتقد أن المقتطف أعلاه قد تم تضخيمه بشكل مفرط بواسطة هذا الرقم Integer#succ ، فمن المحتمل أنك لم تتعامل مع التجزئة الطويلة بأكثر من 26 مفتاحًا :)


تعديل اللون


كل شيء أدناه هو لضبط الألوان باستخدام جوهرة coderay . والنتيجة هي يستحق كل هذا العناء. الرموز حمراء والأرقام زرقاء وكل موسيقى الجاز.


 CodeRay.scan("example", :ruby).term # just to load necessary files $LOAD_PATH << File.dirname(File.realpath(__FILE__)) require "escaped_colors" module CodeRay module Encoders class Terminal < Encoder TERM_TOKEN_COLORS.each_pair do |key, value| TOKEN_COLORS[key] = value end end end end 

في الختام


آمل أن يعطي هذا المنشور انطباعًا pry ماهية pry ولماذا أفضل من irb . لم أركز بشكل خاص على عملية تصحيح الأخطاء ، وذلك أساسًا لأنني لا أقوم بتصحيح الأخطاء ، لكنني أكتب الرمز الصحيح من البداية. لكن آمل أن أتمكن من إثارة اهتمام أولئك الذين يرون هذا المزيج من الرسائل - pry - لأول مرة - على الأقل محاولة. صدقني ، الأمر يستحق ذلك.


النسخ المتماثلة جيدة!

Source: https://habr.com/ru/post/ar481728/


All Articles