markdownlint 0.20.2 → 0.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CONTRIBUTING.md +50 -47
  2. package/LICENSE +21 -21
  3. package/README.md +915 -871
  4. package/demo/markdownlint-browser.js +4693 -5400
  5. package/doc/CustomRules.md +315 -313
  6. package/doc/Rules.md +1868 -1795
  7. package/helpers/LICENSE +21 -21
  8. package/helpers/README.md +50 -50
  9. package/helpers/helpers.js +690 -671
  10. package/helpers/package.json +18 -18
  11. package/lib/cache.js +24 -24
  12. package/lib/markdownlint.d.ts +365 -352
  13. package/lib/markdownlint.js +1186 -1101
  14. package/lib/md001.js +22 -22
  15. package/lib/md002.js +22 -22
  16. package/lib/md003.js +42 -42
  17. package/lib/md004.js +43 -43
  18. package/lib/md005.js +69 -69
  19. package/lib/md006.js +34 -34
  20. package/lib/md007.js +47 -47
  21. package/lib/md009.js +77 -77
  22. package/lib/md010.js +38 -38
  23. package/lib/md011.js +42 -38
  24. package/lib/md012.js +32 -32
  25. package/lib/md013.js +99 -99
  26. package/lib/md014.js +53 -53
  27. package/lib/md018.js +34 -34
  28. package/lib/md019.js +39 -39
  29. package/lib/md020.js +62 -62
  30. package/lib/md021.js +60 -60
  31. package/lib/md022.js +56 -56
  32. package/lib/md023.js +38 -38
  33. package/lib/md024.js +38 -38
  34. package/lib/md025.js +32 -32
  35. package/lib/md026.js +40 -40
  36. package/lib/md027.js +56 -56
  37. package/lib/md028.js +38 -38
  38. package/lib/md029.js +66 -66
  39. package/lib/md030.js +50 -50
  40. package/lib/md031.js +40 -39
  41. package/lib/md032.js +50 -50
  42. package/lib/md033.js +45 -45
  43. package/lib/md034.js +61 -61
  44. package/lib/md035.js +21 -21
  45. package/lib/md036.js +56 -56
  46. package/lib/md037.js +150 -141
  47. package/lib/md038.js +68 -68
  48. package/lib/md039.js +64 -64
  49. package/lib/md040.js +18 -18
  50. package/lib/md041.js +31 -31
  51. package/lib/md042.js +42 -41
  52. package/lib/md043.js +45 -45
  53. package/lib/md044.js +94 -71
  54. package/lib/md045.js +18 -18
  55. package/lib/md046.js +32 -32
  56. package/lib/md047.js +28 -28
  57. package/lib/md048.js +29 -29
  58. package/lib/rules.js +60 -61
  59. package/package.json +74 -67
  60. package/schema/build-config-schema.js +409 -405
  61. package/schema/markdownlint-config-schema.json +7 -2
  62. package/style/all.json +5 -5
  63. package/style/cirosantilli.json +22 -22
  64. package/style/relaxed.json +13 -13
