JShell: result truncation

Jonathan Gibbons jonathan.gibbons at oracle.com
Fri Sep 23 00:18:59 UTC 2016


Robert,

Thanks for the update.  Making the truncation only work on strings seems 
reasonable.  But (given we're dealing with strings) it might still be 
nice to see if there is some whitespace or punctuation near the 
truncation point. Or would that be "too clever for its own good"?

In a very separate context, jtreg uses the algorithm of a max string 
length, and then in the case of a long string, it shows 2/3 of that 
amount from the beginning of the string, and the remaining 1/3 of that 
amount from the end of the string.

-- Jon


On 09/22/2016 04:47 PM, Robert Field wrote:
> [Was: Re: JShell: representation of array values]
>
> John, Jon,
>
> Thanks for the comments.  Some context is needed.  This is the JShell 
> stack (a prettier, more detailed view attached):
>
>    jshell tool
>    -- JShell API --
>    JShell core implementation
>    -- JShell SPI --
>    JShell execution engine
>
> Returned execution values, through both interfaces, and thus in the 
> core implementation and tool are Strings.
> The execution engine is charged with translating returned values into 
> a String representation.  This is where the work to provide a better 
> representation of arrays was done.
> No truncation is done (for any kind of value) at the execution engine 
> level.
>
> Truncation is done only in the tool.   And it is configurable. See 
> /help output below.
>
> I don't want to push configurable truncation through all those 
> layers.  So, we are stuck with truncation being stupid (not in terms 
> of context) in terms of the kind of value it is truncating.
> Truncation is operating on Strings for which it knows nothing of their 
> structure or content.
> They might be a long String, List, or ...
>
> That said, it better for whatever the truncated thing is to have a bit 
> of terminal context.
>
> A String:
>
>        "abcdefg ... xyz"
>
> A List:
>
>        [1, 2, 3, 4, ... 999]
>
> An array:
>
>        boolean[233] { false, false, false, false, f ... se }
>
> So, there could be a length of termination context argument.
>
> -Robert
>
>
> jshell> /help /set truncation
> |  Set the max length a displayed value.
> |
> |       /set truncation <mode> <length> <selector>...
> |
> |  Where <mode> is the name of a previously defined feedback mode -- 
> see '/help /set mode'.
> |  Where <length> is an unsigned integer representing a maximum length.
> |  Where <selector> is only needed if you wish to fine-tune value 
> truncation length
> |  by context, <selector> is the context in which the truncation is 
> applied.
> |  The structure of selector is a hyphen separated list of selector 
> kind lists.
> |  A selector kind list is a comma separated list of values of one 
> selector kind.
> |  A selector matches if each selector kind list matches; A selector 
> kind list
> |  matches if one of the values matches.
> |
> |  Below are the relevant selector kinds for truncation.
> |
> |  The case selector kind describes the kind of snippet.  The values are:
> |       vardecl    -- variable declaration without init
> |       varinit    -- variable declaration with init
> |       expression -- expression -- note: {name}==scratch-variable-name
> |       varvalue   -- variable value expression
> |       assignment -- assign variable
> |       The action selector kind describes what happened to the 
> snippet.  The values are:
> |       added     -- snippet has been added
> |       modified  -- an existing snippet has been modified
> |       replaced  -- an existing snippet has been replaced with a new 
> snippet
> |  Examples:
> |       /set trunc mymode 80
> |       /set truncation mymode 45 expression
> |       /set truncation mymode 0 vardecl-modified,replaced
> |
> |  Note that subsequent selectors for a field may overwrite some or 
> all of previous used selectors -- last one wins
>
>
>
> On 09/22/16 10:42, Jonathan Gibbons wrote:
>> In the long array case, I'd suggest to hide the middle, not the end 
>> of the array.  Show the first "few" entries and the last "few" 
>> entries in the array, for some value of "few".
>>
>> -- Jon
>>
>>
>> On 9/22/16 10:37 AM, John Rose wrote:
>>> On Sep 21, 2016, at 6:16 PM, Robert Field <robert.field at oracle.com> 
>>> wrote:
>>>> Comments???
>>> Another +1 from me.  Some comments from my inner Common Lisper:
>>>
>>> There should be a close brace after the "…" of an overlong array.
>>> This will allow syntax sensitive editors (emacs!) to block the thing 
>>> correctly.
>>>
>>> The cutoff length of the overlong array should be a configurable 
>>> number.
>>>
>>> You might consider a configurable cutoff for printed nesting level.
>>>
>>> These ideas from from this section of the CL manual:
>>>
>>> http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node193.html#LEVELLENGTHTABLE 
>>>
>>>
>>> There is also an option called *print-array* which gates whether 
>>> arrays should be expanded at all.
>>> This is relevant to Java, which also distinguishes Arrays.toString 
>>> from Object.toString.
>>>
>>> — John
>>
>



More information about the kulla-dev mailing list