@@ -861,25 +861,25 @@ def process_cdp args
861861 }
862862 when String
863863 prop = [
864- property ( '#length' , obj . length ) ,
865- property ( '#encoding' , obj . encoding )
864+ internalProperty ( '#length' , obj . length ) ,
865+ internalProperty ( '#encoding' , obj . encoding )
866866 ]
867867 when Class , Module
868868 result = obj . instance_variables . map { |iv |
869869 variable ( iv , obj . instance_variable_get ( iv ) )
870870 }
871- prop = [ property ( '%ancestors' , obj . ancestors [ 1 ..] ) ]
871+ prop = [ internalProperty ( '%ancestors' , obj . ancestors [ 1 ..] ) ]
872872 when Range
873873 prop = [
874- property ( '#begin' , obj . begin ) ,
875- property ( '#end' , obj . end ) ,
874+ internalProperty ( '#begin' , obj . begin ) ,
875+ internalProperty ( '#end' , obj . end ) ,
876876 ]
877877 end
878878
879879 result += obj . instance_variables . map { |iv |
880880 variable ( iv , obj . instance_variable_get ( iv ) )
881881 }
882- prop += [ property ( '#class' , obj . class ) ]
882+ prop += [ internalProperty ( '#class' , obj . class ) ]
883883 end
884884 event! :cdp_result , :properties , req , result : result , internalProperties : prop
885885 end
@@ -907,15 +907,15 @@ def evaluate_result r
907907 v [ :value ]
908908 end
909909
910- def property name , obj
910+ def internalProperty name , obj
911911 v = variable name , obj
912912 v . delete :configurable
913913 v . delete :enumerable
914914 v
915915 end
916916
917- def variable_ name , obj , type , description : nil , subtype : nil
918- description = DEBUGGER__ . safe_inspect ( obj ) if description . nil?
917+ def propertyDescriptor_ name , obj , type , description : nil , subtype : nil
918+ description = DEBUGGER__ . safe_inspect ( obj , short : true ) if description . nil?
919919 oid = rand . to_s
920920 @obj_map [ oid ] = obj
921921 prop = {
@@ -939,28 +939,91 @@ def variable_ name, obj, type, description: nil, subtype: nil
939939 prop
940940 end
941941
942+ def preview_ value , hash , overflow
943+ {
944+ type : value [ :type ] ,
945+ subtype : value [ :subtype ] ,
946+ description : value [ :description ] ,
947+ overflow : overflow ,
948+ properties : hash . map { |k , v |
949+ pd = propertyDescriptor k , v
950+ {
951+ name : pd [ :name ] ,
952+ type : pd [ :value ] [ :type ] ,
953+ value : pd [ :value ] [ :description ]
954+ }
955+ }
956+ }
957+ end
958+
942959 def variable name , obj
960+ pd = propertyDescriptor name , obj
961+ case obj
962+ when Array
963+ pd [ :value ] [ :preview ] = preview name , obj
964+ obj . each_with_index { |item , idx |
965+ if valuePreview = preview ( idx . to_s , item )
966+ pd [ :value ] [ :preview ] [ :properties ] [ idx ] [ :valuePreview ] = valuePreview
967+ end
968+ }
969+ when Hash
970+ pd [ :value ] [ :preview ] = preview name , obj
971+ obj . each_with_index { |item , idx |
972+ key , val = item
973+ if valuePreview = preview ( key , val )
974+ pd [ :value ] [ :preview ] [ :properties ] [ idx ] [ :valuePreview ] = valuePreview
975+ end
976+ }
977+ end
978+ pd
979+ end
980+
981+ def preview name , obj
982+ case obj
983+ when Array
984+ pd = propertyDescriptor name , obj
985+ overflow = false
986+ if obj . size > 100
987+ obj = obj [ 0 ..99 ]
988+ overflow = true
989+ end
990+ hash = obj . each_with_index . to_h { |o , i | [ i . to_s , o ] }
991+ preview_ pd [ :value ] , hash , overflow
992+ when Hash
993+ pd = propertyDescriptor name , obj
994+ overflow = false
995+ if obj . size > 100
996+ obj = obj . to_a [ 0 ..99 ] . to_h
997+ overflow = true
998+ end
999+ preview_ pd [ :value ] , obj , overflow
1000+ else
1001+ nil
1002+ end
1003+ end
1004+
1005+ def propertyDescriptor name , obj
9431006 case obj
9441007 when Array
945- variable_ name , obj , 'object' , description : "Array( #{ obj . size } )" , subtype : 'array'
1008+ propertyDescriptor_ name , obj , 'object' , subtype : 'array'
9461009 when Hash
947- variable_ name , obj , 'object' , description : "Hash( #{ obj . size } )" , subtype : 'map'
1010+ propertyDescriptor_ name , obj , 'object' , subtype : 'map'
9481011 when String
949- variable_ name , obj , 'string' , description : obj
1012+ propertyDescriptor_ name , obj , 'string' , description : obj
9501013 when TrueClass , FalseClass
951- variable_ name , obj , 'boolean'
1014+ propertyDescriptor_ name , obj , 'boolean'
9521015 when Symbol
953- variable_ name , obj , 'symbol'
1016+ propertyDescriptor_ name , obj , 'symbol'
9541017 when Integer , Float
955- variable_ name , obj , 'number'
1018+ propertyDescriptor_ name , obj , 'number'
9561019 when Exception
9571020 bt = nil
9581021 if log = obj . backtrace
9591022 bt = log . map { |e | " #{ e } \n " } . join
9601023 end
961- variable_ name , obj , 'object' , description : "#{ obj . inspect } \n #{ bt } " , subtype : 'error'
1024+ propertyDescriptor_ name , obj , 'object' , description : "#{ obj . inspect } \n #{ bt } " , subtype : 'error'
9621025 else
963- variable_ name , obj , 'object'
1026+ propertyDescriptor_ name , obj , 'object'
9641027 end
9651028 end
9661029 end
0 commit comments