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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# micromark-rs
Crate docs are currently at
[`wooorm.com/micromark-rs/micromark/`](https://wooorm.com/micromark-rs/micromark/).
## To do
### Docs
- [ ] (1) Go through all docs
- [ ] (1) Go through all bnf docs
- [ ] (1) Add overview docs on how everything works
- [ ] (1) Add more examples
### Refactor
- [ ] (1) Improve `interrupt`, `concrete`, `lazy` fields somehow?
- [ ] (?) Remove last box: the one around the child tokenizer?
- [ ] (1) Add helper to get byte at, get char before/after, etc.
- [ ] (?) Use smaller things that usizes?
### Test
- [ ] (1) Make sure positional info is perfect
- [ ] (3) Share tests with `micromark-js`
- [ ] (3) Add tests for a zillion attention markers, tons of lists, tons of labels, etc?
### Misc
- [ ] (3) `no_std`?
- [ ] (?) Improve document performance (potential 50%)
- [ ] (?) Improve paragraph performance (potential 15%)
- [ ] (?) Improve label (link, image) performance (potential 7%)
- [ ] (3) Read through rust docs to figure out what useful functions there are,
and fix stuff I’m doing manually now
- [ ] (5) Do some research on rust best practices for APIs, e.g., what to accept,
how to integrate with streams or so?
- [ ] (1) Go through clippy rules, and such, to add strict code styles
- [ ] (3) Write comparison to other parsers
- [ ] (3) Add node/etc bindings?
- [ ] (3) Bunch of docs
- [ ] (5) Site
### Extensions
The main thing here is is to figure out if folks could extend from the outside
with their own code, or if we need to maintain it all here.
Regardless, it is essential for the launch of `micromark-rs` that extensions
are theoretically or practically possible.
The extensions below are listed from top to bottom from more important to less
important.
- [ ] (1) frontmatter (yaml, toml) (flow)
— [`micromark-extension-frontmatter`](https://github.com/micromark/micromark-extension-frontmatter)
- [ ] (3) autolink literal (GFM) (text)
— [`micromark-extension-gfm-autolink-literal`](https://github.com/micromark/micromark-extension-gfm-autolink-literal)
- [ ] (3) footnote (GFM) (flow, text)
— [`micromark-extension-gfm-footnote`](https://github.com/micromark/micromark-extension-gfm-footnote)
- [ ] (3) strikethrough (GFM) (text)
— [`micromark-extension-gfm-strikethrough`](https://github.com/micromark/micromark-extension-gfm-strikethrough)
- [ ] (5) table (GFM) (flow)
— [`micromark-extension-gfm-table`](https://github.com/micromark/micromark-extension-gfm-table)
- [ ] (1) task list item (GFM) (text)
— [`micromark-extension-gfm-task-list-item`](https://github.com/micromark/micromark-extension-gfm-task-list-item)
- [ ] (3) math (flow, text)
— [`micromark-extension-math`](https://github.com/micromark/micromark-extension-math)
- [ ] (8) directive (flow, text)
— [`micromark-extension-directive`](https://github.com/micromark/micromark-extension-directive)
- [ ] (8) expression (MDX) (flow, text)
— [`micromark-extension-mdx-expression`](https://github.com/micromark/micromark-extension-mdx-expression)
- [ ] (5) JSX (MDX) (flow, text)
— [`micromark-extension-mdx-jsx`](https://github.com/micromark/micromark-extension-mdx-jsx)
- [ ] (3) ESM (MDX) (flow)
— [`micromark-extension-mdxjs-esm`](https://github.com/micromark/micromark-extension-mdxjs-esm)
- [ ] (1) tagfilter (GFM) (n/a, renderer)
— [`micromark-extension-gfm-tagfilter`](https://github.com/micromark/micromark-extension-gfm-tagfilter)
#### After
- [ ] (8) After all extensions, including MDX, are done, see if we can integrate
this with SWC to compile MDX
## Scripts
Run examples:
```sh
RUST_BACKTRACE=1 RUST_LOG=debug cargo run --example lib
```
Format:
```sh
cargo fmt --all
```
Lint:
```sh
cargo fmt --all -- --check && cargo clippy -- -W clippy::pedantic
```
Tests:
```sh
RUST_BACKTRACE=1 cargo test
```
Docs:
```sh
cargo doc --document-private-items
```
(add `--open` to open them in a browser)
|