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.
Files changed (52) hide show
  1. package/dist/lib/element.d.ts +2 -1
  2. package/dist/lib/element.js +3 -2
  3. package/dist/lib/text.d.ts +1 -1
  4. package/dist/lib/text.js +16 -14
  5. package/dist/src/arg.d.ts +1 -1
  6. package/dist/src/arg.js +3 -3
  7. package/dist/src/attribute.d.ts +3 -1
  8. package/dist/src/attribute.js +3 -3
  9. package/dist/src/attributes.d.ts +1 -1
  10. package/dist/src/attributes.js +2 -2
  11. package/dist/src/converterFlags.d.ts +1 -1
  12. package/dist/src/converterFlags.js +2 -2
  13. package/dist/src/extLink.d.ts +1 -1
  14. package/dist/src/extLink.js +2 -2
  15. package/dist/src/gallery.d.ts +1 -1
  16. package/dist/src/gallery.js +2 -2
  17. package/dist/src/heading.d.ts +1 -1
  18. package/dist/src/heading.js +2 -2
  19. package/dist/src/html.d.ts +1 -1
  20. package/dist/src/html.js +2 -2
  21. package/dist/src/imageParameter.d.ts +1 -1
  22. package/dist/src/imageParameter.js +2 -2
  23. package/dist/src/imagemap.d.ts +1 -1
  24. package/dist/src/imagemap.js +2 -2
  25. package/dist/src/link/base.d.ts +1 -1
  26. package/dist/src/link/base.js +4 -4
  27. package/dist/src/link/file.d.ts +1 -1
  28. package/dist/src/link/file.js +3 -3
  29. package/dist/src/link/galleryImage.d.ts +1 -1
  30. package/dist/src/link/galleryImage.js +2 -2
  31. package/dist/src/link/index.d.ts +1 -1
  32. package/dist/src/link/index.js +2 -2
  33. package/dist/src/magicLink.d.ts +1 -1
  34. package/dist/src/magicLink.js +2 -2
  35. package/dist/src/nested.d.ts +1 -1
  36. package/dist/src/nested.js +2 -2
  37. package/dist/src/nowiki/index.js +1 -1
  38. package/dist/src/parameter.d.ts +1 -1
  39. package/dist/src/parameter.js +2 -2
  40. package/dist/src/pre.d.ts +3 -0
  41. package/dist/src/pre.js +4 -0
  42. package/dist/src/table/index.d.ts +1 -1
  43. package/dist/src/table/index.js +2 -2
  44. package/dist/src/table/td.d.ts +1 -1
  45. package/dist/src/table/td.js +2 -2
  46. package/dist/src/table/trBase.d.ts +1 -1
  47. package/dist/src/table/trBase.js +2 -2
  48. package/dist/src/tagPair/ext.d.ts +1 -1
  49. package/dist/src/tagPair/ext.js +2 -2
  50. package/dist/src/transclude.d.ts +1 -1
  51. package/dist/src/transclude.js +2 -2
  52. package/package.json +7 -5
@@ -50,6 +50,7 @@ export declare abstract class AstElement extends AstNode {
50
50
  /**
51
51
  * @override
52
52
  * @param start
53
+ * @param re 用于`AstText`后代节点的正则表达式
53
54
  */
54
- lint(start?: number): LintError[];
55
+ lint(start?: number, re?: RegExp): LintError[];
55
56
  }
@@ -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;
@@ -14,7 +14,7 @@ export declare class AstText extends AstNode {
14
14
  * @override
15
15
  * @param start
16
16
  */
17
- lint(start?: number): LintError[];
17
+ lint(start?: number, errorRegex?: RegExp): LintError[];
18
18
  /**
19
19
  * 替换字符串
20
20
  * @param text 替换的字符串
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 { NowikiToken } = require('../src/nowiki');
87
- const { type, name } = parentNode, nowiki = name === 'nowiki' || name === 'pre', isHtmlAttrVal = type === 'attr-value' && parentNode.parentNode.type !== 'ext-attr';
88
- let errorRegex;
89
- if (type === 'ext-inner' && (name === 'pre' || parentNode instanceof NowikiToken)) {
90
- errorRegex = new RegExp(`<\\s*(?:\\/\\s*)${nowiki ? '' : '?'}(${name})\\b`, 'giu');
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
- else if (type === 'free-ext-link'
97
+ errorRegex ??= type === 'free-ext-link'
93
98
  || type === 'ext-link-url'
94
99
  || type === 'image-parameter' && name === 'link'
95
- || isHtmlAttrVal) {
96
- errorRegex = errorSyntaxUrl;
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 === '<' && (nowiki || !/[\s/>]/u.test(nextChar ?? ''))
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
@@ -19,5 +19,5 @@ export declare abstract class ArgToken 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
  }
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) };
@@ -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
  }
@@ -178,7 +178,7 @@ class AttributeToken extends index_2.Token {
178
178
  #tag;
179
179
  #equal;
180
180
  #quotes;
181
- /** @private */
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();
@@ -39,6 +39,6 @@ export declare abstract class AttributesToken extends Token {
39
39
  */
40
40
  getAttr(key: string): string | true | undefined;
41
41
  /** @override */
42
- lint(start?: number): LintError[];
42
+ lint(start?: number, re?: RegExp): LintError[];
43
43
  }
44
44
  export {};
@@ -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) };
@@ -25,5 +25,5 @@ export declare abstract class ConverterFlagsToken extends Token {
25
25
  /** 获取指定语言变体的转换标记 */
26
26
  getVariantFlags(): Set<string>;
27
27
  /** @override */
28
- lint(start?: number): LintError[];
28
+ lint(start?: number, re?: RegExp): LintError[];
29
29
  }
