-
Notifications
You must be signed in to change notification settings - Fork 0
/
interface.ts
87 lines (74 loc) · 2.08 KB
/
interface.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
export interface Document {
/*
* The original document, complete, but split into lines. We always save this,
* because if we are going to write this document back out, it's going to be
* by patching this.
*/
original: string
/*
* The document, sliced into lines. Useful because we made it during parse
* anyway, and it can save us a lot of work during edits.
*/
lines: string[]
/*
* Each data hunk. Contains just offset information, and the parsed name
* header. Is in order of hunk appearance.
*/
dataHunks: DocHunk[]
/*
* Data hunks in Map form so we can easily reference them by name.
*/
hunksByName: Map<string, DocHunk>
}
export interface Hunk {
/*
* The hunk name (e.g. whatever comes after `[testmark]:# ` and before any
* more whitespace). Cannot be empty.
*/
name: string
/*
* The code block syntax hint (or more literally: anything that comes after
* the triple-tick that starts the code block). Usually we don't encourage use
* of this much in testmark, but it's here. Can be empty.
*/
blockTag: string
/*
* The full body of the hunk, as bytes.
*/
body: string
}
export interface DocHunk extends Hunk {
/*
* Index into Document.Original where the comment block is found. The code
* block indicator is necessarily is the following line, and the code block
* body one line after that.
* Note that this is zero-indexed. You probably want to +1 before printing to
* a human.
*/
lineStart: number
/*
* Index into Document.Original that contains the closing code block
* indicator.
*/
lineEnd: number
}
export interface DirEnt {
/*
* The name of just this path segment.
* Note that if there's a Hunk in this DirEnt, its name may be different—it
* still has the *full* path name.
*/
name: string
/*
* A hunk, or null.
*/
hunk: Hunk | null
/*
* Children, recursively as a named map, if any exist.
*/
children: Map<string, DirEnt> | null
/*
* Children, recursively as an ordered list, if any exist.
*/
childrenList: DirEnt[] | null
}