pp 0.2.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pp.rb +73 -31
  3. data/pp.gemspec +1 -1
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2faa701270cc94e8c8db4dc3ef9e142d6a6f0b35ee05dd992a030697fb2e1558
4
- data.tar.gz: 122590c50f617dc75434ed4be205c1896cd6699b33b65f98406b9f78604e6e58
3
+ metadata.gz: 8d57757b241b923f8c7ebf7653855a01231720617dfb2ff9588c724a4968e698
4
+ data.tar.gz: 426b5c5d3132ac1aeea3e96cd5870c72ed5f730cc244a0b9139a46681c42c278
5
5
  SHA512:
6
- metadata.gz: ec0f27ba14d0f783f64f35792be7dc2dceb7b11f3aecc7a9535968ed37f4b5659a67a038ec509f6fd9ac7d1495cf20e228df5d226b79258e1d55fd5796747455
7
- data.tar.gz: 2ff27f1c5086edbb4677e89924411b4916484c62ec1fa620e7ca59195cff7e876e8c5103d6fa55b5ebf9d7ef7c682f85ca68d09b763a99276732fab3f7aa1484
6
+ metadata.gz: 83e186173cf60aa175b3beee1bd4d8befd5b54743ab6c08c31d3088907f0a7ba84dfb2e97a91937db45346e8831b7152cb5c85127c83cb6787a997418bbaf98b
7
+ data.tar.gz: bc302f420467a0dc34e65bccd003bc979c8a5cf69005b34ed8140d687bfc73008a2f6f76bfc4b747b530ba43a799ceabea2b7eaa0ba7e56dfad05c7448d9c7bc
data/lib/pp.rb CHANGED
@@ -61,14 +61,34 @@ require 'prettyprint'
61
61
  # Tanaka Akira <akr@fsij.org>
62
62
 
63
63
  class PP < PrettyPrint
64
+ # Returns the usable width for +out+.
65
+ # As the width of +out+:
66
+ # 1. If +out+ is assigned to a tty device, its width is used.
67
+ # 2. Otherwise, or it could not get the value, the +COLUMN+
68
+ # environment variable is assumed to be set to the width.
69
+ # 3. If +COLUMN+ is not set to a non-zero number, 80 is assumed.
70
+ #
71
+ # And finally, returns the above width value - 1.
72
+ # * This -1 is for Windows command prompt, which moves the cursor to
73
+ # the next line if it reaches the last column.
74
+ def PP.width_for(out)
75
+ begin
76
+ require 'io/console'
77
+ _, width = out.winsize
78
+ rescue LoadError, NoMethodError, SystemCallError
79
+ end
80
+ (width || ENV['COLUMNS']&.to_i&.nonzero? || 80) - 1
81
+ end
82
+
64
83
  # Outputs +obj+ to +out+ in pretty printed format of
65
84
  # +width+ columns in width.
66
85
  #
67
86
  # If +out+ is omitted, <code>$></code> is assumed.
68
- # If +width+ is omitted, 79 is assumed.
87
+ # If +width+ is omitted, the width of +out+ is assumed (see
88
+ # width_for).
69
89
  #
70
90
  # PP.pp returns +out+.
71
- def PP.pp(obj, out=$>, width=79)
91
+ def PP.pp(obj, out=$>, width=width_for(out))
72
92
  q = PP.new(out, width)
73
93
  q.guard_inspect_key {q.pp obj}
74
94
  q.flush
@@ -396,6 +416,26 @@ class Struct # :nodoc:
396
416
  end
397
417
  end
398
418
 
419
+ class Data # :nodoc:
420
+ def pretty_print(q) # :nodoc:
421
+ q.group(1, sprintf("#<data %s", PP.mcall(self, Kernel, :class).name), '>') {
422
+ q.seplist(PP.mcall(self, Data, :members), lambda { q.text "," }) {|member|
423
+ q.breakable
424
+ q.text member.to_s
425
+ q.text '='
426
+ q.group(1) {
427
+ q.breakable ''
428
+ q.pp public_send(member)
429
+ }
430
+ }
431
+ }
432
+ end
433
+
434
+ def pretty_print_cycle(q) # :nodoc:
435
+ q.text sprintf("#<data %s:...>", PP.mcall(self, Kernel, :class).name)
436
+ end
437
+ end if "3.2" <= RUBY_VERSION
438
+
399
439
  class Range # :nodoc:
