wikilint 2.8.0 → 2.9.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.
Files changed (85) hide show
  1. package/dist/base.d.ts +2 -2
  2. package/dist/base.js +1 -0
  3. package/dist/index.d.ts +1 -3
  4. package/dist/index.js +7 -2
  5. package/dist/lib/element.d.ts +0 -6
  6. package/dist/lib/element.js +2 -6
  7. package/dist/lib/node.d.ts +1 -1
  8. package/dist/lib/node.js +1 -1
  9. package/dist/lib/text.d.ts +0 -6
  10. package/dist/lib/text.js +4 -8
  11. package/dist/parser/braces.js +10 -1
  12. package/dist/parser/externalLinks.js +1 -1
  13. package/dist/parser/magicLinks.js +34 -17
  14. package/dist/parser/table.js +1 -1
  15. package/dist/src/arg.d.ts +0 -2
  16. package/dist/src/arg.js +2 -2
  17. package/dist/src/attribute.d.ts +0 -2
  18. package/dist/src/attribute.js +2 -2
  19. package/dist/src/attributes.d.ts +0 -2
  20. package/dist/src/attributes.js +1 -1
  21. package/dist/src/converter.js +1 -1
  22. package/dist/src/converterFlags.d.ts +0 -2
  23. package/dist/src/converterFlags.js +1 -1
  24. package/dist/src/converterRule.js +1 -1
  25. package/dist/src/extLink.d.ts +0 -2
  26. package/dist/src/extLink.js +2 -2
  27. package/dist/src/gallery.d.ts +0 -2
  28. package/dist/src/gallery.js +2 -2
  29. package/dist/src/heading.d.ts +0 -2
  30. package/dist/src/heading.js +3 -3
  31. package/dist/src/html.d.ts +0 -2
  32. package/dist/src/html.js +2 -2
  33. package/dist/src/imageParameter.d.ts +0 -2
  34. package/dist/src/imageParameter.js +1 -1
  35. package/dist/src/imagemap.d.ts +0 -2
  36. package/dist/src/imagemap.js +2 -2
  37. package/dist/src/index.d.ts +1 -1
  38. package/dist/src/index.js +29 -15
  39. package/dist/src/link/base.d.ts +0 -2
  40. package/dist/src/link/base.js +1 -1
  41. package/dist/src/link/file.d.ts +0 -2
  42. package/dist/src/link/file.js +1 -1
  43. package/dist/src/link/galleryImage.d.ts +0 -2
  44. package/dist/src/link/galleryImage.js +2 -3
  45. package/dist/src/link/index.d.ts +0 -2
  46. package/dist/src/link/index.js +1 -1
  47. package/dist/src/link/redirectTarget.d.ts +0 -2
  48. package/dist/src/link/redirectTarget.js +3 -3
  49. package/dist/src/magicLink.d.ts +7 -5
  50. package/dist/src/magicLink.js +37 -5
  51. package/dist/src/nested.d.ts +0 -2
  52. package/dist/src/nested.js +3 -3
  53. package/dist/src/nowiki/comment.d.ts +0 -2
  54. package/dist/src/nowiki/comment.js +1 -1
  55. package/dist/src/nowiki/index.d.ts +0 -2
  56. package/dist/src/nowiki/index.js +1 -1
  57. package/dist/src/nowiki/quote.d.ts +0 -2
  58. package/dist/src/nowiki/quote.js +1 -1
  59. package/dist/src/paramTag/index.d.ts +0 -2
  60. package/dist/src/paramTag/index.js +2 -2
  61. package/dist/src/parameter.d.ts +0 -2
  62. package/dist/src/parameter.js +2 -2
  63. package/dist/src/pre.d.ts +0 -2
  64. package/dist/src/pre.js +1 -1
  65. package/dist/src/redirect.d.ts +0 -4
  66. package/dist/src/redirect.js +3 -3
  67. package/dist/src/syntax.d.ts +0 -2
  68. package/dist/src/syntax.js +1 -1
  69. package/dist/src/table/index.d.ts +0 -2
  70. package/dist/src/table/index.js +1 -1
  71. package/dist/src/table/td.d.ts +0 -2
  72. package/dist/src/table/td.js +2 -2
  73. package/dist/src/table/trBase.d.ts +0 -2
  74. package/dist/src/table/trBase.js +2 -2
  75. package/dist/src/tagPair/ext.d.ts +0 -2
  76. package/dist/src/tagPair/ext.js +1 -1
  77. package/dist/src/tagPair/include.d.ts +0 -2
  78. package/dist/src/tagPair/include.js +1 -1
  79. package/dist/src/tagPair/index.js +2 -2
  80. package/dist/src/transclude.d.ts +0 -2
  81. package/dist/src/transclude.js +2 -2
  82. package/dist/util/lint.js +1 -1
  83. package/i18n/zh-hans.json +1 -0
  84. package/i18n/zh-hant.json +1 -0
  85. package/package.json +4 -4
