eslint-plugin-markdown-preferences 0.34.2 → 0.36.0
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.
- package/lib/index.d.ts +7 -4
- package/lib/index.js +910 -688
- package/package.json +5 -4
package/lib/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import { __export } from "./chunk-CTAAG5j7.js";
|
|
|
2
2
|
import stringWidth from "string-width";
|
|
3
3
|
import emojiRegex from "emoji-regex-xs";
|
|
4
4
|
import path from "node:path";
|
|
5
|
+
import diffSequence from "diff-sequences";
|
|
5
6
|
import markdown from "@eslint/markdown";
|
|
6
7
|
import { fromMarkdown } from "mdast-util-from-markdown";
|
|
7
8
|
import { frontmatterFromMarkdown } from "mdast-util-frontmatter";
|
|
@@ -39,6 +40,7 @@ function createRule(ruleName, rule) {
|
|
|
39
40
|
|
|
40
41
|
//#endregion
|
|
41
42
|
//#region src/utils/ast.ts
|
|
43
|
+
const RE_HTML_COMMENT = /<!--(.*?)-->/u;
|
|
42
44
|
/**
|
|
43
45
|
* Get the parent of a node.
|
|
44
46
|
*/
|
|
@@ -136,41 +138,17 @@ function getThematicBreakMarker(sourceCode, node) {
|
|
|
136
138
|
};
|
|
137
139
|
}
|
|
138
140
|
/**
|
|
139
|
-
*
|
|
141
|
+
* Check whether a node is an HTML comment.
|
|
140
142
|
*/
|
|
141
|
-
function
|
|
142
|
-
|
|
143
|
-
const loc = sourceCode.getLoc(node);
|
|
144
|
-
if (nodeRange[1] <= range[0]) return getSourceLocationFromRangeAndSourcePosition(sourceCode, nodeRange[1], loc.end, range);
|
|
145
|
-
return getSourceLocationFromRangeAndSourcePosition(sourceCode, nodeRange[0], loc.start, range);
|
|
143
|
+
function isHTMLComment(node) {
|
|
144
|
+
return node.type === "html" && RE_HTML_COMMENT.test(node.value);
|
|
146
145
|
}
|
|
147
146
|
/**
|
|
148
|
-
* Get the
|
|
147
|
+
* Get the value of an HTML comment.
|
|
149
148
|
*/
|
|
150
|
-
function
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
const beforeLines = sourceCode.text.slice(startIndex, range[0]).split(/\n/u);
|
|
154
|
-
startLine = startLoc.line + beforeLines.length - 1;
|
|
155
|
-
startColumn = (beforeLines.length === 1 ? startLoc.column : 1) + (beforeLines.at(-1) || "").length;
|
|
156
|
-
} else {
|
|
157
|
-
const beforeLines = sourceCode.text.slice(0, range[0]).split(/\n/u);
|
|
158
|
-
startLine = beforeLines.length;
|
|
159
|
-
startColumn = 1 + (beforeLines.at(-1) || "").length;
|
|
160
|
-
}
|
|
161
|
-
const contentLines = sourceCode.text.slice(range[0], range[1]).split(/\n/u);
|
|
162
|
-
const endLine = startLine + contentLines.length - 1;
|
|
163
|
-
const endColumn = (contentLines.length === 1 ? startColumn : 1) + (contentLines.at(-1) || "").length;
|
|
164
|
-
return {
|
|
165
|
-
start: {
|
|
166
|
-
line: startLine,
|
|
167
|
-
column: startColumn
|
|
168
|
-
},
|
|
169
|
-
end: {
|
|
170
|
-
line: endLine,
|
|
171
|
-
column: endColumn
|
|
172
|
-
}
|
|
173
|
-
};
|
|
149
|
+
function getHTMLCommentValue(node) {
|
|
150
|
+
if (!isHTMLComment(node)) return null;
|
|
151
|
+
return RE_HTML_COMMENT.exec(node.value)?.[1] ?? null;
|
|
174
152
|
}
|
|
175
153
|
|
|
176
154
|
//#endregion
|
|
@@ -207,52 +185,28 @@ function isAsciiControlCharacter(char) {
|
|
|
207
185
|
*/
|
|
208
186
|
function parseATXHeading(sourceCode, node) {
|
|
209
187
|
if (getHeadingKind(sourceCode, node) !== "atx") return null;
|
|
210
|
-
const loc = sourceCode.getLoc(node);
|
|
211
188
|
const range = sourceCode.getRange(node);
|
|
212
189
|
const text = sourceCode.text.slice(...range);
|
|
213
190
|
const parsedOpening = parseATXHeadingOpeningSequenceFromText(text);
|
|
214
191
|
if (parsedOpening === null) return null;
|
|
215
192
|
const openingSequence = {
|
|
216
193
|
text: parsedOpening.openingSequence,
|
|
217
|
-
range: [range[0], range[0] + parsedOpening.openingSequence.length]
|
|
218
|
-
loc: {
|
|
219
|
-
start: loc.start,
|
|
220
|
-
end: {
|
|
221
|
-
line: loc.start.line,
|
|
222
|
-
column: loc.start.column + parsedOpening.openingSequence.length
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
};
|
|
226
|
-
const contentLocStart = {
|
|
227
|
-
line: openingSequence.loc.end.line,
|
|
228
|
-
column: openingSequence.loc.end.column + parsedOpening.after.length
|
|
194
|
+
range: [range[0], range[0] + parsedOpening.openingSequence.length]
|
|
229
195
|
};
|
|
230
196
|
const parsedClosing = parseATXHeadingClosingSequenceFromText(text);
|
|
231
197
|
if (parsedClosing == null) {
|
|
232
198
|
const textAfterOpening = sourceCode.text.slice(openingSequence.range[1] + parsedOpening.after.length, range[1]);
|
|
233
|
-
const contentText
|
|
234
|
-
const contentRange$1 = [openingSequence.range[1] + parsedOpening.after.length, openingSequence.range[1] + parsedOpening.after.length + contentText
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
};
|
|
239
|
-
const after = contentText$1 === textAfterOpening ? null : {
|
|
240
|
-
text: textAfterOpening.slice(contentText$1.length),
|
|
241
|
-
range: [contentRange$1[1], range[1]],
|
|
242
|
-
loc: {
|
|
243
|
-
start: contentLocEnd,
|
|
244
|
-
end: loc.end
|
|
245
|
-
}
|
|
199
|
+
const contentText = textAfterOpening.trimEnd();
|
|
200
|
+
const contentRange$1 = [openingSequence.range[1] + parsedOpening.after.length, openingSequence.range[1] + parsedOpening.after.length + contentText.length];
|
|
201
|
+
const after = contentText === textAfterOpening ? null : {
|
|
202
|
+
text: textAfterOpening.slice(contentText.length),
|
|
203
|
+
range: [contentRange$1[1], range[1]]
|
|
246
204
|
};
|
|
247
205
|
return {
|
|
248
206
|
openingSequence,
|
|
249
207
|
content: {
|
|
250
|
-
text: contentText
|
|
251
|
-
range: contentRange$1
|
|
252
|
-
loc: {
|
|
253
|
-
start: contentLocStart,
|
|
254
|
-
end: contentLocEnd
|
|
255
|
-
}
|
|
208
|
+
text: contentText,
|
|
209
|
+
range: contentRange$1
|
|
256
210
|
},
|
|
257
211
|
closingSequence: null,
|
|
258
212
|
after
|
|
@@ -260,40 +214,18 @@ function parseATXHeading(sourceCode, node) {
|
|
|
260
214
|
}
|
|
261
215
|
const spaceAfterClosing = {
|
|
262
216
|
text: parsedClosing.after,
|
|
263
|
-
range: [range[1] - parsedClosing.after.length, range[1]]
|
|
264
|
-
loc: {
|
|
265
|
-
start: {
|
|
266
|
-
line: loc.end.line,
|
|
267
|
-
column: loc.end.column - parsedClosing.after.length
|
|
268
|
-
},
|
|
269
|
-
end: loc.end
|
|
270
|
-
}
|
|
217
|
+
range: [range[1] - parsedClosing.after.length, range[1]]
|
|
271
218
|
};
|
|
272
219
|
const closingSequence = {
|
|
273
220
|
text: parsedClosing.closingSequence,
|
|
274
|
-
range: [spaceAfterClosing.range[0] - parsedClosing.closingSequence.length, spaceAfterClosing.range[0]]
|
|
275
|
-
loc: {
|
|
276
|
-
start: {
|
|
277
|
-
line: spaceAfterClosing.loc.start.line,
|
|
278
|
-
column: spaceAfterClosing.loc.start.column - parsedClosing.closingSequence.length
|
|
279
|
-
},
|
|
280
|
-
end: spaceAfterClosing.loc.start
|
|
281
|
-
}
|
|
221
|
+
range: [spaceAfterClosing.range[0] - parsedClosing.closingSequence.length, spaceAfterClosing.range[0]]
|
|
282
222
|
};
|
|
283
223
|
const contentRange = [openingSequence.range[1] + parsedOpening.after.length, closingSequence.range[0] - parsedClosing.before.length];
|
|
284
|
-
const contentText = sourceCode.text.slice(...contentRange);
|
|
285
224
|
return {
|
|
286
225
|
openingSequence,
|
|
287
226
|
content: {
|
|
288
|
-
text:
|
|
289
|
-
range: contentRange
|
|
290
|
-
loc: {
|
|
291
|
-
start: contentLocStart,
|
|
292
|
-
end: {
|
|
293
|
-
line: closingSequence.loc.start.line,
|
|
294
|
-
column: closingSequence.loc.start.column - parsedClosing.before.length
|
|
295
|
-
}
|
|
296
|
-
}
|
|
227
|
+
text: sourceCode.text.slice(...contentRange),
|
|
228
|
+
range: contentRange
|
|
297
229
|
},
|
|
298
230
|
closingSequence,
|
|
299
231
|
after: spaceAfterClosing.range[0] < spaceAfterClosing.range[1] ? spaceAfterClosing : null
|
|
@@ -348,58 +280,6 @@ function parseATXHeadingClosingSequenceFromText(text) {
|
|
|
348
280
|
}
|
|
349
281
|
}
|
|
350
282
|
|
|
351
|
-
//#endregion
|
|
352
|
-
//#region src/utils/lines.ts
|
|
353
|
-
const cache$1 = /* @__PURE__ */ new WeakMap();
|
|
354
|
-
var ParsedLines = class {
|
|
355
|
-
lines;
|
|
356
|
-
constructor(codeText) {
|
|
357
|
-
let offset = 0;
|
|
358
|
-
this.lines = codeText.split(/(?<=\n)/u).map((lineText, index) => {
|
|
359
|
-
const start = offset;
|
|
360
|
-
offset += lineText.length;
|
|
361
|
-
const range = [start, offset];
|
|
362
|
-
let text = lineText;
|
|
363
|
-
let linebreak = "";
|
|
364
|
-
if (text.at(-1) === "\n") {
|
|
365
|
-
text = text.slice(0, -1);
|
|
366
|
-
linebreak = "\n";
|
|
367
|
-
}
|
|
368
|
-
if (text.at(-1) === "\r") {
|
|
369
|
-
text = text.slice(0, -1);
|
|
370
|
-
linebreak = `\r${linebreak}`;
|
|
371
|
-
}
|
|
372
|
-
return {
|
|
373
|
-
text,
|
|
374
|
-
range,
|
|
375
|
-
line: index + 1,
|
|
376
|
-
linebreak
|
|
377
|
-
};
|
|
378
|
-
});
|
|
379
|
-
}
|
|
380
|
-
[Symbol.iterator]() {
|
|
381
|
-
return this.lines[Symbol.iterator]();
|
|
382
|
-
}
|
|
383
|
-
get length() {
|
|
384
|
-
return this.lines.length;
|
|
385
|
-
}
|
|
386
|
-
get(lineNumber) {
|
|
387
|
-
return this.lines[lineNumber - 1];
|
|
388
|
-
}
|
|
389
|
-
};
|
|
390
|
-
/**
|
|
391
|
-
* Parse the lines of the source code.
|
|
392
|
-
* @param sourceCode source code to parse
|
|
393
|
-
* @returns parsed lines
|
|
394
|
-
*/
|
|
395
|
-
function getParsedLines(sourceCode) {
|
|
396
|
-
const cached = cache$1.get(sourceCode);
|
|
397
|
-
if (cached) return cached;
|
|
398
|
-
const parsedLines = new ParsedLines(sourceCode.text);
|
|
399
|
-
cache$1.set(sourceCode, parsedLines);
|
|
400
|
-
return parsedLines;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
283
|
//#endregion
|
|
404
284
|
//#region src/utils/text-width.ts
|
|
405
285
|
let segmenter;
|
|
@@ -465,7 +345,10 @@ var atx_heading_closing_sequence_length_default = createRule("atx-heading-closin
|
|
|
465
345
|
if (expectedLength === actualLength) return;
|
|
466
346
|
context.report({
|
|
467
347
|
node: reportNode,
|
|
468
|
-
loc:
|
|
348
|
+
loc: {
|
|
349
|
+
start: sourceCode.getLocFromIndex(parsed.closingSequence.range[0]),
|
|
350
|
+
end: sourceCode.getLocFromIndex(parsed.closingSequence.range[1])
|
|
351
|
+
},
|
|
469
352
|
messageId: "wrongClosingLength",
|
|
470
353
|
data: {
|
|
471
354
|
expected: String(expectedLength),
|
|
@@ -545,17 +428,23 @@ var atx_heading_closing_sequence_length_default = createRule("atx-heading-closin
|
|
|
545
428
|
* Get the content length of the heading.
|
|
546
429
|
*/
|
|
547
430
|
function getContentLength(parsed) {
|
|
548
|
-
const
|
|
549
|
-
const
|
|
550
|
-
|
|
431
|
+
const closingSequenceStartLine = sourceCode.getLocFromIndex(parsed.closingSequence.range[0]).line;
|
|
432
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
433
|
+
line: closingSequenceStartLine,
|
|
434
|
+
column: 1
|
|
435
|
+
});
|
|
436
|
+
return getTextWidth(sourceCode.text.slice(lineStartIndex, parsed.closingSequence.range[0]));
|
|
551
437
|
}
|
|
552
438
|
/**
|
|
553
439
|
* Get the line length of the heading.
|
|
554
440
|
*/
|
|
555
441
|
function getLineLength(parsed) {
|
|
556
|
-
const
|
|
557
|
-
const
|
|
558
|
-
|
|
442
|
+
const closingSequenceStartLine = sourceCode.getLocFromIndex(parsed.closingSequence.range[0]).line;
|
|
443
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
444
|
+
line: closingSequenceStartLine,
|
|
445
|
+
column: 1
|
|
446
|
+
});
|
|
447
|
+
return getTextWidth(sourceCode.text.slice(lineStartIndex, parsed.closingSequence.range[1]));
|
|
559
448
|
}
|
|
560
449
|
}
|
|
561
450
|
});
|
|
@@ -607,14 +496,13 @@ var atx_heading_closing_sequence_default = createRule("atx-heading-closing-seque
|
|
|
607
496
|
context.report({
|
|
608
497
|
node,
|
|
609
498
|
loc: {
|
|
610
|
-
start: parsed.content.
|
|
611
|
-
end: parsed.closingSequence.
|
|
499
|
+
start: sourceCode.getLocFromIndex(parsed.content.range[1]),
|
|
500
|
+
end: sourceCode.getLocFromIndex(parsed.closingSequence.range[1])
|
|
612
501
|
},
|
|
613
502
|
messageId: "forbidClosing",
|
|
614
503
|
*fix(fixer) {
|
|
615
504
|
const removeRange = [parsed.content.range[1], parsed.closingSequence.range[1]];
|
|
616
|
-
const
|
|
617
|
-
const newHeadingParsed = parseATXHeadingClosingSequenceFromText(newHeadingText);
|
|
505
|
+
const newHeadingParsed = parseATXHeadingClosingSequenceFromText(sourceCode.text.slice(sourceCode.getRange(node)[0], removeRange[0]));
|
|
618
506
|
if (newHeadingParsed) {
|
|
619
507
|
const escapeIndex = removeRange[0] - newHeadingParsed.after.length - 1;
|
|
620
508
|
yield fixer.insertTextBeforeRange([escapeIndex, escapeIndex], "\\");
|
|
@@ -786,19 +674,28 @@ var blockquote_marker_alignment_default = createRule("blockquote-marker-alignmen
|
|
|
786
674
|
loc: marker.loc,
|
|
787
675
|
messageId: "inconsistentAlignment",
|
|
788
676
|
fix(fixer) {
|
|
789
|
-
const line = getParsedLines(sourceCode).get(lineNumber);
|
|
790
677
|
if (indentWidth < baseIndentWidth) {
|
|
791
678
|
const addSpaces = " ".repeat(baseIndentWidth - indentWidth);
|
|
792
|
-
|
|
679
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
680
|
+
line: lineNumber,
|
|
681
|
+
column: 1
|
|
682
|
+
});
|
|
683
|
+
return fixer.insertTextBeforeRange([lineStartIndex + marker.loc.start.column - 1, lineStartIndex + marker.loc.start.column - 1], addSpaces);
|
|
793
684
|
}
|
|
794
|
-
let newBeforeMarker =
|
|
685
|
+
let newBeforeMarker = sourceCode.lines[lineNumber - 1].slice(0, marker.loc.start.column - 1);
|
|
795
686
|
while (getWidth(newBeforeMarker) > baseIndentWidth) {
|
|
796
687
|
const last = newBeforeMarker.at(-1);
|
|
797
688
|
if (last && isWhitespace(last)) newBeforeMarker = newBeforeMarker.slice(0, -1);
|
|
798
689
|
else return null;
|
|
799
690
|
}
|
|
800
691
|
if (getWidth(newBeforeMarker) < baseIndentWidth) newBeforeMarker += " ".repeat(baseIndentWidth - getWidth(newBeforeMarker));
|
|
801
|
-
if (!baseBeforeMarker.includes(">") || baseBeforeMarker === newBeforeMarker)
|
|
692
|
+
if (!baseBeforeMarker.includes(">") || baseBeforeMarker === newBeforeMarker) {
|
|
693
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
694
|
+
line: lineNumber,
|
|
695
|
+
column: 1
|
|
696
|
+
});
|
|
697
|
+
return fixer.replaceTextRange([lineStartIndex, lineStartIndex + marker.loc.start.column - 1], newBeforeMarker);
|
|
698
|
+
}
|
|
802
699
|
return null;
|
|
803
700
|
}
|
|
804
701
|
});
|
|
@@ -1004,23 +901,19 @@ function parseFencedCodeBlock(sourceCode, node) {
|
|
|
1004
901
|
const trimmedAfterLanguage = afterLanguage.trimStart();
|
|
1005
902
|
const spaceAfterLanguageLength = afterLanguage.length - trimmedAfterLanguage.length;
|
|
1006
903
|
const metaText = trimmedAfterLanguage.trimEnd();
|
|
1007
|
-
const openingFenceRange = [range[0], range[0] + fenceText.length];
|
|
1008
904
|
const openingFence = {
|
|
1009
905
|
text: fenceText,
|
|
1010
|
-
range:
|
|
1011
|
-
loc: getSourceLocationFromRange(sourceCode, node, openingFenceRange)
|
|
906
|
+
range: [range[0], range[0] + fenceText.length]
|
|
1012
907
|
};
|
|
1013
908
|
const languageRange = languageText ? [openingFence.range[1] + spaceAfterOpeningFenceLength, openingFence.range[1] + spaceAfterOpeningFenceLength + languageText.length] : null;
|
|
1014
909
|
const language$2 = languageText && languageRange ? {
|
|
1015
910
|
text: languageText,
|
|
1016
|
-
range: languageRange
|
|
1017
|
-
loc: getSourceLocationFromRange(sourceCode, node, languageRange)
|
|
911
|
+
range: languageRange
|
|
1018
912
|
} : null;
|
|
1019
913
|
const metaRange = language$2 && metaText ? [language$2.range[1] + spaceAfterLanguageLength, language$2.range[1] + spaceAfterLanguageLength + metaText.length] : null;
|
|
1020
914
|
const meta = language$2 && metaText && metaRange ? {
|
|
1021
915
|
text: metaText,
|
|
1022
|
-
range: metaRange
|
|
1023
|
-
loc: getSourceLocationFromRange(sourceCode, node, metaRange)
|
|
916
|
+
range: metaRange
|
|
1024
917
|
} : null;
|
|
1025
918
|
const fenceChar = fenceText[0];
|
|
1026
919
|
let closingFenceText = "";
|
|
@@ -1053,17 +946,7 @@ function parseFencedCodeBlock(sourceCode, node) {
|
|
|
1053
946
|
meta,
|
|
1054
947
|
closingFence: {
|
|
1055
948
|
text: closingFenceText,
|
|
1056
|
-
range: [range[1] - trailingSpacesLength - closingFenceText.length, range[1] - trailingSpacesLength]
|
|
1057
|
-
loc: {
|
|
1058
|
-
start: {
|
|
1059
|
-
line: loc.end.line,
|
|
1060
|
-
column: loc.end.column - trailingSpacesLength - closingFenceText.length
|
|
1061
|
-
},
|
|
1062
|
-
end: {
|
|
1063
|
-
line: loc.end.line,
|
|
1064
|
-
column: loc.end.column - trailingSpacesLength
|
|
1065
|
-
}
|
|
1066
|
-
}
|
|
949
|
+
range: [range[1] - trailingSpacesLength - closingFenceText.length, range[1] - trailingSpacesLength]
|
|
1067
950
|
}
|
|
1068
951
|
};
|
|
1069
952
|
}
|
|
@@ -1126,7 +1009,10 @@ var canonical_code_block_language_default = createRule("canonical-code-block-lan
|
|
|
1126
1009
|
if (!parsed || !parsed.language) return;
|
|
1127
1010
|
context.report({
|
|
1128
1011
|
node,
|
|
1129
|
-
loc:
|
|
1012
|
+
loc: {
|
|
1013
|
+
start: sourceCode.getLocFromIndex(parsed.language.range[0]),
|
|
1014
|
+
end: sourceCode.getLocFromIndex(parsed.language.range[1])
|
|
1015
|
+
},
|
|
1130
1016
|
messageId: "useCanonical",
|
|
1131
1017
|
data: {
|
|
1132
1018
|
canonical,
|
|
@@ -1210,7 +1096,10 @@ var code_fence_length_default = createRule("code-fence-length", {
|
|
|
1210
1096
|
const expectedFence = getExpectedFence(parsed, length);
|
|
1211
1097
|
context.report({
|
|
1212
1098
|
node,
|
|
1213
|
-
loc:
|
|
1099
|
+
loc: {
|
|
1100
|
+
start: sourceCode.getLocFromIndex(parsed.openingFence.range[0]),
|
|
1101
|
+
end: sourceCode.getLocFromIndex(parsed.openingFence.range[1])
|
|
1102
|
+
},
|
|
1214
1103
|
data: {
|
|
1215
1104
|
expected: expectedFence,
|
|
1216
1105
|
actual: parsed.openingFence.text
|
|
@@ -1261,7 +1150,10 @@ var code_fence_length_default = createRule("code-fence-length", {
|
|
|
1261
1150
|
if (!closingFence || openingFence.text.length === closingFence.text.length) return true;
|
|
1262
1151
|
context.report({
|
|
1263
1152
|
node,
|
|
1264
|
-
loc:
|
|
1153
|
+
loc: {
|
|
1154
|
+
start: sourceCode.getLocFromIndex(closingFence.range[0]),
|
|
1155
|
+
end: sourceCode.getLocFromIndex(closingFence.range[1])
|
|
1156
|
+
},
|
|
1265
1157
|
messageId: "notMatch",
|
|
1266
1158
|
fix(fixer) {
|
|
1267
1159
|
return [fixer.replaceTextRange(closingFence.range, openingFence.text)];
|
|
@@ -1313,7 +1205,10 @@ var code_fence_spacing_default = createRule("code-fence-spacing", {
|
|
|
1313
1205
|
if (hasSpace) return;
|
|
1314
1206
|
context.report({
|
|
1315
1207
|
node,
|
|
1316
|
-
loc:
|
|
1208
|
+
loc: {
|
|
1209
|
+
start: sourceCode.getLocFromIndex(language$2.range[0]),
|
|
1210
|
+
end: sourceCode.getLocFromIndex(language$2.range[1])
|
|
1211
|
+
},
|
|
1317
1212
|
messageId: "expectedSpace",
|
|
1318
1213
|
fix(fixer) {
|
|
1319
1214
|
return fixer.insertTextAfterRange(openingFence.range, " ");
|
|
@@ -1323,7 +1218,10 @@ var code_fence_spacing_default = createRule("code-fence-spacing", {
|
|
|
1323
1218
|
if (!hasSpace) return;
|
|
1324
1219
|
context.report({
|
|
1325
1220
|
node,
|
|
1326
|
-
loc:
|
|
1221
|
+
loc: {
|
|
1222
|
+
start: sourceCode.getLocFromIndex(openingFence.range[1]),
|
|
1223
|
+
end: sourceCode.getLocFromIndex(language$2.range[0])
|
|
1224
|
+
},
|
|
1327
1225
|
messageId: "unexpectedSpace",
|
|
1328
1226
|
fix(fixer) {
|
|
1329
1227
|
return fixer.removeRange([openingFence.range[1], language$2.range[0]]);
|
|
@@ -1367,7 +1265,10 @@ var code_fence_style_default = createRule("code-fence-style", {
|
|
|
1367
1265
|
if (node.value.includes(expectedOpeningFence)) return;
|
|
1368
1266
|
context.report({
|
|
1369
1267
|
node,
|
|
1370
|
-
loc:
|
|
1268
|
+
loc: {
|
|
1269
|
+
start: sourceCode.getLocFromIndex(parsed.openingFence.range[0]),
|
|
1270
|
+
end: sourceCode.getLocFromIndex(parsed.openingFence.range[1])
|
|
1271
|
+
},
|
|
1371
1272
|
data: {
|
|
1372
1273
|
expected: expectedOpeningFence,
|
|
1373
1274
|
actual: parsed.openingFence.text
|
|
@@ -1400,17 +1301,13 @@ function parseCustomContainer(sourceCode, node) {
|
|
|
1400
1301
|
const spaceAfterOpeningSequenceLength = afterOpeningSequence.length - trimmedAfterOpeningSequence.length;
|
|
1401
1302
|
const infoText = trimmedAfterOpeningSequence.trimEnd();
|
|
1402
1303
|
if (!infoText) return null;
|
|
1403
|
-
const openingSequenceRange = [range[0], range[0] + sequenceText.length];
|
|
1404
1304
|
const openingSequence = {
|
|
1405
1305
|
text: sequenceText,
|
|
1406
|
-
range:
|
|
1407
|
-
loc: getSourceLocationFromRange(sourceCode, node, openingSequenceRange)
|
|
1306
|
+
range: [range[0], range[0] + sequenceText.length]
|
|
1408
1307
|
};
|
|
1409
|
-
const infoRange = [openingSequence.range[1] + spaceAfterOpeningSequenceLength, openingSequence.range[1] + spaceAfterOpeningSequenceLength + infoText.length];
|
|
1410
1308
|
const info = {
|
|
1411
1309
|
text: infoText,
|
|
1412
|
-
range:
|
|
1413
|
-
loc: getSourceLocationFromRange(sourceCode, node, infoRange)
|
|
1310
|
+
range: [openingSequence.range[1] + spaceAfterOpeningSequenceLength, openingSequence.range[1] + spaceAfterOpeningSequenceLength + infoText.length]
|
|
1414
1311
|
};
|
|
1415
1312
|
const sequenceChar = sequenceText[0];
|
|
1416
1313
|
let closingSequenceText = "";
|
|
@@ -1442,8 +1339,7 @@ function parseCustomContainer(sourceCode, node) {
|
|
|
1442
1339
|
info,
|
|
1443
1340
|
closingSequence: {
|
|
1444
1341
|
text: closingSequenceText,
|
|
1445
|
-
range: closingSequenceRange
|
|
1446
|
-
loc: getSourceLocationFromRange(sourceCode, node, closingSequenceRange)
|
|
1342
|
+
range: closingSequenceRange
|
|
1447
1343
|
}
|
|
1448
1344
|
};
|
|
1449
1345
|
}
|
|
@@ -1482,7 +1378,10 @@ var custom_container_marker_spacing_default = createRule("custom-container-marke
|
|
|
1482
1378
|
if (hasSpace) return;
|
|
1483
1379
|
context.report({
|
|
1484
1380
|
node,
|
|
1485
|
-
loc:
|
|
1381
|
+
loc: {
|
|
1382
|
+
start: sourceCode.getLocFromIndex(info.range[0]),
|
|
1383
|
+
end: sourceCode.getLocFromIndex(info.range[1])
|
|
1384
|
+
},
|
|
1486
1385
|
messageId: "expectedSpace",
|
|
1487
1386
|
fix(fixer) {
|
|
1488
1387
|
return fixer.insertTextAfterRange(openingSequence.range, " ");
|
|
@@ -1492,7 +1391,10 @@ var custom_container_marker_spacing_default = createRule("custom-container-marke
|
|
|
1492
1391
|
if (!hasSpace) return;
|
|
1493
1392
|
context.report({
|
|
1494
1393
|
node,
|
|
1495
|
-
loc:
|
|
1394
|
+
loc: {
|
|
1395
|
+
start: sourceCode.getLocFromIndex(openingSequence.range[1]),
|
|
1396
|
+
end: sourceCode.getLocFromIndex(info.range[0])
|
|
1397
|
+
},
|
|
1496
1398
|
messageId: "unexpectedSpace",
|
|
1497
1399
|
fix(fixer) {
|
|
1498
1400
|
return fixer.removeRange([openingSequence.range[1], info.range[0]]);
|
|
@@ -1509,17 +1411,15 @@ var custom_container_marker_spacing_default = createRule("custom-container-marke
|
|
|
1509
1411
|
* Parse options with defaults.
|
|
1510
1412
|
*/
|
|
1511
1413
|
function parseOptions$6(options) {
|
|
1512
|
-
const linkDefinitionPlacement = {
|
|
1513
|
-
referencedFromSingleSection: options?.linkDefinitionPlacement?.referencedFromSingleSection || "document-last",
|
|
1514
|
-
referencedFromMultipleSections: options?.linkDefinitionPlacement?.referencedFromMultipleSections || "document-last"
|
|
1515
|
-
};
|
|
1516
|
-
const footnoteDefinitionPlacement = {
|
|
1517
|
-
referencedFromSingleSection: options?.footnoteDefinitionPlacement?.referencedFromSingleSection || "document-last",
|
|
1518
|
-
referencedFromMultipleSections: options?.footnoteDefinitionPlacement?.referencedFromMultipleSections || "document-last"
|
|
1519
|
-
};
|
|
1520
1414
|
return {
|
|
1521
|
-
linkDefinitionPlacement
|
|
1522
|
-
|
|
1415
|
+
linkDefinitionPlacement: {
|
|
1416
|
+
referencedFromSingleSection: options?.linkDefinitionPlacement?.referencedFromSingleSection || "document-last",
|
|
1417
|
+
referencedFromMultipleSections: options?.linkDefinitionPlacement?.referencedFromMultipleSections || "document-last"
|
|
1418
|
+
},
|
|
1419
|
+
footnoteDefinitionPlacement: {
|
|
1420
|
+
referencedFromSingleSection: options?.footnoteDefinitionPlacement?.referencedFromSingleSection || "document-last",
|
|
1421
|
+
referencedFromMultipleSections: options?.footnoteDefinitionPlacement?.referencedFromMultipleSections || "document-last"
|
|
1422
|
+
}
|
|
1523
1423
|
};
|
|
1524
1424
|
}
|
|
1525
1425
|
var definitions_last_default = createRule("definitions-last", {
|
|
@@ -1692,8 +1592,7 @@ var definitions_last_default = createRule("definitions-last", {
|
|
|
1692
1592
|
* to the last of the document/section.
|
|
1693
1593
|
*/
|
|
1694
1594
|
function fixToMoveFromBeforeLastOfSectionToLastOfSection(fixer, prev, node) {
|
|
1695
|
-
|
|
1696
|
-
return fixToMove(fixer, prev, next, node);
|
|
1595
|
+
return fixToMove(fixer, prev, getNextSibling(sourceCode, prev), node);
|
|
1697
1596
|
}
|
|
1698
1597
|
/**
|
|
1699
1598
|
* Fixer to move a definition or footnote definition node from after the last of the document/section
|
|
@@ -3802,7 +3701,10 @@ var emoji_notation_default = createRule("emoji-notation", {
|
|
|
3802
3701
|
const colon = emojiData.emojiToColon[emoji];
|
|
3803
3702
|
context.report({
|
|
3804
3703
|
node,
|
|
3805
|
-
loc:
|
|
3704
|
+
loc: {
|
|
3705
|
+
start: sourceCode.getLocFromIndex(range[0]),
|
|
3706
|
+
end: sourceCode.getLocFromIndex(range[1])
|
|
3707
|
+
},
|
|
3806
3708
|
messageId: colon ? "preferColon" : "preferUnknownColon",
|
|
3807
3709
|
data: {
|
|
3808
3710
|
unicode: emoji,
|
|
@@ -3830,7 +3732,10 @@ var emoji_notation_default = createRule("emoji-notation", {
|
|
|
3830
3732
|
const emoji = emojiData.colonToEmoji[colon];
|
|
3831
3733
|
context.report({
|
|
3832
3734
|
node,
|
|
3833
|
-
loc:
|
|
3735
|
+
loc: {
|
|
3736
|
+
start: sourceCode.getLocFromIndex(range[0]),
|
|
3737
|
+
end: sourceCode.getLocFromIndex(range[1])
|
|
3738
|
+
},
|
|
3834
3739
|
messageId: emoji ? "preferUnicode" : "preferUnknownUnicode",
|
|
3835
3740
|
data: {
|
|
3836
3741
|
unicode: emoji || "😄",
|
|
@@ -4538,6 +4443,11 @@ const defaultPreserveWords = [
|
|
|
4538
4443
|
"Insomnia",
|
|
4539
4444
|
"Redoc",
|
|
4540
4445
|
"Stoplight",
|
|
4446
|
+
"MIT",
|
|
4447
|
+
"GPL",
|
|
4448
|
+
"AGPL",
|
|
4449
|
+
"LGPL",
|
|
4450
|
+
"CC0",
|
|
4541
4451
|
"FAQ",
|
|
4542
4452
|
"YouTube"
|
|
4543
4453
|
];
|
|
@@ -4678,6 +4588,7 @@ function parsePreserveWordsOption(preserveWordsOption) {
|
|
|
4678
4588
|
|
|
4679
4589
|
//#endregion
|
|
4680
4590
|
//#region src/utils/words.ts
|
|
4591
|
+
const WELLKNOWN_WORDS = new Set(["I"]);
|
|
4681
4592
|
/**
|
|
4682
4593
|
* Parse text into words with offsets
|
|
4683
4594
|
*/
|
|
@@ -4693,6 +4604,7 @@ function parseWordsFromText(text, firstNode, lastNode) {
|
|
|
4693
4604
|
word: token,
|
|
4694
4605
|
offset: match.index,
|
|
4695
4606
|
punctuation,
|
|
4607
|
+
wellknownWord: WELLKNOWN_WORDS.has(token),
|
|
4696
4608
|
first: false,
|
|
4697
4609
|
last: false
|
|
4698
4610
|
});
|
|
@@ -4779,14 +4691,14 @@ var heading_casing_default = createRule("heading-casing", {
|
|
|
4779
4691
|
* Check text node and report word-level errors
|
|
4780
4692
|
*/
|
|
4781
4693
|
function checkTextNode(node, firstNode, lastNode) {
|
|
4782
|
-
const
|
|
4783
|
-
const wordAndOffsets = parseWordsFromText(text, firstNode, lastNode);
|
|
4694
|
+
const wordAndOffsets = parseWordsFromText(sourceCode.getText(node), firstNode, lastNode);
|
|
4784
4695
|
const processed = /* @__PURE__ */ new Set();
|
|
4785
4696
|
for (let index = 0; index < wordAndOffsets.length; index++) {
|
|
4786
4697
|
if (processed.has(index)) continue;
|
|
4787
4698
|
processed.add(index);
|
|
4788
4699
|
const wordAndOffset = wordAndOffsets[index];
|
|
4789
4700
|
if (wordAndOffset.punctuation) continue;
|
|
4701
|
+
if (wordAndOffset.wellknownWord) continue;
|
|
4790
4702
|
if (ignorePatterns.some((pattern) => pattern.test(wordAndOffset.word))) continue;
|
|
4791
4703
|
const preservePhrase = preserveWordsOption.findPreservePhrase((function* () {
|
|
4792
4704
|
const firstWord = wordAndOffsets[index];
|
|
@@ -4827,7 +4739,10 @@ var heading_casing_default = createRule("heading-casing", {
|
|
|
4827
4739
|
actual: word,
|
|
4828
4740
|
expected: expectedWord
|
|
4829
4741
|
},
|
|
4830
|
-
loc:
|
|
4742
|
+
loc: {
|
|
4743
|
+
start: sourceCode.getLocFromIndex(range[0]),
|
|
4744
|
+
end: sourceCode.getLocFromIndex(range[1])
|
|
4745
|
+
},
|
|
4831
4746
|
fix(fixer) {
|
|
4832
4747
|
return fixer.replaceTextRange(range, expectedWord);
|
|
4833
4748
|
}
|
|
@@ -4966,8 +4881,7 @@ var BackwardCharacterCursor = class extends CharacterCursor {
|
|
|
4966
4881
|
* Parse the link definition.
|
|
4967
4882
|
*/
|
|
4968
4883
|
function parseLinkDefinition(sourceCode, node) {
|
|
4969
|
-
const
|
|
4970
|
-
const parsed = parseLinkDefinitionFromText(text);
|
|
4884
|
+
const parsed = parseLinkDefinitionFromText(sourceCode.getText(node));
|
|
4971
4885
|
if (!parsed) return null;
|
|
4972
4886
|
const nodeRange = sourceCode.getRange(node);
|
|
4973
4887
|
const labelRange = [nodeRange[0] + parsed.label.range[0], nodeRange[0] + parsed.label.range[1]];
|
|
@@ -4975,20 +4889,17 @@ function parseLinkDefinition(sourceCode, node) {
|
|
|
4975
4889
|
return {
|
|
4976
4890
|
label: {
|
|
4977
4891
|
text: parsed.label.text,
|
|
4978
|
-
range: labelRange
|
|
4979
|
-
loc: getSourceLocationFromRange(sourceCode, node, labelRange)
|
|
4892
|
+
range: labelRange
|
|
4980
4893
|
},
|
|
4981
4894
|
destination: {
|
|
4982
4895
|
type: parsed.destination.type,
|
|
4983
4896
|
text: parsed.destination.text,
|
|
4984
|
-
range: destinationRange
|
|
4985
|
-
loc: getSourceLocationFromRange(sourceCode, node, destinationRange)
|
|
4897
|
+
range: destinationRange
|
|
4986
4898
|
},
|
|
4987
4899
|
title: parsed.title ? {
|
|
4988
4900
|
type: parsed.title.type,
|
|
4989
4901
|
text: parsed.title.text,
|
|
4990
|
-
range: [nodeRange[0] + parsed.title.range[0], nodeRange[0] + parsed.title.range[1]]
|
|
4991
|
-
loc: getSourceLocationFromRange(sourceCode, node, [nodeRange[0] + parsed.title.range[0], nodeRange[0] + parsed.title.range[1]])
|
|
4902
|
+
range: [nodeRange[0] + parsed.title.range[0], nodeRange[0] + parsed.title.range[1]]
|
|
4992
4903
|
} : null
|
|
4993
4904
|
};
|
|
4994
4905
|
}
|
|
@@ -5083,30 +4994,19 @@ function parseInlineLink(sourceCode, node) {
|
|
|
5083
4994
|
const destinationRange = [textRange[1] + parsed.destination.range[0], textRange[1] + parsed.destination.range[1]];
|
|
5084
4995
|
const closingParenRange = [textRange[1] + parsed.closingParen.range[0], textRange[1] + parsed.closingParen.range[1]];
|
|
5085
4996
|
return {
|
|
5086
|
-
text: {
|
|
5087
|
-
|
|
5088
|
-
loc: getSourceLocationFromRange(sourceCode, node, textRange)
|
|
5089
|
-
},
|
|
5090
|
-
openingParen: {
|
|
5091
|
-
range: openingParenRange,
|
|
5092
|
-
loc: getSourceLocationFromRange(sourceCode, node, openingParenRange)
|
|
5093
|
-
},
|
|
4997
|
+
text: { range: textRange },
|
|
4998
|
+
openingParen: { range: openingParenRange },
|
|
5094
4999
|
destination: {
|
|
5095
5000
|
type: parsed.destination.type,
|
|
5096
5001
|
text: parsed.destination.text,
|
|
5097
|
-
range: destinationRange
|
|
5098
|
-
loc: getSourceLocationFromRange(sourceCode, node, destinationRange)
|
|
5002
|
+
range: destinationRange
|
|
5099
5003
|
},
|
|
5100
5004
|
title: parsed.title ? {
|
|
5101
5005
|
type: parsed.title.type,
|
|
5102
5006
|
text: parsed.title.text,
|
|
5103
|
-
range: [textRange[1] + parsed.title.range[0], textRange[1] + parsed.title.range[1]]
|
|
5104
|
-
loc: getSourceLocationFromRange(sourceCode, node, [textRange[1] + parsed.title.range[0], textRange[1] + parsed.title.range[1]])
|
|
5007
|
+
range: [textRange[1] + parsed.title.range[0], textRange[1] + parsed.title.range[1]]
|
|
5105
5008
|
} : null,
|
|
5106
|
-
closingParen: {
|
|
5107
|
-
range: closingParenRange,
|
|
5108
|
-
loc: getSourceLocationFromRange(sourceCode, node, closingParenRange)
|
|
5109
|
-
}
|
|
5009
|
+
closingParen: { range: closingParenRange }
|
|
5110
5010
|
};
|
|
5111
5011
|
}
|
|
5112
5012
|
/**
|
|
@@ -5196,23 +5096,16 @@ function parseLinkReference(sourceCode, node) {
|
|
|
5196
5096
|
textRange = [nodeRange[0], sourceCode.text.indexOf("]", lastChildRange[1]) + 1];
|
|
5197
5097
|
}
|
|
5198
5098
|
if (node.referenceType === "shortcut") return {
|
|
5199
|
-
text: {
|
|
5200
|
-
range: textRange,
|
|
5201
|
-
loc: getSourceLocationFromRange(sourceCode, node, textRange)
|
|
5202
|
-
},
|
|
5099
|
+
text: { range: textRange },
|
|
5203
5100
|
label: null
|
|
5204
5101
|
};
|
|
5205
5102
|
if (node.referenceType === "collapsed") {
|
|
5206
5103
|
const labelRange$1 = [textRange[1], textRange[1] + 1];
|
|
5207
5104
|
return {
|
|
5208
|
-
text: {
|
|
5209
|
-
range: textRange,
|
|
5210
|
-
loc: getSourceLocationFromRange(sourceCode, node, textRange)
|
|
5211
|
-
},
|
|
5105
|
+
text: { range: textRange },
|
|
5212
5106
|
label: {
|
|
5213
5107
|
type: "collapsed",
|
|
5214
|
-
range: labelRange$1
|
|
5215
|
-
loc: getSourceLocationFromRange(sourceCode, node, labelRange$1)
|
|
5108
|
+
range: labelRange$1
|
|
5216
5109
|
}
|
|
5217
5110
|
};
|
|
5218
5111
|
}
|
|
@@ -5227,15 +5120,11 @@ function parseLinkReference(sourceCode, node) {
|
|
|
5227
5120
|
if (sourceCode.text[index] !== "]") return null;
|
|
5228
5121
|
const labelRange = [textRange[1], index + 1];
|
|
5229
5122
|
return {
|
|
5230
|
-
text: {
|
|
5231
|
-
range: textRange,
|
|
5232
|
-
loc: getSourceLocationFromRange(sourceCode, node, textRange)
|
|
5233
|
-
},
|
|
5123
|
+
text: { range: textRange },
|
|
5234
5124
|
label: {
|
|
5235
5125
|
type: "full",
|
|
5236
5126
|
text: sourceCode.text.slice(...labelRange),
|
|
5237
|
-
range: labelRange
|
|
5238
|
-
loc: getSourceLocationFromRange(sourceCode, node, labelRange)
|
|
5127
|
+
range: labelRange
|
|
5239
5128
|
}
|
|
5240
5129
|
};
|
|
5241
5130
|
}
|
|
@@ -5246,8 +5135,7 @@ function parseLinkReference(sourceCode, node) {
|
|
|
5246
5135
|
* Parse the image.
|
|
5247
5136
|
*/
|
|
5248
5137
|
function parseImage(sourceCode, node) {
|
|
5249
|
-
const
|
|
5250
|
-
const parsed = parseImageFromText(text);
|
|
5138
|
+
const parsed = parseImageFromText(sourceCode.getText(node));
|
|
5251
5139
|
if (!parsed) return null;
|
|
5252
5140
|
const nodeRange = sourceCode.getRange(node);
|
|
5253
5141
|
const textRange = [nodeRange[0] + parsed.text.range[0], nodeRange[0] + parsed.text.range[1]];
|
|
@@ -5255,30 +5143,19 @@ function parseImage(sourceCode, node) {
|
|
|
5255
5143
|
const destinationRange = [nodeRange[0] + parsed.destination.range[0], nodeRange[0] + parsed.destination.range[1]];
|
|
5256
5144
|
const closingParenRange = [nodeRange[0] + parsed.closingParen.range[0], nodeRange[0] + parsed.closingParen.range[1]];
|
|
5257
5145
|
return {
|
|
5258
|
-
text: {
|
|
5259
|
-
|
|
5260
|
-
loc: getSourceLocationFromRange(sourceCode, node, textRange)
|
|
5261
|
-
},
|
|
5262
|
-
openingParen: {
|
|
5263
|
-
range: openingParenRange,
|
|
5264
|
-
loc: getSourceLocationFromRange(sourceCode, node, openingParenRange)
|
|
5265
|
-
},
|
|
5146
|
+
text: { range: textRange },
|
|
5147
|
+
openingParen: { range: openingParenRange },
|
|
5266
5148
|
destination: {
|
|
5267
5149
|
type: parsed.destination.type,
|
|
5268
5150
|
text: parsed.destination.text,
|
|
5269
|
-
range: destinationRange
|
|
5270
|
-
loc: getSourceLocationFromRange(sourceCode, node, destinationRange)
|
|
5151
|
+
range: destinationRange
|
|
5271
5152
|
},
|
|
5272
5153
|
title: parsed.title ? {
|
|
5273
5154
|
type: parsed.title.type,
|
|
5274
5155
|
text: parsed.title.text,
|
|
5275
|
-
range: [nodeRange[0] + parsed.title.range[0], nodeRange[0] + parsed.title.range[1]]
|
|
5276
|
-
loc: getSourceLocationFromRange(sourceCode, node, [nodeRange[0] + parsed.title.range[0], nodeRange[0] + parsed.title.range[1]])
|
|
5156
|
+
range: [nodeRange[0] + parsed.title.range[0], nodeRange[0] + parsed.title.range[1]]
|
|
5277
5157
|
} : null,
|
|
5278
|
-
closingParen: {
|
|
5279
|
-
range: closingParenRange,
|
|
5280
|
-
loc: getSourceLocationFromRange(sourceCode, node, closingParenRange)
|
|
5281
|
-
}
|
|
5158
|
+
closingParen: { range: closingParenRange }
|
|
5282
5159
|
};
|
|
5283
5160
|
}
|
|
5284
5161
|
/**
|
|
@@ -5358,8 +5235,7 @@ function parseImageReference(sourceCode, node) {
|
|
|
5358
5235
|
return {
|
|
5359
5236
|
text: {
|
|
5360
5237
|
range: textRange$1,
|
|
5361
|
-
text: sourceCode.text.slice(...textRange$1)
|
|
5362
|
-
loc: getSourceLocationFromRange(sourceCode, node, textRange$1)
|
|
5238
|
+
text: sourceCode.text.slice(...textRange$1)
|
|
5363
5239
|
},
|
|
5364
5240
|
label: null
|
|
5365
5241
|
};
|
|
@@ -5370,13 +5246,11 @@ function parseImageReference(sourceCode, node) {
|
|
|
5370
5246
|
return {
|
|
5371
5247
|
text: {
|
|
5372
5248
|
range: textRange$1,
|
|
5373
|
-
text: sourceCode.text.slice(...textRange$1)
|
|
5374
|
-
loc: getSourceLocationFromRange(sourceCode, node, textRange$1)
|
|
5249
|
+
text: sourceCode.text.slice(...textRange$1)
|
|
5375
5250
|
},
|
|
5376
5251
|
label: {
|
|
5377
5252
|
type: "collapsed",
|
|
5378
|
-
range: labelRange$1
|
|
5379
|
-
loc: getSourceLocationFromRange(sourceCode, node, labelRange$1)
|
|
5253
|
+
range: labelRange$1
|
|
5380
5254
|
}
|
|
5381
5255
|
};
|
|
5382
5256
|
}
|
|
@@ -5387,14 +5261,12 @@ function parseImageReference(sourceCode, node) {
|
|
|
5387
5261
|
return {
|
|
5388
5262
|
text: {
|
|
5389
5263
|
range: textRange,
|
|
5390
|
-
text: parsed.text.text
|
|
5391
|
-
loc: getSourceLocationFromRange(sourceCode, node, textRange)
|
|
5264
|
+
text: parsed.text.text
|
|
5392
5265
|
},
|
|
5393
5266
|
label: {
|
|
5394
5267
|
type: "full",
|
|
5395
5268
|
text: parsed.label.text,
|
|
5396
|
-
range: labelRange
|
|
5397
|
-
loc: getSourceLocationFromRange(sourceCode, node, labelRange)
|
|
5269
|
+
range: labelRange
|
|
5398
5270
|
}
|
|
5399
5271
|
};
|
|
5400
5272
|
}
|
|
@@ -5439,13 +5311,11 @@ function parseListItem(sourceCode, node) {
|
|
|
5439
5311
|
kind: marker.kind,
|
|
5440
5312
|
text: marker.raw,
|
|
5441
5313
|
value: marker.sequence.value,
|
|
5442
|
-
range: markerRange
|
|
5443
|
-
loc: getSourceLocationFromRange(sourceCode, node, markerRange)
|
|
5314
|
+
range: markerRange
|
|
5444
5315
|
} : {
|
|
5445
5316
|
kind: marker.kind,
|
|
5446
5317
|
text: marker.raw,
|
|
5447
|
-
range: markerRange
|
|
5448
|
-
loc: getSourceLocationFromRange(sourceCode, node, markerRange)
|
|
5318
|
+
range: markerRange
|
|
5449
5319
|
};
|
|
5450
5320
|
if (node.checked == null) return {
|
|
5451
5321
|
marker: parsedMarker,
|
|
@@ -5463,8 +5333,7 @@ function parseListItem(sourceCode, node) {
|
|
|
5463
5333
|
marker: parsedMarker,
|
|
5464
5334
|
taskListItemMarker: {
|
|
5465
5335
|
text: sourceCode.text.slice(...taskListItemMarkerRange),
|
|
5466
|
-
range: taskListItemMarkerRange
|
|
5467
|
-
loc: getSourceLocationFromRange(sourceCode, node, taskListItemMarkerRange)
|
|
5336
|
+
range: taskListItemMarkerRange
|
|
5468
5337
|
}
|
|
5469
5338
|
};
|
|
5470
5339
|
}
|
|
@@ -5487,8 +5356,7 @@ function parseMathBlock(sourceCode, node) {
|
|
|
5487
5356
|
const openingSequenceRange = [range[0], range[0] + parsedOpening.openingSequence.length];
|
|
5488
5357
|
const openingSequence = {
|
|
5489
5358
|
text: parsedOpening.openingSequence,
|
|
5490
|
-
range: openingSequenceRange
|
|
5491
|
-
loc: getSourceLocationFromRange(sourceCode, node, openingSequenceRange)
|
|
5359
|
+
range: openingSequenceRange
|
|
5492
5360
|
};
|
|
5493
5361
|
const parsedClosing = parseMathClosingSequenceFromText(text);
|
|
5494
5362
|
if (parsedClosing == null || parsedClosing.closingSequence !== parsedOpening.openingSequence) {
|
|
@@ -5497,8 +5365,7 @@ function parseMathBlock(sourceCode, node) {
|
|
|
5497
5365
|
openingSequence,
|
|
5498
5366
|
content: {
|
|
5499
5367
|
text: text.slice(parsedOpening.after.length),
|
|
5500
|
-
range: contentRange$1
|
|
5501
|
-
loc: getSourceLocationFromRange(sourceCode, node, contentRange$1)
|
|
5368
|
+
range: contentRange$1
|
|
5502
5369
|
},
|
|
5503
5370
|
closingSequence: null,
|
|
5504
5371
|
after: null
|
|
@@ -5507,23 +5374,19 @@ function parseMathBlock(sourceCode, node) {
|
|
|
5507
5374
|
const spaceAfterClosingRange = [range[1] - parsedClosing.after.length, range[1]];
|
|
5508
5375
|
const spaceAfterClosing = {
|
|
5509
5376
|
text: parsedClosing.after,
|
|
5510
|
-
range: spaceAfterClosingRange
|
|
5511
|
-
loc: getSourceLocationFromRange(sourceCode, node, spaceAfterClosingRange)
|
|
5377
|
+
range: spaceAfterClosingRange
|
|
5512
5378
|
};
|
|
5513
5379
|
const closingSequenceRange = [spaceAfterClosing.range[0] - parsedClosing.closingSequence.length, spaceAfterClosing.range[0]];
|
|
5514
5380
|
const closingSequence = {
|
|
5515
5381
|
text: parsedClosing.closingSequence,
|
|
5516
|
-
range: closingSequenceRange
|
|
5517
|
-
loc: getSourceLocationFromRange(sourceCode, node, closingSequenceRange)
|
|
5382
|
+
range: closingSequenceRange
|
|
5518
5383
|
};
|
|
5519
5384
|
const contentRange = [openingSequence.range[1] + parsedOpening.after.length, closingSequence.range[0] - parsedClosing.before.length];
|
|
5520
|
-
const contentText = sourceCode.text.slice(...contentRange);
|
|
5521
5385
|
return {
|
|
5522
5386
|
openingSequence,
|
|
5523
5387
|
content: {
|
|
5524
|
-
text:
|
|
5525
|
-
range: contentRange
|
|
5526
|
-
loc: getSourceLocationFromRange(sourceCode, node, contentRange)
|
|
5388
|
+
text: sourceCode.text.slice(...contentRange),
|
|
5389
|
+
range: contentRange
|
|
5527
5390
|
},
|
|
5528
5391
|
closingSequence,
|
|
5529
5392
|
after: spaceAfterClosing.range[0] < spaceAfterClosing.range[1] ? spaceAfterClosing : null
|
|
@@ -5722,8 +5585,7 @@ var indent_default = createRule("indent", {
|
|
|
5722
5585
|
return this._parsed ??= parseListItem(sourceCode, this.node);
|
|
5723
5586
|
}
|
|
5724
5587
|
getExpectedIndent({ lineNumber, block }) {
|
|
5725
|
-
|
|
5726
|
-
if (lineNumber === loc.start.line) return this.getExpectedIndentForFirstLine();
|
|
5588
|
+
if (lineNumber === this.nodeLoc.start.line) return this.getExpectedIndentForFirstLine();
|
|
5727
5589
|
const expected = this.getExpectedIndentAfterFirstLine();
|
|
5728
5590
|
if (expected === "ignore") return "ignore";
|
|
5729
5591
|
if (!block) return expected;
|
|
@@ -5741,8 +5603,8 @@ var indent_default = createRule("indent", {
|
|
|
5741
5603
|
const baseIndent = getWidth(lineText.slice(0, loc.start.column - 1));
|
|
5742
5604
|
return this._expectedIndentForFirstLine = Math.max(baseIndent + options.listItems.first, baseIndent + parsed.marker.text.length + 1);
|
|
5743
5605
|
}
|
|
5744
|
-
if (options.listItems.relativeTo === "taskListMarkerEnd" && parsed.taskListItemMarker) return this._expectedIndentForFirstLine = getWidth(lineText.slice(0, parsed.taskListItemMarker.
|
|
5745
|
-
return this._expectedIndentForFirstLine = getWidth(lineText.slice(0, parsed.marker.
|
|
5606
|
+
if (options.listItems.relativeTo === "taskListMarkerEnd" && parsed.taskListItemMarker) return this._expectedIndentForFirstLine = getWidth(lineText.slice(0, sourceCode.getLocFromIndex(parsed.taskListItemMarker.range[1]).column - 1)) + options.listItems.first;
|
|
5607
|
+
return this._expectedIndentForFirstLine = getWidth(lineText.slice(0, sourceCode.getLocFromIndex(parsed.marker.range[1]).column - 1)) + options.listItems.first;
|
|
5746
5608
|
}
|
|
5747
5609
|
getExpectedIndentAfterFirstLine() {
|
|
5748
5610
|
if (this._expectedIndentForOtherLines != null) return this._expectedIndentForOtherLines;
|
|
@@ -5767,19 +5629,20 @@ var indent_default = createRule("indent", {
|
|
|
5767
5629
|
return this._expectedIndentForOtherLines = Math.max(baseIndent + options.listItems.other, minimumLineIndent);
|
|
5768
5630
|
}
|
|
5769
5631
|
const parsed = this.getParsedListItem();
|
|
5770
|
-
if (options.listItems.relativeTo === "taskListMarkerEnd" && parsed.taskListItemMarker) return this._expectedIndentForOtherLines = getWidth(lineText.slice(0, parsed.taskListItemMarker.
|
|
5771
|
-
return this._expectedIndentForOtherLines = getWidth(lineText.slice(0, parsed.marker.
|
|
5632
|
+
if (options.listItems.relativeTo === "taskListMarkerEnd" && parsed.taskListItemMarker) return this._expectedIndentForOtherLines = getWidth(lineText.slice(0, sourceCode.getLocFromIndex(parsed.taskListItemMarker.range[1]).column - 1)) + options.listItems.other;
|
|
5633
|
+
return this._expectedIndentForOtherLines = getWidth(lineText.slice(0, sourceCode.getLocFromIndex(parsed.marker.range[1]).column - 1)) + options.listItems.other;
|
|
5772
5634
|
}
|
|
5773
5635
|
getMinimumLineIndent() {
|
|
5774
5636
|
const actualFirstLineIndent = this.getActualFirstLineIndent({ withoutTaskListMarker: true });
|
|
5775
5637
|
if (actualFirstLineIndent != null) return this._expectedIndentForOtherLines = actualFirstLineIndent;
|
|
5776
5638
|
const parsed = this.getParsedListItem();
|
|
5777
|
-
const
|
|
5778
|
-
|
|
5639
|
+
const markerEndLoc = sourceCode.getLocFromIndex(parsed.marker.range[1]);
|
|
5640
|
+
const lineText = sourceCode.lines[markerEndLoc.line - 1];
|
|
5641
|
+
return getWidth(lineText.slice(0, markerEndLoc.column - 1)) + 1;
|
|
5779
5642
|
}
|
|
5780
5643
|
getActualFirstLineIndent({ withoutTaskListMarker = false } = {}) {
|
|
5781
5644
|
const parsed = this.getParsedListItem();
|
|
5782
|
-
const markerEndPos = withoutTaskListMarker ? parsed.marker.
|
|
5645
|
+
const markerEndPos = sourceCode.getLocFromIndex(withoutTaskListMarker ? parsed.marker.range[1] : parsed.taskListItemMarker?.range[1] ?? parsed.marker.range[1]);
|
|
5783
5646
|
const lineText = sourceCode.lines[markerEndPos.line - 1];
|
|
5784
5647
|
const afterMarkerText = lineText.slice(markerEndPos.column - 1);
|
|
5785
5648
|
const trimmedAfterMarkerText = afterMarkerText.trimStart();
|
|
@@ -5965,21 +5828,23 @@ var indent_default = createRule("indent", {
|
|
|
5965
5828
|
});
|
|
5966
5829
|
if (baseIndent === "ignore") return "ignore";
|
|
5967
5830
|
if (lineNumber <= loc.start.line) return baseIndent;
|
|
5968
|
-
|
|
5969
|
-
if (lineNumber
|
|
5970
|
-
|
|
5971
|
-
|
|
5972
|
-
|
|
5831
|
+
const labelEndLoc = sourceCode.getLocFromIndex(parsed.label.range[1]);
|
|
5832
|
+
if (lineNumber < labelEndLoc.line) return baseIndent + 2;
|
|
5833
|
+
if (lineNumber === labelEndLoc.line) {
|
|
5834
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
5835
|
+
if (lineText == null) return baseIndent;
|
|
5836
|
+
const between = lineText.slice(column - 1, labelEndLoc.column - 2);
|
|
5973
5837
|
return !between || isWhitespace(between) ? baseIndent : baseIndent + 2;
|
|
5974
5838
|
}
|
|
5975
|
-
if (lineNumber <= parsed.destination.
|
|
5839
|
+
if (lineNumber <= sourceCode.getLocFromIndex(parsed.destination.range[1]).line) return baseIndent + 4;
|
|
5976
5840
|
if (!parsed.title) return baseIndent;
|
|
5977
|
-
if (lineNumber <= parsed.title.
|
|
5978
|
-
|
|
5979
|
-
if (lineNumber
|
|
5980
|
-
|
|
5981
|
-
|
|
5982
|
-
|
|
5841
|
+
if (lineNumber <= sourceCode.getLocFromIndex(parsed.title.range[0]).line) return baseIndent + 4;
|
|
5842
|
+
const titleEndLoc = sourceCode.getLocFromIndex(parsed.title.range[1]);
|
|
5843
|
+
if (lineNumber < titleEndLoc.line) return baseIndent + 6;
|
|
5844
|
+
if (lineNumber === titleEndLoc.line) {
|
|
5845
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
5846
|
+
if (lineText == null) return baseIndent;
|
|
5847
|
+
const between = lineText.slice(column - 1, titleEndLoc.column - 2);
|
|
5983
5848
|
return !between || isWhitespace(between) ? baseIndent + 4 : baseIndent + 6;
|
|
5984
5849
|
}
|
|
5985
5850
|
return baseIndent;
|
|
@@ -6009,8 +5874,7 @@ var indent_default = createRule("indent", {
|
|
|
6009
5874
|
* Verify a list node.
|
|
6010
5875
|
*/
|
|
6011
5876
|
function verifyList(node) {
|
|
6012
|
-
|
|
6013
|
-
verifyLinesIndent([loc.start.line], (lineNumber) => blockStack.getExpectedIndent({
|
|
5877
|
+
verifyLinesIndent([sourceCode.getLoc(node).start.line], (lineNumber) => blockStack.getExpectedIndent({
|
|
6014
5878
|
lineNumber,
|
|
6015
5879
|
block: true
|
|
6016
5880
|
}), additionalFixes);
|
|
@@ -6038,19 +5902,23 @@ var indent_default = createRule("indent", {
|
|
|
6038
5902
|
* Get a fix for a line.
|
|
6039
5903
|
*/
|
|
6040
5904
|
function getFixForLine(lineNumber, actualIndentWidth) {
|
|
6041
|
-
const
|
|
5905
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
5906
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
5907
|
+
line: lineNumber,
|
|
5908
|
+
column: 1
|
|
5909
|
+
});
|
|
6042
5910
|
if (info.expectedIndentWidth > actualIndentWidth) {
|
|
6043
|
-
const before$1 = sliceWidth(
|
|
5911
|
+
const before$1 = sliceWidth(lineText, 0, actualIndentWidth);
|
|
6044
5912
|
const diffWidth = info.expectedIndentWidth - actualIndentWidth;
|
|
6045
|
-
return fixer.insertTextAfterRange([
|
|
5913
|
+
return fixer.insertTextAfterRange([lineStartIndex, lineStartIndex + before$1.length], " ".repeat(diffWidth));
|
|
6046
5914
|
}
|
|
6047
|
-
let before = sliceWidth(
|
|
6048
|
-
let between = sliceWidth(
|
|
5915
|
+
let before = sliceWidth(lineText, 0, info.expectedIndentWidth);
|
|
5916
|
+
let between = sliceWidth(lineText, info.expectedIndentWidth, actualIndentWidth);
|
|
6049
5917
|
while (between && !isSpaceOrTab(between)) {
|
|
6050
5918
|
before += between[0];
|
|
6051
5919
|
between = between.slice(1);
|
|
6052
5920
|
}
|
|
6053
|
-
return fixer.replaceTextRange([
|
|
5921
|
+
return fixer.replaceTextRange([lineStartIndex, lineStartIndex + before.length + between.length], before);
|
|
6054
5922
|
}
|
|
6055
5923
|
}
|
|
6056
5924
|
}
|
|
@@ -6071,7 +5939,7 @@ var indent_default = createRule("indent", {
|
|
|
6071
5939
|
const parsed = parseMathBlock(sourceCode, node);
|
|
6072
5940
|
if (!parsed) return;
|
|
6073
5941
|
const loc = sourceCode.getLoc(node);
|
|
6074
|
-
const endLineToBeChecked = parsed.closingSequence && inlineToBeChecked(parsed.closingSequence.
|
|
5942
|
+
const endLineToBeChecked = parsed.closingSequence && inlineToBeChecked(sourceCode.getLocFromIndex(parsed.closingSequence.range[0]));
|
|
6075
5943
|
verifyLinesIndent(endLineToBeChecked ? [loc.start.line, loc.end.line] : [loc.start.line], (lineNumber) => blockStack.getExpectedIndent({
|
|
6076
5944
|
lineNumber,
|
|
6077
5945
|
block: true
|
|
@@ -6093,8 +5961,7 @@ var indent_default = createRule("indent", {
|
|
|
6093
5961
|
* Verify a footnote definition node.
|
|
6094
5962
|
*/
|
|
6095
5963
|
function verifyFootnoteDefinition(node) {
|
|
6096
|
-
|
|
6097
|
-
verifyLinesIndent([loc.start.line], (lineNumber) => blockStack.getExpectedIndent({
|
|
5964
|
+
verifyLinesIndent([sourceCode.getLoc(node).start.line], (lineNumber) => blockStack.getExpectedIndent({
|
|
6098
5965
|
lineNumber,
|
|
6099
5966
|
block: true
|
|
6100
5967
|
}));
|
|
@@ -6137,10 +6004,11 @@ var indent_default = createRule("indent", {
|
|
|
6137
6004
|
const parsed = parseInlineLink(sourceCode, node);
|
|
6138
6005
|
if (!parsed) return;
|
|
6139
6006
|
const lastChild = node.children.at(-1);
|
|
6140
|
-
if (lastChild && parsed.text.
|
|
6007
|
+
if (lastChild && sourceCode.getLocFromIndex(parsed.text.range[0]).line < sourceCode.getLocFromIndex(parsed.text.range[1]).line) {
|
|
6141
6008
|
const lastChildLoc = sourceCode.getLoc(lastChild);
|
|
6142
6009
|
const lastChildEndLine = lastChild.type === "text" && lastChild.value.endsWith("\n") ? lastChildLoc.end.line - 1 : lastChildLoc.end.line;
|
|
6143
|
-
|
|
6010
|
+
const textStartLoc = sourceCode.getLocFromIndex(parsed.text.range[0]);
|
|
6011
|
+
lines = lines.filter((lineNumber) => lineNumber <= textStartLoc.line || lastChildEndLine < lineNumber);
|
|
6144
6012
|
}
|
|
6145
6013
|
verifyLinesIndent(lines, (lineNumber, column) => {
|
|
6146
6014
|
const baseIndent = blockStack.getExpectedIndent({
|
|
@@ -6149,16 +6017,17 @@ var indent_default = createRule("indent", {
|
|
|
6149
6017
|
});
|
|
6150
6018
|
if (baseIndent === "ignore") return "ignore";
|
|
6151
6019
|
if (lineNumber <= loc.start.line) return baseIndent;
|
|
6152
|
-
if (lineNumber < parsed.text.
|
|
6153
|
-
if (lineNumber <= parsed.openingParen.
|
|
6154
|
-
if (lineNumber <= parsed.destination.
|
|
6020
|
+
if (lineNumber < sourceCode.getLocFromIndex(parsed.text.range[1]).line) return baseIndent + 2;
|
|
6021
|
+
if (lineNumber <= sourceCode.getLocFromIndex(parsed.openingParen.range[1]).line) return baseIndent;
|
|
6022
|
+
if (lineNumber <= sourceCode.getLocFromIndex(parsed.destination.range[1]).line) return baseIndent + 2;
|
|
6155
6023
|
if (!parsed.title) return baseIndent;
|
|
6156
|
-
if (lineNumber <= parsed.title.
|
|
6157
|
-
|
|
6158
|
-
if (lineNumber
|
|
6159
|
-
|
|
6160
|
-
|
|
6161
|
-
|
|
6024
|
+
if (lineNumber <= sourceCode.getLocFromIndex(parsed.title.range[0]).line) return baseIndent + 2;
|
|
6025
|
+
const titleEndLoc = sourceCode.getLocFromIndex(parsed.title.range[1]);
|
|
6026
|
+
if (lineNumber < titleEndLoc.line) return baseIndent + 4;
|
|
6027
|
+
if (lineNumber === titleEndLoc.line) {
|
|
6028
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
6029
|
+
if (lineText == null) return baseIndent;
|
|
6030
|
+
const between = lineText.slice(column - 1, titleEndLoc.column - 2);
|
|
6162
6031
|
return !between || isWhitespace(between) ? baseIndent + 2 : baseIndent + 4;
|
|
6163
6032
|
}
|
|
6164
6033
|
return baseIndent;
|
|
@@ -6175,10 +6044,11 @@ var indent_default = createRule("indent", {
|
|
|
6175
6044
|
let lines = lineNumbersFromRange(loc.start.line, loc.end.line);
|
|
6176
6045
|
if (!inlineToBeChecked(loc.start)) lines = lines.slice(1);
|
|
6177
6046
|
const lastChild = node.children.at(-1);
|
|
6178
|
-
if (lastChild && parsed.text.
|
|
6047
|
+
if (lastChild && sourceCode.getLocFromIndex(parsed.text.range[0]).line < sourceCode.getLocFromIndex(parsed.text.range[1]).line) {
|
|
6179
6048
|
const lastChildLoc = sourceCode.getLoc(lastChild);
|
|
6180
6049
|
const lastChildEndLine = lastChild.type === "text" && lastChild.value.endsWith("\n") ? lastChildLoc.end.line - 1 : lastChildLoc.end.line;
|
|
6181
|
-
|
|
6050
|
+
const textStartLoc = sourceCode.getLocFromIndex(parsed.text.range[0]);
|
|
6051
|
+
lines = lines.filter((lineNumber) => lineNumber <= textStartLoc.line || lastChildEndLine < lineNumber);
|
|
6182
6052
|
}
|
|
6183
6053
|
verifyLinesIndent(lines, (lineNumber, column) => {
|
|
6184
6054
|
const baseIndent = blockStack.getExpectedIndent({
|
|
@@ -6187,14 +6057,15 @@ var indent_default = createRule("indent", {
|
|
|
6187
6057
|
});
|
|
6188
6058
|
if (baseIndent === "ignore") return "ignore";
|
|
6189
6059
|
if (lineNumber <= loc.start.line) return baseIndent;
|
|
6190
|
-
if (lineNumber < parsed.text.
|
|
6060
|
+
if (lineNumber < sourceCode.getLocFromIndex(parsed.text.range[1]).line) return baseIndent + 2;
|
|
6191
6061
|
if (!parsed.label) return baseIndent;
|
|
6192
|
-
if (lineNumber <= parsed.label.
|
|
6193
|
-
|
|
6194
|
-
if (lineNumber
|
|
6195
|
-
|
|
6196
|
-
|
|
6197
|
-
|
|
6062
|
+
if (lineNumber <= sourceCode.getLocFromIndex(parsed.label.range[0]).line) return baseIndent;
|
|
6063
|
+
const labelEndLoc = sourceCode.getLocFromIndex(parsed.label.range[1]);
|
|
6064
|
+
if (lineNumber < labelEndLoc.line) return baseIndent + 2;
|
|
6065
|
+
if (lineNumber === labelEndLoc.line) {
|
|
6066
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
6067
|
+
if (lineText == null) return baseIndent;
|
|
6068
|
+
const between = lineText.slice(column - 1, labelEndLoc.column - 2);
|
|
6198
6069
|
return !between || isWhitespace(between) ? baseIndent : baseIndent + 2;
|
|
6199
6070
|
}
|
|
6200
6071
|
return baseIndent;
|
|
@@ -6216,22 +6087,24 @@ var indent_default = createRule("indent", {
|
|
|
6216
6087
|
});
|
|
6217
6088
|
if (baseIndent === "ignore") return "ignore";
|
|
6218
6089
|
if (lineNumber <= loc.start.line) return baseIndent;
|
|
6219
|
-
|
|
6220
|
-
if (lineNumber
|
|
6221
|
-
|
|
6222
|
-
|
|
6223
|
-
|
|
6090
|
+
const textEndLoc = sourceCode.getLocFromIndex(parsed.text.range[1]);
|
|
6091
|
+
if (lineNumber < textEndLoc.line) return baseIndent + 2;
|
|
6092
|
+
if (lineNumber === textEndLoc.line) {
|
|
6093
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
6094
|
+
if (lineText == null) return baseIndent;
|
|
6095
|
+
const between = lineText.slice(column - 1, textEndLoc.column - 2);
|
|
6224
6096
|
return !between || isWhitespace(between) ? baseIndent : baseIndent + 2;
|
|
6225
6097
|
}
|
|
6226
|
-
if (lineNumber <= parsed.openingParen.
|
|
6227
|
-
if (lineNumber <= parsed.destination.
|
|
6098
|
+
if (lineNumber <= sourceCode.getLocFromIndex(parsed.openingParen.range[1]).line) return baseIndent;
|
|
6099
|
+
if (lineNumber <= sourceCode.getLocFromIndex(parsed.destination.range[1]).line) return baseIndent + 2;
|
|
6228
6100
|
if (!parsed.title) return baseIndent;
|
|
6229
|
-
if (lineNumber <= parsed.title.
|
|
6230
|
-
|
|
6231
|
-
if (lineNumber
|
|
6232
|
-
|
|
6233
|
-
|
|
6234
|
-
|
|
6101
|
+
if (lineNumber <= sourceCode.getLocFromIndex(parsed.title.range[0]).line) return baseIndent + 2;
|
|
6102
|
+
const titleEndLoc = sourceCode.getLocFromIndex(parsed.title.range[1]);
|
|
6103
|
+
if (lineNumber < titleEndLoc.line) return baseIndent + 4;
|
|
6104
|
+
if (lineNumber === titleEndLoc.line) {
|
|
6105
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
6106
|
+
if (lineText == null) return baseIndent;
|
|
6107
|
+
const between = lineText.slice(column - 1, titleEndLoc.column - 2);
|
|
6235
6108
|
return !between || isWhitespace(between) ? baseIndent + 2 : baseIndent + 4;
|
|
6236
6109
|
}
|
|
6237
6110
|
return baseIndent;
|
|
@@ -6253,20 +6126,22 @@ var indent_default = createRule("indent", {
|
|
|
6253
6126
|
});
|
|
6254
6127
|
if (baseIndent === "ignore") return "ignore";
|
|
6255
6128
|
if (lineNumber <= loc.start.line) return baseIndent;
|
|
6256
|
-
|
|
6257
|
-
if (lineNumber
|
|
6258
|
-
|
|
6259
|
-
|
|
6260
|
-
|
|
6129
|
+
const textEndLoc = sourceCode.getLocFromIndex(parsed.text.range[1]);
|
|
6130
|
+
if (lineNumber < textEndLoc.line) return baseIndent + 2;
|
|
6131
|
+
if (lineNumber === textEndLoc.line) {
|
|
6132
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
6133
|
+
if (lineText == null) return baseIndent;
|
|
6134
|
+
const between = lineText.slice(column - 1, textEndLoc.column - 2);
|
|
6261
6135
|
return !between || isWhitespace(between) ? baseIndent : baseIndent + 2;
|
|
6262
6136
|
}
|
|
6263
6137
|
if (!parsed.label) return baseIndent;
|
|
6264
|
-
if (lineNumber <= parsed.label.
|
|
6265
|
-
|
|
6266
|
-
if (lineNumber
|
|
6267
|
-
|
|
6268
|
-
|
|
6269
|
-
|
|
6138
|
+
if (lineNumber <= sourceCode.getLocFromIndex(parsed.label.range[0]).line) return baseIndent;
|
|
6139
|
+
const labelEndLoc = sourceCode.getLocFromIndex(parsed.label.range[1]);
|
|
6140
|
+
if (lineNumber < labelEndLoc.line) return baseIndent + 2;
|
|
6141
|
+
if (lineNumber === labelEndLoc.line) {
|
|
6142
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
6143
|
+
if (lineText == null) return baseIndent;
|
|
6144
|
+
const between = lineText.slice(column - 1, labelEndLoc.column - 2);
|
|
6270
6145
|
return !between || isWhitespace(between) ? baseIndent : baseIndent + 2;
|
|
6271
6146
|
}
|
|
6272
6147
|
return baseIndent;
|
|
@@ -6306,7 +6181,7 @@ var indent_default = createRule("indent", {
|
|
|
6306
6181
|
const lineText = sourceCode.lines[position.line - 1];
|
|
6307
6182
|
if (listItem) {
|
|
6308
6183
|
const parsed = listItem.getParsedListItem();
|
|
6309
|
-
const indentText = lineText.slice((parsed.taskListItemMarker
|
|
6184
|
+
const indentText = lineText.slice(sourceCode.getLocFromIndex((parsed.taskListItemMarker ?? parsed.marker).range[1]).column - 1, position.column - 1);
|
|
6310
6185
|
if (indentText && !isSpaceOrTab(indentText)) return false;
|
|
6311
6186
|
} else if (blockquote) {
|
|
6312
6187
|
if (atWidth(lineText, blockquote.getMarkerIndent()) !== ">") return false;
|
|
@@ -6343,11 +6218,11 @@ var indent_default = createRule("indent", {
|
|
|
6343
6218
|
function verifyLinesIndentFromRoot(lineNumbers, expectedIndentWidthProvider, additionalFixes) {
|
|
6344
6219
|
const reports = [];
|
|
6345
6220
|
for (const lineNumber of lineNumbers) {
|
|
6346
|
-
const
|
|
6347
|
-
if (
|
|
6221
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
6222
|
+
if (lineText == null) return;
|
|
6348
6223
|
const listItem = blockStack.getCurrentListItemAtLine(lineNumber);
|
|
6349
6224
|
if (!listItem) {
|
|
6350
|
-
const indentText = /^\s*/u.exec(
|
|
6225
|
+
const indentText = /^\s*/u.exec(lineText)[0];
|
|
6351
6226
|
const actualIndentWidth = getWidth(indentText);
|
|
6352
6227
|
const expectedIndentWidth = expectedIndentWidthProvider(lineNumber, 1);
|
|
6353
6228
|
if (expectedIndentWidth === "ignore") continue;
|
|
@@ -6355,11 +6230,11 @@ var indent_default = createRule("indent", {
|
|
|
6355
6230
|
reports.push({
|
|
6356
6231
|
loc: {
|
|
6357
6232
|
start: {
|
|
6358
|
-
line:
|
|
6233
|
+
line: lineNumber,
|
|
6359
6234
|
column: 1
|
|
6360
6235
|
},
|
|
6361
6236
|
end: {
|
|
6362
|
-
line:
|
|
6237
|
+
line: lineNumber,
|
|
6363
6238
|
column: indentText.length + 1
|
|
6364
6239
|
}
|
|
6365
6240
|
},
|
|
@@ -6369,14 +6244,18 @@ var indent_default = createRule("indent", {
|
|
|
6369
6244
|
actual: actualIndentWidth
|
|
6370
6245
|
},
|
|
6371
6246
|
fix(fixer) {
|
|
6372
|
-
|
|
6247
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
6248
|
+
line: lineNumber,
|
|
6249
|
+
column: 1
|
|
6250
|
+
});
|
|
6251
|
+
return fixer.replaceTextRange([lineStartIndex, lineStartIndex + indentText.length], " ".repeat(expectedIndentWidth));
|
|
6373
6252
|
},
|
|
6374
6253
|
expectedIndentWidth,
|
|
6375
6254
|
actualIndentWidth
|
|
6376
6255
|
});
|
|
6377
6256
|
continue;
|
|
6378
6257
|
}
|
|
6379
|
-
const report = verifyLineIndentFromListItemMarker(
|
|
6258
|
+
const report = verifyLineIndentFromListItemMarker(lineNumber, listItem, expectedIndentWidthProvider);
|
|
6380
6259
|
if (!report) continue;
|
|
6381
6260
|
reports.push(report);
|
|
6382
6261
|
}
|
|
@@ -6399,16 +6278,16 @@ var indent_default = createRule("indent", {
|
|
|
6399
6278
|
const reports = [];
|
|
6400
6279
|
let cannotFix = false;
|
|
6401
6280
|
for (const lineNumber of lineNumbers) {
|
|
6402
|
-
const
|
|
6403
|
-
if (
|
|
6404
|
-
if (atWidth(
|
|
6281
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
6282
|
+
if (lineText == null) return;
|
|
6283
|
+
if (atWidth(lineText, blockquote.getMarkerIndent()) !== ">") {
|
|
6405
6284
|
cannotFix = true;
|
|
6406
6285
|
continue;
|
|
6407
6286
|
}
|
|
6408
6287
|
const listItem = blockStack.getCurrentListItemAtLine(lineNumber);
|
|
6409
6288
|
if (!listItem) {
|
|
6410
|
-
const before =
|
|
6411
|
-
const after =
|
|
6289
|
+
const before = lineText.slice(0, blockquoteLoc.start.column);
|
|
6290
|
+
const after = lineText.slice(blockquoteLoc.start.column);
|
|
6412
6291
|
const indentText = /^\s*/u.exec(after)[0];
|
|
6413
6292
|
const actualIndentWidth = getWidth(before + indentText);
|
|
6414
6293
|
const expectedIndentWidth = expectedIndentWidthProvider(lineNumber, blockquoteLoc.start.column + 1);
|
|
@@ -6418,11 +6297,11 @@ var indent_default = createRule("indent", {
|
|
|
6418
6297
|
reports.push({
|
|
6419
6298
|
loc: {
|
|
6420
6299
|
start: {
|
|
6421
|
-
line:
|
|
6300
|
+
line: lineNumber,
|
|
6422
6301
|
column: blockquoteLoc.start.column + 1
|
|
6423
6302
|
},
|
|
6424
6303
|
end: {
|
|
6425
|
-
line:
|
|
6304
|
+
line: lineNumber,
|
|
6426
6305
|
column: blockquoteLoc.start.column + 1 + indentText.length
|
|
6427
6306
|
}
|
|
6428
6307
|
},
|
|
@@ -6432,14 +6311,18 @@ var indent_default = createRule("indent", {
|
|
|
6432
6311
|
actual: actualIndentWidth - linePrefixWidth
|
|
6433
6312
|
},
|
|
6434
6313
|
fix(fixer) {
|
|
6435
|
-
|
|
6314
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
6315
|
+
line: lineNumber,
|
|
6316
|
+
column: 1
|
|
6317
|
+
});
|
|
6318
|
+
return fixer.replaceTextRange([lineStartIndex + blockquoteLoc.start.column, lineStartIndex + blockquoteLoc.start.column + indentText.length], " ".repeat(expectedIndentWidth - linePrefixWidth));
|
|
6436
6319
|
},
|
|
6437
6320
|
expectedIndentWidth,
|
|
6438
6321
|
actualIndentWidth
|
|
6439
6322
|
});
|
|
6440
6323
|
continue;
|
|
6441
6324
|
}
|
|
6442
|
-
const report = verifyLineIndentFromListItemMarker(
|
|
6325
|
+
const report = verifyLineIndentFromListItemMarker(lineNumber, listItem, expectedIndentWidthProvider);
|
|
6443
6326
|
if (!report) continue;
|
|
6444
6327
|
reports.push(report);
|
|
6445
6328
|
}
|
|
@@ -6458,20 +6341,28 @@ var indent_default = createRule("indent", {
|
|
|
6458
6341
|
/**
|
|
6459
6342
|
* Verify the indentation of the line from the list item marker.
|
|
6460
6343
|
*/
|
|
6461
|
-
function verifyLineIndentFromListItemMarker(
|
|
6344
|
+
function verifyLineIndentFromListItemMarker(lineNumber, listItem, expectedIndentWidthProvider) {
|
|
6462
6345
|
const parsed = listItem.getParsedListItem();
|
|
6463
|
-
const markerAfterColumn = (parsed.taskListItemMarker?.
|
|
6464
|
-
const
|
|
6465
|
-
const
|
|
6346
|
+
const markerAfterColumn = sourceCode.getLocFromIndex(parsed.taskListItemMarker?.range[1] ?? parsed.marker.range[1]).column;
|
|
6347
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
6348
|
+
const before = lineText.slice(0, markerAfterColumn - 1);
|
|
6349
|
+
const after = lineText.slice(markerAfterColumn - 1);
|
|
6466
6350
|
const indentText = /^\s*/u.exec(after)[0];
|
|
6467
6351
|
const actualIndentWidth = getWidth(before + indentText);
|
|
6468
|
-
const expectedIndentWidth = expectedIndentWidthProvider(
|
|
6352
|
+
const expectedIndentWidth = expectedIndentWidthProvider(lineNumber, markerAfterColumn);
|
|
6469
6353
|
if (expectedIndentWidth === "ignore") return null;
|
|
6470
6354
|
if (actualIndentWidth === expectedIndentWidth) return null;
|
|
6471
6355
|
const linePrefixWidth = getWidth(before);
|
|
6472
|
-
const
|
|
6356
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
6357
|
+
line: lineNumber,
|
|
6358
|
+
column: 1
|
|
6359
|
+
});
|
|
6360
|
+
const range = [lineStartIndex + before.length, lineStartIndex + before.length + indentText.length];
|
|
6473
6361
|
return {
|
|
6474
|
-
loc:
|
|
6362
|
+
loc: {
|
|
6363
|
+
start: sourceCode.getLocFromIndex(range[0]),
|
|
6364
|
+
end: sourceCode.getLocFromIndex(range[1])
|
|
6365
|
+
},
|
|
6475
6366
|
messageId: indentText.includes(" ") ? "wrongIndentationFromListMarkerWithTab" : "wrongIndentationFromListMarker",
|
|
6476
6367
|
data: {
|
|
6477
6368
|
expected: expectedIndentWidth - linePrefixWidth,
|
|
@@ -6491,22 +6382,30 @@ var indent_default = createRule("indent", {
|
|
|
6491
6382
|
const loc = sourceCode.getLoc(node);
|
|
6492
6383
|
if (info.loc.start.line !== loc.start.line) return;
|
|
6493
6384
|
for (let lineNumber = fixStartLine; lineNumber <= fixEndLine; lineNumber++) {
|
|
6494
|
-
const
|
|
6495
|
-
if (
|
|
6385
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
6386
|
+
if (lineText == null) continue;
|
|
6496
6387
|
if (info.expectedIndentWidth > info.actualIndentWidth) {
|
|
6497
|
-
const before = sliceWidth(
|
|
6498
|
-
const after = sliceWidth(
|
|
6388
|
+
const before = sliceWidth(lineText, 0, info.actualIndentWidth);
|
|
6389
|
+
const after = sliceWidth(lineText, info.actualIndentWidth);
|
|
6499
6390
|
const diffWidth = info.expectedIndentWidth - info.actualIndentWidth;
|
|
6500
|
-
|
|
6391
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
6392
|
+
line: lineNumber,
|
|
6393
|
+
column: 1
|
|
6394
|
+
});
|
|
6395
|
+
yield fixer.replaceTextRange([lineStartIndex, lineStartIndex + lineText.length], before + " ".repeat(diffWidth) + after);
|
|
6501
6396
|
} else {
|
|
6502
|
-
let before = sliceWidth(
|
|
6503
|
-
let between = sliceWidth(
|
|
6504
|
-
const after = sliceWidth(
|
|
6397
|
+
let before = sliceWidth(lineText, 0, info.expectedIndentWidth);
|
|
6398
|
+
let between = sliceWidth(lineText, info.expectedIndentWidth, info.actualIndentWidth);
|
|
6399
|
+
const after = sliceWidth(lineText, info.actualIndentWidth);
|
|
6505
6400
|
while (between && !isSpaceOrTab(between)) {
|
|
6506
6401
|
before += between[0];
|
|
6507
6402
|
between = between.slice(1);
|
|
6508
6403
|
}
|
|
6509
|
-
|
|
6404
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
6405
|
+
line: lineNumber,
|
|
6406
|
+
column: 1
|
|
6407
|
+
});
|
|
6408
|
+
yield fixer.replaceTextRange([lineStartIndex, lineStartIndex + lineText.length], before + after);
|
|
6510
6409
|
}
|
|
6511
6410
|
}
|
|
6512
6411
|
}
|
|
@@ -6520,14 +6419,13 @@ var indent_default = createRule("indent", {
|
|
|
6520
6419
|
*/
|
|
6521
6420
|
function parseSetextHeading(sourceCode, node) {
|
|
6522
6421
|
if (getHeadingKind(sourceCode, node) !== "setext") return null;
|
|
6523
|
-
const lines = getParsedLines(sourceCode);
|
|
6524
6422
|
const contentLines = [];
|
|
6525
6423
|
const nodeLoc = sourceCode.getLoc(node);
|
|
6526
6424
|
for (let lineNumber = nodeLoc.start.line; lineNumber < nodeLoc.end.line; lineNumber++) {
|
|
6527
|
-
const content = parseContent(
|
|
6425
|
+
const content = parseContent(sourceCode, lineNumber);
|
|
6528
6426
|
contentLines.push(content);
|
|
6529
6427
|
}
|
|
6530
|
-
const underline = parseUnderline(
|
|
6428
|
+
const underline = parseUnderline(sourceCode, nodeLoc.end.line);
|
|
6531
6429
|
if (!underline) return null;
|
|
6532
6430
|
return {
|
|
6533
6431
|
contentLines,
|
|
@@ -6537,12 +6435,13 @@ function parseSetextHeading(sourceCode, node) {
|
|
|
6537
6435
|
/**
|
|
6538
6436
|
* Parse the content line of a setext heading.
|
|
6539
6437
|
*/
|
|
6540
|
-
function parseContent(
|
|
6438
|
+
function parseContent(sourceCode, lineNumber) {
|
|
6439
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
6541
6440
|
let prefix = "";
|
|
6542
6441
|
let spaceBefore = "";
|
|
6543
6442
|
let suffix = "";
|
|
6544
|
-
for (let index = 0; index <
|
|
6545
|
-
const c =
|
|
6443
|
+
for (let index = 0; index < lineText.length; index++) {
|
|
6444
|
+
const c = lineText[index];
|
|
6546
6445
|
if (!c.trim()) {
|
|
6547
6446
|
spaceBefore += c;
|
|
6548
6447
|
continue;
|
|
@@ -6552,24 +6451,18 @@ function parseContent(line) {
|
|
|
6552
6451
|
spaceBefore = "";
|
|
6553
6452
|
continue;
|
|
6554
6453
|
}
|
|
6555
|
-
suffix =
|
|
6454
|
+
suffix = lineText.slice(index);
|
|
6556
6455
|
break;
|
|
6557
6456
|
}
|
|
6558
6457
|
const content = suffix.trimEnd();
|
|
6559
6458
|
const spaceAfter = suffix.slice(content.length);
|
|
6459
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
6460
|
+
line: lineNumber,
|
|
6461
|
+
column: 1
|
|
6462
|
+
});
|
|
6560
6463
|
return {
|
|
6561
6464
|
text: content,
|
|
6562
|
-
range: [
|
|
6563
|
-
loc: {
|
|
6564
|
-
start: {
|
|
6565
|
-
line: line.line,
|
|
6566
|
-
column: prefix.length + spaceBefore.length + 1
|
|
6567
|
-
},
|
|
6568
|
-
end: {
|
|
6569
|
-
line: line.line,
|
|
6570
|
-
column: prefix.length + spaceBefore.length + content.length + 1
|
|
6571
|
-
}
|
|
6572
|
-
},
|
|
6465
|
+
range: [lineStartIndex + prefix.length + spaceBefore.length, lineStartIndex + lineText.length - spaceAfter.length],
|
|
6573
6466
|
raws: {
|
|
6574
6467
|
prefix,
|
|
6575
6468
|
spaceBefore,
|
|
@@ -6580,14 +6473,15 @@ function parseContent(line) {
|
|
|
6580
6473
|
/**
|
|
6581
6474
|
* Parse the underline of a setext heading.
|
|
6582
6475
|
*/
|
|
6583
|
-
function parseUnderline(
|
|
6476
|
+
function parseUnderline(sourceCode, lineNumber) {
|
|
6477
|
+
const lineText = sourceCode.lines[lineNumber - 1];
|
|
6584
6478
|
let marker = null;
|
|
6585
6479
|
let underlineText = "";
|
|
6586
6480
|
let prefix = "";
|
|
6587
6481
|
let spaceBefore = "";
|
|
6588
6482
|
let spaceAfter = "";
|
|
6589
|
-
for (let index =
|
|
6590
|
-
const c =
|
|
6483
|
+
for (let index = lineText.length - 1; index >= 0; index--) {
|
|
6484
|
+
const c = lineText[index];
|
|
6591
6485
|
if (!marker) {
|
|
6592
6486
|
if (c === "=" || c === "-") {
|
|
6593
6487
|
underlineText = c + underlineText;
|
|
@@ -6601,25 +6495,18 @@ function parseUnderline(line) {
|
|
|
6601
6495
|
spaceBefore = "";
|
|
6602
6496
|
} else if (!c.trim()) spaceBefore = c + spaceBefore;
|
|
6603
6497
|
else {
|
|
6604
|
-
prefix =
|
|
6498
|
+
prefix = lineText.slice(0, index + 1);
|
|
6605
6499
|
break;
|
|
6606
6500
|
}
|
|
6607
6501
|
}
|
|
6608
6502
|
if (!marker) return null;
|
|
6609
|
-
const
|
|
6610
|
-
|
|
6611
|
-
|
|
6612
|
-
|
|
6613
|
-
},
|
|
6614
|
-
end: {
|
|
6615
|
-
line: line.line,
|
|
6616
|
-
column: prefix.length + spaceBefore.length + underlineText.length + 1
|
|
6617
|
-
}
|
|
6618
|
-
};
|
|
6503
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
6504
|
+
line: lineNumber,
|
|
6505
|
+
column: 1
|
|
6506
|
+
});
|
|
6619
6507
|
return {
|
|
6620
6508
|
text: underlineText,
|
|
6621
|
-
range: [
|
|
6622
|
-
loc: underlineLoc,
|
|
6509
|
+
range: [lineStartIndex + prefix.length + spaceBefore.length, lineStartIndex + lineText.length - spaceAfter.length],
|
|
6623
6510
|
marker,
|
|
6624
6511
|
raws: {
|
|
6625
6512
|
prefix,
|
|
@@ -6681,8 +6568,14 @@ var level1_heading_style_default = createRule("level1-heading-style", {
|
|
|
6681
6568
|
*fix(fixer) {
|
|
6682
6569
|
const heading = parsed.contentLines[0];
|
|
6683
6570
|
yield fixer.insertTextBeforeRange(heading.range, "# ");
|
|
6684
|
-
const
|
|
6685
|
-
yield fixer.removeRange(
|
|
6571
|
+
const underlineLineNumber = sourceCode.getLocFromIndex(parsed.underline.range[0]).line;
|
|
6572
|
+
yield fixer.removeRange([sourceCode.getIndexFromLoc({
|
|
6573
|
+
line: underlineLineNumber,
|
|
6574
|
+
column: 1
|
|
6575
|
+
}), sourceCode.lines.length > underlineLineNumber ? sourceCode.getIndexFromLoc({
|
|
6576
|
+
line: underlineLineNumber + 1,
|
|
6577
|
+
column: 1
|
|
6578
|
+
}) : sourceCode.text.length]);
|
|
6686
6579
|
}
|
|
6687
6580
|
});
|
|
6688
6581
|
} else if (style === "setext") {
|
|
@@ -6695,9 +6588,9 @@ var level1_heading_style_default = createRule("level1-heading-style", {
|
|
|
6695
6588
|
if (!parsed) return;
|
|
6696
6589
|
yield fixer.removeRange([parsed.openingSequence.range[0], parsed.content.range[0]]);
|
|
6697
6590
|
if (parsed.closingSequence) yield fixer.removeRange([parsed.content.range[1], parsed.after?.range[1] ?? parsed.closingSequence.range[1]]);
|
|
6698
|
-
const lines = getParsedLines(sourceCode);
|
|
6699
6591
|
const underline = "=".repeat(Math.max(getTextWidth(parsed.content.text), 3));
|
|
6700
|
-
const
|
|
6592
|
+
const openingSequenceStartLoc = sourceCode.getLocFromIndex(parsed.openingSequence.range[0]);
|
|
6593
|
+
const appendingText = `\n${sourceCode.lines[openingSequenceStartLoc.line - 1].slice(0, openingSequenceStartLoc.column - 1)}${underline}`;
|
|
6701
6594
|
yield fixer.insertTextAfter(node, appendingText);
|
|
6702
6595
|
}
|
|
6703
6596
|
});
|
|
@@ -6758,8 +6651,14 @@ var level2_heading_style_default = createRule("level2-heading-style", {
|
|
|
6758
6651
|
*fix(fixer) {
|
|
6759
6652
|
const heading = parsed.contentLines[0];
|
|
6760
6653
|
yield fixer.insertTextBeforeRange(heading.range, "## ");
|
|
6761
|
-
const
|
|
6762
|
-
yield fixer.removeRange(
|
|
6654
|
+
const underlineLineNumber = sourceCode.getLocFromIndex(parsed.underline.range[0]).line;
|
|
6655
|
+
yield fixer.removeRange([sourceCode.getIndexFromLoc({
|
|
6656
|
+
line: underlineLineNumber,
|
|
6657
|
+
column: 1
|
|
6658
|
+
}), sourceCode.lines.length > underlineLineNumber ? sourceCode.getIndexFromLoc({
|
|
6659
|
+
line: underlineLineNumber + 1,
|
|
6660
|
+
column: 1
|
|
6661
|
+
}) : sourceCode.text.length]);
|
|
6763
6662
|
}
|
|
6764
6663
|
});
|
|
6765
6664
|
} else if (style === "setext") {
|
|
@@ -6772,9 +6671,9 @@ var level2_heading_style_default = createRule("level2-heading-style", {
|
|
|
6772
6671
|
if (!parsed) return;
|
|
6773
6672
|
yield fixer.removeRange([parsed.openingSequence.range[0], parsed.content.range[0]]);
|
|
6774
6673
|
if (parsed.closingSequence) yield fixer.removeRange([parsed.content.range[1], parsed.after?.range[1] ?? parsed.closingSequence.range[1]]);
|
|
6775
|
-
const lines = getParsedLines(sourceCode);
|
|
6776
6674
|
const underline = "-".repeat(Math.max(getTextWidth(parsed.content.text), 3));
|
|
6777
|
-
const
|
|
6675
|
+
const openingSequenceStartLoc = sourceCode.getLocFromIndex(parsed.openingSequence.range[0]);
|
|
6676
|
+
const appendingText = `\n${sourceCode.lines[openingSequenceStartLoc.line - 1].slice(0, openingSequenceStartLoc.column - 1)}${underline}`;
|
|
6778
6677
|
yield fixer.insertTextAfter(node, appendingText);
|
|
6779
6678
|
}
|
|
6780
6679
|
});
|
|
@@ -6836,8 +6735,7 @@ var link_bracket_newline_default = createRule("link-bracket-newline", {
|
|
|
6836
6735
|
function verifyNewlineAroundBrackets(node, bracketsRange) {
|
|
6837
6736
|
const newline = optionProvider(bracketsRange);
|
|
6838
6737
|
const openingBracketIndex = bracketsRange[0];
|
|
6839
|
-
|
|
6840
|
-
verifyNewlineAfterOpeningBracket(node, spaceAfterOpeningBracket, openingBracketIndex, newline);
|
|
6738
|
+
verifyNewlineAfterOpeningBracket(node, getSpaceAfterOpeningBracket(openingBracketIndex), openingBracketIndex, newline);
|
|
6841
6739
|
const closingBracketIndex = bracketsRange[1] - 1;
|
|
6842
6740
|
const newlineOptionBeforeClosingBracket = newline === "consistent" ? getSpaceAfterOpeningBracket(bracketsRange[0]).includes("\n") ? "always" : "never" : newline;
|
|
6843
6741
|
verifyNewlineBeforeClosingBracket(node, getSpaceBeforeClosingBracket(closingBracketIndex), openingBracketIndex, closingBracketIndex, newlineOptionBeforeClosingBracket);
|
|
@@ -6848,7 +6746,10 @@ var link_bracket_newline_default = createRule("link-bracket-newline", {
|
|
|
6848
6746
|
function verifyNewlineAfterOpeningBracket(node, spaceAfterOpeningBracket, openingBracketIndex, newline) {
|
|
6849
6747
|
if (newline === "always") {
|
|
6850
6748
|
if (spaceAfterOpeningBracket.includes("\n")) return;
|
|
6851
|
-
const loc =
|
|
6749
|
+
const loc = {
|
|
6750
|
+
start: sourceCode.getLocFromIndex(openingBracketIndex),
|
|
6751
|
+
end: sourceCode.getLocFromIndex(openingBracketIndex + 1)
|
|
6752
|
+
};
|
|
6852
6753
|
context.report({
|
|
6853
6754
|
node,
|
|
6854
6755
|
loc,
|
|
@@ -6859,7 +6760,10 @@ var link_bracket_newline_default = createRule("link-bracket-newline", {
|
|
|
6859
6760
|
if (!spaceAfterOpeningBracket.includes("\n")) return;
|
|
6860
6761
|
context.report({
|
|
6861
6762
|
node,
|
|
6862
|
-
loc:
|
|
6763
|
+
loc: {
|
|
6764
|
+
start: sourceCode.getLocFromIndex(openingBracketIndex + 1),
|
|
6765
|
+
end: sourceCode.getLocFromIndex(openingBracketIndex + 1 + spaceAfterOpeningBracket.length)
|
|
6766
|
+
},
|
|
6863
6767
|
messageId: "unexpectedNewlineAfterOpeningBracket",
|
|
6864
6768
|
fix: (fixer) => fixer.replaceTextRange([openingBracketIndex + 1, openingBracketIndex + 1 + spaceAfterOpeningBracket.length], " ")
|
|
6865
6769
|
});
|
|
@@ -6874,18 +6778,24 @@ var link_bracket_newline_default = createRule("link-bracket-newline", {
|
|
|
6874
6778
|
if (spaceBeforeClosingBracket.includes("\n")) return;
|
|
6875
6779
|
context.report({
|
|
6876
6780
|
node,
|
|
6877
|
-
loc:
|
|
6781
|
+
loc: {
|
|
6782
|
+
start: sourceCode.getLocFromIndex(closingBracketIndex),
|
|
6783
|
+
end: sourceCode.getLocFromIndex(closingBracketIndex + 1)
|
|
6784
|
+
},
|
|
6878
6785
|
messageId: "expectedNewlineBeforeClosingBracket",
|
|
6879
6786
|
fix: (fixer) => {
|
|
6880
|
-
const
|
|
6881
|
-
return fixer.insertTextBeforeRange([closingBracketIndex, closingBracketIndex + 1], `\n${" ".repeat(
|
|
6787
|
+
const openingBracketStartLoc = sourceCode.getLocFromIndex(openingBracketIndex);
|
|
6788
|
+
return fixer.insertTextBeforeRange([closingBracketIndex, closingBracketIndex + 1], `\n${" ".repeat(openingBracketStartLoc.column)}`);
|
|
6882
6789
|
}
|
|
6883
6790
|
});
|
|
6884
6791
|
} else if (newline === "never") {
|
|
6885
6792
|
if (!spaceBeforeClosingBracket.includes("\n")) return;
|
|
6886
6793
|
context.report({
|
|
6887
6794
|
node,
|
|
6888
|
-
loc:
|
|
6795
|
+
loc: {
|
|
6796
|
+
start: sourceCode.getLocFromIndex(closingBracketIndex - spaceBeforeClosingBracket.length),
|
|
6797
|
+
end: sourceCode.getLocFromIndex(closingBracketIndex)
|
|
6798
|
+
},
|
|
6889
6799
|
messageId: "unexpectedNewlineBeforeClosingBracket",
|
|
6890
6800
|
fix: (fixer) => fixer.replaceTextRange([closingBracketIndex - spaceBeforeClosingBracket.length, closingBracketIndex], " ")
|
|
6891
6801
|
});
|
|
@@ -7012,7 +6922,10 @@ var link_bracket_spacing_default = createRule("link-bracket-spacing", {
|
|
|
7012
6922
|
if (space.length > 0) return;
|
|
7013
6923
|
context.report({
|
|
7014
6924
|
node,
|
|
7015
|
-
loc:
|
|
6925
|
+
loc: {
|
|
6926
|
+
start: sourceCode.getLocFromIndex(openingBracketIndex),
|
|
6927
|
+
end: sourceCode.getLocFromIndex(openingBracketIndex + 1)
|
|
6928
|
+
},
|
|
7016
6929
|
messageId: "expectedSpaceAfterOpeningBracket",
|
|
7017
6930
|
fix: (fixer) => fixer.insertTextAfterRange([openingBracketIndex, openingBracketIndex + 1], " ")
|
|
7018
6931
|
});
|
|
@@ -7020,7 +6933,10 @@ var link_bracket_spacing_default = createRule("link-bracket-spacing", {
|
|
|
7020
6933
|
if (space.length === 0) return;
|
|
7021
6934
|
context.report({
|
|
7022
6935
|
node,
|
|
7023
|
-
loc:
|
|
6936
|
+
loc: {
|
|
6937
|
+
start: sourceCode.getLocFromIndex(openingBracketIndex + 1),
|
|
6938
|
+
end: sourceCode.getLocFromIndex(openingBracketIndex + 1 + space.length)
|
|
6939
|
+
},
|
|
7024
6940
|
messageId: "unexpectedSpaceAfterOpeningBracket",
|
|
7025
6941
|
fix: (fixer) => fixer.removeRange([openingBracketIndex + 1, openingBracketIndex + 1 + space.length])
|
|
7026
6942
|
});
|
|
@@ -7037,7 +6953,10 @@ var link_bracket_spacing_default = createRule("link-bracket-spacing", {
|
|
|
7037
6953
|
if (space.length > 0) return;
|
|
7038
6954
|
context.report({
|
|
7039
6955
|
node,
|
|
7040
|
-
loc:
|
|
6956
|
+
loc: {
|
|
6957
|
+
start: sourceCode.getLocFromIndex(closingBracketIndex),
|
|
6958
|
+
end: sourceCode.getLocFromIndex(closingBracketIndex + 1)
|
|
6959
|
+
},
|
|
7041
6960
|
messageId: "expectedSpaceBeforeClosingBracket",
|
|
7042
6961
|
fix: (fixer) => fixer.insertTextBeforeRange([closingBracketIndex, closingBracketIndex + 1], " ")
|
|
7043
6962
|
});
|
|
@@ -7045,7 +6964,10 @@ var link_bracket_spacing_default = createRule("link-bracket-spacing", {
|
|
|
7045
6964
|
if (space.length === 0) return;
|
|
7046
6965
|
context.report({
|
|
7047
6966
|
node,
|
|
7048
|
-
loc:
|
|
6967
|
+
loc: {
|
|
6968
|
+
start: sourceCode.getLocFromIndex(closingBracketIndex - space.length),
|
|
6969
|
+
end: sourceCode.getLocFromIndex(closingBracketIndex)
|
|
6970
|
+
},
|
|
7049
6971
|
messageId: "unexpectedSpaceBeforeClosingBracket",
|
|
7050
6972
|
fix: (fixer) => fixer.removeRange([closingBracketIndex - space.length, closingBracketIndex])
|
|
7051
6973
|
});
|
|
@@ -7179,7 +7101,10 @@ var link_destination_style_default = createRule("link-destination-style", {
|
|
|
7179
7101
|
}
|
|
7180
7102
|
context.report({
|
|
7181
7103
|
node,
|
|
7182
|
-
loc:
|
|
7104
|
+
loc: {
|
|
7105
|
+
start: sourceCode.getLocFromIndex(destination.range[0]),
|
|
7106
|
+
end: sourceCode.getLocFromIndex(destination.range[1])
|
|
7107
|
+
},
|
|
7183
7108
|
messageId: preferStyle.messageId,
|
|
7184
7109
|
*fix(fixer) {
|
|
7185
7110
|
if (destination.type === "bare" && preferStyle.typeName === "pointy-bracketed") {
|
|
@@ -7313,8 +7238,7 @@ var link_paren_newline_default = createRule("link-paren-newline", {
|
|
|
7313
7238
|
*/
|
|
7314
7239
|
function verifyNewlineAroundParens(node, openingParenIndex, closingParenIndex) {
|
|
7315
7240
|
const newline = optionProvider(openingParenIndex, closingParenIndex);
|
|
7316
|
-
|
|
7317
|
-
verifyNewlineAfterOpeningParen(node, spaceAfterOpeningParen, openingParenIndex, newline);
|
|
7241
|
+
verifyNewlineAfterOpeningParen(node, getSpaceAfterOpeningParen(openingParenIndex), openingParenIndex, newline);
|
|
7318
7242
|
const newlineOptionBeforeClosingParen = newline === "consistent" ? getSpaceAfterOpeningParen(openingParenIndex).includes("\n") ? "always" : "never" : newline;
|
|
7319
7243
|
verifyNewlineBeforeClosingParen(node, getSpaceBeforeClosingParen(closingParenIndex), openingParenIndex, closingParenIndex, newlineOptionBeforeClosingParen);
|
|
7320
7244
|
}
|
|
@@ -7324,7 +7248,10 @@ var link_paren_newline_default = createRule("link-paren-newline", {
|
|
|
7324
7248
|
function verifyNewlineAfterOpeningParen(node, spaceAfterOpeningParen, openingParenIndex, newline) {
|
|
7325
7249
|
if (newline === "always") {
|
|
7326
7250
|
if (spaceAfterOpeningParen.includes("\n")) return;
|
|
7327
|
-
const loc =
|
|
7251
|
+
const loc = {
|
|
7252
|
+
start: sourceCode.getLocFromIndex(openingParenIndex),
|
|
7253
|
+
end: sourceCode.getLocFromIndex(openingParenIndex + 1)
|
|
7254
|
+
};
|
|
7328
7255
|
context.report({
|
|
7329
7256
|
node,
|
|
7330
7257
|
loc,
|
|
@@ -7335,7 +7262,10 @@ var link_paren_newline_default = createRule("link-paren-newline", {
|
|
|
7335
7262
|
if (!spaceAfterOpeningParen.includes("\n")) return;
|
|
7336
7263
|
context.report({
|
|
7337
7264
|
node,
|
|
7338
|
-
loc:
|
|
7265
|
+
loc: {
|
|
7266
|
+
start: sourceCode.getLocFromIndex(openingParenIndex + 1),
|
|
7267
|
+
end: sourceCode.getLocFromIndex(openingParenIndex + 1 + spaceAfterOpeningParen.length)
|
|
7268
|
+
},
|
|
7339
7269
|
messageId: "unexpectedNewlineAfterOpeningParen",
|
|
7340
7270
|
fix: (fixer) => fixer.replaceTextRange([openingParenIndex + 1, openingParenIndex + 1 + spaceAfterOpeningParen.length], " ")
|
|
7341
7271
|
});
|
|
@@ -7350,18 +7280,24 @@ var link_paren_newline_default = createRule("link-paren-newline", {
|
|
|
7350
7280
|
if (spaceBeforeClosingParen.includes("\n")) return;
|
|
7351
7281
|
context.report({
|
|
7352
7282
|
node,
|
|
7353
|
-
loc:
|
|
7283
|
+
loc: {
|
|
7284
|
+
start: sourceCode.getLocFromIndex(closingParenIndex),
|
|
7285
|
+
end: sourceCode.getLocFromIndex(closingParenIndex + 1)
|
|
7286
|
+
},
|
|
7354
7287
|
messageId: "expectedNewlineBeforeClosingParen",
|
|
7355
7288
|
fix: (fixer) => {
|
|
7356
|
-
const
|
|
7357
|
-
return fixer.insertTextBeforeRange([closingParenIndex, closingParenIndex + 1], `\n${" ".repeat(
|
|
7289
|
+
const openingParenStartLoc = sourceCode.getLocFromIndex(openingParenIndex);
|
|
7290
|
+
return fixer.insertTextBeforeRange([closingParenIndex, closingParenIndex + 1], `\n${" ".repeat(openingParenStartLoc.column)}`);
|
|
7358
7291
|
}
|
|
7359
7292
|
});
|
|
7360
7293
|
} else if (newline === "never") {
|
|
7361
7294
|
if (!spaceBeforeClosingParen.includes("\n")) return;
|
|
7362
7295
|
context.report({
|
|
7363
7296
|
node,
|
|
7364
|
-
loc:
|
|
7297
|
+
loc: {
|
|
7298
|
+
start: sourceCode.getLocFromIndex(closingParenIndex - spaceBeforeClosingParen.length),
|
|
7299
|
+
end: sourceCode.getLocFromIndex(closingParenIndex)
|
|
7300
|
+
},
|
|
7365
7301
|
messageId: "unexpectedNewlineBeforeClosingParen",
|
|
7366
7302
|
fix: (fixer) => fixer.replaceTextRange([closingParenIndex - spaceBeforeClosingParen.length, closingParenIndex], " ")
|
|
7367
7303
|
});
|
|
@@ -7442,7 +7378,10 @@ var link_paren_spacing_default = createRule("link-paren-spacing", {
|
|
|
7442
7378
|
if (space.length > 0) return;
|
|
7443
7379
|
context.report({
|
|
7444
7380
|
node,
|
|
7445
|
-
loc:
|
|
7381
|
+
loc: {
|
|
7382
|
+
start: sourceCode.getLocFromIndex(openingParen.range[0]),
|
|
7383
|
+
end: sourceCode.getLocFromIndex(openingParen.range[1])
|
|
7384
|
+
},
|
|
7446
7385
|
messageId: "expectedSpaceAfterOpeningParen",
|
|
7447
7386
|
fix: (fixer) => fixer.insertTextAfterRange(openingParen.range, " ")
|
|
7448
7387
|
});
|
|
@@ -7450,7 +7389,10 @@ var link_paren_spacing_default = createRule("link-paren-spacing", {
|
|
|
7450
7389
|
if (space.length === 0) return;
|
|
7451
7390
|
context.report({
|
|
7452
7391
|
node,
|
|
7453
|
-
loc:
|
|
7392
|
+
loc: {
|
|
7393
|
+
start: sourceCode.getLocFromIndex(openingParen.range[1]),
|
|
7394
|
+
end: sourceCode.getLocFromIndex(openingParen.range[1] + space.length)
|
|
7395
|
+
},
|
|
7454
7396
|
messageId: "unexpectedSpaceAfterOpeningParen",
|
|
7455
7397
|
fix: (fixer) => fixer.removeRange([openingParen.range[1], openingParen.range[1] + space.length])
|
|
7456
7398
|
});
|
|
@@ -7466,7 +7408,10 @@ var link_paren_spacing_default = createRule("link-paren-spacing", {
|
|
|
7466
7408
|
if (space.length > 0) return;
|
|
7467
7409
|
context.report({
|
|
7468
7410
|
node,
|
|
7469
|
-
loc:
|
|
7411
|
+
loc: {
|
|
7412
|
+
start: sourceCode.getLocFromIndex(closingParen.range[0]),
|
|
7413
|
+
end: sourceCode.getLocFromIndex(closingParen.range[1])
|
|
7414
|
+
},
|
|
7470
7415
|
messageId: "expectedSpaceBeforeClosingParen",
|
|
7471
7416
|
fix: (fixer) => fixer.insertTextBeforeRange(closingParen.range, " ")
|
|
7472
7417
|
});
|
|
@@ -7474,7 +7419,10 @@ var link_paren_spacing_default = createRule("link-paren-spacing", {
|
|
|
7474
7419
|
if (space.length === 0) return;
|
|
7475
7420
|
context.report({
|
|
7476
7421
|
node,
|
|
7477
|
-
loc:
|
|
7422
|
+
loc: {
|
|
7423
|
+
start: sourceCode.getLocFromIndex(closingParen.range[0] - space.length),
|
|
7424
|
+
end: sourceCode.getLocFromIndex(closingParen.range[0])
|
|
7425
|
+
},
|
|
7478
7426
|
messageId: "unexpectedSpaceBeforeClosingParen",
|
|
7479
7427
|
fix: (fixer) => fixer.removeRange([closingParen.range[0] - space.length, closingParen.range[0]])
|
|
7480
7428
|
});
|
|
@@ -7584,7 +7532,10 @@ var link_title_style_default = createRule("link-title-style", {
|
|
|
7584
7532
|
}
|
|
7585
7533
|
context.report({
|
|
7586
7534
|
node,
|
|
7587
|
-
loc:
|
|
7535
|
+
loc: {
|
|
7536
|
+
start: sourceCode.getLocFromIndex(title.range[0]),
|
|
7537
|
+
end: sourceCode.getLocFromIndex(title.range[1])
|
|
7538
|
+
},
|
|
7588
7539
|
messageId: preferStyle.messageId,
|
|
7589
7540
|
*fix(fixer) {
|
|
7590
7541
|
yield fixer.replaceTextRange([title.range[0], title.range[0] + 1], preferStyle.open);
|
|
@@ -7695,13 +7646,15 @@ var list_marker_alignment_default = createRule("list-marker-alignment", {
|
|
|
7695
7646
|
messageId: "incorrectAlignment",
|
|
7696
7647
|
data: messageData,
|
|
7697
7648
|
fix(fixer) {
|
|
7698
|
-
const lines = getParsedLines(sourceCode);
|
|
7699
|
-
const line = lines.get(markerLocation.line);
|
|
7700
7649
|
if (diff < 0) {
|
|
7701
7650
|
const addSpaces = " ".repeat(-diff);
|
|
7702
|
-
|
|
7651
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
7652
|
+
line: markerLocation.line,
|
|
7653
|
+
column: 1
|
|
7654
|
+
});
|
|
7655
|
+
return fixer.insertTextBeforeRange([lineStartIndex + markerLocation.start, lineStartIndex + markerLocation.start], addSpaces);
|
|
7703
7656
|
}
|
|
7704
|
-
const beforeItemMarker = line.
|
|
7657
|
+
const beforeItemMarker = sourceCode.lines[markerLocation.line - 1].slice(0, markerLocation.start);
|
|
7705
7658
|
const newWidth = getWidth(beforeItemMarker) - diff;
|
|
7706
7659
|
let newBeforeItemMarker = beforeItemMarker;
|
|
7707
7660
|
while (getWidth(newBeforeItemMarker) > newWidth) {
|
|
@@ -7710,8 +7663,14 @@ var list_marker_alignment_default = createRule("list-marker-alignment", {
|
|
|
7710
7663
|
else return null;
|
|
7711
7664
|
}
|
|
7712
7665
|
if (getWidth(newBeforeItemMarker) < newWidth) newBeforeItemMarker += " ".repeat(newWidth - getWidth(newBeforeItemMarker));
|
|
7713
|
-
const referenceBeforeItemMarker = lines
|
|
7714
|
-
if (!referenceBeforeItemMarker.includes(">") || referenceBeforeItemMarker === newBeforeItemMarker)
|
|
7666
|
+
const referenceBeforeItemMarker = sourceCode.lines[referenceMarkerLocation.line - 1].slice(0, referenceMarkerLocation.start);
|
|
7667
|
+
if (!referenceBeforeItemMarker.includes(">") || referenceBeforeItemMarker === newBeforeItemMarker) {
|
|
7668
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
7669
|
+
line: markerLocation.line,
|
|
7670
|
+
column: 1
|
|
7671
|
+
});
|
|
7672
|
+
return fixer.replaceTextRange([lineStartIndex, lineStartIndex + markerLocation.start], newBeforeItemMarker);
|
|
7673
|
+
}
|
|
7715
7674
|
return null;
|
|
7716
7675
|
}
|
|
7717
7676
|
});
|
|
@@ -7749,11 +7708,14 @@ var no_implicit_block_closing_default = createRule("no-implicit-block-closing",
|
|
|
7749
7708
|
if (parsed.closingFence) return;
|
|
7750
7709
|
context.report({
|
|
7751
7710
|
node,
|
|
7752
|
-
loc:
|
|
7711
|
+
loc: {
|
|
7712
|
+
start: sourceCode.getLocFromIndex(parsed.openingFence.range[0]),
|
|
7713
|
+
end: sourceCode.getLocFromIndex(parsed.openingFence.range[1])
|
|
7714
|
+
},
|
|
7753
7715
|
messageId: "missingClosingFence",
|
|
7754
7716
|
fix(fixer) {
|
|
7755
|
-
const
|
|
7756
|
-
const prefix = sourceCode.lines[
|
|
7717
|
+
const openingFenceStartLoc = sourceCode.getLocFromIndex(parsed.openingFence.range[0]);
|
|
7718
|
+
const prefix = sourceCode.lines[openingFenceStartLoc.line - 1].slice(0, openingFenceStartLoc.column - 1).replace(/[^\s>]/gu, " ");
|
|
7757
7719
|
const closingFence = parsed.openingFence.text;
|
|
7758
7720
|
return fixer.insertTextAfter(node, `\n${prefix}${closingFence}`);
|
|
7759
7721
|
}
|
|
@@ -7765,11 +7727,14 @@ var no_implicit_block_closing_default = createRule("no-implicit-block-closing",
|
|
|
7765
7727
|
if (parsed.closingSequence) return;
|
|
7766
7728
|
context.report({
|
|
7767
7729
|
node,
|
|
7768
|
-
loc:
|
|
7730
|
+
loc: {
|
|
7731
|
+
start: sourceCode.getLocFromIndex(parsed.openingSequence.range[0]),
|
|
7732
|
+
end: sourceCode.getLocFromIndex(parsed.openingSequence.range[1])
|
|
7733
|
+
},
|
|
7769
7734
|
messageId: "missingClosingMath",
|
|
7770
7735
|
fix(fixer) {
|
|
7771
|
-
const
|
|
7772
|
-
const prefix = sourceCode.lines[
|
|
7736
|
+
const openingSequenceStartLoc = sourceCode.getLocFromIndex(parsed.openingSequence.range[0]);
|
|
7737
|
+
const prefix = sourceCode.lines[openingSequenceStartLoc.line - 1].slice(0, openingSequenceStartLoc.column - 1).replace(/[^\s>]/gu, " ");
|
|
7773
7738
|
const closingSequence = parsed.openingSequence.text;
|
|
7774
7739
|
return fixer.insertTextAfter(node, `\n${prefix}${closingSequence}`);
|
|
7775
7740
|
}
|
|
@@ -7781,12 +7746,15 @@ var no_implicit_block_closing_default = createRule("no-implicit-block-closing",
|
|
|
7781
7746
|
if (parsed.closingSequence) return;
|
|
7782
7747
|
context.report({
|
|
7783
7748
|
node,
|
|
7784
|
-
loc:
|
|
7749
|
+
loc: {
|
|
7750
|
+
start: sourceCode.getLocFromIndex(parsed.openingSequence.range[0]),
|
|
7751
|
+
end: sourceCode.getLocFromIndex(parsed.openingSequence.range[1])
|
|
7752
|
+
},
|
|
7785
7753
|
messageId: "missingClosingContainer",
|
|
7786
7754
|
fix(fixer) {
|
|
7787
7755
|
if (withinSameLengthOpeningCustomContainer(sourceCode, node, parsed.openingSequence.text.length)) return null;
|
|
7788
|
-
const
|
|
7789
|
-
const prefix = sourceCode.lines[
|
|
7756
|
+
const openingSequenceStartLoc = sourceCode.getLocFromIndex(parsed.openingSequence.range[0]);
|
|
7757
|
+
const prefix = sourceCode.lines[openingSequenceStartLoc.line - 1].slice(0, openingSequenceStartLoc.column - 1).replace(/[^\s>]/gu, " ");
|
|
7790
7758
|
const closingSequence = parsed.openingSequence.text;
|
|
7791
7759
|
return fixer.insertTextAfter(node, `\n${prefix}${closingSequence}`);
|
|
7792
7760
|
}
|
|
@@ -7858,7 +7826,6 @@ var no_laziness_blockquotes_default = createRule("no-laziness-blockquotes", {
|
|
|
7858
7826
|
for (const group of invalidGroups) {
|
|
7859
7827
|
const first = group.lines[0];
|
|
7860
7828
|
const last = group.lines.at(-1);
|
|
7861
|
-
const lines = getParsedLines(sourceCode);
|
|
7862
7829
|
context.report({
|
|
7863
7830
|
loc: {
|
|
7864
7831
|
start: {
|
|
@@ -7867,7 +7834,7 @@ var no_laziness_blockquotes_default = createRule("no-laziness-blockquotes", {
|
|
|
7867
7834
|
},
|
|
7868
7835
|
end: {
|
|
7869
7836
|
line: last.line,
|
|
7870
|
-
column: lines
|
|
7837
|
+
column: sourceCode.lines[last.line - 1].length + 1
|
|
7871
7838
|
}
|
|
7872
7839
|
},
|
|
7873
7840
|
messageId: "lazyBlockquoteLine",
|
|
@@ -7880,15 +7847,21 @@ var no_laziness_blockquotes_default = createRule("no-laziness-blockquotes", {
|
|
|
7880
7847
|
data: { missingMarkers: `${base.level - group.level}` },
|
|
7881
7848
|
*fix(fixer) {
|
|
7882
7849
|
for (const invalidLine of group.lines) {
|
|
7883
|
-
const
|
|
7884
|
-
|
|
7850
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
7851
|
+
line: invalidLine.line,
|
|
7852
|
+
column: 1
|
|
7853
|
+
});
|
|
7854
|
+
yield fixer.replaceTextRange([lineStartIndex, lineStartIndex + invalidLine.prefix.length], base.prefix);
|
|
7885
7855
|
}
|
|
7886
7856
|
}
|
|
7887
7857
|
}, {
|
|
7888
7858
|
messageId: "addLineBreak",
|
|
7889
7859
|
fix: (fixer) => {
|
|
7890
|
-
const
|
|
7891
|
-
|
|
7860
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
7861
|
+
line: first.line,
|
|
7862
|
+
column: 1
|
|
7863
|
+
});
|
|
7864
|
+
return fixer.insertTextBeforeRange([lineStartIndex, lineStartIndex], `${first.prefix.trimEnd()}\n`);
|
|
7892
7865
|
}
|
|
7893
7866
|
}]
|
|
7894
7867
|
});
|
|
@@ -7949,8 +7922,7 @@ function parseTableDelimiterRow(sourceCode, node) {
|
|
|
7949
7922
|
const headerRow = node.children[0];
|
|
7950
7923
|
const headerRange = sourceCode.getRange(headerRow);
|
|
7951
7924
|
const delimiterEndIndex = node.children.length > 1 ? sourceCode.getRange(node.children[1])[0] : sourceCode.getRange(node)[1];
|
|
7952
|
-
const
|
|
7953
|
-
const parsed = parseTableDelimiterRowFromText(delimiterText);
|
|
7925
|
+
const parsed = parseTableDelimiterRowFromText(sourceCode.text.slice(headerRange[1], delimiterEndIndex));
|
|
7954
7926
|
if (!parsed) return null;
|
|
7955
7927
|
const delimiters = parsed.delimiters.map((d) => {
|
|
7956
7928
|
let leadingPipe = null;
|
|
@@ -7958,8 +7930,7 @@ function parseTableDelimiterRow(sourceCode, node) {
|
|
|
7958
7930
|
const leadingPipeRange = [headerRange[1] + d.leadingPipe.range[0], headerRange[1] + d.leadingPipe.range[1]];
|
|
7959
7931
|
leadingPipe = {
|
|
7960
7932
|
text: d.leadingPipe.text,
|
|
7961
|
-
range: leadingPipeRange
|
|
7962
|
-
loc: getSourceLocationFromRange(sourceCode, headerRow, leadingPipeRange)
|
|
7933
|
+
range: leadingPipeRange
|
|
7963
7934
|
};
|
|
7964
7935
|
}
|
|
7965
7936
|
const delimiterRange = [headerRange[1] + d.delimiter.range[0], headerRange[1] + d.delimiter.range[1]];
|
|
@@ -7968,8 +7939,7 @@ function parseTableDelimiterRow(sourceCode, node) {
|
|
|
7968
7939
|
delimiter: {
|
|
7969
7940
|
text: d.delimiter.text,
|
|
7970
7941
|
align: d.delimiter.text.startsWith(":") ? d.delimiter.text.endsWith(":") ? "center" : "left" : d.delimiter.text.endsWith(":") ? "right" : "none",
|
|
7971
|
-
range: delimiterRange
|
|
7972
|
-
loc: getSourceLocationFromRange(sourceCode, headerRow, delimiterRange)
|
|
7942
|
+
range: delimiterRange
|
|
7973
7943
|
}
|
|
7974
7944
|
};
|
|
7975
7945
|
});
|
|
@@ -7978,8 +7948,7 @@ function parseTableDelimiterRow(sourceCode, node) {
|
|
|
7978
7948
|
const trailingPipeRange = [headerRange[1] + parsed.trailingPipe.range[0], headerRange[1] + parsed.trailingPipe.range[1]];
|
|
7979
7949
|
trailingPipe = {
|
|
7980
7950
|
text: parsed.trailingPipe.text,
|
|
7981
|
-
range: trailingPipeRange
|
|
7982
|
-
loc: getSourceLocationFromRange(sourceCode, headerRow, trailingPipeRange)
|
|
7951
|
+
range: trailingPipeRange
|
|
7983
7952
|
};
|
|
7984
7953
|
}
|
|
7985
7954
|
const firstToken = delimiters[0].leadingPipe ?? delimiters[0].delimiter;
|
|
@@ -7987,11 +7956,7 @@ function parseTableDelimiterRow(sourceCode, node) {
|
|
|
7987
7956
|
return {
|
|
7988
7957
|
delimiters,
|
|
7989
7958
|
trailingPipe,
|
|
7990
|
-
range: [firstToken.range[0], lastToken.range[1]]
|
|
7991
|
-
loc: {
|
|
7992
|
-
start: firstToken.loc.start,
|
|
7993
|
-
end: lastToken.loc.end
|
|
7994
|
-
}
|
|
7959
|
+
range: [firstToken.range[0], lastToken.range[1]]
|
|
7995
7960
|
};
|
|
7996
7961
|
}
|
|
7997
7962
|
/**
|
|
@@ -8019,13 +7984,7 @@ function parseTableRow(sourceCode, node) {
|
|
|
8019
7984
|
if (cell.children.length > 0) {
|
|
8020
7985
|
const firstChild = cell.children[0];
|
|
8021
7986
|
const lastChild = cell.children[cell.children.length - 1];
|
|
8022
|
-
parsedCell = {
|
|
8023
|
-
range: [sourceCode.getRange(firstChild)[0], sourceCode.getRange(lastChild)[1]],
|
|
8024
|
-
loc: {
|
|
8025
|
-
start: sourceCode.getLoc(firstChild).start,
|
|
8026
|
-
end: sourceCode.getLoc(lastChild).end
|
|
8027
|
-
}
|
|
8028
|
-
};
|
|
7987
|
+
parsedCell = { range: [sourceCode.getRange(firstChild)[0], sourceCode.getRange(lastChild)[1]] };
|
|
8029
7988
|
}
|
|
8030
7989
|
cells.push({
|
|
8031
7990
|
leadingPipe,
|
|
@@ -8033,14 +7992,7 @@ function parseTableRow(sourceCode, node) {
|
|
|
8033
7992
|
});
|
|
8034
7993
|
trailingPipe = sourceCode.text[cellRange[1] - 1] === "|" ? {
|
|
8035
7994
|
text: "|",
|
|
8036
|
-
range: [cellRange[1] - 1, cellRange[1]]
|
|
8037
|
-
loc: {
|
|
8038
|
-
start: {
|
|
8039
|
-
line: cellLoc.end.line,
|
|
8040
|
-
column: cellLoc.end.column - 1
|
|
8041
|
-
},
|
|
8042
|
-
end: cellLoc.end
|
|
8043
|
-
}
|
|
7995
|
+
range: [cellRange[1] - 1, cellRange[1]]
|
|
8044
7996
|
} : null;
|
|
8045
7997
|
}
|
|
8046
7998
|
const firstToken = cells[0].leadingPipe ?? cells[0].cell;
|
|
@@ -8048,11 +8000,7 @@ function parseTableRow(sourceCode, node) {
|
|
|
8048
8000
|
return {
|
|
8049
8001
|
cells,
|
|
8050
8002
|
trailingPipe,
|
|
8051
|
-
range: [firstToken.range[0], lastToken.range[1]]
|
|
8052
|
-
loc: {
|
|
8053
|
-
start: firstToken.loc.start,
|
|
8054
|
-
end: lastToken.loc.end
|
|
8055
|
-
}
|
|
8003
|
+
range: [firstToken.range[0], lastToken.range[1]]
|
|
8056
8004
|
};
|
|
8057
8005
|
}
|
|
8058
8006
|
/**
|
|
@@ -8261,8 +8209,7 @@ var no_multi_spaces_default = createRule("no-multi-spaces", {
|
|
|
8261
8209
|
* Verify spaces in a node
|
|
8262
8210
|
*/
|
|
8263
8211
|
function verifyTextInNode(node) {
|
|
8264
|
-
|
|
8265
|
-
verifyTextInRange(node, nodeRange);
|
|
8212
|
+
verifyTextInRange(node, sourceCode.getRange(node));
|
|
8266
8213
|
}
|
|
8267
8214
|
/**
|
|
8268
8215
|
* Process a blockquote node
|
|
@@ -8315,8 +8262,7 @@ var no_multi_spaces_default = createRule("no-multi-spaces", {
|
|
|
8315
8262
|
}
|
|
8316
8263
|
if (spaces.length < 2) continue;
|
|
8317
8264
|
const start = textRange[0] + match.index;
|
|
8318
|
-
const
|
|
8319
|
-
const range = [start, end];
|
|
8265
|
+
const range = [start, start + spaces.length];
|
|
8320
8266
|
if (nodeRange[0] === range[0]) {
|
|
8321
8267
|
let isIndentation = true;
|
|
8322
8268
|
for (let index = nodeRange[0] - 1; index >= 0; index--) {
|
|
@@ -8342,7 +8288,10 @@ var no_multi_spaces_default = createRule("no-multi-spaces", {
|
|
|
8342
8288
|
context.report({
|
|
8343
8289
|
node,
|
|
8344
8290
|
messageId: "multipleSpaces",
|
|
8345
|
-
loc:
|
|
8291
|
+
loc: {
|
|
8292
|
+
start: sourceCode.getLocFromIndex(range[0]),
|
|
8293
|
+
end: sourceCode.getLocFromIndex(range[1])
|
|
8294
|
+
},
|
|
8346
8295
|
fix(fixer) {
|
|
8347
8296
|
return fixer.replaceTextRange(range, " ");
|
|
8348
8297
|
}
|
|
@@ -8416,7 +8365,11 @@ var no_multiple_empty_lines_default = createRule("no-multiple-empty-lines", {
|
|
|
8416
8365
|
toml: addIgnoreLoc,
|
|
8417
8366
|
json: addIgnoreLoc,
|
|
8418
8367
|
"root:exit"() {
|
|
8419
|
-
const lines =
|
|
8368
|
+
const lines = sourceCode.lines.map((text, index) => ({
|
|
8369
|
+
line: index + 1,
|
|
8370
|
+
text
|
|
8371
|
+
}));
|
|
8372
|
+
if (lines.at(-1)?.text === "") lines.pop();
|
|
8420
8373
|
const bofEmptyLines = [];
|
|
8421
8374
|
while (lines.length) {
|
|
8422
8375
|
if (lines[0].text.trim()) break;
|
|
@@ -8440,7 +8393,7 @@ var no_multiple_empty_lines_default = createRule("no-multiple-empty-lines", {
|
|
|
8440
8393
|
messageId: "blankBeginningOfFile",
|
|
8441
8394
|
data: { max: maxBOF },
|
|
8442
8395
|
fix(fixer) {
|
|
8443
|
-
return fixer.removeRange(
|
|
8396
|
+
return fixer.removeRange(getRangeFromLines(first.line, last.line));
|
|
8444
8397
|
}
|
|
8445
8398
|
});
|
|
8446
8399
|
}
|
|
@@ -8467,7 +8420,7 @@ var no_multiple_empty_lines_default = createRule("no-multiple-empty-lines", {
|
|
|
8467
8420
|
messageId: "blankEndOfFile",
|
|
8468
8421
|
data: { max: maxEOF },
|
|
8469
8422
|
fix(fixer) {
|
|
8470
|
-
return fixer.removeRange(
|
|
8423
|
+
return fixer.removeRange(getRangeFromLines(first.line, last.line));
|
|
8471
8424
|
}
|
|
8472
8425
|
});
|
|
8473
8426
|
}
|
|
@@ -8501,13 +8454,25 @@ var no_multiple_empty_lines_default = createRule("no-multiple-empty-lines", {
|
|
|
8501
8454
|
pluralizedLines: max === 1 ? "line" : "lines"
|
|
8502
8455
|
},
|
|
8503
8456
|
fix(fixer) {
|
|
8504
|
-
return fixer.removeRange(
|
|
8457
|
+
return fixer.removeRange(getRangeFromLines(first.line, last.line));
|
|
8505
8458
|
}
|
|
8506
8459
|
});
|
|
8507
8460
|
}
|
|
8508
8461
|
}
|
|
8509
8462
|
}
|
|
8510
8463
|
};
|
|
8464
|
+
/**
|
|
8465
|
+
* Get the range from the given line numbers (1-based)
|
|
8466
|
+
*/
|
|
8467
|
+
function getRangeFromLines(firstLine, lastLine) {
|
|
8468
|
+
return [sourceCode.getIndexFromLoc({
|
|
8469
|
+
line: firstLine,
|
|
8470
|
+
column: 1
|
|
8471
|
+
}), sourceCode.lines.length > lastLine ? sourceCode.getIndexFromLoc({
|
|
8472
|
+
line: lastLine + 1,
|
|
8473
|
+
column: 1
|
|
8474
|
+
}) : sourceCode.text.length];
|
|
8475
|
+
}
|
|
8511
8476
|
}
|
|
8512
8477
|
});
|
|
8513
8478
|
|
|
@@ -8542,7 +8507,10 @@ var no_text_backslash_linebreak_default = createRule("no-text-backslash-linebrea
|
|
|
8542
8507
|
const backslashRange = [range[1] - 1, range[1]];
|
|
8543
8508
|
context.report({
|
|
8544
8509
|
node,
|
|
8545
|
-
loc:
|
|
8510
|
+
loc: {
|
|
8511
|
+
start: sourceCode.getLocFromIndex(backslashRange[0]),
|
|
8512
|
+
end: sourceCode.getLocFromIndex(backslashRange[1])
|
|
8513
|
+
},
|
|
8546
8514
|
messageId: "textBackslashWithLinebreak",
|
|
8547
8515
|
suggest: [{
|
|
8548
8516
|
messageId: "removeBackslash",
|
|
@@ -8641,7 +8609,10 @@ var no_trailing_spaces_default = createRule("no-trailing-spaces", {
|
|
|
8641
8609
|
if (extraSpaces <= 0) return;
|
|
8642
8610
|
context.report({
|
|
8643
8611
|
node,
|
|
8644
|
-
loc:
|
|
8612
|
+
loc: {
|
|
8613
|
+
start: sourceCode.getLocFromIndex(range[0]),
|
|
8614
|
+
end: sourceCode.getLocFromIndex(range[0] + extraSpaces)
|
|
8615
|
+
},
|
|
8645
8616
|
messageId: "trailingSpace",
|
|
8646
8617
|
fix(fixer) {
|
|
8647
8618
|
return fixer.removeRange([range[0], range[0] + extraSpaces]);
|
|
@@ -8654,28 +8625,28 @@ var no_trailing_spaces_default = createRule("no-trailing-spaces", {
|
|
|
8654
8625
|
"root:exit"() {
|
|
8655
8626
|
const re = /[^\S\n\r]+$/u;
|
|
8656
8627
|
const skipMatch = /^[^\S\n\r]*$/u;
|
|
8657
|
-
const lines = getParsedLines(sourceCode);
|
|
8658
8628
|
const commentLineNumbers = getCommentLineNumbers();
|
|
8659
|
-
for (const
|
|
8660
|
-
const
|
|
8629
|
+
for (const [lineIndex, lineText] of sourceCode.lines.entries()) {
|
|
8630
|
+
const lineNumber = lineIndex + 1;
|
|
8631
|
+
const matches = re.exec(lineText);
|
|
8661
8632
|
if (!matches) continue;
|
|
8662
8633
|
const location = {
|
|
8663
8634
|
start: {
|
|
8664
|
-
line:
|
|
8635
|
+
line: lineNumber,
|
|
8665
8636
|
column: matches.index + 1
|
|
8666
8637
|
},
|
|
8667
8638
|
end: {
|
|
8668
|
-
line:
|
|
8639
|
+
line: lineNumber,
|
|
8669
8640
|
column: matches.index + 1 + matches[0].length
|
|
8670
8641
|
}
|
|
8671
8642
|
};
|
|
8672
|
-
const range = [
|
|
8643
|
+
const range = [sourceCode.getIndexFromLoc(location.start), sourceCode.getIndexFromLoc(location.end)];
|
|
8673
8644
|
if (ignoreNodes.some((node) => {
|
|
8674
8645
|
const nodeRange = sourceCode.getRange(node);
|
|
8675
8646
|
return nodeRange[0] <= range[0] && range[1] <= nodeRange[1];
|
|
8676
8647
|
})) continue;
|
|
8677
|
-
if (skipBlankLines && skipMatch.test(
|
|
8678
|
-
if (!ignoreComments || !commentLineNumbers.has(
|
|
8648
|
+
if (skipBlankLines && skipMatch.test(lineText)) continue;
|
|
8649
|
+
if (!ignoreComments || !commentLineNumbers.has(lineNumber)) report(location, range);
|
|
8679
8650
|
}
|
|
8680
8651
|
}
|
|
8681
8652
|
};
|
|
@@ -9149,15 +9120,18 @@ var padded_custom_containers_default = createRule("padded-custom-containers", {
|
|
|
9149
9120
|
const lastChild = node.children[node.children.length - 1];
|
|
9150
9121
|
const firstChildLoc = sourceCode.getLoc(firstChild);
|
|
9151
9122
|
const lastChildLoc = sourceCode.getLoc(lastChild);
|
|
9152
|
-
const paddingAfterOpeningLines = firstChildLoc.start.line - openingSequence.
|
|
9153
|
-
const paddingBeforeClosingLines = closingSequence ? closingSequence.
|
|
9123
|
+
const paddingAfterOpeningLines = firstChildLoc.start.line - sourceCode.getLocFromIndex(openingSequence.range[1]).line - 1;
|
|
9124
|
+
const paddingBeforeClosingLines = closingSequence ? sourceCode.getLocFromIndex(closingSequence.range[0]).line - lastChildLoc.end.line - 1 : null;
|
|
9154
9125
|
if (padding === "always") {
|
|
9155
9126
|
if (paddingAfterOpeningLines <= 0) {
|
|
9156
9127
|
const reportEndToken = parsed.info ?? openingSequence;
|
|
9157
9128
|
const reportRange = [openingSequence.range[0], reportEndToken.range[1]];
|
|
9158
9129
|
context.report({
|
|
9159
9130
|
messageId: "expectedPaddingAfterOpeningMarker",
|
|
9160
|
-
loc:
|
|
9131
|
+
loc: {
|
|
9132
|
+
start: sourceCode.getLocFromIndex(reportRange[0]),
|
|
9133
|
+
end: sourceCode.getLocFromIndex(reportRange[1])
|
|
9134
|
+
},
|
|
9161
9135
|
fix(fixer) {
|
|
9162
9136
|
return fixer.insertTextAfterRange(reportRange, "\n");
|
|
9163
9137
|
}
|
|
@@ -9165,33 +9139,62 @@ var padded_custom_containers_default = createRule("padded-custom-containers", {
|
|
|
9165
9139
|
}
|
|
9166
9140
|
if (closingSequence && paddingBeforeClosingLines !== null && paddingBeforeClosingLines <= 0) context.report({
|
|
9167
9141
|
messageId: "expectedPaddingBeforeClosingMarker",
|
|
9168
|
-
loc:
|
|
9142
|
+
loc: {
|
|
9143
|
+
start: sourceCode.getLocFromIndex(closingSequence.range[0]),
|
|
9144
|
+
end: sourceCode.getLocFromIndex(closingSequence.range[1])
|
|
9145
|
+
},
|
|
9169
9146
|
fix(fixer) {
|
|
9170
|
-
return fixer.insertTextBeforeRange([closingSequence.range[0] - closingSequence.
|
|
9147
|
+
return fixer.insertTextBeforeRange([closingSequence.range[0] - sourceCode.getLocFromIndex(closingSequence.range[0]).column + 1, closingSequence.range[1]], "\n");
|
|
9171
9148
|
}
|
|
9172
9149
|
});
|
|
9173
9150
|
} else if (padding === "never") {
|
|
9174
9151
|
if (paddingAfterOpeningLines > 0) {
|
|
9175
|
-
const
|
|
9176
|
-
const
|
|
9177
|
-
|
|
9178
|
-
|
|
9152
|
+
const startLineNumber = sourceCode.getLocFromIndex(openingSequence.range[1]).line + 1;
|
|
9153
|
+
const removeRange = [sourceCode.getIndexFromLoc({
|
|
9154
|
+
line: startLineNumber,
|
|
9155
|
+
column: 1
|
|
9156
|
+
}), sourceCode.getIndexFromLoc({
|
|
9157
|
+
line: firstChildLoc.start.line,
|
|
9158
|
+
column: 1
|
|
9159
|
+
})];
|
|
9179
9160
|
context.report({
|
|
9180
9161
|
messageId: "unexpectedPaddingAfterOpeningMarker",
|
|
9181
|
-
loc:
|
|
9162
|
+
loc: {
|
|
9163
|
+
start: {
|
|
9164
|
+
line: startLineNumber,
|
|
9165
|
+
column: 1
|
|
9166
|
+
},
|
|
9167
|
+
end: {
|
|
9168
|
+
line: firstChildLoc.start.line,
|
|
9169
|
+
column: 1
|
|
9170
|
+
}
|
|
9171
|
+
},
|
|
9182
9172
|
fix(fixer) {
|
|
9183
9173
|
return fixer.removeRange(removeRange);
|
|
9184
9174
|
}
|
|
9185
9175
|
});
|
|
9186
9176
|
}
|
|
9187
9177
|
if (closingSequence && paddingBeforeClosingLines !== null && paddingBeforeClosingLines > 0) {
|
|
9188
|
-
const
|
|
9189
|
-
const
|
|
9190
|
-
|
|
9191
|
-
|
|
9178
|
+
const closingSequenceStartLoc = sourceCode.getLocFromIndex(closingSequence.range[0]);
|
|
9179
|
+
const removeRange = [sourceCode.getIndexFromLoc({
|
|
9180
|
+
line: lastChildLoc.end.line + 1,
|
|
9181
|
+
column: 1
|
|
9182
|
+
}), sourceCode.getIndexFromLoc({
|
|
9183
|
+
line: closingSequenceStartLoc.line,
|
|
9184
|
+
column: 1
|
|
9185
|
+
})];
|
|
9192
9186
|
context.report({
|
|
9193
9187
|
messageId: "unexpectedPaddingBeforeClosingMarker",
|
|
9194
|
-
loc:
|
|
9188
|
+
loc: {
|
|
9189
|
+
start: {
|
|
9190
|
+
line: lastChildLoc.end.line + 1,
|
|
9191
|
+
column: 1
|
|
9192
|
+
},
|
|
9193
|
+
end: {
|
|
9194
|
+
line: closingSequenceStartLoc.line,
|
|
9195
|
+
column: 1
|
|
9196
|
+
}
|
|
9197
|
+
},
|
|
9195
9198
|
fix(fixer) {
|
|
9196
9199
|
return fixer.removeRange(removeRange);
|
|
9197
9200
|
}
|
|
@@ -9294,8 +9297,7 @@ const BLOCK_TYPE_MAP = {
|
|
|
9294
9297
|
* Get the block type of a node
|
|
9295
9298
|
*/
|
|
9296
9299
|
function getBlockType(node) {
|
|
9297
|
-
const
|
|
9298
|
-
const blockType = BLOCK_TYPE_MAP[nodeType];
|
|
9300
|
+
const blockType = BLOCK_TYPE_MAP[node.type];
|
|
9299
9301
|
if (blockType) return blockType;
|
|
9300
9302
|
return null;
|
|
9301
9303
|
}
|
|
@@ -9421,6 +9423,7 @@ var padding_line_between_blocks_default = createRule("padding-line-between-block
|
|
|
9421
9423
|
for (let i = 0; i < containerNode.children.length - 1; i++) {
|
|
9422
9424
|
const prevBlock = containerNode.children[i];
|
|
9423
9425
|
const nextBlock = containerNode.children[i + 1];
|
|
9426
|
+
if (isIgnore(prevBlock)) continue;
|
|
9424
9427
|
const expected = getExpectedPadding(prevBlock, nextBlock);
|
|
9425
9428
|
if (expected === null) continue;
|
|
9426
9429
|
const prevLoc = sourceCode.getLoc(prevBlock);
|
|
@@ -9475,10 +9478,14 @@ var padding_line_between_blocks_default = createRule("padding-line-between-block
|
|
|
9475
9478
|
const startNext = sourceCode.getRange(nextBlock)[0] - nextLoc.start.column;
|
|
9476
9479
|
return fixer.insertTextBeforeRange([startNext, startNext], text);
|
|
9477
9480
|
}
|
|
9478
|
-
|
|
9479
|
-
|
|
9480
|
-
|
|
9481
|
-
|
|
9481
|
+
if (prevLoc.end.line + 1 < nextLoc.start.line) return fixer.removeRange([sourceCode.getIndexFromLoc({
|
|
9482
|
+
line: prevLoc.end.line + 1,
|
|
9483
|
+
column: 1
|
|
9484
|
+
}), sourceCode.getIndexFromLoc({
|
|
9485
|
+
line: nextLoc.start.line,
|
|
9486
|
+
column: 1
|
|
9487
|
+
})]);
|
|
9488
|
+
return null;
|
|
9482
9489
|
}
|
|
9483
9490
|
});
|
|
9484
9491
|
}
|
|
@@ -9492,6 +9499,16 @@ var padding_line_between_blocks_default = createRule("padding-line-between-block
|
|
|
9492
9499
|
containerStack.shift();
|
|
9493
9500
|
}
|
|
9494
9501
|
};
|
|
9502
|
+
/**
|
|
9503
|
+
* Check if the previous block is ignored
|
|
9504
|
+
*/
|
|
9505
|
+
function isIgnore(prevBlock) {
|
|
9506
|
+
if (isHTMLComment(prevBlock)) {
|
|
9507
|
+
const value = getHTMLCommentValue(prevBlock);
|
|
9508
|
+
if (/^\s*(?:eslint|markdownlint)-disable-next-line\b/u.test(value)) return true;
|
|
9509
|
+
}
|
|
9510
|
+
return false;
|
|
9511
|
+
}
|
|
9495
9512
|
}
|
|
9496
9513
|
});
|
|
9497
9514
|
|
|
@@ -9559,16 +9576,19 @@ var prefer_fenced_code_blocks_default = createRule("prefer-fenced-code-blocks",
|
|
|
9559
9576
|
messageId: "useFencedCodeBlock",
|
|
9560
9577
|
fix(fixer) {
|
|
9561
9578
|
if (!isFixableIndentedCodeBlock(node)) return null;
|
|
9562
|
-
const lines = getParsedLines(sourceCode);
|
|
9563
9579
|
const startColumnOffset = loc.start.column - 1;
|
|
9564
9580
|
const removeRanges = [];
|
|
9565
9581
|
let prefixText = null;
|
|
9566
9582
|
for (let line = loc.start.line; line <= loc.end.line; line++) {
|
|
9567
|
-
const
|
|
9568
|
-
const currentPrefix = normalizePrefix(
|
|
9583
|
+
const lineText = sourceCode.lines[line - 1];
|
|
9584
|
+
const currentPrefix = normalizePrefix(lineText.slice(0, startColumnOffset));
|
|
9569
9585
|
if (!prefixText) prefixText = currentPrefix;
|
|
9570
9586
|
else if (currentPrefix !== prefixText) return null;
|
|
9571
|
-
|
|
9587
|
+
const lineStartIndex = sourceCode.getIndexFromLoc({
|
|
9588
|
+
line,
|
|
9589
|
+
column: 1
|
|
9590
|
+
});
|
|
9591
|
+
let removeRange = [lineStartIndex + startColumnOffset, lineStartIndex + startColumnOffset + 4];
|
|
9572
9592
|
for (let index = removeRange[0]; index < removeRange[1]; index++) {
|
|
9573
9593
|
const c = sourceCode.text[index];
|
|
9574
9594
|
if (c === " ") continue;
|
|
@@ -9580,8 +9600,14 @@ var prefer_fenced_code_blocks_default = createRule("prefer-fenced-code-blocks",
|
|
|
9580
9600
|
}
|
|
9581
9601
|
removeRanges.push(removeRange);
|
|
9582
9602
|
}
|
|
9583
|
-
const beginFenceInsertOffset =
|
|
9584
|
-
|
|
9603
|
+
const beginFenceInsertOffset = sourceCode.getIndexFromLoc({
|
|
9604
|
+
line: loc.start.line,
|
|
9605
|
+
column: 1
|
|
9606
|
+
});
|
|
9607
|
+
const endFenceInsertOffset = sourceCode.lines.length > loc.end.line ? sourceCode.getIndexFromLoc({
|
|
9608
|
+
line: loc.end.line + 1,
|
|
9609
|
+
column: 1
|
|
9610
|
+
}) : sourceCode.text.length;
|
|
9585
9611
|
return [
|
|
9586
9612
|
fixer.insertTextBeforeRange([beginFenceInsertOffset, beginFenceInsertOffset], `${prefixText}\`\`\`\n`),
|
|
9587
9613
|
...removeRanges.map((removeRange) => fixer.removeRange(removeRange)),
|
|
@@ -9595,12 +9621,11 @@ var prefer_fenced_code_blocks_default = createRule("prefer-fenced-code-blocks",
|
|
|
9595
9621
|
*/
|
|
9596
9622
|
function isFixableIndentedCodeBlock(node) {
|
|
9597
9623
|
if (!node.value.startsWith(" ")) return true;
|
|
9598
|
-
const lines = getParsedLines(sourceCode);
|
|
9599
9624
|
const loc = sourceCode.getLoc(node);
|
|
9600
|
-
const
|
|
9625
|
+
const firstLineText = sourceCode.lines[loc.start.line - 1];
|
|
9601
9626
|
const codeBlockFirstLine = normalizePrefix(node.value.split(/\r?\n/u)[0]);
|
|
9602
9627
|
const startColumnOffset = loc.start.column - 1;
|
|
9603
|
-
return normalizePrefix(
|
|
9628
|
+
return normalizePrefix(firstLineText.slice(startColumnOffset)).startsWith(codeBlockFirstLine);
|
|
9604
9629
|
}
|
|
9605
9630
|
}
|
|
9606
9631
|
});
|
|
@@ -9631,10 +9656,8 @@ function* iterateSearchWords({ sourceCode, node, words, ignores }) {
|
|
|
9631
9656
|
startPosition = index + word.length;
|
|
9632
9657
|
if (!RE_BOUNDARY.test(text[index - 1] || "") || !RE_BOUNDARY.test(text[index + word.length] || "")) continue;
|
|
9633
9658
|
const [nodeStart] = sourceCode.getRange(node);
|
|
9634
|
-
const range = [nodeStart + index, nodeStart + index + word.length];
|
|
9635
9659
|
yield {
|
|
9636
|
-
|
|
9637
|
-
range,
|
|
9660
|
+
range: [nodeStart + index, nodeStart + index + word.length],
|
|
9638
9661
|
word
|
|
9639
9662
|
};
|
|
9640
9663
|
}
|
|
@@ -9739,7 +9762,7 @@ var prefer_inline_code_words_default = createRule("prefer-inline-code-words", {
|
|
|
9739
9762
|
if (shortcutLinkReference === node) shortcutLinkReference = null;
|
|
9740
9763
|
},
|
|
9741
9764
|
text(node) {
|
|
9742
|
-
for (const { word,
|
|
9765
|
+
for (const { word, range } of iterateSearchWords({
|
|
9743
9766
|
sourceCode,
|
|
9744
9767
|
node,
|
|
9745
9768
|
words,
|
|
@@ -9748,7 +9771,10 @@ var prefer_inline_code_words_default = createRule("prefer-inline-code-words", {
|
|
|
9748
9771
|
const shortcutLinkReferenceToReport = shortcutLinkReference;
|
|
9749
9772
|
context.report({
|
|
9750
9773
|
node,
|
|
9751
|
-
loc
|
|
9774
|
+
loc: {
|
|
9775
|
+
start: sourceCode.getLocFromIndex(range[0]),
|
|
9776
|
+
end: sourceCode.getLocFromIndex(range[1])
|
|
9777
|
+
},
|
|
9752
9778
|
messageId: "requireInlineCode",
|
|
9753
9779
|
data: { name: word },
|
|
9754
9780
|
*fix(fixer) {
|
|
@@ -9826,7 +9852,7 @@ var prefer_link_reference_definitions_default = createRule("prefer-link-referenc
|
|
|
9826
9852
|
while (definitions.some((def) => def.identifier === identifier)) identifier = `${original}-${++seq}`;
|
|
9827
9853
|
}
|
|
9828
9854
|
}
|
|
9829
|
-
yield fixer.
|
|
9855
|
+
yield fixer.replaceTextRange([linkInfo.bracketsRange[0], sourceCode.getRange(link)[1]], `${sourceCode.text.slice(...linkInfo.bracketsRange)}${identifier === linkInfo.label ? "" : `[${identifier}]`}`);
|
|
9830
9856
|
if (!definition) {
|
|
9831
9857
|
const linkRange = sourceCode.getRange(link);
|
|
9832
9858
|
const nextSectionHeading = headings.find((heading) => linkRange[1] < sourceCode.getRange(heading)[0]);
|
|
@@ -9892,21 +9918,17 @@ var prefer_link_reference_definitions_default = createRule("prefer-link-referenc
|
|
|
9892
9918
|
const range = sourceCode.getRange(link);
|
|
9893
9919
|
if (link.type === "link") {
|
|
9894
9920
|
const bracketsRange$1 = getLinkBracketsRange(link);
|
|
9895
|
-
const linkLabelText$1 = sourceCode.text.slice(...bracketsRange$1).slice(1, -1).trim();
|
|
9896
|
-
const urlStartIndex$1 = sourceCode.text.indexOf("(", bracketsRange$1[1]);
|
|
9897
9921
|
return {
|
|
9898
|
-
label:
|
|
9922
|
+
label: sourceCode.text.slice(...bracketsRange$1).slice(1, -1).trim(),
|
|
9899
9923
|
bracketsRange: bracketsRange$1,
|
|
9900
|
-
urlAndTitleRange: [
|
|
9924
|
+
urlAndTitleRange: [sourceCode.text.indexOf("(", bracketsRange$1[1]), range[1]]
|
|
9901
9925
|
};
|
|
9902
9926
|
}
|
|
9903
9927
|
const bracketsRange = getImageBracketsRange(link);
|
|
9904
|
-
const linkLabelText = sourceCode.text.slice(...bracketsRange).slice(1, -1).trim();
|
|
9905
|
-
const urlStartIndex = sourceCode.text.indexOf("(", bracketsRange[1]);
|
|
9906
9928
|
return {
|
|
9907
|
-
label:
|
|
9929
|
+
label: sourceCode.text.slice(...bracketsRange).slice(1, -1).trim(),
|
|
9908
9930
|
bracketsRange,
|
|
9909
|
-
urlAndTitleRange: [
|
|
9931
|
+
urlAndTitleRange: [sourceCode.text.indexOf("(", bracketsRange[1]), range[1]]
|
|
9910
9932
|
};
|
|
9911
9933
|
}
|
|
9912
9934
|
/**
|
|
@@ -9994,7 +10016,7 @@ var prefer_linked_words_default = createRule("prefer-linked-words", {
|
|
|
9994
10016
|
},
|
|
9995
10017
|
text(node) {
|
|
9996
10018
|
if (linkedNode) return;
|
|
9997
|
-
for (const { word,
|
|
10019
|
+
for (const { word, range } of iterateSearchWords({
|
|
9998
10020
|
sourceCode,
|
|
9999
10021
|
node,
|
|
10000
10022
|
words,
|
|
@@ -10003,7 +10025,10 @@ var prefer_linked_words_default = createRule("prefer-linked-words", {
|
|
|
10003
10025
|
const link = links[word];
|
|
10004
10026
|
context.report({
|
|
10005
10027
|
node,
|
|
10006
|
-
loc
|
|
10028
|
+
loc: {
|
|
10029
|
+
start: sourceCode.getLocFromIndex(range[0]),
|
|
10030
|
+
end: sourceCode.getLocFromIndex(range[1])
|
|
10031
|
+
},
|
|
10007
10032
|
messageId: "requireLink",
|
|
10008
10033
|
data: { name: word },
|
|
10009
10034
|
fix: link ? (fixer) => {
|
|
@@ -10119,7 +10144,10 @@ var setext_heading_underline_length_default = createRule("setext-heading-underli
|
|
|
10119
10144
|
context.report({
|
|
10120
10145
|
node,
|
|
10121
10146
|
messageId,
|
|
10122
|
-
loc:
|
|
10147
|
+
loc: {
|
|
10148
|
+
start: sourceCode.getLocFromIndex(parsed.underline.range[0]),
|
|
10149
|
+
end: sourceCode.getLocFromIndex(parsed.underline.range[1])
|
|
10150
|
+
},
|
|
10123
10151
|
data: { expectedLength: String(expectedLength) },
|
|
10124
10152
|
fix(fixer) {
|
|
10125
10153
|
const newUnderline = parsed.underline.marker.repeat(expectedLength);
|
|
@@ -10215,7 +10243,7 @@ var setext_heading_underline_length_default = createRule("setext-heading-underli
|
|
|
10215
10243
|
for (const node of setextHeadings) {
|
|
10216
10244
|
const parsed = getParsedSetextHeading(node);
|
|
10217
10245
|
if (!parsed) continue;
|
|
10218
|
-
expectedLineLength = Math.max(parsed.underline.
|
|
10246
|
+
expectedLineLength = Math.max(sourceCode.getLocFromIndex(parsed.underline.range[1]).column - 1, minimumRequiredLineLength);
|
|
10219
10247
|
break;
|
|
10220
10248
|
}
|
|
10221
10249
|
} else if (align === "exact") for (const node of setextHeadings) {
|
|
@@ -10229,13 +10257,14 @@ var setext_heading_underline_length_default = createRule("setext-heading-underli
|
|
|
10229
10257
|
const parsed = getParsedSetextHeading(node);
|
|
10230
10258
|
if (!parsed) continue;
|
|
10231
10259
|
maxLineWidth = Math.max(maxLineWidth, getMaxHeaderLineWidth(parsed));
|
|
10232
|
-
expectedLineLength = Math.max(expectedLineLength, parsed.underline.
|
|
10260
|
+
expectedLineLength = Math.max(expectedLineLength, sourceCode.getLocFromIndex(parsed.underline.range[1]).column - 1);
|
|
10233
10261
|
}
|
|
10234
10262
|
if (expectedLineLength < maxLineWidth) expectedLineLength = maxLineWidth;
|
|
10235
10263
|
else for (const node of setextHeadings) {
|
|
10236
10264
|
const parsed = getParsedSetextHeading(node);
|
|
10237
10265
|
if (!parsed) continue;
|
|
10238
|
-
|
|
10266
|
+
const underlineEndLoc = sourceCode.getLocFromIndex(parsed.underline.range[1]);
|
|
10267
|
+
if (maxLineWidth <= underlineEndLoc.column - 1) expectedLineLength = Math.min(expectedLineLength, underlineEndLoc.column - 1);
|
|
10239
10268
|
}
|
|
10240
10269
|
} else if (align === "length") expectedLineLength = Math.max(fixedLength, minimumRequiredLineLength);
|
|
10241
10270
|
else return;
|
|
@@ -10280,6 +10309,55 @@ var setext_heading_underline_length_default = createRule("setext-heading-underli
|
|
|
10280
10309
|
}
|
|
10281
10310
|
});
|
|
10282
10311
|
|
|
10312
|
+
//#endregion
|
|
10313
|
+
//#region src/utils/calc-shortest-edit-script.ts
|
|
10314
|
+
/**
|
|
10315
|
+
* Given the contents of two sequences, returns diff information.
|
|
10316
|
+
* @param a The first sequence.
|
|
10317
|
+
* @param b The second sequence.
|
|
10318
|
+
* @param [options] The options object.
|
|
10319
|
+
* @param [options.isEqual] A function that returns true if two elements are equal.
|
|
10320
|
+
* @returns An array of diff objects.
|
|
10321
|
+
*/
|
|
10322
|
+
function calcShortestEditScript(a, b) {
|
|
10323
|
+
let aStartIndex = 0;
|
|
10324
|
+
let bStartIndex = 0;
|
|
10325
|
+
const result = [];
|
|
10326
|
+
(diffSequence.default || diffSequence)(a.length, b.length, (aIndex, bIndex) => a[aIndex] === b[bIndex], (nCommon, aCommon, bCommon) => {
|
|
10327
|
+
pushDelIns(aStartIndex, aCommon, bStartIndex, bCommon);
|
|
10328
|
+
aStartIndex = aCommon + nCommon;
|
|
10329
|
+
bStartIndex = bCommon + nCommon;
|
|
10330
|
+
if (nCommon > 0) for (let index = 0; index < nCommon; index++) {
|
|
10331
|
+
const elementA = a[aCommon + index];
|
|
10332
|
+
const elementB = b[bCommon + index];
|
|
10333
|
+
result.push({
|
|
10334
|
+
type: "common",
|
|
10335
|
+
a: elementA,
|
|
10336
|
+
b: elementB
|
|
10337
|
+
});
|
|
10338
|
+
}
|
|
10339
|
+
});
|
|
10340
|
+
pushDelIns(aStartIndex, a.length, bStartIndex, b.length);
|
|
10341
|
+
return result;
|
|
10342
|
+
/**
|
|
10343
|
+
* Pushes delete and insert sequences to the result.
|
|
10344
|
+
* @param aStart The start index of the delete sequence in `a`.
|
|
10345
|
+
* @param aEnd The end index of the delete sequence in `a`.
|
|
10346
|
+
* @param bStart The start index of the insert sequence in `b`.
|
|
10347
|
+
* @param bEnd The end index of the insert sequence in `b`.
|
|
10348
|
+
*/
|
|
10349
|
+
function pushDelIns(aStart, aEnd, bStart, bEnd) {
|
|
10350
|
+
for (const element of a.slice(aStart, aEnd)) result.push({
|
|
10351
|
+
type: "delete",
|
|
10352
|
+
a: element
|
|
10353
|
+
});
|
|
10354
|
+
for (const element of b.slice(bStart, bEnd)) result.push({
|
|
10355
|
+
type: "insert",
|
|
10356
|
+
b: element
|
|
10357
|
+
});
|
|
10358
|
+
}
|
|
10359
|
+
}
|
|
10360
|
+
|
|
10283
10361
|
//#endregion
|
|
10284
10362
|
//#region src/rules/sort-definitions.ts
|
|
10285
10363
|
var sort_definitions_default = createRule("sort-definitions", {
|
|
@@ -10327,7 +10405,10 @@ var sort_definitions_default = createRule("sort-definitions", {
|
|
|
10327
10405
|
},
|
|
10328
10406
|
additionalProperties: false
|
|
10329
10407
|
}],
|
|
10330
|
-
messages: {
|
|
10408
|
+
messages: {
|
|
10409
|
+
shouldBeBefore: "The definition '{{currentKey}}' should be before '{{prevKey}}'.",
|
|
10410
|
+
shouldBeAfter: "The definition '{{currentKey}}' should be after '{{nextKey}}'."
|
|
10411
|
+
}
|
|
10331
10412
|
},
|
|
10332
10413
|
create(context) {
|
|
10333
10414
|
const sourceCode = context.sourceCode;
|
|
@@ -10348,12 +10429,12 @@ var sort_definitions_default = createRule("sort-definitions", {
|
|
|
10348
10429
|
return `[^${node.identifier}]: ${childrenText}`;
|
|
10349
10430
|
}
|
|
10350
10431
|
/** Report */
|
|
10351
|
-
function
|
|
10432
|
+
function reportFixToMoveUp(node, previousNode, definitions) {
|
|
10352
10433
|
const currentKey = getDefinitionText(node);
|
|
10353
10434
|
const prevKey = getDefinitionText(previousNode);
|
|
10354
10435
|
context.report({
|
|
10355
10436
|
node,
|
|
10356
|
-
messageId: "
|
|
10437
|
+
messageId: "shouldBeBefore",
|
|
10357
10438
|
data: {
|
|
10358
10439
|
currentKey,
|
|
10359
10440
|
prevKey
|
|
@@ -10364,39 +10445,154 @@ var sort_definitions_default = createRule("sort-definitions", {
|
|
|
10364
10445
|
const previousNodes = definitions.slice(previousNodeIndex, targetNodeIndex);
|
|
10365
10446
|
const before = definitions.slice(0, previousNodeIndex);
|
|
10366
10447
|
const after = definitions.slice(targetNodeIndex + 1);
|
|
10367
|
-
|
|
10448
|
+
return fixReplaceDefinitions(fixer, definitions, [
|
|
10368
10449
|
...before,
|
|
10369
10450
|
node,
|
|
10370
10451
|
...previousNodes,
|
|
10371
10452
|
...after
|
|
10372
|
-
];
|
|
10373
|
-
|
|
10374
|
-
|
|
10375
|
-
|
|
10376
|
-
|
|
10377
|
-
|
|
10378
|
-
|
|
10379
|
-
|
|
10380
|
-
|
|
10381
|
-
|
|
10382
|
-
|
|
10453
|
+
]);
|
|
10454
|
+
}
|
|
10455
|
+
});
|
|
10456
|
+
}
|
|
10457
|
+
/** Report */
|
|
10458
|
+
function reportFixToMoveDown(node, nextNode, definitions) {
|
|
10459
|
+
const currentKey = getDefinitionText(node);
|
|
10460
|
+
const nextKey = getDefinitionText(nextNode);
|
|
10461
|
+
context.report({
|
|
10462
|
+
node,
|
|
10463
|
+
messageId: "shouldBeAfter",
|
|
10464
|
+
data: {
|
|
10465
|
+
currentKey,
|
|
10466
|
+
nextKey
|
|
10467
|
+
},
|
|
10468
|
+
fix(fixer) {
|
|
10469
|
+
const nextNodeIndex = definitions.indexOf(nextNode);
|
|
10470
|
+
const targetNodeIndex = definitions.indexOf(node);
|
|
10471
|
+
const nextNodes = definitions.slice(targetNodeIndex + 1, nextNodeIndex + 1);
|
|
10472
|
+
const before = definitions.slice(0, targetNodeIndex);
|
|
10473
|
+
const after = definitions.slice(nextNodeIndex + 1);
|
|
10474
|
+
return fixReplaceDefinitions(fixer, definitions, [
|
|
10475
|
+
...before,
|
|
10476
|
+
...nextNodes,
|
|
10477
|
+
node,
|
|
10478
|
+
...after
|
|
10479
|
+
]);
|
|
10383
10480
|
}
|
|
10384
10481
|
});
|
|
10385
10482
|
}
|
|
10386
10483
|
/**
|
|
10484
|
+
* Fix by replacing the definition array.
|
|
10485
|
+
*/
|
|
10486
|
+
function fixReplaceDefinitions(fixer, definitions, newDefinitions) {
|
|
10487
|
+
const fixes = [];
|
|
10488
|
+
let removeLine = null;
|
|
10489
|
+
for (let index = 0; index < newDefinitions.length; index++) {
|
|
10490
|
+
const newNode = newDefinitions[index];
|
|
10491
|
+
const oldNode = definitions[index];
|
|
10492
|
+
let newText = sourceCode.getText(newNode);
|
|
10493
|
+
if (needLineBreakBetweenKind(index)) {
|
|
10494
|
+
const oldLoc = sourceCode.getLoc(oldNode);
|
|
10495
|
+
newText = `\n${sourceCode.lines[oldLoc.start.line - 1].slice(0, oldLoc.start.column - 1).replaceAll(/[^\s>]/g, " ")}${newText}`;
|
|
10496
|
+
} else if (newNode === oldNode) continue;
|
|
10497
|
+
fixes.push(fixer.replaceText(oldNode, newText));
|
|
10498
|
+
if (removeLine) {
|
|
10499
|
+
fixes.push(fixer.removeRange(removeLine));
|
|
10500
|
+
removeLine = null;
|
|
10501
|
+
}
|
|
10502
|
+
}
|
|
10503
|
+
return fixes;
|
|
10504
|
+
/**
|
|
10505
|
+
* Determine if a line break is needed between different kinds of definitions.
|
|
10506
|
+
*/
|
|
10507
|
+
function needLineBreakBetweenKind(index) {
|
|
10508
|
+
if (index === 0) return false;
|
|
10509
|
+
if (newDefinitions[index].type !== "definition") return false;
|
|
10510
|
+
if (newDefinitions[index - 1].type !== "footnoteDefinition") return false;
|
|
10511
|
+
const oldPrevNode = definitions[index - 1];
|
|
10512
|
+
const oldNode = definitions[index];
|
|
10513
|
+
const footnoteLoc = sourceCode.getLoc(oldPrevNode);
|
|
10514
|
+
const linkLoc = sourceCode.getLoc(oldNode);
|
|
10515
|
+
if (linkLoc.start.line - footnoteLoc.end.line > 1) return false;
|
|
10516
|
+
if (index + 1 < newDefinitions.length) {
|
|
10517
|
+
if (newDefinitions[index + 1].type === "definition") {
|
|
10518
|
+
const oldNextNode = definitions[index + 1];
|
|
10519
|
+
const oldNextLoc = sourceCode.getLoc(oldNextNode);
|
|
10520
|
+
if (oldNextLoc.start.line - linkLoc.end.line > 1) {
|
|
10521
|
+
if (!sourceCode.lines[oldNextLoc.start.line - 2].replaceAll(">", "").trim()) removeLine = [sourceCode.getIndexFromLoc({
|
|
10522
|
+
line: oldNextLoc.start.line - 1,
|
|
10523
|
+
column: 1
|
|
10524
|
+
}), sourceCode.getIndexFromLoc({
|
|
10525
|
+
line: oldNextLoc.start.line,
|
|
10526
|
+
column: 1
|
|
10527
|
+
})];
|
|
10528
|
+
}
|
|
10529
|
+
}
|
|
10530
|
+
}
|
|
10531
|
+
return true;
|
|
10532
|
+
}
|
|
10533
|
+
}
|
|
10534
|
+
/**
|
|
10387
10535
|
* Verify definitions and footnote definitions.
|
|
10388
10536
|
*/
|
|
10389
10537
|
function verify(definitions) {
|
|
10390
10538
|
if (definitions.length === 0) return;
|
|
10391
|
-
const
|
|
10392
|
-
for (
|
|
10393
|
-
|
|
10394
|
-
|
|
10395
|
-
|
|
10396
|
-
|
|
10397
|
-
|
|
10539
|
+
const editScript = calcShortestEditScript(definitions, [...definitions].sort(option.compare));
|
|
10540
|
+
for (let index = 0; index < editScript.length; index++) {
|
|
10541
|
+
const edit = editScript[index];
|
|
10542
|
+
if (edit.type !== "delete") continue;
|
|
10543
|
+
const insertEditIndex = editScript.findIndex((e) => e.type === "insert" && e.b === edit.a);
|
|
10544
|
+
if (insertEditIndex === -1) continue;
|
|
10545
|
+
if (index < insertEditIndex) {
|
|
10546
|
+
const target = findInsertAfterTarget(edit.a, insertEditIndex);
|
|
10547
|
+
if (!target) continue;
|
|
10548
|
+
reportFixToMoveDown(edit.a, target, definitions);
|
|
10549
|
+
} else {
|
|
10550
|
+
const target = findInsertBeforeTarget(edit.a, insertEditIndex);
|
|
10551
|
+
if (!target) continue;
|
|
10552
|
+
reportFixToMoveUp(edit.a, target, definitions);
|
|
10553
|
+
}
|
|
10554
|
+
}
|
|
10555
|
+
/**
|
|
10556
|
+
* Find insert after target
|
|
10557
|
+
*/
|
|
10558
|
+
function findInsertAfterTarget(def, insertEditIndex) {
|
|
10559
|
+
for (let index = insertEditIndex - 1; index >= 0; index--) {
|
|
10560
|
+
const edit = editScript[index];
|
|
10561
|
+
if (edit.type === "delete" && edit.a === def) break;
|
|
10562
|
+
if (edit.type !== "common") continue;
|
|
10563
|
+
return edit.a;
|
|
10564
|
+
}
|
|
10565
|
+
let lastTarget = null;
|
|
10566
|
+
for (let index = definitions.indexOf(def) + 1; index < definitions.length; index++) {
|
|
10567
|
+
const element = definitions[index];
|
|
10568
|
+
if (option.compare(element, def) <= 0) {
|
|
10569
|
+
lastTarget = element;
|
|
10570
|
+
continue;
|
|
10571
|
+
}
|
|
10572
|
+
return lastTarget;
|
|
10573
|
+
}
|
|
10574
|
+
return lastTarget;
|
|
10575
|
+
}
|
|
10576
|
+
/**
|
|
10577
|
+
* Find insert before target
|
|
10578
|
+
*/
|
|
10579
|
+
function findInsertBeforeTarget(def, insertEditIndex) {
|
|
10580
|
+
for (let index = insertEditIndex + 1; index < editScript.length; index++) {
|
|
10581
|
+
const edit = editScript[index];
|
|
10582
|
+
if (edit.type === "delete" && edit.a === def) break;
|
|
10583
|
+
if (edit.type !== "common") continue;
|
|
10584
|
+
return edit.a;
|
|
10585
|
+
}
|
|
10586
|
+
let lastTarget = null;
|
|
10587
|
+
for (let index = definitions.indexOf(def) - 1; index >= 0; index--) {
|
|
10588
|
+
const element = definitions[index];
|
|
10589
|
+
if (option.compare(def, element) <= 0) {
|
|
10590
|
+
lastTarget = element;
|
|
10591
|
+
continue;
|
|
10592
|
+
}
|
|
10593
|
+
return lastTarget;
|
|
10398
10594
|
}
|
|
10399
|
-
|
|
10595
|
+
return lastTarget;
|
|
10400
10596
|
}
|
|
10401
10597
|
}
|
|
10402
10598
|
return {
|
|
@@ -10412,7 +10608,7 @@ var sort_definitions_default = createRule("sort-definitions", {
|
|
|
10412
10608
|
if (node.type === "definition" || node.type === "footnoteDefinition") group.push(node);
|
|
10413
10609
|
},
|
|
10414
10610
|
"root:exit"() {
|
|
10415
|
-
verify(group);
|
|
10611
|
+
verify(group.filter((definition) => !option.ignore(definition)));
|
|
10416
10612
|
}
|
|
10417
10613
|
};
|
|
10418
10614
|
/** Parse options */
|
|
@@ -10450,14 +10646,14 @@ var sort_definitions_default = createRule("sort-definitions", {
|
|
|
10450
10646
|
}
|
|
10451
10647
|
/** Compile order option */
|
|
10452
10648
|
function compileOption(orderOption) {
|
|
10453
|
-
const cache$
|
|
10649
|
+
const cache$1 = /* @__PURE__ */ new Map();
|
|
10454
10650
|
const compiled = compileOptionWithoutCache(orderOption);
|
|
10455
10651
|
return {
|
|
10456
10652
|
match: (node) => {
|
|
10457
|
-
const cached = cache$
|
|
10653
|
+
const cached = cache$1.get(node);
|
|
10458
10654
|
if (cached != null) return cached;
|
|
10459
10655
|
const result = compiled.match(node);
|
|
10460
|
-
cache$
|
|
10656
|
+
cache$1.set(node, result);
|
|
10461
10657
|
return result;
|
|
10462
10658
|
},
|
|
10463
10659
|
sort: compiled.sort
|
|
@@ -10659,14 +10855,14 @@ var table_header_casing_default = createRule("table-header-casing", {
|
|
|
10659
10855
|
* Check text node and report word-level errors
|
|
10660
10856
|
*/
|
|
10661
10857
|
function checkTextNode(node, firstNode, lastNode) {
|
|
10662
|
-
const
|
|
10663
|
-
const wordAndOffsets = parseWordsFromText(text, firstNode, lastNode);
|
|
10858
|
+
const wordAndOffsets = parseWordsFromText(sourceCode.getText(node), firstNode, lastNode);
|
|
10664
10859
|
const processed = /* @__PURE__ */ new Set();
|
|
10665
10860
|
for (let index = 0; index < wordAndOffsets.length; index++) {
|
|
10666
10861
|
if (processed.has(index)) continue;
|
|
10667
10862
|
processed.add(index);
|
|
10668
10863
|
const wordAndOffset = wordAndOffsets[index];
|
|
10669
10864
|
if (wordAndOffset.punctuation) continue;
|
|
10865
|
+
if (wordAndOffset.wellknownWord) continue;
|
|
10670
10866
|
if (ignorePatterns.some((pattern) => pattern.test(wordAndOffset.word))) continue;
|
|
10671
10867
|
const preservePhrase = preserveWordsOption.findPreservePhrase((function* () {
|
|
10672
10868
|
const firstWord = wordAndOffsets[index];
|
|
@@ -10707,7 +10903,10 @@ var table_header_casing_default = createRule("table-header-casing", {
|
|
|
10707
10903
|
actual: word,
|
|
10708
10904
|
expected: expectedWord
|
|
10709
10905
|
},
|
|
10710
|
-
loc:
|
|
10906
|
+
loc: {
|
|
10907
|
+
start: sourceCode.getLocFromIndex(range[0]),
|
|
10908
|
+
end: sourceCode.getLocFromIndex(range[1])
|
|
10909
|
+
},
|
|
10711
10910
|
fix(fixer) {
|
|
10712
10911
|
return fixer.replaceTextRange(range, expectedWord);
|
|
10713
10912
|
}
|
|
@@ -10766,32 +10965,30 @@ var table_leading_trailing_pipes_default = createRule("table-leading-trailing-pi
|
|
|
10766
10965
|
function verifyTablePipes(node) {
|
|
10767
10966
|
for (const row of node.children) verifyTableRowPipes(row);
|
|
10768
10967
|
const parsedDelimiterRow = parseTableDelimiterRow(sourceCode, node);
|
|
10769
|
-
if (parsedDelimiterRow) verifyTableLinePipes(parsedDelimiterRow.range, parsedDelimiterRow.
|
|
10968
|
+
if (parsedDelimiterRow) verifyTableLinePipes(parsedDelimiterRow.range, parsedDelimiterRow.delimiters.length);
|
|
10770
10969
|
}
|
|
10771
10970
|
/**
|
|
10772
10971
|
* Verify the table row pipes
|
|
10773
10972
|
*/
|
|
10774
10973
|
function verifyTableRowPipes(node) {
|
|
10775
|
-
|
|
10776
|
-
const range = sourceCode.getRange(node);
|
|
10777
|
-
verifyTableLinePipes(range, loc, node.children.length);
|
|
10974
|
+
verifyTableLinePipes(sourceCode.getRange(node), node.children.length);
|
|
10778
10975
|
}
|
|
10779
10976
|
/**
|
|
10780
10977
|
* Verify the table line pipes
|
|
10781
10978
|
*/
|
|
10782
|
-
function verifyTableLinePipes(lineContentRange,
|
|
10783
|
-
verifyTableLeadingPipe(lineContentRange,
|
|
10784
|
-
verifyTableTrailingPipe(lineContentRange,
|
|
10979
|
+
function verifyTableLinePipes(lineContentRange, columnCount) {
|
|
10980
|
+
verifyTableLeadingPipe(lineContentRange, columnCount);
|
|
10981
|
+
verifyTableTrailingPipe(lineContentRange, columnCount);
|
|
10785
10982
|
}
|
|
10786
10983
|
/**
|
|
10787
10984
|
* Verify the table leading pipe
|
|
10788
10985
|
*/
|
|
10789
|
-
function verifyTableLeadingPipe(lineContentRange,
|
|
10986
|
+
function verifyTableLeadingPipe(lineContentRange, columnCount) {
|
|
10790
10987
|
if (leadingOption === "always") {
|
|
10791
10988
|
if (sourceCode.text.startsWith("|", lineContentRange[0])) return;
|
|
10792
10989
|
context.report({
|
|
10793
10990
|
messageId: "missingLeadingPipe",
|
|
10794
|
-
loc:
|
|
10991
|
+
loc: sourceCode.getLocFromIndex(lineContentRange[0]),
|
|
10795
10992
|
fix(fixer) {
|
|
10796
10993
|
return fixer.insertTextBeforeRange(lineContentRange, "| ");
|
|
10797
10994
|
}
|
|
@@ -10803,13 +11000,14 @@ var table_leading_trailing_pipes_default = createRule("table-leading-trailing-pi
|
|
|
10803
11000
|
if (!sourceCode.text.startsWith("|", lineContentRange[0])) return;
|
|
10804
11001
|
let endIndex = lineContentRange[0] + 1;
|
|
10805
11002
|
while (endIndex < lineContentRange[1] && isSpaceOrTab(sourceCode.text[endIndex])) endIndex++;
|
|
11003
|
+
const startLoc = sourceCode.getLocFromIndex(lineContentRange[0]);
|
|
10806
11004
|
context.report({
|
|
10807
11005
|
messageId: "unexpectedLeadingPipe",
|
|
10808
11006
|
loc: {
|
|
10809
|
-
start:
|
|
11007
|
+
start: startLoc,
|
|
10810
11008
|
end: {
|
|
10811
|
-
line:
|
|
10812
|
-
column:
|
|
11009
|
+
line: startLoc.line,
|
|
11010
|
+
column: startLoc.column + (endIndex - lineContentRange[0])
|
|
10813
11011
|
}
|
|
10814
11012
|
},
|
|
10815
11013
|
fix(fixer) {
|
|
@@ -10821,12 +11019,12 @@ var table_leading_trailing_pipes_default = createRule("table-leading-trailing-pi
|
|
|
10821
11019
|
/**
|
|
10822
11020
|
* Verify the table trailing pipe
|
|
10823
11021
|
*/
|
|
10824
|
-
function verifyTableTrailingPipe(lineContentRange,
|
|
11022
|
+
function verifyTableTrailingPipe(lineContentRange, columnCount) {
|
|
10825
11023
|
if (trailingOption === "always") {
|
|
10826
11024
|
if (sourceCode.text.endsWith("|", lineContentRange[1])) return;
|
|
10827
11025
|
context.report({
|
|
10828
11026
|
messageId: "missingTrailingPipe",
|
|
10829
|
-
loc:
|
|
11027
|
+
loc: sourceCode.getLocFromIndex(lineContentRange[1]),
|
|
10830
11028
|
fix(fixer) {
|
|
10831
11029
|
return fixer.insertTextAfterRange(lineContentRange, " |");
|
|
10832
11030
|
}
|
|
@@ -10838,14 +11036,15 @@ var table_leading_trailing_pipes_default = createRule("table-leading-trailing-pi
|
|
|
10838
11036
|
if (!sourceCode.text.endsWith("|", lineContentRange[1])) return;
|
|
10839
11037
|
let startIndex = lineContentRange[1] - 1;
|
|
10840
11038
|
while (startIndex - 1 > lineContentRange[0] && isSpaceOrTab(sourceCode.text[startIndex - 1])) startIndex--;
|
|
11039
|
+
const endLoc = sourceCode.getLocFromIndex(lineContentRange[1]);
|
|
10841
11040
|
context.report({
|
|
10842
11041
|
messageId: "unexpectedTrailingPipe",
|
|
10843
11042
|
loc: {
|
|
10844
11043
|
start: {
|
|
10845
|
-
line:
|
|
10846
|
-
column:
|
|
11044
|
+
line: endLoc.line,
|
|
11045
|
+
column: endLoc.column - (lineContentRange[1] - startIndex)
|
|
10847
11046
|
},
|
|
10848
|
-
end:
|
|
11047
|
+
end: endLoc
|
|
10849
11048
|
},
|
|
10850
11049
|
fix(fixer) {
|
|
10851
11050
|
return fixer.removeRange([startIndex, lineContentRange[1]]);
|
|
@@ -10991,7 +11190,10 @@ var table_pipe_spacing_default = createRule("table-pipe-spacing", {
|
|
|
10991
11190
|
if (options.leadingSpace === "always") {
|
|
10992
11191
|
if (pipe.range[1] < nextToken.range[0]) return true;
|
|
10993
11192
|
context.report({
|
|
10994
|
-
loc:
|
|
11193
|
+
loc: {
|
|
11194
|
+
start: sourceCode.getLocFromIndex(pipe.range[0]),
|
|
11195
|
+
end: sourceCode.getLocFromIndex(pipe.range[1])
|
|
11196
|
+
},
|
|
10995
11197
|
messageId: "expectedSpaceAfter",
|
|
10996
11198
|
fix(fixer) {
|
|
10997
11199
|
return fixer.insertTextAfterRange(pipe.range, " ");
|
|
@@ -11002,8 +11204,8 @@ var table_pipe_spacing_default = createRule("table-pipe-spacing", {
|
|
|
11002
11204
|
if (pipe.range[1] === nextToken.range[0]) return true;
|
|
11003
11205
|
context.report({
|
|
11004
11206
|
loc: {
|
|
11005
|
-
start: pipe.
|
|
11006
|
-
end: nextToken.
|
|
11207
|
+
start: sourceCode.getLocFromIndex(pipe.range[1]),
|
|
11208
|
+
end: sourceCode.getLocFromIndex(nextToken.range[0])
|
|
11007
11209
|
},
|
|
11008
11210
|
messageId: "expectedNoSpaceAfter",
|
|
11009
11211
|
fix(fixer) {
|
|
@@ -11021,7 +11223,10 @@ var table_pipe_spacing_default = createRule("table-pipe-spacing", {
|
|
|
11021
11223
|
if (options.trailingSpace === "always") {
|
|
11022
11224
|
if (prevToken.range[1] < pipe.range[0]) return true;
|
|
11023
11225
|
context.report({
|
|
11024
|
-
loc:
|
|
11226
|
+
loc: {
|
|
11227
|
+
start: sourceCode.getLocFromIndex(pipe.range[0]),
|
|
11228
|
+
end: sourceCode.getLocFromIndex(pipe.range[1])
|
|
11229
|
+
},
|
|
11025
11230
|
messageId: "expectedSpaceBefore",
|
|
11026
11231
|
fix(fixer) {
|
|
11027
11232
|
return fixer.insertTextBeforeRange(pipe.range, " ");
|
|
@@ -11032,8 +11237,8 @@ var table_pipe_spacing_default = createRule("table-pipe-spacing", {
|
|
|
11032
11237
|
if (prevToken.range[1] === pipe.range[0]) return true;
|
|
11033
11238
|
context.report({
|
|
11034
11239
|
loc: {
|
|
11035
|
-
start: prevToken.
|
|
11036
|
-
end: pipe.
|
|
11240
|
+
start: sourceCode.getLocFromIndex(prevToken.range[1]),
|
|
11241
|
+
end: sourceCode.getLocFromIndex(pipe.range[0])
|
|
11037
11242
|
},
|
|
11038
11243
|
messageId: "expectedNoSpaceBefore",
|
|
11039
11244
|
fix(fixer) {
|
|
@@ -11050,15 +11255,18 @@ var table_pipe_spacing_default = createRule("table-pipe-spacing", {
|
|
|
11050
11255
|
*/
|
|
11051
11256
|
function verifyAlignPipe({ leadingPipe, content, trailingPipe }, cellAlign) {
|
|
11052
11257
|
if (!leadingPipe || !trailingPipe || !content) return null;
|
|
11053
|
-
const lineText = sourceCode.lines[leadingPipe.
|
|
11258
|
+
const lineText = sourceCode.lines[sourceCode.getLocFromIndex(leadingPipe.range[0]).line - 1];
|
|
11054
11259
|
if (cellAlign === "left") {
|
|
11055
11260
|
const expectedWidth = options.leadingSpace === "always" ? 1 : 0;
|
|
11056
11261
|
if (getLeadingSpacesWidth() === expectedWidth) return null;
|
|
11057
11262
|
context.report({
|
|
11058
11263
|
loc: leadingPipe.range[1] < content.range[0] ? {
|
|
11059
|
-
start: leadingPipe.
|
|
11060
|
-
end: content.
|
|
11061
|
-
} :
|
|
11264
|
+
start: sourceCode.getLocFromIndex(leadingPipe.range[1]),
|
|
11265
|
+
end: sourceCode.getLocFromIndex(content.range[0])
|
|
11266
|
+
} : {
|
|
11267
|
+
start: sourceCode.getLocFromIndex(leadingPipe.range[0]),
|
|
11268
|
+
end: sourceCode.getLocFromIndex(leadingPipe.range[1])
|
|
11269
|
+
},
|
|
11062
11270
|
messageId: expectedWidth >= 1 ? "expectedAlignLeft" : "expectedNoSpaceAlignLeft",
|
|
11063
11271
|
*fix(fixer) {
|
|
11064
11272
|
const cellWidth = getCellWidth();
|
|
@@ -11075,9 +11283,12 @@ var table_pipe_spacing_default = createRule("table-pipe-spacing", {
|
|
|
11075
11283
|
if (getTrailingSpacesWidth() === expectedWidth) return null;
|
|
11076
11284
|
context.report({
|
|
11077
11285
|
loc: content.range[1] < trailingPipe.range[0] ? {
|
|
11078
|
-
start: content.
|
|
11079
|
-
end: trailingPipe.
|
|
11080
|
-
} :
|
|
11286
|
+
start: sourceCode.getLocFromIndex(content.range[1]),
|
|
11287
|
+
end: sourceCode.getLocFromIndex(trailingPipe.range[0])
|
|
11288
|
+
} : {
|
|
11289
|
+
start: sourceCode.getLocFromIndex(trailingPipe.range[0]),
|
|
11290
|
+
end: sourceCode.getLocFromIndex(trailingPipe.range[1])
|
|
11291
|
+
},
|
|
11081
11292
|
messageId: expectedWidth >= 1 ? "expectedAlignRight" : "expectedNoSpaceAlignRight",
|
|
11082
11293
|
*fix(fixer) {
|
|
11083
11294
|
const cellWidth = getCellWidth();
|
|
@@ -11094,20 +11305,24 @@ var table_pipe_spacing_default = createRule("table-pipe-spacing", {
|
|
|
11094
11305
|
const trailingSpacesWidth = getTrailingSpacesWidth();
|
|
11095
11306
|
if (leadingSpacesWidth === trailingSpacesWidth || leadingSpacesWidth + 1 === trailingSpacesWidth) return null;
|
|
11096
11307
|
const leadingReportLoc = leadingPipe.range[1] < content.range[0] ? {
|
|
11097
|
-
start: leadingPipe.
|
|
11098
|
-
end: content.
|
|
11099
|
-
} :
|
|
11308
|
+
start: sourceCode.getLocFromIndex(leadingPipe.range[1]),
|
|
11309
|
+
end: sourceCode.getLocFromIndex(content.range[0])
|
|
11310
|
+
} : {
|
|
11311
|
+
start: sourceCode.getLocFromIndex(leadingPipe.range[0]),
|
|
11312
|
+
end: sourceCode.getLocFromIndex(leadingPipe.range[1])
|
|
11313
|
+
};
|
|
11100
11314
|
const trailingReportLoc = content.range[1] < trailingPipe.range[0] ? {
|
|
11101
|
-
start: content.
|
|
11102
|
-
end: trailingPipe.
|
|
11103
|
-
} :
|
|
11315
|
+
start: sourceCode.getLocFromIndex(content.range[1]),
|
|
11316
|
+
end: sourceCode.getLocFromIndex(trailingPipe.range[0])
|
|
11317
|
+
} : {
|
|
11318
|
+
start: sourceCode.getLocFromIndex(trailingPipe.range[0]),
|
|
11319
|
+
end: sourceCode.getLocFromIndex(trailingPipe.range[1])
|
|
11320
|
+
};
|
|
11104
11321
|
for (const reportLoc of [leadingReportLoc, trailingReportLoc]) context.report({
|
|
11105
11322
|
loc: reportLoc,
|
|
11106
11323
|
messageId: "expectedAlignCenter",
|
|
11107
11324
|
*fix(fixer) {
|
|
11108
|
-
const
|
|
11109
|
-
const contentTextWidth = getContentTextWidth();
|
|
11110
|
-
const spacesLength = cellWidth - contentTextWidth;
|
|
11325
|
+
const spacesLength = getCellWidth() - getContentTextWidth();
|
|
11111
11326
|
const leadingSpacesLength = Math.floor(spacesLength / 2);
|
|
11112
11327
|
const trailingSpacesLength = spacesLength - leadingSpacesLength;
|
|
11113
11328
|
const newLeadingSpaces = " ".repeat(leadingSpacesLength);
|
|
@@ -11123,33 +11338,34 @@ var table_pipe_spacing_default = createRule("table-pipe-spacing", {
|
|
|
11123
11338
|
* Get the width of the leading spaces in the cell.
|
|
11124
11339
|
*/
|
|
11125
11340
|
function getLeadingSpacesWidth() {
|
|
11126
|
-
return getTextWidth(lineText, leadingPipe.
|
|
11341
|
+
return getTextWidth(lineText, sourceCode.getLocFromIndex(leadingPipe.range[1]).column - 1, sourceCode.getLocFromIndex(content.range[0]).column - 1);
|
|
11127
11342
|
}
|
|
11128
11343
|
/**
|
|
11129
11344
|
* Get the width of the trailing spaces in the cell.
|
|
11130
11345
|
*/
|
|
11131
11346
|
function getTrailingSpacesWidth() {
|
|
11132
|
-
return getTextWidth(lineText, content.
|
|
11347
|
+
return getTextWidth(lineText, sourceCode.getLocFromIndex(content.range[1]).column - 1, sourceCode.getLocFromIndex(trailingPipe.range[0]).column - 1);
|
|
11133
11348
|
}
|
|
11134
11349
|
/**
|
|
11135
11350
|
* Get the width of the whole cell (including leading and trailing spaces)
|
|
11136
11351
|
*/
|
|
11137
11352
|
function getCellWidth() {
|
|
11138
|
-
return getTextWidth(lineText, leadingPipe.
|
|
11353
|
+
return getTextWidth(lineText, sourceCode.getLocFromIndex(leadingPipe.range[1]).column - 1, sourceCode.getLocFromIndex(trailingPipe.range[0]).column - 1);
|
|
11139
11354
|
}
|
|
11140
11355
|
/**
|
|
11141
11356
|
* Get the width of the content text (excluding leading and trailing spaces)
|
|
11142
11357
|
*/
|
|
11143
11358
|
function getContentTextWidth() {
|
|
11144
|
-
return getTextWidth(lineText, content.
|
|
11359
|
+
return getTextWidth(lineText, sourceCode.getLocFromIndex(content.range[0]).column - 1, sourceCode.getLocFromIndex(content.range[1]).column - 1);
|
|
11145
11360
|
}
|
|
11146
11361
|
/**
|
|
11147
11362
|
* Get the normalized content text (with normalized spaces)
|
|
11148
11363
|
*/
|
|
11149
11364
|
function getNormalizedContentText() {
|
|
11150
|
-
const
|
|
11365
|
+
const contentStartLoc = sourceCode.getLocFromIndex(content.range[0]);
|
|
11366
|
+
const prefixWidth = getWidth(lineText.slice(0, contentStartLoc.column - 1));
|
|
11151
11367
|
let result = "";
|
|
11152
|
-
for (const c of lineText.slice(
|
|
11368
|
+
for (const c of lineText.slice(contentStartLoc.column - 1, sourceCode.getLocFromIndex(content.range[1]).column - 1)) if (c === " ") result += " ".repeat(4 - (prefixWidth + result.length) % 4);
|
|
11153
11369
|
else result += c;
|
|
11154
11370
|
return result;
|
|
11155
11371
|
}
|
|
@@ -11389,7 +11605,7 @@ var table_pipe_alignment_default = createRule("table-pipe-alignment", {
|
|
|
11389
11605
|
const firstCell = this.rows[0].cells[0];
|
|
11390
11606
|
const firstToken = firstCell.leadingPipe ?? firstCell.content;
|
|
11391
11607
|
if (!firstToken) return null;
|
|
11392
|
-
return getTextWidth(sourceCode.lines[firstToken.
|
|
11608
|
+
return getTextWidth(sourceCode.lines[sourceCode.getLocFromIndex(firstToken.range[0]).line - 1], 0, sourceCode.getLocFromIndex(firstToken.range[0]).column - 1);
|
|
11393
11609
|
}
|
|
11394
11610
|
if (options.columnOption === "minimum") return this.getMinimumPipePosition(pipeIndex);
|
|
11395
11611
|
else if (options.columnOption === "consistent") {
|
|
@@ -11398,7 +11614,8 @@ var table_pipe_alignment_default = createRule("table-pipe-alignment", {
|
|
|
11398
11614
|
if (row.cells.length <= columnIndex) continue;
|
|
11399
11615
|
const cell = row.cells[columnIndex];
|
|
11400
11616
|
if (cell.type === "delimiter" || !cell.trailingPipe) continue;
|
|
11401
|
-
const
|
|
11617
|
+
const trailingPipeStartLoc = sourceCode.getLocFromIndex(cell.trailingPipe.range[0]);
|
|
11618
|
+
const width = getTextWidth(sourceCode.lines[trailingPipeStartLoc.line - 1], 0, trailingPipeStartLoc.column - 1);
|
|
11402
11619
|
return Math.max(width, this.getMinimumPipePosition(pipeIndex) || 0);
|
|
11403
11620
|
}
|
|
11404
11621
|
}
|
|
@@ -11417,20 +11634,24 @@ var table_pipe_alignment_default = createRule("table-pipe-alignment", {
|
|
|
11417
11634
|
const cell = row.cells[columnIndex];
|
|
11418
11635
|
let width;
|
|
11419
11636
|
if (cell.leadingPipe) {
|
|
11420
|
-
const
|
|
11637
|
+
const leadingPipeEndLoc = sourceCode.getLocFromIndex(cell.leadingPipe.range[1]);
|
|
11638
|
+
const leadingPipeEndOffset = getTextWidth(sourceCode.lines[leadingPipeEndLoc.line - 1], 0, leadingPipeEndLoc.column - 1);
|
|
11421
11639
|
let contentLength;
|
|
11422
11640
|
if (cell.type === "delimiter") contentLength = getMinimumDelimiterLength(cell.align);
|
|
11423
11641
|
else {
|
|
11424
11642
|
if (!cell.content) continue;
|
|
11425
|
-
|
|
11643
|
+
const contentStartLoc = sourceCode.getLocFromIndex(cell.content.range[0]);
|
|
11644
|
+
contentLength = getTextWidth(sourceCode.lines[contentStartLoc.line - 1], contentStartLoc.column - 1, sourceCode.getLocFromIndex(cell.content.range[1]).column - 1);
|
|
11426
11645
|
}
|
|
11427
11646
|
width = leadingPipeEndOffset + (needSpaceAfterPipe ? 1 : 0) + contentLength;
|
|
11428
11647
|
} else if (cell.type === "delimiter") {
|
|
11429
11648
|
const minimumDelimiterLength = getMinimumDelimiterLength(cell.align);
|
|
11430
|
-
|
|
11649
|
+
const delimiterStartLoc = sourceCode.getLocFromIndex(cell.delimiter.range[0]);
|
|
11650
|
+
width = getTextWidth(sourceCode.lines[delimiterStartLoc.line - 1], 0, delimiterStartLoc.column - 1) + minimumDelimiterLength;
|
|
11431
11651
|
} else {
|
|
11432
11652
|
if (!cell.content) continue;
|
|
11433
|
-
|
|
11653
|
+
const contentEndLoc = sourceCode.getLocFromIndex(cell.content.range[1]);
|
|
11654
|
+
width = getTextWidth(sourceCode.lines[contentEndLoc.line - 1], 0, contentEndLoc.column - 1);
|
|
11434
11655
|
}
|
|
11435
11656
|
if (needSpaceBeforePipe) width += 1;
|
|
11436
11657
|
maxWidth = Math.max(maxWidth, width);
|
|
@@ -11510,11 +11731,14 @@ var table_pipe_alignment_default = createRule("table-pipe-alignment", {
|
|
|
11510
11731
|
function verifyPipe(pipe, pipeIndex, table, cell) {
|
|
11511
11732
|
const expected = table.getExpectedPipePosition(pipeIndex);
|
|
11512
11733
|
if (expected == null) return true;
|
|
11513
|
-
const
|
|
11514
|
-
const diff = expected -
|
|
11734
|
+
const pipeStartLoc = sourceCode.getLocFromIndex(pipe.range[0]);
|
|
11735
|
+
const diff = expected - getTextWidth(sourceCode.lines[pipeStartLoc.line - 1], 0, pipeStartLoc.column - 1);
|
|
11515
11736
|
if (diff === 0) return true;
|
|
11516
11737
|
context.report({
|
|
11517
|
-
loc:
|
|
11738
|
+
loc: {
|
|
11739
|
+
start: sourceCode.getLocFromIndex(pipe.range[0]),
|
|
11740
|
+
end: sourceCode.getLocFromIndex(pipe.range[1])
|
|
11741
|
+
},
|
|
11518
11742
|
messageId: diff > 0 ? "addSpaces" : "removeSpaces",
|
|
11519
11743
|
data: {
|
|
11520
11744
|
expected: String(expected),
|
|
@@ -11529,9 +11753,8 @@ var table_pipe_alignment_default = createRule("table-pipe-alignment", {
|
|
|
11529
11753
|
const baseEdit = fixRemoveSpaces();
|
|
11530
11754
|
if (baseEdit) return baseEdit;
|
|
11531
11755
|
if (pipeIndex === 0 || cell.type === "cell") return null;
|
|
11532
|
-
const
|
|
11533
|
-
const
|
|
11534
|
-
const newLength = expected - widthBeforeDelimiter;
|
|
11756
|
+
const delimiterStartLoc = sourceCode.getLocFromIndex(cell.delimiter.range[0]);
|
|
11757
|
+
const newLength = expected - getTextWidth(sourceCode.lines[delimiterStartLoc.line - 1].slice(0, delimiterStartLoc.column - 1));
|
|
11535
11758
|
const minimumDelimiterLength = getMinimumDelimiterLength(cell.align);
|
|
11536
11759
|
const spaceAfter = table.isNeedSpaceBetweenContentAndTrailingPipe(pipeIndex) ? " " : "";
|
|
11537
11760
|
if (newLength < minimumDelimiterLength + spaceAfter.length) {
|
|
@@ -11550,11 +11773,10 @@ var table_pipe_alignment_default = createRule("table-pipe-alignment", {
|
|
|
11550
11773
|
* Fixer to remove spaces before the pipe
|
|
11551
11774
|
*/
|
|
11552
11775
|
function fixRemoveSpaces() {
|
|
11553
|
-
const beforePipe = sourceCode.lines[
|
|
11776
|
+
const beforePipe = sourceCode.lines[pipeStartLoc.line - 1].slice(0, pipeStartLoc.column - 1);
|
|
11554
11777
|
const trimmedBeforePipe = beforePipe.trimEnd();
|
|
11555
11778
|
const spacesBeforePipeLength = beforePipe.length - trimmedBeforePipe.length;
|
|
11556
|
-
const
|
|
11557
|
-
const newSpacesLength = expected - widthBeforePipe;
|
|
11779
|
+
const newSpacesLength = expected - getTextWidth(trimmedBeforePipe);
|
|
11558
11780
|
const minTrailingSpaceWidth = table.isNeedSpaceBetweenContentAndTrailingPipe(pipeIndex) ? 1 : 0;
|
|
11559
11781
|
if (newSpacesLength < minTrailingSpaceWidth) {
|
|
11560
11782
|
const edit = fixRemoveSpacesFromLeadingSpaces(Math.abs(newSpacesLength) + minTrailingSpaceWidth);
|
|
@@ -11570,7 +11792,8 @@ var table_pipe_alignment_default = createRule("table-pipe-alignment", {
|
|
|
11570
11792
|
if (!cell.leadingPipe || pipeIndex === 0) return null;
|
|
11571
11793
|
const content = cell.type === "delimiter" ? cell.delimiter : cell.content;
|
|
11572
11794
|
if (!content) return null;
|
|
11573
|
-
const
|
|
11795
|
+
const leadingPipeEndLoc = sourceCode.getLocFromIndex(cell.leadingPipe.range[1]);
|
|
11796
|
+
const newSpacesLength = getTextWidth(sourceCode.lines[leadingPipeEndLoc.line - 1], leadingPipeEndLoc.column - 1, sourceCode.getLocFromIndex(content.range[0]).column - 1) - removeSpaceLength;
|
|
11574
11797
|
if (newSpacesLength < (table.isNeedSpaceBetweenLeadingPipeAndContent(pipeIndex - 1) ? 1 : 0)) return null;
|
|
11575
11798
|
return fixer.replaceTextRange([cell.leadingPipe.range[1], content.range[0]], " ".repeat(newSpacesLength));
|
|
11576
11799
|
}
|
|
@@ -11990,7 +12213,7 @@ var meta_exports = /* @__PURE__ */ __export({
|
|
|
11990
12213
|
version: () => version
|
|
11991
12214
|
});
|
|
11992
12215
|
const name = "eslint-plugin-markdown-preferences";
|
|
11993
|
-
const version = "0.
|
|
12216
|
+
const version = "0.36.0";
|
|
11994
12217
|
|
|
11995
12218
|
//#endregion
|
|
11996
12219
|
//#region src/language/extensions/micromark-custom-container.ts
|
|
@@ -12338,7 +12561,7 @@ function importCodeSnippetFromMarkdown() {
|
|
|
12338
12561
|
* Parse Extended Markdown to MDAST.
|
|
12339
12562
|
*/
|
|
12340
12563
|
function parseExtendedMarkdown(code) {
|
|
12341
|
-
|
|
12564
|
+
return fromMarkdown(code, {
|
|
12342
12565
|
extensions: [
|
|
12343
12566
|
gfm(),
|
|
12344
12567
|
frontmatter(["yaml", "toml"]),
|
|
@@ -12353,8 +12576,7 @@ function parseExtendedMarkdown(code) {
|
|
|
12353
12576
|
customContainerFromMarkdown(),
|
|
12354
12577
|
importCodeSnippetFromMarkdown()
|
|
12355
12578
|
]
|
|
12356
|
-
};
|
|
12357
|
-
return fromMarkdown(code, options);
|
|
12579
|
+
});
|
|
12358
12580
|
}
|
|
12359
12581
|
|
|
12360
12582
|
//#endregion
|