400
440
  def pretty_print(q) # :nodoc:
401
441
  q.pp self.begin
@@ -424,7 +464,7 @@ end
424
464
  class File < IO # :nodoc:
425
465
  class Stat # :nodoc:
426
466
  def pretty_print(q) # :nodoc:
427
- require 'etc.so'
467
+ require 'etc'
428
468
  q.object_group(self) {
429
469
  q.breakable
430
470
  q.text sprintf("dev=0x%x", self.dev); q.comma_breakable
@@ -530,37 +570,39 @@ class MatchData # :nodoc:
530
570
  end
531
571
  end
532
572
 
533
- class RubyVM::AbstractSyntaxTree::Node
534
- def pretty_print_children(q, names = [])
535
- children.zip(names) do |c, n|
536
- if n
537
- q.breakable
538
- q.text "#{n}:"
539
- end
540
- q.group(2) do
541
- q.breakable
542
- q.pp c
573
+ if defined?(RubyVM::AbstractSyntaxTree)
574
+ class RubyVM::AbstractSyntaxTree::Node
575
+ def pretty_print_children(q, names = [])
576
+ children.zip(names) do |c, n|
577
+ if n
578
+ q.breakable
579
+ q.text "#{n}:"
580
+ end
581
+ q.group(2) do
582
+ q.breakable
583
+ q.pp c
584
+ end
543
585
  end
544
586
  end
545
- end
546
587
 
547
- def pretty_print(q)
548
- q.group(1, "(#{type}@#{first_lineno}:#{first_column}-#{last_lineno}:#{last_column}", ")") {
549
- case type
550
- when :SCOPE
551
- pretty_print_children(q, %w"tbl args body")
552
- when :ARGS
553
- pretty_print_children(q, %w[pre_num pre_init opt first_post post_num post_init rest kw kwrest block])
554
- when :DEFN
555
- pretty_print_children(q, %w[mid body])
556
- when :ARYPTN
557
- pretty_print_children(q, %w[const pre rest post])
558
- when :HSHPTN
559
- pretty_print_children(q, %w[const kw kwrest])
560
- else
561
- pretty_print_children(q)
562
- end
563
- }
588
+ def pretty_print(q)
589
+ q.group(1, "(#{type}@#{first_lineno}:#{first_column}-#{last_lineno}:#{last_column}", ")") {
590
+ case type
591
+ when :SCOPE
592
+ pretty_print_children(q, %w"tbl args body")
593
+ when :ARGS
594
+ pretty_print_children(q, %w[pre_num pre_init opt first_post post_num post_init rest kw kwrest block])
595
+ when :DEFN
596
+ pretty_print_children(q, %w[mid body])
597
+ when :ARYPTN
598
+ pretty_print_children(q, %w[const pre rest post])
599
+ when :HSHPTN
600
+ pretty_print_children(q, %w[const kw kwrest])
601
+ else
602
+ pretty_print_children(q)
603
+ end
604
+ }
605
+ end
564
606
  end
565
607
  end
566
608
 
data/pp.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "pp"
3
- spec.version = "0.2.1"
3
+ spec.version = "0.4.0"
4
4
  spec.authors = ["Tanaka Akira"]
5
5
  spec.email = ["akr@fsij.org"]
6
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tanaka Akira
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-21 00:00:00.000000000 Z
11
+ date: 2022-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prettyprint
@@ -56,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
58
  requirements: []
59
- rubygems_version: 3.3.0.dev
59
+ rubygems_version: 3.4.0.dev
60
60
  signing_key:
61
61
  specification_version: 4
62
62
  summary: Provides a PrettyPrinter for Ruby objects