package/dist/src/index.js CHANGED
@@ -28,6 +28,7 @@
28
28
  // e: ExtToken
29
29
  // f: MagicLinkToken inside ImageParameterToken
30
30
  // h: HeadingToken
31
+ // i: RFC/PMID/ISBN
31
32
  // l: LinkToken
32
33
  // m: `{{fullurl:}}`、`{{canonicalurl:}}`或`{{filepath:}}`
33
34
  // q: QuoteToken
@@ -51,13 +52,15 @@ const text_1 = require("../lib/text");
51
52
  * @classdesc `{childNodes: ...(AstText|Token)}`
52
53
  */
53
54
  class Token extends element_1.AstElement {
54
- type = 'root';
55
+ type = 'plain';
55
56
  /** 解析阶段,参见顶部注释。只对plain Token有意义。 */
56
57
  #stage = 0;
57
58
  #config;
58
59
  /** 这个数组起两个作用:1. 数组中的Token会在build时替换`/\0\d+.\x7F/`标记;2. 数组中的Token会依次执行parseOnce和build方法。 */
59
60
  #accum;
60
61
  #include;
62
+ #built = false;
63
+ #string;
61
64
  /** @class */
62
65
  constructor(wikitext, config = index_1.default.getConfig(), accum = [], acceptable) {
63
66
  super();
@@ -165,6 +168,7 @@ class Token extends element_1.AstElement {
165
168
  token.afterBuild();
166
169
  }
167
170
  }
171
+ this.#built = true;
168
172
  }
169
173
  /** @private */