@@ -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
  }
@@ -21,5 +21,5 @@ export declare abstract class ExtLinkToken extends Token {
21
21
  /** @override */
22
22
  text(): string;
23
23
  /** @override */
24
- lint(start?: number): LintError[];
24
+ lint(start?: number, re?: RegExp): LintError[];
25
25
  }
@@ -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
  }
@@ -23,5 +23,5 @@ export declare abstract class GalleryToken extends Token {
23
23
  /** @override */
24
24
  text(): string;
25
25
  /** @override */
26
- lint(start?: number): LintError[];
26
+ lint(start?: number, re?: RegExp): LintError[];
27
27
  }
@@ -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
  }
@@ -22,5 +22,5 @@ export declare abstract class HeadingToken extends Token {
22
22
  /** @override */
23
23
  text(): string;
24
24
  /** @override */
25
- lint(start?: number): LintError[];
25
+ lint(start?: number, re?: RegExp): LintError[];
26
26
  }
@@ -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) };
@@ -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 = {
@@ -25,5 +25,5 @@ export declare abstract class ImagemapToken extends Token {
25
25
  /** @override */
26
26
  text(): string;
27
27
  /** @override */
28
- lint(start?: number): LintError[];
28
+ lint(start?: number, re?: RegExp): LintError[];
29
29
  }
@@ -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();
@@ -22,5 +22,5 @@ export declare abstract class LinkBaseToken extends Token {
22
22
  /** @override */
23
23
  text(): string;
24
24
  /** @override */
25
- lint(start?: number): LintError[];
25
+ lint(start?: number, re?: RegExp): LintError[];
26
26
  }
@@ -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, false, true, true);
117
+ getTitle(halfParsed = false) {
118
+ return this.normalizeTitle(this.firstChild.text(), 0, halfParsed, true, true);
119
119
  }
120
120
  }
121
121
  exports.LinkBaseToken = LinkBaseToken;
@@ -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
  /**
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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
  }
@@ -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;
@@ -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
  }
@@ -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;
@@ -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;
@@ -25,5 +25,5 @@ export declare abstract class ParameterToken extends Token {
25
25
  /** @override */
26
26
  text(): string;
27
27
  /** @override */
28
- lint(start?: number): LintError[];
28
+ lint(start?: number, re?: RegExp): LintError[];
29
29
  }
@@ -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
  }
@@ -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
  }
@@ -30,5 +30,5 @@ export declare abstract class TdToken extends TableBaseToken {
30
30
  /** @override */
31
31
  text(): string;
32
32
  /** @override */
33
- lint(start?: number): LintError[];
33
+ lint(start?: number, re?: RegExp): LintError[];
34
34
  }
@@ -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') {
@@ -11,5 +11,5 @@ export interface TableCoords {
11
11
  export declare abstract class TrBaseToken extends TableBaseToken {
12
12
  type: 'table' | 'tr';
13
13
  /** @override */
14
- lint(start?: number): LintError[];
14
+ lint(start?: number, re?: RegExp): LintError[];
15
15
  }
@@ -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
  }
@@ -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) };
@@ -31,7 +31,7 @@ export declare abstract class TranscludeToken extends Token {
31
31
  /** @override */
32
32
  text(): string;
33
33
  /** @override */
34
- lint(start?: number): LintError[];
34
+ lint(start?: number, re?: RegExp): LintError[];
35
35
  /**
36
36
  * @override
37
37
  * @param token 待插入的子节点
@@ -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.2",
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": "^6.19.1",
52
- "@typescript-eslint/parser": "^6.19.1",
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": "^50.0.1",
65
+ "eslint-plugin-unicorn": "^51.0.1",
64
66
  "typescript": "^5.3.3"
65
67
  },
66
68
  "engines": {