Files
vscode-extension-samples/test-provider-sample/src/parser.ts

30 lines
1.1 KiB
TypeScript
Raw Normal View History

2021-03-19 14:40:19 -07:00
import * as vscode from 'vscode';
const testRe = /^([0-9]+)\s*([+*/-])\s*([0-9]+)\s*=\s*([0-9]+)/;
const headingRe = /^(#+)\s*(.+)$/;
export const parseMarkdown = (text: string, events: {
onTest(range: vscode.Range, a: number, operator: string, b: number, expected: number): void;
onHeading(range: vscode.Range, name: string, depth: number): void;
}) => {
const lines = text.split('\n');
for (let lineNo = 0; lineNo < lines.length; lineNo++) {
const line = lines[lineNo];
const test = testRe.exec(line);
if (test) {
const [, a, operator, b, expected] = test;
const range = new vscode.Range(new vscode.Position(lineNo, 0), new vscode.Position(lineNo, test[0].length));
events.onTest(range, Number(a), operator, Number(b), Number(expected));
continue;
}
const heading = headingRe.exec(line);
if (heading) {
const [, pounds, name] = heading;
const range = new vscode.Range(new vscode.Position(lineNo, 0), new vscode.Position(lineNo, line.length));
2021-04-16 10:10:58 -07:00
events.onHeading(range, name, pounds.length);
2021-03-19 14:40:19 -07:00
}
}
};