170
174
  parse(n = constants_1.MAX_STAGE, include) {
@@ -181,7 +185,7 @@ class Token extends element_1.AstElement {
181
185
  /** 解析重定向 */
182
186
  #parseRedirect() {
183
187
  const { parseRedirect } = require('../parser/redirect');
184
- const wikitext = String(this.firstChild), parsed = parseRedirect(wikitext, this.#config, this.#accum);
188
+ const wikitext = this.firstChild.toString(), parsed = parseRedirect(wikitext, this.#config, this.#accum);
185
189
  if (parsed) {
186
190
  this.setText(parsed);
187
191
  }
@@ -193,12 +197,12 @@ class Token extends element_1.AstElement {
193
197
  */
194
198
  #parseCommentAndExt(includeOnly) {
195
199
  const { parseCommentAndExt } = require('../parser/commentAndExt');
196
- this.setText(parseCommentAndExt(String(this.firstChild), this.#config, this.#accum, includeOnly));
200
+ this.setText(parseCommentAndExt(this.firstChild.toString(), this.#config, this.#accum, includeOnly));
197
201
  }
198
202
  /** 解析花括号 */
199
203
  #parseBraces() {
200
204
  const { parseBraces } = require('../parser/braces');
201
- const str = this.type === 'root' ? String(this.firstChild) : `\0${String(this.firstChild)}`, parsed = parseBraces(str, this.#config, this.#accum);
205
+ const str = this.type === 'root' ? this.firstChild.toString() : `\0${this.firstChild.toString()}`, parsed = parseBraces(str, this.#config, this.#accum);
202
206
  this.setText(this.type === 'root' ? parsed : parsed.slice(1));
203
207
  }
204
208
  /** 解析HTML标签 */
@@ -207,7 +211,7 @@ class Token extends element_1.AstElement {
207
211
  return;
208
212
  }
209
213
  const { parseHtml } = require('../parser/html');
210
- this.setText(parseHtml(String(this.firstChild), this.#config, this.#accum));
214
+ this.setText(parseHtml(this.firstChild.toString(), this.#config, this.#accum));
211
215
  }
212
216
  /** 解析表格 */
213
217
  #parseTable() {
@@ -228,7 +232,7 @@ class Token extends element_1.AstElement {
228
232
  /** 解析内部链接 */
229
233
  #parseLinks() {
230
234
  const { parseLinks } = require('../parser/links');
231
- this.setText(parseLinks(String(this.firstChild), this.#config, this.#accum));
235
+ this.setText(parseLinks(this.firstChild.toString(), this.#config, this.#accum));
232
236
  }
233
237
  /** 解析单引号 */
234
238
  #parseQuotes() {
@@ -236,7 +240,7 @@ class Token extends element_1.AstElement {
236
240
  return;
237
241
  }
238
242
  const { parseQuotes } = require('../parser/quotes');
239
- const lines = String(this.firstChild).split('\n');
243
+ const lines = this.firstChild.toString().split('\n');
240
244
  for (let i = 0; i < lines.length; i++) {
241
245
  lines[i] = parseQuotes(lines[i], this.#config, this.#accum);
242
246
  }
@@ -248,7 +252,7 @@ class Token extends element_1.AstElement {
248
252
  return;
249
253
  }
250
254
  const { parseExternalLinks } = require('../parser/externalLinks');
251
- this.setText(parseExternalLinks(String(this.firstChild), this.#config, this.#accum));
255
+ this.setText(parseExternalLinks(this.firstChild.toString(), this.#config, this.#accum));
252
256
  }
253
257
  /** 解析自由外链 */
254
258
  #parseMagicLinks() {
@@ -256,7 +260,7 @@ class Token extends element_1.AstElement {
256
260
  return;
257
261
  }
258
262
  const { parseMagicLinks } = require('../parser/magicLinks');
259
- this.setText(parseMagicLinks(String(this.firstChild), this.#config, this.#accum));
263
+ this.setText(parseMagicLinks(this.firstChild.toString(), this.#config, this.#accum));
260
264
  }
261
265
  /** 解析列表 */
262
266
  #parseList() {
@@ -264,7 +268,7 @@ class Token extends element_1.AstElement {
264
268
  return;
265
269
  }
266
270
  const { parseList } = require('../parser/list');
267
- const lines = String(this.firstChild).split('\n');
271
+ const lines = this.firstChild.toString().split('\n');
268
272
  let i = this.type === 'root' || this.type === 'ext-inner' && this.name === 'poem' ? 0 : 1;
269
273
  for (; i < lines.length; i++) {
270
274
  lines[i] = parseList(lines[i], this.#config, this.#accum);
@@ -275,7 +279,7 @@ class Token extends element_1.AstElement {
275
279
  #parseConverter() {
276
280
  if (this.#config.variants.length > 0) {
277
281
  const { parseConverter } = require('../parser/converter');
278
- this.setText(parseConverter(String(this.firstChild), this.#config, this.#accum));
282
+ this.setText(parseConverter(this.firstChild.toString(), this.#config, this.#accum));
279
283
  }
280
284
  }
281
285
  /** @private */
@@ -330,9 +334,9 @@ class Token extends element_1.AstElement {
330
334
  normalizeTitle(title, defaultNs = 0, halfParsed, decode, selfLink) {
331
335
  return index_1.default.normalizeTitle(title, defaultNs, this.#include, this.#config, halfParsed, decode, selfLink);
332
336
  }
333
- /** @override */
337
+ /** @private */
334
338
  lint(start = this.getAbsoluteIndex(), re) {
335
- const errors = super.lint(start, re);
339
+ let errors = super.lint(start, re);
336
340
  if (this.type === 'root') {
337
341
  const record = {};
338
342
  for (const cat of this.querySelectorAll('category')) {
@@ -359,7 +363,7 @@ class Token extends element_1.AstElement {
359
363
  }));
360
364
  }
361
365
  }
362
- const regex = /<!--\s*lint-(disable(?:(?:-next)?-line)?|enable)(\s[\sa-z,-]*)?-->/gu, wikitext = String(this), ignores = [];
366
+ const regex = /<!--\s*lint-(disable(?:(?:-next)?-line)?|enable)(\s[\sa-z,-]*)?-->/gu, wikitext = this.toString(), ignores = [];
363
367
  let mt = regex.exec(wikitext), last = 0, curLine = 0;
364
368
  while (mt) {
365
369
  const { 1: type, index } = mt, detail = mt[2]?.trim();
@@ -373,7 +377,7 @@ class Token extends element_1.AstElement {
373
377
  });
374
378
  mt = regex.exec(wikitext);
375
379
  }
376
- return errors.filter(({ rule, startLine, startIndex }) => {
380
+ errors = errors.filter(({ rule, startLine, startIndex }) => {
377
381
  const nearest = { pos: 0 };
378
382
  for (const { line, from, to, rules } of ignores) {
379
383
  if (line > startLine + 1) {
@@ -399,5 +403,15 @@ class Token extends element_1.AstElement {
399
403
  }
400
404
  return errors;
401
405
  }
406
+ /** @override */
407
+ toString(separator) {
408
+ const root = this.getRootNode();
409
+ if (root.type === 'root'
410
+ && root.#built) {
411
+ this.#string ??= super.toString(separator);
412
+ return this.#string;
413
+ }
414
+ return super.toString(separator);
415
+ }
402
416
  }
403
417
  exports.Token = Token;
@@ -22,6 +22,4 @@ export declare abstract class LinkBaseToken extends Token {
22
22
  constructor(link: string, linkText?: string, config?: Parser.Config, accum?: Token[], delimiter?: string);
23
23
  /** @override */
24
24
  text(): string;
25
- /** @override */
26
- lint(start?: number, re?: RegExp): LintError[];
27
25
  }
@@ -71,7 +71,7 @@ class LinkBaseToken extends index_2.Token {
71
71
  getGaps(i) {
72
72
  return i === 0 ? this.#delimiter.length : 1;
73
73
  }
74
- /** @override */
74
+ /** @private */
75
75
  lint(start = this.getAbsoluteIndex(), re) {
76
76
  const errors = super.lint(start, re), { childNodes: [target, linkText], type: linkType } = this, { encoded, fragment } = this.#title;
77
77
  let rect;
@@ -20,8 +20,6 @@ export declare abstract class FileToken extends LinkBaseToken {
20
20
  * @param delimiter `|`
21
21
  */
22
22
  constructor(link: string, text?: string, config?: Parser.Config, accum?: Token[], delimiter?: string);
23
- /** @override */
24
- lint(start?: number, re?: RegExp): LintError[];
25
23
  /** 获取所有图片参数节点 */
26
24
  getAllArgs(): ImageParameterToken[];
27
25
  /**
@@ -56,7 +56,7 @@ class FileToken extends base_1.LinkBaseToken {
56
56
  // @ts-expect-error abstract class
57
57
  part => new imageParameter_1.ImageParameterToken(part, extension, config, accum)));
58
58
  }
59
- /** @override */
59
+ /** @private */
60
60
  lint(start = this.getAbsoluteIndex(), re) {
61
61
  const errors = super.lint(start, re), args = this.getAllArgs().filter(({ childNodes }) => {
62
62
  const visibleNodes = childNodes.filter(node => node.text().trim());
@@ -14,7 +14,5 @@ export declare abstract class GalleryImageToken extends FileToken {
14
14
  * @param text 图片参数
15
15
  */
16
16
  constructor(type: GalleryTypes, link: string, text?: string, config?: Parser.Config, accum?: Token[]);
17
- /** @override */
18
- lint(start?: number, re?: RegExp): LintError[];
19
17
  }
20
18
  export {};
@@ -18,7 +18,6 @@ class GalleryImageToken extends file_1.FileToken {
18
18
  if (text !== undefined) {
19
19
  const { length } = accum;
20
20
  token = new index_2.Token(text, config, accum);
21
- token.type = 'plain';
22
21
  for (let n = 1; n < constants_1.MAX_STAGE; n++) {
23
22
  token.parseOnce();
24
23
  }
@@ -31,13 +30,13 @@ class GalleryImageToken extends file_1.FileToken {
31
30
  /** @private */
32
31
  getTitle() {
33
32
  const imagemap = this.type === 'imagemap-image';
34
- return this.normalizeTitle(String(this.firstChild), imagemap ? 0 : 6, true, !imagemap);
33
+ return this.normalizeTitle(this.firstChild.toString(), imagemap ? 0 : 6, true, !imagemap);
35
34
  }
36
35
  /** @private */
37
36
  getAttribute(key) {
38
37
  return key === 'padding' ? 0 : super.getAttribute(key);
39
38
  }
40
- /** @override */
39
+ /** @private */
41
40
  lint(start = this.getAbsoluteIndex(), re) {
42
41
  const errors = super.lint(start, re), { ns, interwiki } = this.getAttribute('title');
43
42
  if (interwiki || ns !== 6) {
@@ -8,6 +8,4 @@ import type { Token, AtomToken } from '../../internal';
8
8
  export declare abstract class LinkToken extends LinkBaseToken {
9
9
  readonly type = "link";
10
10
  readonly childNodes: readonly [AtomToken] | readonly [AtomToken, Token];
11
- /** @override */
12
- lint(start?: number, re?: RegExp): LintError[];
13
11
  }
@@ -9,7 +9,7 @@ const base_1 = require("./base");
9
9
  */
10
10
  class LinkToken extends base_1.LinkBaseToken {
11
11
  type = 'link';
12
- /** @override */
12
+ /** @private */
13
13
  lint(start = this.getAbsoluteIndex(), re) {
14
14
  const errors = super.lint(start, re);
15
15
  if (this.closest('ext-link-text')) {
@@ -20,6 +20,4 @@ export declare abstract class RedirectTargetToken extends LinkBaseToken {
20
20
  constructor(link: string, linkText?: string, config?: Parser.Config, accum?: Token[]);
21
21
  /** @override */
22
22
  text(): string;
23
- /** @override */
24
- lint(start?: number): LintError[];
25
23
  }
@@ -25,13 +25,13 @@ class RedirectTargetToken extends base_1.LinkBaseToken {
25
25
  }
26
26
  /** @private */
27
27
  getTitle() {
28
- return this.normalizeTitle(String(this.firstChild), 0, true, true);
28
+ return this.normalizeTitle(this.firstChild.toString(), 0, true, true);
29
29
  }
30
30
  /** @override */
31
31
  text() {
32
- return `[[${String(this.firstChild)}]]`;
32
+ return `[[${this.firstChild.toString()}]]`;
33
33
  }
34
- /** @override */
34
+ /** @private */
35
35
  lint(start = this.getAbsoluteIndex()) {
36
36
  const errors = super.lint(start, /\]\]/u);
37
37
  if (this.length === 2) {
@@ -2,20 +2,22 @@ import Parser from '../index';
2
2
  import { Token } from './index';
3
3
  import type { LintError } from '../base';
4
4
  import type { AstText, CommentToken, IncludeToken, NoincludeToken, TranscludeToken } from '../internal';
5
+ declare type ExtLinkTypes = 'free-ext-link' | 'ext-link-url' | 'magic-link';
5
6
  /**
6
7
  * 自由外链
7
8
  * @classdesc `{childNodes: ...AstText|CommentToken|IncludeToken|NoincludeToken}`
8
9
  */
9
10
  export declare abstract class MagicLinkToken extends Token {
10
- type: 'free-ext-link' | 'ext-link-url';
11
+ type: ExtLinkTypes;
11
12
  readonly childNodes: readonly (AstText | CommentToken | IncludeToken | NoincludeToken | TranscludeToken)[];
12
13
  abstract get firstChild(): AstText | TranscludeToken;
13
14
  abstract get lastChild(): AstText | CommentToken | IncludeToken | NoincludeToken | TranscludeToken;
15
+ /** 和内链保持一致 */
16
+ get link(): string;
14
17
  /**
15
18
  * @param url 网址
16
- * @param doubleSlash 是否接受"//"作为协议
19
+ * @param type 类型
17
20
  */
18
- constructor(url?: string, doubleSlash?: boolean, config?: Parser.Config, accum?: Token[]);
19
- /** @override */
20
- lint(start?: number, re?: RegExp): LintError[];
21
+ constructor(url?: string, type?: ExtLinkTypes, config?: Parser.Config, accum?: Token[]);
21
22
  }
23
+ export {};
@@ -2,25 +2,57 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MagicLinkToken = void 0;
4
4
  const lint_1 = require("../util/lint");
5
+ const string_1 = require("../util/string");
5
6
  const index_1 = require("../index");
6
7
  const index_2 = require("./index");
8
+ const space = '(?:[\\p{Zs}\\t]|&nbsp;|&#0*160;|&#[xX]0*[aA]0;)';
7
9
  /**
8
10
  * 自由外链
9
11
  * @classdesc `{childNodes: ...AstText|CommentToken|IncludeToken|NoincludeToken}`
10
12
  */
11
13
  class MagicLinkToken extends index_2.Token {
14
+ /** 和内链保持一致 */
15
+ get link() {
16
+ const map = { '!': '|', '=': '=' };
17
+ let link = (0, string_1.text)(this.childNodes.map(child => {
18
+ const { type, name } = child;
19
+ return type === 'magic-word' && String(name) in map ? map[name] : child;
20
+ }));
21
+ if (this.type === 'magic-link') {
22
+ link = link.replace(new RegExp(`${space}+`, 'gu'), ' ');
23
+ if (link.startsWith('ISBN')) {
24
+ link = `ISBN ${link.slice(5).replace(/[- ]/gu, '').replace(/x$/u, 'X')}`;
25
+ }
26
+ }
27
+ return link;
28
+ }
12
29
  /**
13
30
  * @param url 网址
14
- * @param doubleSlash 是否接受"//"作为协议
31
+ * @param type 类型
15
32
  */
16
- constructor(url, doubleSlash, config = index_1.default.getConfig(), accum = []) {
33
+ constructor(url, type = 'free-ext-link', config = index_1.default.getConfig(), accum = []) {
17
34
  super(url, config, accum, {});
18
- this.type = doubleSlash ? 'ext-link-url' : 'free-ext-link';
35
+ this.type = type;
19
36
  }
20
- /** @override */
37
+ /** @private */
21
38
  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');
39
+ const errors = super.lint(start, re);
23
40
  let rect;
41
+ if (this.type === 'magic-link') {
42
+ const { link } = this;
43
+ if (link.startsWith('ISBN')) {
44
+ // eslint-disable-next-line unicorn/no-useless-spread
45
+ const digits = [...link.slice(5)].map(s => s === 'X' ? 10 : Number(s));
46
+ if (digits.length === 10 && digits.reduce((sum, d, i) => sum + d * (10 - i), 0) % 11
47
+ || digits.length === 13 && (digits[12] === 10
48
+ || digits.reduce((sum, d, i) => sum + d * (i % 2 ? 3 : 1), 0) % 10)) {
49
+ rect = { start, ...this.getRootNode().posFromIndex(start) };
50
+ errors.push((0, lint_1.generateForSelf)(this, rect, 'invalid-isbn', 'invalid ISBN'));
51
+ }
52
+ }
53
+ return errors;
54
+ }
55
+ const source = `[,;。:!?()]+${this.type === 'ext-link-url' ? '|\\|+' : ''}`, regex = new RegExp(source, 'u'), regexGlobal = new RegExp(source, 'gu');
24
56
  for (const child of this.childNodes) {
25
57
  const { type, data } = child;
26
58
  if (type !== 'text' || !regex.test(data)) {
@@ -23,6 +23,4 @@ export declare abstract class NestedToken extends Token {
23
23
  * @param tags 内层标签名
24
24
  */
25
25
  constructor(wikitext: string | undefined, regex: RegExp, tags: readonly string[], config?: Parser.Config, accum?: Token[]);
26
- /** @override */
27
- lint(start?: number, re?: RegExp): LintError[];
28
26
  }
@@ -37,7 +37,7 @@ class NestedToken extends index_2.Token {
37
37
  });
38
38
  super(wikitext, config, accum, {});
39
39
  }
40
- /** @override */
40
+ /** @private */
41
41
  lint(start = this.getAbsoluteIndex(), re) {
42
42
  let rect;
43
43
  return [
@@ -46,7 +46,7 @@ class NestedToken extends index_2.Token {
46
46
  if (child.type === 'ext' || child.type === 'comment') {
47
47
  return false;
48
48
  }
49
- const str = String(child).trim();
49
+ const str = child.toString().trim();
50
50
  return str && !/^<!--.*-->$/su.test(str);
51
51
  }).map(child => {
52
52
  rect ??= { start, ...this.getRootNode().posFromIndex(start) };
@@ -60,7 +60,7 @@ class NestedToken extends index_2.Token {
60
60
  {
61
61
  desc: 'comment',
62
62
  range: [e.startIndex, e.startIndex],
63
- text: `<!--${String(child)}-->`,
63
+ text: `<!--${child.toString()}-->`,
64
64
  },
65
65
  ];
66
66
  return e;
@@ -7,7 +7,5 @@ export declare abstract class CommentToken extends NowikiBaseToken {
7
7
  closed: boolean;
8
8
  /** @param closed 是否闭合 */
9
9
  constructor(wikitext: string, closed?: boolean, config?: Parser.Config, accum?: Token[]);
10
- /** @override */
11
- lint(start?: number): LintError[];
12
10
  }
13
11
  export {};
@@ -18,7 +18,7 @@ class CommentToken extends (0, hidden_1.hiddenToken)(base_1.NowikiBaseToken) {
18
18
  getAttribute(key) {
19
19
  return key === 'padding' ? 4 : super.getAttribute(key);
20
20
  }
21
- /** @override */
21
+ /** @private */
22
22
  lint(start = this.getAbsoluteIndex()) {
23
23
  if (this.closed) {
24
24
  return [];
@@ -8,6 +8,4 @@ export declare abstract class NowikiToken extends NowikiBaseToken {
8
8
  abstract get nextSibling(): undefined;
9
9
  abstract get previousSibling(): AttributesToken;
10
10
  abstract get parentNode(): ExtToken | undefined;
11
- /** @override */
12
- lint(start?: number): LintError[];
13
11
  }
@@ -7,7 +7,7 @@ const base_1 = require("./base");
7
7
  /** 扩展标签内的纯文字Token */
8
8
  class NowikiToken extends base_1.NowikiBaseToken {
9
9
  type = 'ext-inner';
10
- /** @override */
10
+ /** @private */
11
11
  lint(start = this.getAbsoluteIndex()) {
12
12
  const { name, firstChild: { data } } = this;
13
13
  if ((name === 'templatestyles' || name === 'section') && data) {
@@ -7,6 +7,4 @@ export declare abstract class QuoteToken extends NowikiBaseToken {
7
7
  get bold(): boolean;
8
8
  /** 是否斜体 */
9
9
  get italic(): boolean;
10
- /** @override */
11
- lint(start?: number): LintError[];
12
10
  }
@@ -15,7 +15,7 @@ class QuoteToken extends base_1.NowikiBaseToken {
15
15
  get italic() {
16
16
  return this.innerText.length !== 3;
17
17
  }
18
- /** @override */
18
+ /** @private */
19
19
  lint(start = this.getAbsoluteIndex()) {
20
20
  const { previousSibling, nextSibling, bold } = this, message = index_1.default.msg('lonely "$1"', `'`), errors = [];
21
21
  let refError;
@@ -20,6 +20,4 @@ export declare abstract class ParamTagToken extends Token {
20
20
  constructor(wikitext?: string, config?: Parser.Config, accum?: Token[], acceptable?: Acceptable);
21
21
  /** @override */
22
22
  text(): string;
23
- /** @override */
24
- lint(start?: number): LintError[];
25
23
  }
@@ -31,11 +31,11 @@ class ParamTagToken extends index_2.Token {
31
31
  getGaps() {
32
32
  return 1;
33
33
  }
34
- /** @override */
34
+ /** @private */
35
35
  lint(start = this.getAbsoluteIndex()) {
36
36
  let rect;
37
37
  return this.childNodes.filter(child => {
38
- const { childNodes } = child, i = childNodes.findIndex(({ type }) => type !== 'text'), str = (i >= 0 ? childNodes.slice(0, i).map(String).join('') : String(child)).trim();
38
+ const { childNodes } = child, i = childNodes.findIndex(({ type }) => type !== 'text'), str = (i >= 0 ? childNodes.slice(0, i).map(String).join('') : child.toString()).trim();
39
39
  return str && !(i >= 0 ? /^[a-z]+(?:\[\])?\s*(?:=|$)/iu : /^[a-z]+(?:\[\])?\s*=/iu).test(str);
40
40
  }).map(child => {
41
41
  rect ??= { start, ...this.getRootNode().posFromIndex(start) };
@@ -24,6 +24,4 @@ export declare abstract class ParameterToken extends Token {
24
24
  constructor(key?: string | number, value?: string, config?: Parser.Config, accum?: Token[]);
25
25
  /** @override */
26
26
  text(): string;
27
- /** @override */
28
- lint(start?: number, re?: RegExp): LintError[];
29
27
  }
@@ -44,7 +44,7 @@ class ParameterToken extends index_2.Token {
44
44
  }
45
45
  /** @private */
46
46
  toString() {
47
- return this.anon ? String(this.lastChild) : super.toString('=');
47
+ return this.anon ? this.lastChild.toString() : super.toString('=');
48
48
  }
49
49
  /** @override */
50
50
  text() {
@@ -54,7 +54,7 @@ class ParameterToken extends index_2.Token {
54
54
  getGaps() {
55
55
  return this.anon ? 0 : 1;
56
56
  }
57
- /** @override */
57
+ /** @private */
58
58
  lint(start = this.getAbsoluteIndex(), re) {
59
59
  const errors = super.lint(start, re), { firstChild } = this, link = new RegExp(`https?://${string_1.extUrlCharFirst}${string_1.extUrlChar}$`, 'iu').exec(firstChild.text())?.[0];
60
60
  if (link && new URL(link).search) {
package/dist/src/pre.d.ts CHANGED
@@ -18,6 +18,4 @@ export declare abstract class PreToken extends Token {
18
18
  abstract get parentNode(): ExtToken | undefined;
19
19
  /** @class */
20
20
  constructor(wikitext?: string, config?: Parser.Config, accum?: Token[]);
21
- /** @override */
22
- lint(start?: number): LintError[];
23
21
  }
package/dist/src/pre.js CHANGED
@@ -35,7 +35,7 @@ class PreToken extends index_2.Token {
35
35
  getAttribute(key) {
36
36
  return (key === 'plain') || super.getAttribute(key);
37
37
  }
38
- /** @override */
38
+ /** @private */
39
39
  lint(start = this.getAbsoluteIndex()) {
40
40
  return super.lint(start, /<\s*\/\s*(pre)\b/giu);
41
41
  }
@@ -18,9 +18,5 @@ export declare abstract class RedirectToken extends Token {
18
18
  * @param post trailing whitespace
19
19
  */
20
20
  constructor(pre: string, syntax: string | undefined, link: string, text: string | undefined, post: string, config?: Parser.Config, accum?: Token[]);
21
- /** @override */
22
- toString(): string;
23
- /** @override */
24
- lint(start?: number): LintError[];
25
21
  }
26
22
  export {};
@@ -34,13 +34,13 @@ class RedirectToken extends (0, hidden_1.hiddenToken)(index_2.Token) {
34
34
  getAttribute(key) {
35
35
  return key === 'padding' ? this.#pre.length : super.getAttribute(key);
36
36
  }
37
- /** @override */
37
+ /** @private */
38
38
  toString() {
39
39
  return this.#pre + super.toString() + this.#post;
40
40
  }
41
- /** @override */
41
+ /** @private */
42
42
  lint(start = this.getAbsoluteIndex()) {
43
- return this.lastChild.lint(start + this.#pre.length + String(this.firstChild).length);
43
+ return this.lastChild.lint(start + this.#pre.length + this.firstChild.toString().length);
44
44
  }
45
45
  }
46
46
  exports.RedirectToken = RedirectToken;
@@ -6,7 +6,5 @@ export declare class SyntaxToken extends Token {
6
6
  type: SyntaxTypes;
7
7
  /** @param pattern 语法正则 */
8
8
  constructor(wikitext: string | undefined, pattern: RegExp, type?: SyntaxTypes, config?: Parser.Config, accum?: Token[], acceptable?: Acceptable);
9
- /** @override */
10
- lint(): [];
11
9
  }
12
10
  export {};
@@ -10,7 +10,7 @@ class SyntaxToken extends index_2.Token {
10
10
  super(wikitext, config, accum, acceptable);
11
11
  this.type = type;
12
12
  }
13
- /** @override */
13
+ /** @private */
14
14
  lint() {
15
15
  return [];
16
16
  }
@@ -27,8 +27,6 @@ export declare abstract class TableToken extends TrBaseToken {
27
27
  * @param attr 表格属性
28
28
  */
29
29
  constructor(syntax: string, attr?: string, config?: Parser.Config, accum?: Token[]);
30
- /** @override */
31
- lint(start?: number, re?: RegExp): LintError[];
32
30
  /**
33
31
  * 获取表格布局
34
32
  * @param stop 中止条件
@@ -34,7 +34,7 @@ class TableToken extends trBase_1.TrBaseToken {
34
34
  constructor(syntax, attr, config = index_1.default.getConfig(), accum = []) {
35
35
  super(/^(?:\{\||\{\{\{\s*!\s*\}\}|\{\{\s*\(!\s*\}\})$/u, syntax, attr, config, accum, {});
36
36
  }
37
- /** @override */
37
+ /** @private */
38
38
  lint(start = this.getAbsoluteIndex(), re) {
39
39
  const errors = super.lint(start, re);
40
40
  if (!this.closed) {
@@ -33,8 +33,6 @@ export declare abstract class TdToken extends TableBaseToken {
33
33
  constructor(syntax: string, inner?: string, config?: Parser.Config, accum?: Token[]);
34
34
  /** @override */
35
35
  text(): string;
36
- /** @override */
37
- lint(start?: number, re?: RegExp): LintError[];
38
36
  /** 是否位于行首 */
39
37
  isIndependent(): boolean;
40
38
  /**
@@ -72,7 +72,7 @@ class TdToken extends base_1.TableBaseToken {
72
72
  /** @private */
73
73
  toString() {
74
74
  const { childNodes: [syntax, attr, inner] } = this;
75
- return String(syntax) + String(attr) + this.#innerSyntax + String(inner);
75
+ return syntax.toString() + attr.toString() + this.#innerSyntax + inner.toString();
76
76
  }
77
77
  /** @override */
78
78
  text() {
@@ -86,7 +86,7 @@ class TdToken extends base_1.TableBaseToken {
86
86
  }
87
87
  return 0;
88
88
  }
89
- /** @override */
89
+ /** @private */
90
90
  lint(start = this.getAbsoluteIndex(), re) {
91
91
  const errors = super.lint(start, re);
92
92
  start += this.getRelativeIndex(this.length - 1);
@@ -11,8 +11,6 @@ export interface TableCoords {
11
11
  /** 表格行或表格 */
12
12
  export declare abstract class TrBaseToken extends TableBaseToken {
13
13
  type: 'table' | 'tr';
14
- /** @override */
15
- lint(start?: number, re?: RegExp): LintError[];
16
14
  /** 获取行数 */
17
15
  getRowCount(): number;
18
16
  /**