@@ -3,13 +3,46 @@ import markdown, {
3
3
MarkdownNode ,
4
4
MarkdownRuleDefinition ,
5
5
MarkdownRuleVisitor ,
6
- ParentNode ,
7
- RootNode ,
8
6
SourceLocation ,
9
- TextNode ,
7
+ SourceRange ,
10
8
type RuleModule ,
11
9
} from "@eslint/markdown" ;
10
+ import { Toml } from "@eslint/markdown/types" ;
12
11
import { ESLint , Linter } from "eslint" ;
12
+ import type {
13
+ // Nodes (abstract)
14
+ Node ,
15
+ Parent ,
16
+ // Nodes
17
+ Blockquote ,
18
+ Break ,
19
+ Code ,
20
+ Definition ,
21
+ Emphasis ,
22
+ Heading ,
23
+ Html ,
24
+ Image ,
25
+ ImageReference ,
26
+ InlineCode ,
27
+ Link ,
28
+ LinkReference ,
29
+ List ,
30
+ ListItem ,
31
+ Paragraph ,
32
+ Root ,
33
+ Strong ,
34
+ Text ,
35
+ ThematicBreak ,
36
+ // Extensions (GFM)
37
+ Delete ,
38
+ FootnoteDefinition ,
39
+ FootnoteReference ,
40
+ Table ,
41
+ TableCell ,
42
+ TableRow ,
43
+ // Extensions (front matter)
44
+ Yaml ,
45
+ } from "mdast" ;
13
46
14
47
markdown satisfies ESLint . Plugin ;
15
48
markdown . meta . name satisfies string ;
@@ -49,37 +82,93 @@ typeof processorPlugins satisfies {};
49
82
( ) : RuleModule => ( {
50
83
create ( { sourceCode } ) : MarkdownRuleVisitor {
51
84
sourceCode satisfies MarkdownSourceCode ;
52
-
53
- sourceCode . ast satisfies RootNode ;
85
+ sourceCode . ast satisfies Root ;
54
86
sourceCode . lines satisfies string [ ] ;
87
+ sourceCode . text satisfies string ;
88
+
89
+ function testVisitor < NodeType extends Node > (
90
+ node : NodeType ,
91
+ parent ?: Parent | undefined ,
92
+ ) {
93
+ sourceCode . getLoc ( node ) satisfies SourceLocation ;
94
+ sourceCode . getRange ( node ) satisfies SourceRange ;
95
+ sourceCode . getParent ( node ) satisfies Node | undefined ;
96
+ // @ts -expect-error It should be fixed in https://github.com/eslint/markdown/issues/341
97
+ sourceCode . getAncestors ( node ) satisfies Node [ ] ;
98
+ sourceCode . getText ( node ) satisfies string ;
99
+ }
55
100
56
101
return {
57
- // Root selector
58
- root ( node ) {
59
- node satisfies RootNode ;
60
- } ,
61
-
62
- // Known node selector, sourceCode methods used in visitor
63
- text ( node ) {
64
- node satisfies TextNode ;
65
- sourceCode . getText ( node ) satisfies string ;
66
- sourceCode . getLoc ( node ) satisfies SourceLocation ;
67
- } ,
68
-
69
- // Known node selector with parent
70
- link ( node , parent ) {
71
- node satisfies MarkdownNode ;
72
- parent satisfies ParentNode | undefined ;
73
- } ,
74
-
75
- // Known node selector with ":exit"
76
- "html:exit" ( node , parent ) {
77
- node satisfies MarkdownNode ;
78
- parent satisfies ParentNode | undefined ;
79
- } ,
102
+ // Nodes
103
+ blockquote : ( ...args ) => testVisitor < Blockquote > ( ...args ) ,
104
+ "blockquote:exit" : ( ...args ) => testVisitor < Blockquote > ( ...args ) ,
105
+ break : ( ...args ) => testVisitor < Break > ( ...args ) ,
106
+ "break:exit" : ( ...args ) => testVisitor < Break > ( ...args ) ,
107
+ code : ( ...args ) => testVisitor < Code > ( ...args ) ,
108
+ "code:exit" : ( ...args ) => testVisitor < Code > ( ...args ) ,
109
+ definition : ( ...args ) => testVisitor < Definition > ( ...args ) ,
110
+ "definition:exit" : ( ...args ) => testVisitor < Definition > ( ...args ) ,
111
+ emphasis : ( ...args ) => testVisitor < Emphasis > ( ...args ) ,
112
+ "emphasis:exit" : ( ...args ) => testVisitor < Emphasis > ( ...args ) ,
113
+ heading : ( ...args ) => testVisitor < Heading > ( ...args ) ,
114
+ "heading:exit" : ( ...args ) => testVisitor < Heading > ( ...args ) ,
115
+ html : ( ...args ) => testVisitor < Html > ( ...args ) ,
116
+ "html:exit" : ( ...args ) => testVisitor < Html > ( ...args ) ,
117
+ image : ( ...args ) => testVisitor < Image > ( ...args ) ,
118
+ "image:exit" : ( ...args ) => testVisitor < Image > ( ...args ) ,
119
+ imageReference : ( ...args ) => testVisitor < ImageReference > ( ...args ) ,
120
+ "imageReference:exit" : ( ...args ) =>
121
+ testVisitor < ImageReference > ( ...args ) ,
122
+ inlineCode : ( ...args ) => testVisitor < InlineCode > ( ...args ) ,
123
+ "inlineCode:exit" : ( ...args ) => testVisitor < InlineCode > ( ...args ) ,
124
+ link : ( ...args ) => testVisitor < Link > ( ...args ) ,
125
+ "link:exit" : ( ...args ) => testVisitor < Link > ( ...args ) ,
126
+ linkReference : ( ...args ) => testVisitor < LinkReference > ( ...args ) ,
127
+ "linkReference:exit" : ( ...args ) =>
128
+ testVisitor < LinkReference > ( ...args ) ,
129
+ list : ( ...args ) => testVisitor < List > ( ...args ) ,
130
+ "list:exit" : ( ...args ) => testVisitor < List > ( ...args ) ,
131
+ listItem : ( ...args ) => testVisitor < ListItem > ( ...args ) ,
132
+ "listItem:exit" : ( ...args ) => testVisitor < ListItem > ( ...args ) ,
133
+ paragraph : ( ...args ) => testVisitor < Paragraph > ( ...args ) ,
134
+ "paragraph:exit" : ( ...args ) => testVisitor < Paragraph > ( ...args ) ,
135
+ root : ( ...args ) => testVisitor < Root > ( ...args ) ,
136
+ "root:exit" : ( ...arg ) => testVisitor < Root > ( ...arg ) ,
137
+ strong : ( ...args ) => testVisitor < Strong > ( ...args ) ,
138
+ "strong:exit" : ( ...args ) => testVisitor < Strong > ( ...args ) ,
139
+ text : ( ...args ) => testVisitor < Text > ( ...args ) ,
140
+ "text:exit" : ( ...args ) => testVisitor < Text > ( ...args ) ,
141
+ thematicBreak : ( ...args ) => testVisitor < ThematicBreak > ( ...args ) ,
142
+ "thematicBreak:exit" : ( ...args ) =>
143
+ testVisitor < ThematicBreak > ( ...args ) ,
144
+
145
+ // Extensions (GFM)
146
+ delete : ( ...args ) => testVisitor < Delete > ( ...args ) ,
147
+ "delete:exit" : ( ...args ) => testVisitor < Delete > ( ...args ) ,
148
+ footnoteDefinition : ( ...args ) =>
149
+ testVisitor < FootnoteDefinition > ( ...args ) ,
150
+ "footnoteDefinition:exit" : ( ...args ) =>
151
+ testVisitor < FootnoteDefinition > ( ...args ) ,
152
+ footnoteReference : ( ...args ) =>
153
+ testVisitor < FootnoteReference > ( ...args ) ,
154
+ "footnoteReference:exit" : ( ...args ) =>
155
+ testVisitor < FootnoteReference > ( ...args ) ,
156
+ table : ( ...args ) => testVisitor < Table > ( ...args ) ,
157
+ "table:exit" : ( ...args ) => testVisitor < Table > ( ...args ) ,
158
+ tableCell : ( ...args ) => testVisitor < TableCell > ( ...args ) ,
159
+ "tableCell:exit" : ( ...args ) => testVisitor < TableCell > ( ...args ) ,
160
+ tableRow : ( ...args ) => testVisitor < TableRow > ( ...args ) ,
161
+ "tableRow:exit" : ( ...args ) => testVisitor < TableRow > ( ...args ) ,
162
+
163
+ // Extensions (front matter)
164
+ yaml : ( ...args ) => testVisitor < Yaml > ( ...args ) ,
165
+ "yaml:exit" : ( ...args ) => testVisitor < Yaml > ( ...args ) ,
166
+ toml : ( ...args ) => testVisitor < Toml > ( ...args ) ,
167
+ "toml:exit" : ( ...args ) => testVisitor < Toml > ( ...args ) ,
80
168
81
169
// Unknown selectors allowed
82
170
"heading[depth=1]" ( node : MarkdownNode , parent ?: ParentNode ) { } ,
171
+ "randomSelector:exit" ( node : MarkdownNode , parent ?: ParentNode ) { } ,
83
172
} ;
84
173
} ,
85
174
} ) ;
0 commit comments