Various visualizer improvements, uses registerDebugAdapterTrackerFactory now.

This commit is contained in:
Henning Dieterichs
2020-02-09 18:32:35 +01:00
parent 58ee8e768a
commit 0d9e40b115
26 changed files with 678 additions and 235 deletions

View File

@@ -0,0 +1,72 @@
import {
enableHotReload,
registerUpdateReconciler,
getReloadCount,
hotClass,
} from "@hediet/node-reload";
enableHotReload();
registerUpdateReconciler(module);
import {
registerAll,
CommonDataTypes,
getClosureObj,
} from "@hediet/debug-visualizer-data-extraction";
registerAll();
setTimeout(() => {
new Main().run();
}, 0);
@hotClass(module)
class Main {
run() {
let myValue: DoubleLinkedList | undefined = new DoubleLinkedList("1");
const first = myValue;
myValue.setNext(new DoubleLinkedList("2"));
myValue.next!.setNext(new DoubleLinkedList("3"));
myValue.next!.next!.setNext(new DoubleLinkedList("4"));
const dbgLast = myValue.next!.next!.next!;
let last: DoubleLinkedList | undefined = undefined;
while (myValue) {
myValue.prev = myValue.next;
myValue.next = last;
last = myValue;
myValue = myValue.prev;
}
myValue = first;
}
getDebugVisualization(
items: Record<string, DoubleLinkedList | undefined>
): CommonDataTypes.GraphData {
return getClosureObj(
items,
r =>
[
{ item: r.next!, edgeLabel: "next" },
{ item: r.prev!, edgeLabel: "prev" },
].filter(r => !!r.item),
item => item.name,
item => item.id
);
}
}
let id = 0;
class DoubleLinkedList {
public readonly id = (id++).toString();
constructor(public name: string) {}
next: DoubleLinkedList | undefined;
prev: DoubleLinkedList | undefined;
public setNext(val: DoubleLinkedList): void {
val.prev = this;
this.next = val;
}
}

View File

@@ -10,6 +10,7 @@ enableHotReload();
import {
registerAll,
CommonDataTypes,
getClosure,
} from "@hediet/debug-visualizer-data-extraction";
import { MockLanguageServiceHost } from "./MockLanguageServiceHost";
@@ -17,82 +18,6 @@ registerAll();
registerUpdateReconciler(module);
function getClosure<T>(
root: T,
edgeSelector: (item: T) => { item: T; edgeLabel: string }[],
labelSelector: (item: T) => string
): CommonDataTypes.GraphData {
const r: CommonDataTypes.GraphData = {
kind: {
graph: true,
},
nodes: [],
edges: [],
};
let idCounter = 1;
const ids = new Map<T, string>();
function getId(item: T): string {
let id = ids.get(item);
if (!id) {
id = (idCounter++).toString();
ids.set(item, id);
}
return id;
}
const queue = new Array<T>(root);
const processed = new Set<T>();
while (queue.length > 0) {
const item = queue.shift()!;
if (processed.has(item)) {
continue;
}
processed.add(item);
const edges = edgeSelector(item);
const fromId = getId(item);
r.nodes.push({ id: fromId, label: labelSelector(item) });
for (const e of edges) {
const toId = getId(e.item);
r.edges.push({
from: fromId,
to: toId,
label: e.edgeLabel,
});
if (!processed.has(e.item)) {
queue.push(e.item);
}
}
}
return r;
}
let id = 0;
class DoubleLinkedList {
public readonly id = (id++).toString();
constructor(public name: string) {}
next: DoubleLinkedList | undefined;
prev: DoubleLinkedList | undefined;
public setNext(val: DoubleLinkedList): void {
val.prev = this;
this.next = val;
}
toData(): CommonDataTypes.GraphData {
return getClosure<DoubleLinkedList>(
this,
r =>
[
{ item: r.next!, edgeLabel: "next" },
{ item: r.prev!, edgeLabel: "prev" },
].filter(r => !!r.item),
item => item.name
);
}
}
@hotClass(module)
class Main {
run() {
@@ -149,26 +74,11 @@ class Test1 {
},
};
debugger;
for (const ident of identifiers) {
const s = c.getSymbolAtLocation(ident);
myValue = ident;
}
const first = (myValue = new DoubleLinkedList("1"));
myValue.setNext(new DoubleLinkedList("2"));
myValue.next!.setNext(new DoubleLinkedList("3"));
myValue.next!.next!.setNext(new DoubleLinkedList("4"));
let last: DoubleLinkedList | undefined = undefined;
while (myValue) {
myValue.prev = myValue.next;
myValue.next = last;
last = myValue;
myValue = myValue.prev;
}
myValue = first;
myValue = {
kind: { text: true, svg: true },
text: `