@@ -1,405 +1,409 @@
1
- // @ts-check
2
-
3
- "use strict";
4
-
5
- const fs = require("fs");
6
- const path = require("path");
7
- const rules = require("../lib/rules");
8
-
9
- // Schema scaffolding
10
- const schema = {
11
- "title": "Markdownlint configuration schema",
12
- "type": "object",
13
- "properties": {
14
- "default": {
15
- "description": "Default state for all rules",
16
- "type": "boolean",
17
- "default": true
18
- },
19
- "extends": {
20
- "description": "Path to configuration file to extend",
21
- "type": "string",
22
- "default": null
23
- },
24
- "$schema": {
25
- "description": "JSON Schema URI (used by some editors)",
26
- "type": "string",
27
- "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint" +
28
- "/master/schema/markdownlint-config-schema.json"
29
- }
30
- },
31
- "additionalProperties": false
32
- };
33
- const tags = {};
34
-
35
- // Add rules
36
- // eslint-disable-next-line complexity
37
- rules.forEach(function forRule(rule) {
38
- rule.tags.forEach(function forTag(tag) {
39
- const tagRules = tags[tag] || [];
40
- tagRules.push(rule.names[0]);
41
- tags[tag] = tagRules;
42
- });
43
- const scheme = {
44
- "description": rule.names.join("/") + " - " + rule.description,
45
- "type": "boolean",
46
- "default": true
47
- };
48
- let custom = true;
49
- switch (rule.names[0]) {
50
- case "MD002":
51
- scheme.properties = {
52
- "level": {
53
- "description": "Heading level",
54
- "type": "integer",
55
- "default": 1
56
- }
57
- };
58
- break;
59
- case "MD003":
60
- scheme.properties = {
61
- "style": {
62
- "description": "Heading style",
63
- "type": "string",
64
- "enum": [
65
- "consistent",
66
- "atx",
67
- "atx_closed",
68
- "setext",
69
- "setext_with_atx",
70
- "setext_with_atx_closed"
71
- ],
72
- "default": "consistent"
73
- }
74
- };
75
- break;
76
- case "MD004":
77
- scheme.properties = {
78
- "style": {
79
- "description": "List style",
80
- "type": "string",
81
- "enum": [
82
- "consistent",
83
- "asterisk",
84
- "plus",
85
- "dash",
86
- "sublist"
87
- ],
88
- "default": "consistent"
89
- }
90
- };
91
- break;
92
- case "MD007":
93
- scheme.properties = {
94
- "indent": {
95
- "description": "Spaces for indent",
96
- "type": "integer",
97
- "default": 2
98
- },
99
- "start_indented": {
100
- "description": "Whether to indent the first level of the list",
101
- "type": "boolean",
102
- "default": false
103
- }
104
- };
105
- break;
106
- case "MD009":
107
- scheme.properties = {
108
- "br_spaces": {
109
- "description": "Spaces for line break",
110
- "type": "integer",
111
- "default": 2
112
- },
113
- "list_item_empty_lines": {
114
- "description": "Allow spaces for empty lines in list items",
115
- "type": "boolean",
116
- "default": false
117
- },
118
- "strict": {
119
- "description": "Include unnecessary breaks",
120
- "type": "boolean",
121
- "default": false
122
- }
123
- };
124
- break;
125
- case "MD010":
126
- scheme.properties = {
127
- "code_blocks": {
128
- "description": "Include code blocks",
129
- "type": "boolean",
130
- "default": true
131
- }
132
- };
133
- break;
134
- case "MD012":
135
- scheme.properties = {
136
- "maximum": {
137
- "description": "Consecutive blank lines",
138
- "type": "integer",
139
- "default": 1
140
- }
141
- };
142
- break;
143
- case "MD013":
144
- scheme.properties = {
145
- "line_length": {
146
- "description": "Number of characters",
147
- "type": "integer",
148
- "default": 80
149
- },
150
- "heading_line_length": {
151
- "description": "Number of characters for headings",
152
- "type": "integer",
153
- "default": 80
154
- },
155
- "code_block_line_length": {
156
- "description": "Number of characters for code blocks",
157
- "type": "integer",
158
- "default": 80
159
- },
160
- "code_blocks": {
161
- "description": "Include code blocks",
162
- "type": "boolean",
163
- "default": true
164
- },
165
- "tables": {
166
- "description": "Include tables",
167
- "type": "boolean",
168
- "default": true
169
- },
170
- "headings": {
171
- "description": "Include headings",
172
- "type": "boolean",
173
- "default": true
174
- },
175
- "headers": {
176
- "description": "Include headings",
177
- "type": "boolean",
178
- "default": true
179
- },
180
- "strict": {
181
- "description": "Strict length checking",
182
- "type": "boolean",
183
- "default": false
184
- },
185
- "stern": {
186
- "description": "Stern length checking",
187
- "type": "boolean",
188
- "default": false
189
- }
190
- };
191
- break;
192
- case "MD022":
193
- scheme.properties = {
194
- "lines_above": {
195
- "description": "Blank lines above heading",
196
- "type": "integer",
197
- "default": 1
198
- },
199
- "lines_below": {
200
- "description": "Blank lines below heading",
201
- "type": "integer",
202
- "default": 1
203
- }
204
- };
205
- break;
206
- case "MD024":
207
- scheme.properties = {
208
- "allow_different_nesting": {
209
- "description": "Only check sibling headings",
210
- "type": "boolean",
211
- "default": false
212
- },
213
- "siblings_only": {
214
- "description": "Only check sibling headings",
215
- "type": "boolean",
216
- "default": false
217
- }
218
- };
219
- break;
220
- case "MD026":
221
- case "MD036":
222
- scheme.properties = {
223
- "punctuation": {
224
- "description": "Punctuation characters",
225
- "type": "string",
226
- "default": ".,;:!?。,;:!?"
227
- }
228
- };
229
- break;
230
- case "MD029":
231
- scheme.properties = {
232
- "style": {
233
- "description": "List style",
234
- "type": "string",
235
- "enum": [
236
- "one",
237
- "ordered",
238
- "one_or_ordered",
239
- "zero"
240
- ],
241
- "default": "one_or_ordered"
242
- }
243
- };
244
- break;
245
- case "MD030":
246
- scheme.properties = {
247
- "ul_single": {
248
- "description": "Spaces for single-line unordered list items",
249
- "type": "integer",
250
- "default": 1
251
- },
252
- "ol_single": {
253
- "description": "Spaces for single-line ordered list items",
254
- "type": "integer",
255
- "default": 1
256
- },
257
- "ul_multi": {
258
- "description": "Spaces for multi-line unordered list items",
259
- "type": "integer",
260
- "default": 1
261
- },
262
- "ol_multi": {
263
- "description": "Spaces for multi-line ordered list items",
264
- "type": "integer",
265
- "default": 1
266
- }
267
- };
268
- break;
269
- case "MD031":
270
- scheme.properties = {
271
- "list_items": {
272
- "description": "Include list items",
273
- "type": "boolean",
274
- "default": true
275
- }
276
- };
277
- break;
278
- case "MD033":
279
- scheme.properties = {
280
- "allowed_elements": {
281
- "description": "Allowed elements",
282
- "type": "array",
283
- "items": {
284
- "type": "string"
285
- },
286
- "default": []
287
- }
288
- };
289
- break;
290
- case "MD035":
291
- scheme.properties = {
292
- "style": {
293
- "description": "Horizontal rule style",
294
- "type": "string",
295
- "default": "consistent"
296
- }
297
- };
298
- break;
299
- case "MD025":
300
- case "MD041":
301
- scheme.properties = {
302
- "level": {
303
- "description": "Heading level",
304
- "type": "integer",
305
- "default": 1
306
- },
307
- "front_matter_title": {
308
- "description": "RegExp for matching title in front matter",
309
- "type": "string",
310
- "default": "^\\s*title\\s*[:=]"
311
- }
312
- };
313
- break;
314
- case "MD043":
315
- scheme.properties = {
316
- "headings": {
317
- "description": "List of headings",
318
- "type": "array",
319
- "items": {
320
- "type": "string"
321
- },
322
- "default": null
323
- },
324
- "headers": {
325
- "description": "List of headings",
326
- "type": "array",
327
- "items": {
328
- "type": "string"
329
- },
330
- "default": null
331
- }
332
- };
333
- break;
334
- case "MD044":
335
- scheme.properties = {
336
- "names": {
337
- "description": "List of proper names",
338
- "type": "array",
339
- "items": {
340
- "type": "string"
341
- },
342
- "default": null
343
- },
344
- "code_blocks": {
345
- "description": "Include code blocks",
346
- "type": "boolean",
347
- "default": true
348
- }
349
- };
350
- break;
351
- case "MD046":
352
- scheme.properties = {
353
- "style": {
354
- "description": "Block style",
355
- "type": "string",
356
- "enum": [
357
- "consistent",
358
- "fenced",
359
- "indented"
360
- ],
361
- "default": "consistent"
362
- }
363
- };
364
- break;
365
- case "MD048":
366
- scheme.properties = {
367
- "style": {
368
- "description": "Code fence syle",
369
- "type": "string",
370
- "enum": [
371
- "consistent",
372
- "backtick",
373
- "tilde"
374
- ],
375
- "default": "consistent"
376
- }
377
- };
378
- break;
379
- default:
380
- custom = false;
381
- break;
382
- }
383
- if (custom) {
384
- // @ts-ignore
385
- scheme.type = [ "boolean", "object" ];
386
- scheme.additionalProperties = false;
387
- }
388
- rule.names.forEach(function forName(name) {
389
- schema.properties[name] = scheme;
390
- });
391
- });
392
-
393
- // Add tags
394
- Object.keys(tags).forEach(function forTag(tag) {
395
- const scheme = {
396
- "description": tag + " - " + tags[tag].join(", "),
397
- "type": "boolean",
398
- "default": true
399
- };
400
- schema.properties[tag] = scheme;
401
- });
402
-
403
- // Write schema
404
- const schemaFile = path.join(__dirname, "markdownlint-config-schema.json");
405
- fs.writeFileSync(schemaFile, JSON.stringify(schema, null, " "));
1
+ // @ts-check
2
+
3
+ "use strict";
4
+
5
+ const fs = require("fs");
6
+ const path = require("path");
7
+ const rules = require("../lib/rules");
8
+
9
+ // Schema scaffolding
10
+ const schema = {
11
+ "title": "Markdownlint configuration schema",
12
+ "type": "object",
13
+ "properties": {
14
+ "default": {
15
+ "description": "Default state for all rules",
16
+ "type": "boolean",
17
+ "default": true
18
+ },
19
+ "extends": {
20
+ "description": "Path to configuration file to extend",
21
+ "type": "string",
22
+ "default": null
23
+ },
24
+ "$schema": {
25
+ "description": "JSON Schema URI (used by some editors)",
26
+ "type": "string",
27
+ "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint" +
28
+ "/main/schema/markdownlint-config-schema.json"
29
+ }
30
+ },
31
+ "additionalProperties": {
32
+ "type:": [
33
+ "boolean",
34
+ "object"
35
+ ]
36
+ }
37
+ };
38
+ const tags = {};
39
+
40
+ // Add rules
41
+ rules.forEach(function forRule(rule) {
42
+ rule.tags.forEach(function forTag(tag) {
43
+ const tagRules = tags[tag] || [];
44
+ tagRules.push(rule.names[0]);
45
+ tags[tag] = tagRules;
46
+ });
47
+ const scheme = {
48
+ "description": rule.names.join("/") + " - " + rule.description,
49
+ "type": "boolean",
50
+ "default": true
51
+ };
52
+ let custom = true;
53
+ switch (rule.names[0]) {
54
+ case "MD002":
55
+ scheme.properties = {
56
+ "level": {
57
+ "description": "Heading level",
58
+ "type": "integer",
59
+ "default": 1
60
+ }
61
+ };
62
+ break;
63
+ case "MD003":
64
+ scheme.properties = {
65
+ "style": {
66
+ "description": "Heading style",
67
+ "type": "string",
68
+ "enum": [
69
+ "consistent",
70
+ "atx",
71
+ "atx_closed",
72
+ "setext",
73
+ "setext_with_atx",
74
+ "setext_with_atx_closed"
75
+ ],
76
+ "default": "consistent"
77
+ }
78
+ };
79
+ break;
80
+ case "MD004":
81
+ scheme.properties = {
82
+ "style": {
83
+ "description": "List style",
84
+ "type": "string",
85
+ "enum": [
86
+ "consistent",
87
+ "asterisk",
88
+ "plus",
89
+ "dash",
90
+ "sublist"
91
+ ],
92
+ "default": "consistent"
93
+ }
94
+ };
95
+ break;
96
+ case "MD007":
97
+ scheme.properties = {
98
+ "indent": {
99
+ "description": "Spaces for indent",
100
+ "type": "integer",
101
+ "default": 2
102
+ },
103
+ "start_indented": {
104
+ "description": "Whether to indent the first level of the list",
105
+ "type": "boolean",
106
+ "default": false
107
+ }
108
+ };
109
+ break;
110
+ case "MD009":
111
+ scheme.properties = {
112
+ "br_spaces": {
113
+ "description": "Spaces for line break",
114
+ "type": "integer",
115
+ "default": 2
116
+ },
117
+ "list_item_empty_lines": {
118
+ "description": "Allow spaces for empty lines in list items",
119
+ "type": "boolean",
120
+ "default": false
121
+ },
122
+ "strict": {
123
+ "description": "Include unnecessary breaks",
124
+ "type": "boolean",
125
+ "default": false
126
+ }
127
+ };
128
+ break;
129
+ case "MD010":
130
+ scheme.properties = {
131
+ "code_blocks": {
132
+ "description": "Include code blocks",
133
+ "type": "boolean",
134
+ "default": true
135
+ }
136
+ };
137
+ break;
138
+ case "MD012":
139
+ scheme.properties = {
140
+ "maximum": {
141
+ "description": "Consecutive blank lines",
142
+ "type": "integer",
143
+ "default": 1
144
+ }
145
+ };
146
+ break;
147
+ case "MD013":
148
+ scheme.properties = {
149
+ "line_length": {
150
+ "description": "Number of characters",
151
+ "type": "integer",
152
+ "default": 80
153
+ },
154
+ "heading_line_length": {
155
+ "description": "Number of characters for headings",
156
+ "type": "integer",
157
+ "default": 80
158
+ },
159
+ "code_block_line_length": {
160
+ "description": "Number of characters for code blocks",
161
+ "type": "integer",
162
+ "default": 80
163
+ },
164
+ "code_blocks": {
165
+ "description": "Include code blocks",
166
+ "type": "boolean",
167
+ "default": true
168
+ },
169
+ "tables": {
170
+ "description": "Include tables",
171
+ "type": "boolean",
172
+ "default": true
173
+ },
174
+ "headings": {
175
+ "description": "Include headings",
176
+ "type": "boolean",
177
+ "default": true
178
+ },
179
+ "headers": {
180
+ "description": "Include headings",
181
+ "type": "boolean",
182
+ "default": true
183
+ },
184
+ "strict": {
185
+ "description": "Strict length checking",
186
+ "type": "boolean",
187
+ "default": false
188
+ },
189
+ "stern": {
190
+ "description": "Stern length checking",
191
+ "type": "boolean",
192
+ "default": false
193
+ }
194
+ };
195
+ break;
196
+ case "MD022":
197
+ scheme.properties = {
198
+ "lines_above": {
199
+ "description": "Blank lines above heading",
200
+ "type": "integer",
201
+ "default": 1
202
+ },
203
+ "lines_below": {
204
+ "description": "Blank lines below heading",
205
+ "type": "integer",
206
+ "default": 1
207
+ }
208
+ };
209
+ break;
210
+ case "MD024":
211
+ scheme.properties = {
212
+ "allow_different_nesting": {
213
+ "description": "Only check sibling headings",
214
+ "type": "boolean",
215
+ "default": false
216
+ },
217
+ "siblings_only": {
218
+ "description": "Only check sibling headings",
219
+ "type": "boolean",
220
+ "default": false
221
+ }
222
+ };
223
+ break;
224
+ case "MD026":
225
+ case "MD036":
226
+ scheme.properties = {
227
+ "punctuation": {
228
+ "description": "Punctuation characters",
229
+ "type": "string",
230
+ "default": ".,;:!?。,;:!?"
231
+ }
232
+ };
233
+ break;
234
+ case "MD029":
235
+ scheme.properties = {
236
+ "style": {
237
+ "description": "List style",
238
+ "type": "string",
239
+ "enum": [
240
+ "one",
241
+ "ordered",
242
+ "one_or_ordered",
243
+ "zero"
244
+ ],
245
+ "default": "one_or_ordered"
246
+ }
247
+ };
248
+ break;
249
+ case "MD030":
250
+ scheme.properties = {
251
+ "ul_single": {
252
+ "description": "Spaces for single-line unordered list items",
253
+ "type": "integer",
254
+ "default": 1
255
+ },
256
+ "ol_single": {
257
+ "description": "Spaces for single-line ordered list items",
258
+ "type": "integer",
259
+ "default": 1
260
+ },
261
+ "ul_multi": {
262
+ "description": "Spaces for multi-line unordered list items",
263
+ "type": "integer",
264
+ "default": 1
265
+ },
266
+ "ol_multi": {
267
+ "description": "Spaces for multi-line ordered list items",
268
+ "type": "integer",
269
+ "default": 1
270
+ }
271
+ };
272
+ break;
273
+ case "MD031":
274
+ scheme.properties = {
275
+ "list_items": {
276
+ "description": "Include list items",
277
+ "type": "boolean",
278
+ "default": true
279
+ }
280
+ };
281
+ break;
282
+ case "MD033":
283
+ scheme.properties = {
284
+ "allowed_elements": {
285
+ "description": "Allowed elements",
286
+ "type": "array",
287
+ "items": {
288
+ "type": "string"
289
+ },
290
+ "default": []
291
+ }
292
+ };
293
+ break;
294
+ case "MD035":
295
+ scheme.properties = {
296
+ "style": {
297
+ "description": "Horizontal rule style",
298
+ "type": "string",
299
+ "default": "consistent"
300
+ }
301
+ };
302
+ break;
303
+ case "MD025":
304
+ case "MD041":
305
+ scheme.properties = {
306
+ "level": {
307
+ "description": "Heading level",
308
+ "type": "integer",
309
+ "default": 1
310
+ },
311
+ "front_matter_title": {
312
+ "description": "RegExp for matching title in front matter",
313
+ "type": "string",
314
+ "default": "^\\s*title\\s*[:=]"
315
+ }
316
+ };
317
+ break;
318
+ case "MD043":
319
+ scheme.properties = {
320
+ "headings": {
321
+ "description": "List of headings",
322
+ "type": "array",
323
+ "items": {
324
+ "type": "string"
325
+ },
326
+ "default": null
327
+ },
328
+ "headers": {
329
+ "description": "List of headings",
330
+ "type": "array",
331
+ "items": {
332
+ "type": "string"
333
+ },
334
+ "default": null
335
+ }
336
+ };
337
+ break;
338
+ case "MD044":
339
+ scheme.properties = {
340
+ "names": {
341
+ "description": "List of proper names",
342
+ "type": "array",
343
+ "items": {
344
+ "type": "string"
345
+ },
346
+ "default": null
347
+ },
348
+ "code_blocks": {
349
+ "description": "Include code blocks",
350
+ "type": "boolean",
351
+ "default": true
352
+ }
353
+ };
354
+ break;
355
+ case "MD046":
356
+ scheme.properties = {
357
+ "style": {
358
+ "description": "Block style",
359
+ "type": "string",
360
+ "enum": [
361
+ "consistent",
362
+ "fenced",
363
+ "indented"
364
+ ],
365
+ "default": "consistent"
366
+ }
367
+ };
368
+ break;
369
+ case "MD048":
370
+ scheme.properties = {
371
+ "style": {
372
+ "description": "Code fence syle",
373
+ "type": "string",
374
+ "enum": [
375
+ "consistent",
376
+ "backtick",
377
+ "tilde"
378
+ ],
379
+ "default": "consistent"
380
+ }
381
+ };
382
+ break;
383
+ default:
384
+ custom = false;
385
+ break;
386
+ }
387
+ if (custom) {
388
+ // @ts-ignore
389
+ scheme.type = [ "boolean", "object" ];
390
+ scheme.additionalProperties = false;
391
+ }
392
+ rule.names.forEach(function forName(name) {
393
+ schema.properties[name] = scheme;
394
+ });
395
+ });
396
+
397
+ // Add tags
398
+ Object.keys(tags).forEach(function forTag(tag) {
399
+ const scheme = {
400
+ "description": tag + " - " + tags[tag].join(", "),
401
+ "type": "boolean",
402
+ "default": true
403
+ };
404
+ schema.properties[tag] = scheme;
405
+ });
406
+
407
+ // Write schema
408
+ const schemaFile = path.join(__dirname, "markdownlint-config-schema.json");
409
+ fs.writeFileSync(schemaFile, JSON.stringify(schema, null, " "));