You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.1 KiB
JavaScript
58 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
const blessed = require("blessed");
|
|
const visualizeAST = require("./lib/ast/visualize");
|
|
const esprima = require("esprima");
|
|
const util = require("util");
|
|
const fs = require("fs");
|
|
|
|
const markCode = require("./lib/ast/render/mark-code");
|
|
|
|
let code = fs.readFileSync("./test/1.js").toString();
|
|
let _testdata = esprima.parse(code, {
|
|
range: true,
|
|
loc: true
|
|
});
|
|
|
|
let ast = visualizeAST(_testdata);
|
|
|
|
let screen = blessed.screen({
|
|
smartCSR: true,
|
|
terminal: "xterm-256color",
|
|
fullUnicode: true
|
|
});
|
|
|
|
let list = blessed.list({
|
|
parent: screen,
|
|
selectedBg: "blue",
|
|
mouse: true,
|
|
keys: true,
|
|
width: "50%"
|
|
});
|
|
|
|
list.setItems(ast.getLines());
|
|
list.select(0);
|
|
|
|
list.on("select item", (_, index) => {
|
|
let [start, end] = ast.getItemAtIndex(index).range;
|
|
codeBox.setContent(markCode(code, start, end));
|
|
screen.render();
|
|
});
|
|
|
|
let codeBox = blessed.box({
|
|
parent: screen,
|
|
width: "50%",
|
|
left: "50%",
|
|
border: {
|
|
type: "line",
|
|
fg: "#ffffff"
|
|
},
|
|
content: code
|
|
});
|
|
|
|
screen.key("q", function(ch, key) {
|
|
return process.exit(0);
|
|
});
|
|
|
|
screen.render();
|