From c16dff2dd309b3d8451cfa763085c6ff4e434ce6 Mon Sep 17 00:00:00 2001 From: Oliver Gerstl Date: Sun, 5 Jul 2026 18:57:26 +0200 Subject: [PATCH 1/3] refactor: reformat value hover-over of data frame shapes --- src/hover-values.ts | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/src/hover-values.ts b/src/hover-values.ts index ee7709a..f587240 100644 --- a/src/hover-values.ts +++ b/src/hover-values.ts @@ -2,7 +2,7 @@ import * as vscode from 'vscode'; import type { NodeId } from '@eagleoutice/flowr/r-bridge/lang-4.x/ast/model/processing/node-id'; import { getFlowrSession } from './extension'; import { makeSlicingCriteriaForPositions } from './flowr/utils'; -import { Bottom, Top } from '@eagleoutice/flowr/abstract-interpretation/domains/lattice'; +import { Bottom, BottomSymbol, Top, TopSymbol } from '@eagleoutice/flowr/abstract-interpretation/domains/lattice'; import { isTop, stringifyValue } from '@eagleoutice/flowr/dataflow/eval/values/r-value'; import { getConfig, Settings } from './settings'; import { ConfigurableRefresher, RefreshType } from './configurable-refresher'; @@ -116,14 +116,12 @@ class FlowrHoverProvider implements vscode.HoverProvider { if(shape) { values.push({ value: shape, - textRep: `Dataframe Shape: -| | | -|----|----| -| Rows: | ${intLift2Str(shape.rows.value)} | -| Cols: | ${intLift2Str(shape.cols.value)} | - -Known Columns: ${setString(shape.colnames.value)} + textRep: ` +Dataframe Shape: +*Columns*: ${formatSetRange(shape.colnames.value)}\\ +*Cols*: ${shape.cols.toString()}\\ +*Rows*: ${shape.rows.toString()} `.trim(), criteria: criteria }); @@ -135,28 +133,27 @@ Known Columns: ${setString(shape.colnames.value)} } } -function setString(set: { readonly min: ReadonlySet, readonly range: ReadonlySet | typeof Top } | typeof Top | typeof Bottom): string { +function formatSetRange(set: { readonly min: ReadonlySet, readonly range: ReadonlySet | typeof Top } | typeof Top | typeof Bottom): string { if(set === Bottom) { - return '⊥'; + return BottomSymbol; + } else if(set === Top || (set.min.size === 0 && set.range === Top)) { + return TopSymbol; } - if(set === Top) { - return '⊤'; + let txt: string | undefined; + + if(set.min.size === 0) { + txt = '**'; + } else { + txt = `${set.min.values().toArray().map(entry => '`' + entry + '`').join(', ')}`; } - let txt = `${[...set.min].map(f => `\`${f}\``).join(', ')} - `; if(set.range === Top) { - txt += '(Potential: ⊤)'; + txt += ' (Potential: ' + TopSymbol + ')'; } else if(set.range.size > 0) { - txt += '(Potential: ' + [...set.range].map(f => `\`${f}\``).join(', ') + ')'; + txt += ' (Potential: ' + set.range.values().toArray().map(entry => '`' + entry + '`').join(', ') + ')'; } return txt; } -function intLift2Str(val: readonly [number, number] | typeof Bottom): string { - if(val === Bottom) { - return '⊥'; - } - return `[${val[0]}, ${val[1]}]`; -} + function valueToHint(cached: ValueInfo[]): vscode.Hover | undefined { if(cached.length === 0) { return undefined; From b1d3ed5e87d5e1c9c5892c47174b87303b0428d2 Mon Sep 17 00:00:00 2001 From: Oliver Gerstl Date: Sun, 5 Jul 2026 19:12:17 +0200 Subject: [PATCH 2/3] refactor-fix: escape angle brackets --- src/hover-values.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hover-values.ts b/src/hover-values.ts index f587240..37df821 100644 --- a/src/hover-values.ts +++ b/src/hover-values.ts @@ -142,7 +142,7 @@ function formatSetRange(set: { readonly min: ReadonlySet, readonly range let txt: string | undefined; if(set.min.size === 0) { - txt = '**'; + txt = '*\\*'; } else { txt = `${set.min.values().toArray().map(entry => '`' + entry + '`').join(', ')}`; } From f1fbb810fa7eba019841fdc24503184bb8e7971e Mon Sep 17 00:00:00 2001 From: Oliver Gerstl Date: Mon, 6 Jul 2026 06:36:07 +0200 Subject: [PATCH 3/3] test-fix: adapt hover-over test to new format --- src/test/hover-values.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/hover-values.test.ts b/src/test/hover-values.test.ts index 9ab2de9..7460df7 100644 --- a/src/test/hover-values.test.ts +++ b/src/test/hover-values.test.ts @@ -29,13 +29,13 @@ suite('hover values', () => { }); test('shows inferred value for dataframe', async() => { - const df = `Dataframe Shape: -| | | -|----|----| -| Rows: | [3, 3] | -| Cols: | [2, 2] | + const df = ` +Dataframe Shape: -Known Columns: \`id\`, \`label\``; +*Columns*: \`id\`, \`label\`\\ +*Cols*: [2, 2]\\ +*Rows*: [3, 3] + `.trim(); await tc(new vscode.Position(2, 1), df); }); });