diff --git a/ide/packages/common/src/BodyInfo.ts b/ide/packages/common/src/BodyInfo.ts index ade3a83..72ddbb6 100644 --- a/ide/packages/common/src/BodyInfo.ts +++ b/ide/packages/common/src/BodyInfo.ts @@ -26,10 +26,6 @@ class BodyInfo { return this.oib.ambiguityErrors.length + this.oib.traitErrors.length; } - get exprs(): ExprIdx[] { - return _.map(this.oib.exprs, (_, idx) => idx); - } - get name() { return this.oib.name; } @@ -49,6 +45,7 @@ class BodyInfo { get tyInterner() { return this.oib.tys; } + notHidden(hash: ObligationIdx): boolean { const o = this.getObligation(hash); if (o === undefined) { @@ -57,8 +54,12 @@ class BodyInfo { return this.showHidden || isHiddenObl(o); } + exprs(): ExprIdx[] { + return _.map(this.oib.exprs, (_, idx) => idx); + } + hasVisibleExprs() { - return _.some(this.exprs, idx => this.hasVisibleObligations(idx)); + return _.some(this.exprs(), idx => this.hasVisibleObligations(idx)); } hasVisibleObligations(idx: ExprIdx) { diff --git a/ide/packages/panoptes/src/File.tsx b/ide/packages/panoptes/src/File.tsx index 38e61b7..1740746 100644 --- a/ide/packages/panoptes/src/File.tsx +++ b/ide/packages/panoptes/src/File.tsx @@ -59,7 +59,7 @@ const ObligationBody = observer(({ bodyInfo }: { bodyInfo: BodyInfo }) => { info={header} startOpen={openChildren} Children={() => - _.map(bodyInfo.exprs, (i, idx) => ) + _.map(bodyInfo.exprs(), (i, idx) => ) } /> diff --git a/ide/packages/panoptes/src/Obligation.css b/ide/packages/panoptes/src/Obligation.css index c47d216..e7a2166 100644 --- a/ide/packages/panoptes/src/Obligation.css +++ b/ide/packages/panoptes/src/Obligation.css @@ -1,3 +1,11 @@ .ObligationCard > vscode-text-area { display: block; } + +.TreeAppObligationWrapper { + background-color: var(--vscode-editor-selectionHighlightBackground); + border-radius: 3px; + padding: 0.15em; + + margin-bottom: 0.5em; +} \ No newline at end of file diff --git a/ide/packages/panoptes/src/Obligation.tsx b/ide/packages/panoptes/src/Obligation.tsx index 3079475..c4295cf 100644 --- a/ide/packages/panoptes/src/Obligation.tsx +++ b/ide/packages/panoptes/src/Obligation.tsx @@ -97,7 +97,9 @@ const ProofTreeWrapper = ({ ) : tree === undefined ? ( ) : ( - +
+ +
); return content; diff --git a/ide/packages/panoptes/src/TreeView/Subsets.tsx b/ide/packages/panoptes/src/TreeView/Subsets.tsx index 0972888..619b2c5 100644 --- a/ide/packages/panoptes/src/TreeView/Subsets.tsx +++ b/ide/packages/panoptes/src/TreeView/Subsets.tsx @@ -50,18 +50,22 @@ export const RenderBottomUpSets = ({ return null; } + const [hovered, setHovered] = useState(false); + const cn = classNames("FailingSet", { "is-hovered": hovered }); + // If there is only a single predicate, no need to provide all the // extra information around "grouped predicate sets". if (views.tree.length === 1) { return ( - +
+ +
); } - const [hovered, setHovered] = useState(false); const onHover = () => { MiniBufferDataStore.set({ kind: "argus-note", @@ -80,7 +84,7 @@ export const RenderBottomUpSets = ({ }; return ( -
+
{_.map(views.tree, (leaf, i) => ( ( - - )); + const argusRecommends = ; + const tail = _.tail(views); + + const otherLabel = "Other failures"; const fallbacks = tail.length === 0 ? null : ( Other failures ...} + info={{otherLabel} ...} Children={() => _.map(tail, (v, i) => )} /> ); return ( - +

+ Argus recommends investigating these failed oblgiations. Click on ’ + {otherLabel}‘ below to see other failed obligations. +

+ {fallbacks}
); diff --git a/ide/packages/panoptes/src/TreeView/TreeApp.tsx b/ide/packages/panoptes/src/TreeView/TreeApp.tsx index 5cb3a84..f12b3e0 100644 --- a/ide/packages/panoptes/src/TreeView/TreeApp.tsx +++ b/ide/packages/panoptes/src/TreeView/TreeApp.tsx @@ -49,8 +49,11 @@ const TreeApp = ({ const tabs: [string, React.FC][] = [["Top Down", TopDown]]; if (treeInfo.errorLeaves().length > 0) { - tabs.unshift(["Help Me", Erotisi]); + // Unshift to place this first tabs.unshift(["Bottom Up", FailedSubsets]); + + // Push to place this last + tabs.push(["Help Me", Erotisi]); } // HACK: we shouldn't test for eval mode here but Playwright is off on the button click. diff --git a/ide/packages/print/src/private/path.tsx b/ide/packages/print/src/private/path.tsx index b1e31d5..347d5ef 100644 --- a/ide/packages/print/src/private/path.tsx +++ b/ide/packages/print/src/private/path.tsx @@ -79,11 +79,11 @@ export const PrintDefPath = ({ o }: { o: DefinedPath }) => { } + Children={() => } /> )} - Rest={() => } + Rest={() => } /> ); }; @@ -192,7 +192,7 @@ const PrintInToggleableEnvironment = ({ bypassToggle, Elem }: { bypassToggle: boolean; Elem: React.FC }) => { - // Use a metric of "type size" rather than inner lenght. + // Use a metric of "type size" rather than inner length. const useToggle = useContext(AllowToggle) && bypassToggle; return ( // TODO: do we want to allow nested toggles?