wikilint 2.5.2 → 2.5.4
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/dist/lib/element.d.ts +2 -1
- package/dist/lib/element.js +3 -2
- package/dist/lib/text.d.ts +1 -1
- package/dist/lib/text.js +16 -14
- package/dist/src/arg.d.ts +1 -1
- package/dist/src/arg.js +3 -3
- package/dist/src/attribute.d.ts +3 -1
- package/dist/src/attribute.js +3 -3
- package/dist/src/attributes.d.ts +1 -1
- package/dist/src/attributes.js +2 -2
- package/dist/src/converterFlags.d.ts +1 -1
- package/dist/src/converterFlags.js +2 -2
- package/dist/src/extLink.d.ts +1 -1
- package/dist/src/extLink.js +2 -2
- package/dist/src/gallery.d.ts +1 -1
- package/dist/src/gallery.js +2 -2
- package/dist/src/heading.d.ts +1 -1
- package/dist/src/heading.js +2 -2
- package/dist/src/html.d.ts +1 -1
- package/dist/src/html.js +2 -2
- package/dist/src/imageParameter.d.ts +1 -1
- package/dist/src/imageParameter.js +2 -2
- package/dist/src/imagemap.d.ts +1 -1
- package/dist/src/imagemap.js +2 -2
- package/dist/src/link/base.d.ts +1 -1
- package/dist/src/link/base.js +4 -4
- package/dist/src/link/file.d.ts +1 -1
- package/dist/src/link/file.js +3 -3
- package/dist/src/link/galleryImage.d.ts +1 -1
- package/dist/src/link/galleryImage.js +2 -2
- package/dist/src/link/index.d.ts +1 -1
- package/dist/src/link/index.js +2 -2
- package/dist/src/magicLink.d.ts +1 -1
- package/dist/src/magicLink.js +2 -2
- package/dist/src/nested.d.ts +1 -1
- package/dist/src/nested.js +2 -2
- package/dist/src/nowiki/index.js +1 -1
- package/dist/src/parameter.d.ts +1 -1
- package/dist/src/parameter.js +2 -2
- package/dist/src/pre.d.ts +3 -0
- package/dist/src/pre.js +4 -0
- package/dist/src/table/index.d.ts +1 -1
- package/dist/src/table/index.js +2 -2
- package/dist/src/table/td.d.ts +1 -1
- package/dist/src/table/td.js +2 -2
- package/dist/src/table/trBase.d.ts +1 -1
- package/dist/src/table/trBase.js +2 -2
- package/dist/src/tagPair/ext.d.ts +1 -1
- package/dist/src/tagPair/ext.js +2 -2
- package/dist/src/transclude.d.ts +1 -1
- package/dist/src/transclude.js +2 -2
- package/package.json +7 -5
package/dist/lib/element.d.ts
CHANGED
package/dist/lib/element.js
CHANGED
|
@@ -108,12 +108,13 @@ class AstElement extends node_1.AstNode {
|
|
|
108
108
|
/**
|
|
109
109
|
* @override
|
|
110
110
|
* @param start
|
|
111
|
+
* @param re 用于`AstText`后代节点的正则表达式
|
|
111
112
|
*/
|
|
112
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
113
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
113
114
|
const errors = [];
|
|
114
115
|
for (let i = 0, cur = start + this.getAttribute('padding'); i < this.length; i++) {
|
|
115
116
|
const child = this.childNodes[i];
|
|
116
|
-
errors.push(...child.lint(cur));
|
|
117
|
+
errors.push(...child.lint(cur, re));
|
|
117
118
|
cur += String(child).length + this.getGaps(i);
|
|
118
119
|
}
|
|
119
120
|
return errors;
|
package/dist/lib/text.d.ts
CHANGED
package/dist/lib/text.js
CHANGED
|
@@ -78,26 +78,28 @@ class AstText extends node_1.AstNode {
|
|
|
78
78
|
* @override
|
|
79
79
|
* @param start
|
|
80
80
|
*/
|
|
81
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
81
|
+
lint(start = this.getAbsoluteIndex(), errorRegex) {
|
|
82
82
|
const { data, parentNode, nextSibling, previousSibling } = this;
|
|
83
83
|
if (!parentNode) {
|
|
84
84
|
return [];
|
|
85
85
|
}
|
|
86
|
-
const {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
86
|
+
const { type, name, parentNode: grandparent } = parentNode;
|
|
87
|
+
let isHtmlAttrVal = false;
|
|
88
|
+
if (type === 'attr-value') {
|
|
89
|
+
const { type: grandType, name: grandName, tag } = grandparent;
|
|
90
|
+
if (grandType !== 'ext-attr') {
|
|
91
|
+
isHtmlAttrVal = true;
|
|
92
|
+
}
|
|
93
|
+
else if (tag === 'choose' && (grandName === 'before' || grandName === 'after')) {
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
91
96
|
}
|
|
92
|
-
|
|
97
|
+
errorRegex ??= type === 'free-ext-link'
|
|
93
98
|
|| type === 'ext-link-url'
|
|
94
99
|
|| type === 'image-parameter' && name === 'link'
|
|
95
|
-
|| isHtmlAttrVal
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
else {
|
|
99
|
-
errorRegex = errorSyntax;
|
|
100
|
-
}
|
|
100
|
+
|| isHtmlAttrVal
|
|
101
|
+
? errorSyntaxUrl
|
|
102
|
+
: errorSyntax;
|
|
101
103
|
if (data.search(errorRegex) === -1) {
|
|
102
104
|
return [];
|
|
103
105
|
}
|
|
@@ -124,7 +126,7 @@ class AstText extends node_1.AstNode {
|
|
|
124
126
|
else if (char === ']' && (index || length > 1)) {
|
|
125
127
|
errorRegex.lastIndex--;
|
|
126
128
|
}
|
|
127
|
-
const startIndex = start + index, endIndex = startIndex + length, rootStr = String(root), nextChar = rootStr[endIndex], previousChar = rootStr[startIndex - 1], severity = length > 1 && !(char === '<' &&
|
|
129
|
+
const startIndex = start + index, endIndex = startIndex + length, rootStr = String(root), nextChar = rootStr[endIndex], previousChar = rootStr[startIndex - 1], severity = length > 1 && !(char === '<' && !/[\s/>]/u.test(nextChar ?? '')
|
|
128
130
|
|| isHtmlAttrVal && (char === '[' || char === ']'))
|
|
129
131
|
|| char === '{' && (nextChar === char || previousChar === '-')
|
|
130
132
|
|| char === '}' && (previousChar === char || nextChar === '-')
|
package/dist/src/arg.d.ts
CHANGED
package/dist/src/arg.js
CHANGED
|
@@ -54,7 +54,7 @@ class ArgToken extends index_2.Token {
|
|
|
54
54
|
return 1;
|
|
55
55
|
}
|
|
56
56
|
/** @override */
|
|
57
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
57
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
58
58
|
const { childNodes: [argName, argDefault, ...rest] } = this;
|
|
59
59
|
if (!this.getAttribute('include')) {
|
|
60
60
|
const e = (0, lint_1.generateForSelf)(this, { start }, 'no-arg', 'unexpected template argument');
|
|
@@ -66,9 +66,9 @@ class ArgToken extends index_2.Token {
|
|
|
66
66
|
}
|
|
67
67
|
return [e];
|
|
68
68
|
}
|
|
69
|
-
const errors = argName.lint(start + 3);
|
|
69
|
+
const errors = argName.lint(start + 3, re);
|
|
70
70
|
if (argDefault) {
|
|
71
|
-
errors.push(...argDefault.lint(start + 4 + String(argName).length));
|
|
71
|
+
errors.push(...argDefault.lint(start + 4 + String(argName).length, re));
|
|
72
72
|
}
|
|
73
73
|
if (rest.length > 0) {
|
|
74
74
|
const rect = { start, ...this.getRootNode().posFromIndex(start) };
|
package/dist/src/attribute.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export declare abstract class AttributeToken extends Token {
|
|
|
18
18
|
abstract get parentNode(): AttributesToken | undefined;
|
|
19
19
|
abstract get nextSibling(): AtomToken | this | undefined;
|
|
20
20
|
abstract get previousSibling(): AtomToken | this | undefined;
|
|
21
|
+
/** 标签名 */
|
|
22
|
+
get tag(): string;
|
|
21
23
|
/** 引号是否匹配 */
|
|
22
24
|
get balanced(): boolean;
|
|
23
25
|
/**
|
|
@@ -32,7 +34,7 @@ export declare abstract class AttributeToken extends Token {
|
|
|
32
34
|
/** @override */
|
|
33
35
|
text(): string;
|
|
34
36
|
/** @override */
|
|
35
|
-
lint(start?: number): LintError[];
|
|
37
|
+
lint(start?: number, re?: RegExp): LintError[];
|
|
36
38
|
/** 获取属性值 */
|
|
37
39
|
getValue(): string | true;
|
|
38
40
|
}
|
package/dist/src/attribute.js
CHANGED
|
@@ -178,7 +178,7 @@ class AttributeToken extends index_2.Token {
|
|
|
178
178
|
#tag;
|
|
179
179
|
#equal;
|
|
180
180
|
#quotes;
|
|
181
|
-
/**
|
|
181
|
+
/** 标签名 */
|
|
182
182
|
get tag() {
|
|
183
183
|
return this.#tag;
|
|
184
184
|
}
|
|
@@ -255,8 +255,8 @@ class AttributeToken extends index_2.Token {
|
|
|
255
255
|
return this.#equal ? this.#equal.length + (this.#quotes[0]?.length ?? 0) : 0;
|
|
256
256
|
}
|
|
257
257
|
/** @override */
|
|
258
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
259
|
-
const errors = super.lint(start), { balanced, firstChild, lastChild, type, name, tag } = this, value = this.getValue();
|
|
258
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
259
|
+
const errors = super.lint(start, re), { balanced, firstChild, lastChild, type, name, tag } = this, value = this.getValue();
|
|
260
260
|
let rect;
|
|
261
261
|
if (!balanced) {
|
|
262
262
|
const root = this.getRootNode();
|
package/dist/src/attributes.d.ts
CHANGED
package/dist/src/attributes.js
CHANGED
|
@@ -95,8 +95,8 @@ class AttributesToken extends index_2.Token {
|
|
|
95
95
|
return this.getAttrToken(key)?.getValue();
|
|
96
96
|
}
|
|
97
97
|
/** @override */
|
|
98
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
99
|
-
const errors = super.lint(start), { parentNode, length, childNodes } = this, attrs = new Map(), duplicated = new Set();
|
|
98
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
99
|
+
const errors = super.lint(start, re), { parentNode, length, childNodes } = this, attrs = new Map(), duplicated = new Set();
|
|
100
100
|
let rect;
|
|
101
101
|
if (parentNode?.type === 'html' && parentNode.closing && this.text().trim()) {
|
|
102
102
|
rect = { start, ...this.getRootNode().posFromIndex(start) };
|
|
@@ -44,8 +44,8 @@ class ConverterFlagsToken extends index_2.Token {
|
|
|
44
44
|
return new Set(this.#flags.filter(flag => variants.has(flag)));
|
|
45
45
|
}
|
|
46
46
|
/** @override */
|
|
47
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
48
|
-
const variantFlags = this.getVariantFlags(), unknownFlags = this.getUnknownFlags(), validFlags = new Set(this.#flags.filter(flag => definedFlags.has(flag))), emptyFlagCount = this.#flags.filter(flag => !flag).length, knownFlagCount = this.#flags.length - unknownFlags.size - emptyFlagCount, errors = super.lint(start);
|
|
47
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
48
|
+
const variantFlags = this.getVariantFlags(), unknownFlags = this.getUnknownFlags(), validFlags = new Set(this.#flags.filter(flag => definedFlags.has(flag))), emptyFlagCount = this.#flags.filter(flag => !flag).length, knownFlagCount = this.#flags.length - unknownFlags.size - emptyFlagCount, errors = super.lint(start, re);
|
|
49
49
|
if (variantFlags.size === knownFlagCount || validFlags.size === knownFlagCount) {
|
|
50
50
|
return errors;
|
|
51
51
|
}
|
package/dist/src/extLink.d.ts
CHANGED
package/dist/src/extLink.js
CHANGED
|
@@ -50,8 +50,8 @@ class ExtLinkToken extends index_2.Token {
|
|
|
50
50
|
return this.#space.length;
|
|
51
51
|
}
|
|
52
52
|
/** @override */
|
|
53
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
54
|
-
const errors = super.lint(start);
|
|
53
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
54
|
+
const errors = super.lint(start, re);
|
|
55
55
|
if (this.length === 1 && this.closest('heading-title')) {
|
|
56
56
|
errors.push((0, lint_1.generateForSelf)(this, { start }, 'var-anchor', 'variable anchor in a section header'));
|
|
57
57
|
}
|
package/dist/src/gallery.d.ts
CHANGED
package/dist/src/gallery.js
CHANGED
|
@@ -52,7 +52,7 @@ class GalleryToken extends index_2.Token {
|
|
|
52
52
|
return 1;
|
|
53
53
|
}
|
|
54
54
|
/** @override */
|
|
55
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
55
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
56
56
|
const { top, left } = this.getRootNode().posFromIndex(start), errors = [];
|
|
57
57
|
for (let i = 0; i < this.length; i++) {
|
|
58
58
|
const child = this.childNodes[i], str = String(child), { length } = str, trimmed = str.trim(), startLine = top + i, startCol = i ? 0 : left;
|
|
@@ -82,7 +82,7 @@ class GalleryToken extends index_2.Token {
|
|
|
82
82
|
});
|
|
83
83
|
}
|
|
84
84
|
else if (child.type !== 'noinclude' && child.type !== 'text') {
|
|
85
|
-
errors.push(...child.lint(start));
|
|
85
|
+
errors.push(...child.lint(start, re));
|
|
86
86
|
}
|
|
87
87
|
start += length + 1;
|
|
88
88
|
}
|
package/dist/src/heading.d.ts
CHANGED
package/dist/src/heading.js
CHANGED
|
@@ -52,8 +52,8 @@ class HeadingToken extends index_2.Token {
|
|
|
52
52
|
return this.level;
|
|
53
53
|
}
|
|
54
54
|
/** @override */
|
|
55
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
56
|
-
const errors = super.lint(start), { firstChild, level } = this, innerStr = String(firstChild), quotes = firstChild.childNodes.filter((node) => node.type === 'quote'), boldQuotes = quotes.filter(({ bold }) => bold), italicQuotes = quotes.filter(({ italic }) => italic);
|
|
55
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
56
|
+
const errors = super.lint(start, re), { firstChild, level } = this, innerStr = String(firstChild), quotes = firstChild.childNodes.filter((node) => node.type === 'quote'), boldQuotes = quotes.filter(({ bold }) => bold), italicQuotes = quotes.filter(({ italic }) => italic);
|
|
57
57
|
let rect;
|
|
58
58
|
if (this.level === 1) {
|
|
59
59
|
rect = { start, ...this.getRootNode().posFromIndex(start) };
|
package/dist/src/html.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export declare abstract class HtmlToken extends Token {
|
|
|
27
27
|
/** @override */
|
|
28
28
|
text(): string;
|
|
29
29
|
/** @override */
|
|
30
|
-
lint(start?: number): LintError[];
|
|
30
|
+
lint(start?: number, re?: RegExp): LintError[];
|
|
31
31
|
/**
|
|
32
32
|
* 搜索匹配的标签
|
|
33
33
|
* @throws `SyntaxError` 同时闭合和自封闭的标签
|
package/dist/src/html.js
CHANGED
|
@@ -79,8 +79,8 @@ class HtmlToken extends index_2.Token {
|
|
|
79
79
|
: super.getAttribute(key);
|
|
80
80
|
}
|
|
81
81
|
/** @override */
|
|
82
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
83
|
-
const errors = super.lint(start);
|
|
82
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
83
|
+
const errors = super.lint(start, re);
|
|
84
84
|
let refError;
|
|
85
85
|
if (this.name === 'h1' && !this.closing) {
|
|
86
86
|
refError = (0, lint_1.generateForSelf)(this, { start }, 'h1', '<h1>');
|
|
@@ -19,7 +19,7 @@ export declare abstract class ImageParameterToken extends Token {
|
|
|
19
19
|
/** @override */
|
|
20
20
|
text(): string;
|
|
21
21
|
/** @override */
|
|
22
|
-
lint(start?: number): LintError[];
|
|
22
|
+
lint(start?: number, re?: RegExp): LintError[];
|
|
23
23
|
/** 获取参数值 */
|
|
24
24
|
getValue(): string | true;
|
|
25
25
|
}
|
|
@@ -102,8 +102,8 @@ class ImageParameterToken extends index_2.Token {
|
|
|
102
102
|
: super.getAttribute(key);
|
|
103
103
|
}
|
|
104
104
|
/** @override */
|
|
105
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
106
|
-
const errors = super.lint(start), { link, name } = this;
|
|
105
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
106
|
+
const errors = super.lint(start, re), { link, name } = this;
|
|
107
107
|
if (name === 'invalid') {
|
|
108
108
|
const e = (0, lint_1.generateForSelf)(this, { start }, 'invalid-gallery', 'invalid gallery image parameter');
|
|
109
109
|
e.fix = {
|
package/dist/src/imagemap.d.ts
CHANGED
package/dist/src/imagemap.js
CHANGED
|
@@ -86,8 +86,8 @@ class ImagemapToken extends index_2.Token {
|
|
|
86
86
|
return 1;
|
|
87
87
|
}
|
|
88
88
|
/** @override */
|
|
89
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
90
|
-
const errors = super.lint(start), rect = { start, ...this.getRootNode().posFromIndex(start) };
|
|
89
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
90
|
+
const errors = super.lint(start, re), rect = { start, ...this.getRootNode().posFromIndex(start) };
|
|
91
91
|
if (this.image) {
|
|
92
92
|
errors.push(...this.childNodes.filter(child => {
|
|
93
93
|
const str = String(child).trim();
|
package/dist/src/link/base.d.ts
CHANGED
package/dist/src/link/base.js
CHANGED
|
@@ -71,8 +71,8 @@ class LinkBaseToken extends index_2.Token {
|
|
|
71
71
|
return i === 0 ? this.#delimiter.length : 1;
|
|
72
72
|
}
|
|
73
73
|
/** @override */
|
|
74
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
75
|
-
const errors = super.lint(start), { childNodes: [target, linkText], type: linkType } = this, { encoded, fragment } = this.#title;
|
|
74
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
75
|
+
const errors = super.lint(start, re), { childNodes: [target, linkText], type: linkType } = this, { encoded, fragment } = this.#title;
|
|
76
76
|
let rect;
|
|
77
77
|
if (target.childNodes.some(({ type }) => type === 'template')) {
|
|
78
78
|
rect = { start, ...this.getRootNode().posFromIndex(start) };
|
|
@@ -114,8 +114,8 @@ class LinkBaseToken extends index_2.Token {
|
|
|
114
114
|
return errors;
|
|
115
115
|
}
|
|
116
116
|
/** @private */
|
|
117
|
-
getTitle() {
|
|
118
|
-
return this.normalizeTitle(this.firstChild.text(), 0,
|
|
117
|
+
getTitle(halfParsed = false) {
|
|
118
|
+
return this.normalizeTitle(this.firstChild.text(), 0, halfParsed, true, true);
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
exports.LinkBaseToken = LinkBaseToken;
|
package/dist/src/link/file.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export declare abstract class FileToken extends LinkBaseToken {
|
|
|
21
21
|
*/
|
|
22
22
|
constructor(link: string, text?: string, config?: Parser.Config, accum?: Token[], delimiter?: string);
|
|
23
23
|
/** @override */
|
|
24
|
-
lint(start?: number): LintError[];
|
|
24
|
+
lint(start?: number, re?: RegExp): LintError[];
|
|
25
25
|
/** 获取所有图片参数节点 */
|
|
26
26
|
getAllArgs(): ImageParameterToken[];
|
|
27
27
|
/**
|
package/dist/src/link/file.js
CHANGED
|
@@ -51,14 +51,14 @@ class FileToken extends base_1.LinkBaseToken {
|
|
|
51
51
|
*/
|
|
52
52
|
constructor(link, text, config = index_1.default.getConfig(), accum = [], delimiter = '|') {
|
|
53
53
|
super(link, undefined, config, accum, delimiter);
|
|
54
|
-
const { extension } = this;
|
|
54
|
+
const { extension } = this.getTitle(true);
|
|
55
55
|
this.append(...explode('-{', '}-', '|', text).map(
|
|
56
56
|
// @ts-expect-error abstract class
|
|
57
57
|
part => new imageParameter_1.ImageParameterToken(part, extension, config, accum)));
|
|
58
58
|
}
|
|
59
59
|
/** @override */
|
|
60
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
61
|
-
const errors = super.lint(start), args = this.getAllArgs().filter(({ childNodes }) => {
|
|
60
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
61
|
+
const errors = super.lint(start, re), args = this.getAllArgs().filter(({ childNodes }) => {
|
|
62
62
|
const visibleNodes = childNodes.filter(node => node.text().trim());
|
|
63
63
|
return visibleNodes.length !== 1 || visibleNodes[0].type !== 'arg';
|
|
64
64
|
}), keys = [...new Set(args.map(({ name }) => name))].filter(key => key !== 'invalid'), frameKeys = keys.filter(key => frame.has(key)), horizAlignKeys = keys.filter(key => horizAlign.has(key)), vertAlignKeys = keys.filter(key => vertAlign.has(key));
|
|
@@ -15,6 +15,6 @@ export declare abstract class GalleryImageToken extends FileToken {
|
|
|
15
15
|
*/
|
|
16
16
|
constructor(type: GalleryTypes, link: string, text?: string, config?: Parser.Config, accum?: Token[]);
|
|
17
17
|
/** @override */
|
|
18
|
-
lint(start?: number): LintError[];
|
|
18
|
+
lint(start?: number, re?: RegExp): LintError[];
|
|
19
19
|
}
|
|
20
20
|
export {};
|
|
@@ -37,8 +37,8 @@ class GalleryImageToken extends file_1.FileToken {
|
|
|
37
37
|
return key === 'padding' ? 0 : super.getAttribute(key);
|
|
38
38
|
}
|
|
39
39
|
/** @override */
|
|
40
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
41
|
-
const errors = super.lint(start), { ns, interwiki } = this.getAttribute('title');
|
|
40
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
41
|
+
const errors = super.lint(start, re), { ns, interwiki } = this.getAttribute('title');
|
|
42
42
|
if (interwiki || ns !== 6) {
|
|
43
43
|
errors.push((0, lint_1.generateForSelf)(this, { start }, 'invalid-gallery', 'invalid gallery image'));
|
|
44
44
|
}
|
package/dist/src/link/index.d.ts
CHANGED
|
@@ -9,5 +9,5 @@ export declare abstract class LinkToken extends LinkBaseToken {
|
|
|
9
9
|
readonly type = "link";
|
|
10
10
|
readonly childNodes: readonly [AtomToken] | readonly [AtomToken, Token];
|
|
11
11
|
/** @override */
|
|
12
|
-
lint(start?: number): LintError[];
|
|
12
|
+
lint(start?: number, re?: RegExp): LintError[];
|
|
13
13
|
}
|
package/dist/src/link/index.js
CHANGED
|
@@ -10,8 +10,8 @@ const base_1 = require("./base");
|
|
|
10
10
|
class LinkToken extends base_1.LinkBaseToken {
|
|
11
11
|
type = 'link';
|
|
12
12
|
/** @override */
|
|
13
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
14
|
-
const errors = super.lint(start);
|
|
13
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
14
|
+
const errors = super.lint(start, re);
|
|
15
15
|
if (this.closest('ext-link-text')) {
|
|
16
16
|
errors.push((0, lint_1.generateForSelf)(this, { start }, 'nested-link', 'internal link in an external link'));
|
|
17
17
|
}
|
package/dist/src/magicLink.d.ts
CHANGED
|
@@ -17,5 +17,5 @@ export declare abstract class MagicLinkToken extends Token {
|
|
|
17
17
|
*/
|
|
18
18
|
constructor(url?: string, doubleSlash?: boolean, config?: Parser.Config, accum?: Token[]);
|
|
19
19
|
/** @override */
|
|
20
|
-
lint(start?: number): LintError[];
|
|
20
|
+
lint(start?: number, re?: RegExp): LintError[];
|
|
21
21
|
}
|
package/dist/src/magicLink.js
CHANGED
|
@@ -18,8 +18,8 @@ class MagicLinkToken extends index_2.Token {
|
|
|
18
18
|
this.type = doubleSlash ? 'ext-link-url' : 'free-ext-link';
|
|
19
19
|
}
|
|
20
20
|
/** @override */
|
|
21
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
22
|
-
const errors = super.lint(start), source = `[,;。:!?()]+${this.type === 'ext-link-url' ? '|\\|+' : ''}`, regex = new RegExp(source, 'u'), regexGlobal = new RegExp(source, 'gu');
|
|
21
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
22
|
+
const errors = super.lint(start, re), source = `[,;。:!?()]+${this.type === 'ext-link-url' ? '|\\|+' : ''}`, regex = new RegExp(source, 'u'), regexGlobal = new RegExp(source, 'gu');
|
|
23
23
|
let rect;
|
|
24
24
|
for (const child of this.childNodes) {
|
|
25
25
|
const { type, data } = child;
|
package/dist/src/nested.d.ts
CHANGED
|
@@ -24,5 +24,5 @@ export declare abstract class NestedToken extends Token {
|
|
|
24
24
|
*/
|
|
25
25
|
constructor(wikitext: string | undefined, regex: RegExp, tags: readonly string[], config?: Parser.Config, accum?: Token[]);
|
|
26
26
|
/** @override */
|
|
27
|
-
lint(start?: number): LintError[];
|
|
27
|
+
lint(start?: number, re?: RegExp): LintError[];
|
|
28
28
|
}
|
package/dist/src/nested.js
CHANGED
|
@@ -38,10 +38,10 @@ class NestedToken extends index_2.Token {
|
|
|
38
38
|
super(wikitext, config, accum, {});
|
|
39
39
|
}
|
|
40
40
|
/** @override */
|
|
41
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
41
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
42
42
|
let rect;
|
|
43
43
|
return [
|
|
44
|
-
...super.lint(start),
|
|
44
|
+
...super.lint(start, re),
|
|
45
45
|
...this.childNodes.filter(child => {
|
|
46
46
|
if (child.type === 'ext' || child.type === 'comment') {
|
|
47
47
|
return false;
|
package/dist/src/nowiki/index.js
CHANGED
|
@@ -18,7 +18,7 @@ class NowikiToken extends base_1.NowikiBaseToken {
|
|
|
18
18
|
};
|
|
19
19
|
return [e];
|
|
20
20
|
}
|
|
21
|
-
return super.lint(start);
|
|
21
|
+
return super.lint(start, new RegExp(`<\\s*(?:\\/\\s*)${name === 'nowiki' ? '' : '?'}(${name})\\b`, 'giu'));
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
exports.NowikiToken = NowikiToken;
|
package/dist/src/parameter.d.ts
CHANGED
package/dist/src/parameter.js
CHANGED
|
@@ -55,10 +55,10 @@ class ParameterToken extends index_2.Token {
|
|
|
55
55
|
return this.anon ? 0 : 1;
|
|
56
56
|
}
|
|
57
57
|
/** @override */
|
|
58
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
58
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
59
59
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
60
60
|
/https?:\/\/(?:\[[\da-f:.]+\]|[^[\]<>"\t\n\p{Zs}])(?:[^[\]<>"\0\t\n\p{Zs}]|\0\d+c\x7F)*$/iu;
|
|
61
|
-
const errors = super.lint(start), { firstChild } = this, link = new RegExp(`https?://${string_1.extUrlCharFirst}${string_1.extUrlChar}$`, 'iu').exec(firstChild.text())?.[0];
|
|
61
|
+
const errors = super.lint(start, re), { firstChild } = this, link = new RegExp(`https?://${string_1.extUrlCharFirst}${string_1.extUrlChar}$`, 'iu').exec(firstChild.text())?.[0];
|
|
62
62
|
if (link && new URL(link).search) {
|
|
63
63
|
const e = (0, lint_1.generateForChild)(firstChild, { start }, 'unescaped', 'unescaped query string in an anonymous parameter');
|
|
64
64
|
e.startIndex = e.endIndex;
|
package/dist/src/pre.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Parser from '../index';
|
|
2
2
|
import { Token } from './index';
|
|
3
3
|
import { NoincludeToken } from './nowiki/noinclude';
|
|
4
|
+
import type { LintError } from '../base';
|
|
4
5
|
import type { AstText, AttributesToken, ExtToken, ConverterToken } from '../internal';
|
|
5
6
|
/**
|
|
6
7
|
* `<pre>`
|
|
@@ -17,4 +18,6 @@ export declare abstract class PreToken extends Token {
|
|
|
17
18
|
abstract get parentNode(): ExtToken | undefined;
|
|
18
19
|
/** @class */
|
|
19
20
|
constructor(wikitext?: string, config?: Parser.Config, accum?: Token[]);
|
|
21
|
+
/** @override */
|
|
22
|
+
lint(start?: number): LintError[];
|
|
20
23
|
}
|
package/dist/src/pre.js
CHANGED
|
@@ -35,5 +35,9 @@ class PreToken extends index_2.Token {
|
|
|
35
35
|
getAttribute(key) {
|
|
36
36
|
return (key === 'plain') || super.getAttribute(key);
|
|
37
37
|
}
|
|
38
|
+
/** @override */
|
|
39
|
+
lint(start = this.getAbsoluteIndex()) {
|
|
40
|
+
return super.lint(start, /<\s*\/\s*(pre)\b/giu);
|
|
41
|
+
}
|
|
38
42
|
}
|
|
39
43
|
exports.PreToken = PreToken;
|
|
@@ -19,5 +19,5 @@ export declare abstract class TableToken extends TrBaseToken {
|
|
|
19
19
|
*/
|
|
20
20
|
constructor(syntax: string, attr?: string, config?: Parser.Config, accum?: Token[]);
|
|
21
21
|
/** @override */
|
|
22
|
-
lint(start?: number): LintError[];
|
|
22
|
+
lint(start?: number, re?: RegExp): LintError[];
|
|
23
23
|
}
|
package/dist/src/table/index.js
CHANGED
|
@@ -25,8 +25,8 @@ class TableToken extends trBase_1.TrBaseToken {
|
|
|
25
25
|
super(/^(?:\{\||\{\{\{\s*!\s*\}\}|\{\{\s*\(!\s*\}\})$/u, syntax, attr, config, accum, {});
|
|
26
26
|
}
|
|
27
27
|
/** @override */
|
|
28
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
29
|
-
const errors = super.lint(start);
|
|
28
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
29
|
+
const errors = super.lint(start, re);
|
|
30
30
|
if (!this.closed) {
|
|
31
31
|
errors.push((0, lint_1.generateForChild)(this.firstChild, { start }, 'unclosed-table', index_1.default.msg('unclosed $1', 'table')));
|
|
32
32
|
}
|
package/dist/src/table/td.d.ts
CHANGED
package/dist/src/table/td.js
CHANGED
|
@@ -74,8 +74,8 @@ class TdToken extends base_1.TableBaseToken {
|
|
|
74
74
|
return 0;
|
|
75
75
|
}
|
|
76
76
|
/** @override */
|
|
77
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
78
|
-
const errors = super.lint(start);
|
|
77
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
78
|
+
const errors = super.lint(start, re);
|
|
79
79
|
start += this.getRelativeIndex(this.length - 1);
|
|
80
80
|
for (const child of this.lastChild.childNodes) {
|
|
81
81
|
if (child.type === 'text') {
|
package/dist/src/table/trBase.js
CHANGED
|
@@ -7,8 +7,8 @@ const base_1 = require("./base");
|
|
|
7
7
|
/** 表格行或表格 */
|
|
8
8
|
class TrBaseToken extends base_1.TableBaseToken {
|
|
9
9
|
/** @override */
|
|
10
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
11
|
-
const errors = super.lint(start), inter = this.childNodes.find(({ type }) => type === 'table-inter');
|
|
10
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
11
|
+
const errors = super.lint(start, re), inter = this.childNodes.find(({ type }) => type === 'table-inter');
|
|
12
12
|
if (!inter) {
|
|
13
13
|
return errors;
|
|
14
14
|
}
|
|
@@ -21,5 +21,5 @@ export declare abstract class ExtToken extends TagPairToken {
|
|
|
21
21
|
*/
|
|
22
22
|
constructor(name: string, attr?: string, inner?: string, closed?: string, config?: Parser.Config, accum?: Token[]);
|
|
23
23
|
/** @override */
|
|
24
|
-
lint(start?: number): LintError[];
|
|
24
|
+
lint(start?: number, re?: RegExp): LintError[];
|
|
25
25
|
}
|
package/dist/src/tagPair/ext.js
CHANGED
|
@@ -119,8 +119,8 @@ class ExtToken extends index_3.TagPairToken {
|
|
|
119
119
|
this.seal('closed', true);
|
|
120
120
|
}
|
|
121
121
|
/** @override */
|
|
122
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
123
|
-
const errors = super.lint(start);
|
|
122
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
123
|
+
const errors = super.lint(start, re);
|
|
124
124
|
let rect;
|
|
125
125
|
if (this.name !== 'nowiki' && this.closest('html-attrs, table-attrs')) {
|
|
126
126
|
rect = { start, ...this.getRootNode().posFromIndex(start) };
|
package/dist/src/transclude.d.ts
CHANGED
package/dist/src/transclude.js
CHANGED
|
@@ -157,8 +157,8 @@ class TranscludeToken extends index_2.Token {
|
|
|
157
157
|
return 1;
|
|
158
158
|
}
|
|
159
159
|
/** @override */
|
|
160
|
-
lint(start = this.getAbsoluteIndex()) {
|
|
161
|
-
const errors = super.lint(start), { type, childNodes, length } = this;
|
|
160
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
161
|
+
const errors = super.lint(start, re), { type, childNodes, length } = this;
|
|
162
162
|
let rect;
|
|
163
163
|
if (!this.isTemplate()) {
|
|
164
164
|
return errors;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wikilint",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.4",
|
|
4
4
|
"description": "A Node.js linter for MediaWiki markup",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mediawiki",
|
|
@@ -43,15 +43,17 @@
|
|
|
43
43
|
"test:end": "pkill -x http-server",
|
|
44
44
|
"test:real": "node dist/test/real.js"
|
|
45
45
|
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"chalk": "^4.1.2"
|
|
48
|
+
},
|
|
46
49
|
"devDependencies": {
|
|
47
50
|
"@cypress/request": "^3.0.1",
|
|
48
51
|
"@stylistic/eslint-plugin": "^1.5.4",
|
|
49
52
|
"@types/node": "^20.11.6",
|
|
50
53
|
"@types/request": "^2.48.12",
|
|
51
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
52
|
-
"@typescript-eslint/parser": "^
|
|
54
|
+
"@typescript-eslint/eslint-plugin": "^7.1.0",
|
|
55
|
+
"@typescript-eslint/parser": "^7.1.0",
|
|
53
56
|
"ajv-cli": "^5.0.0",
|
|
54
|
-
"chalk": "^4.1.2",
|
|
55
57
|
"eslint": "^8.56.0",
|
|
56
58
|
"eslint-plugin-es-x": "^7.5.0",
|
|
57
59
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
@@ -60,7 +62,7 @@
|
|
|
60
62
|
"eslint-plugin-n": "^16.6.2",
|
|
61
63
|
"eslint-plugin-promise": "^6.1.1",
|
|
62
64
|
"eslint-plugin-regexp": "^2.2.0",
|
|
63
|
-
"eslint-plugin-unicorn": "^
|
|
65
|
+
"eslint-plugin-unicorn": "^51.0.1",
|
|
64
66
|
"typescript": "^5.3.3"
|
|
65
67
|
},
|
|
66
68
|
"engines": {
|