Skip to content

Commit 3c8ccd9

Browse files
authored
Merge pull request #90 from DanTup/add-dart-samples
Add a Dart demo script
2 parents 9c70e06 + 8f83a1d commit 3c8ccd9

File tree

4 files changed

+176
-1
lines changed

4 files changed

+176
-1
lines changed

.vscode/launch.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@
7070
},
7171
"outFiles": ["${workspaceFolder}/extension/dist/**/*.js"],
7272
"preLaunchTask": "npm: dev - extension"
73-
}
73+
},
74+
{
75+
"type": "dart",
76+
"request": "launch",
77+
"name": "Run Dart samples",
78+
"program": "demos/dart/demo.dart"
79+
},
7480
]
7581
}

demos/dart/debug_visualizers.dart

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import 'dart:convert';
2+
3+
String graph(List<GraphNode> nodes, List<GraphEdge> edges) {
4+
return jsonEncode({
5+
'kind': {'graph': true},
6+
'nodes': nodes,
7+
'edges': edges,
8+
});
9+
}
10+
11+
String plotly(List<num> values) {
12+
return jsonEncode({
13+
'kind': {'plotly': true},
14+
'data': [
15+
{'y': values}
16+
],
17+
});
18+
}
19+
20+
String tree(TreeNode root) {
21+
return jsonEncode({
22+
'kind': {'tree': true},
23+
'root': root,
24+
});
25+
}
26+
27+
class Graph {
28+
List<GraphNode> nodes;
29+
List<GraphEdge> edges;
30+
}
31+
32+
class GraphEdge {
33+
final String from;
34+
final String to;
35+
final String label;
36+
37+
GraphEdge(this.from, this.to, this.label);
38+
39+
Map<String, dynamic> toJson() => {
40+
'from': from,
41+
'to': to,
42+
'label': label,
43+
};
44+
}
45+
46+
class GraphNode {
47+
final String id;
48+
final String label;
49+
50+
GraphNode(
51+
this.id,
52+
this.label,
53+
);
54+
55+
Map<String, dynamic> toJson() => {
56+
'id': id,
57+
'label': label,
58+
};
59+
}
60+
61+
class TreeNode {
62+
final List<TreeNode> children;
63+
final List<TreeNodeItem> items;
64+
final String segment;
65+
final bool isMarked;
66+
67+
TreeNode(this.children, this.items, this.segment, [this.isMarked = false]);
68+
69+
Map<String, dynamic> toJson() => {
70+
'children': children ?? [],
71+
'items': items,
72+
'segment': segment,
73+
'isMarked': isMarked,
74+
};
75+
}
76+
77+
class TreeNodeItem {
78+
final String text;
79+
80+
TreeNodeItem(this.text);
81+
82+
Map<String, dynamic> toJson() => {
83+
'text': text,
84+
};
85+
}

demos/dart/demo.dart

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import 'dart:collection';
2+
import 'dart:developer';
3+
import 'dart:math';
4+
5+
// ignore: unused_import
6+
import 'debug_visualizers.dart';
7+
8+
final _rnd = Random();
9+
10+
String Function() visualize;
11+
12+
void main() {
13+
debugger();
14+
// Open a Debug Visualizer window and evalute the expression "visualize()"
15+
// and then press Continue to step through the samples.
16+
plotly_demo();
17+
graph_demo();
18+
tree_demo();
19+
}
20+
21+
void plotly_demo() {
22+
final values = <int>[];
23+
visualize = () => plotly(values);
24+
for (var i = 0; i < 20; i++) {
25+
debugger();
26+
values.add(i + _rnd.nextInt(5) - 2);
27+
}
28+
}
29+
30+
void graph_demo() {
31+
graphFromDoubleLinked<T>(
32+
DoubleLinkedQueue<T> values, String Function(T) toString) {
33+
node(T s) => GraphNode(toString(s), toString(s));
34+
edge(DoubleLinkedQueueEntry<T> e) => [
35+
if (e.nextEntry() != null)
36+
GraphEdge(
37+
toString(e.element),
38+
toString(e.nextEntry().element),
39+
"next",
40+
),
41+
if (e.previousEntry() != null)
42+
GraphEdge(
43+
toString(e.element),
44+
toString(e.previousEntry().element),
45+
"prev",
46+
),
47+
];
48+
49+
final nodes = values.map(node).toList();
50+
final edges = <GraphEdge>[];
51+
values.forEachEntry((e) => edges.addAll(edge(e)));
52+
return graph(nodes, edges);
53+
}
54+
55+
final values = DoubleLinkedQueue<String>();
56+
visualize = () => graphFromDoubleLinked(values, (s) => s);
57+
58+
for (var i = 0; i < 10; i++) {
59+
debugger();
60+
values.addLast('Node $i');
61+
}
62+
}
63+
64+
void tree_demo() {
65+
var nodeNum = 1;
66+
TreeNode createNode(int levels) {
67+
final name = 'Node ${nodeNum++}';
68+
final children =
69+
levels > 0 ? List.generate(2, (_) => createNode(levels - 1)) : null;
70+
return TreeNode(children, [TreeNodeItem(name)], name);
71+
}
72+
73+
var levels = 0;
74+
visualize = () {
75+
nodeNum = 1;
76+
return tree(createNode(levels));
77+
};
78+
79+
for (var i = 1; i < 5; i++) {
80+
debugger();
81+
levels = i;
82+
}
83+
}

extension/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Click [here](https://hediet.github.io/visualization/) to explore all available v
1616
See [demos](../demos/) for demos. These languages and debuggers are verified to work with this extension:
1717

1818
- JavaScript/TypeScript/... using `node`/`node2`/`extensionHost`/`chrome`/`pwa-chrome`/`pwa-node` debug adapter: [⭐ Full Support](../demos/js)
19+
- Dart/Flutter using `dart` debug adapter: [✅ Rudimentary Support](../demos/dart)
1920
- Go using `go` (Delve) debug adapter: [✅ Rudimentary Support](../demos/golang)
2021
- Python using `python` debug adapter: [✅ Rudimentary Support](../demos/python)
2122
- C# using `coreclr` debug adapter: [✅ Rudimentary Support](../demos/csharp) (work in progress for Full Support)

0 commit comments

Comments
 (0)