@markuplint/parser-utils 4.0.0-alpha.11 → 4.0.0-alpha.12

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/debugger.js CHANGED
@@ -24,6 +24,12 @@ export function attributesToDebugMaps(attributes) {
24
24
  if (n.potentialName != null) {
25
25
  r.push(` potentialName: ${visibleWhiteSpace(n.potentialName)}`);
26
26
  }
27
+ if (n.potentialValue != null) {
28
+ r.push(` potentialValue: ${visibleWhiteSpace(n.potentialValue)}`);
29
+ }
30
+ if (n.valueType != null) {
31
+ r.push(` valueType: ${visibleWhiteSpace(n.valueType)}`);
32
+ }
27
33
  if (n.candidate) {
28
34
  r.push(` candidate: ${visibleWhiteSpace(n.candidate)}`);
29
35
  }
package/lib/parser.d.ts CHANGED
@@ -28,7 +28,7 @@ export declare abstract class Parser<Node extends {} = {}, State extends unknown
28
28
  get rawCode(): string;
29
29
  get tagNameCaseSensitive(): boolean;
30
30
  constructor(options?: ParserOptions, defaultState?: State);
31
- tokenize(): Tokenized<Node, State>;
31
+ tokenize(options?: ParseOptions): Tokenized<Node, State>;
32
32
  beforeParse(rawCode: string, options?: ParseOptions): string;
33
33
  parse(rawCode: string, options?: ParseOptions): MLASTDocument;
34
34
  afterParse(nodeList: readonly MLASTNodeTreeItem[], options?: ParseOptions): readonly MLASTNodeTreeItem[];
@@ -102,6 +102,10 @@ export declare abstract class Parser<Node extends {} = {}, State extends unknown
102
102
  createToken(token: Token): MLASTToken;
103
103
  createToken(token: string, startOffset: number, startLine: number, startCol: number): MLASTToken;
104
104
  sliceFragment(start: number, end?: number): Token;
105
+ getOffsetsFromCode(startLine: number, startCol: number, endLine: number, endCol: number): {
106
+ offset: number;
107
+ endOffset: number;
108
+ };
105
109
  walk<Node extends MLASTNodeTreeItem>(nodeList: readonly Node[], walker: Walker<Node>, depth?: number): void;
106
110
  appendChild(parentNode: MLASTParentNode | null, ...childNodes: readonly MLASTChildNode[]): void;
107
111
  replaceChild(parentNode: MLASTParentNode, oldChildNode: MLASTChildNode, newChildNode: MLASTChildNode): void;
package/lib/parser.js CHANGED
@@ -9,7 +9,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
10
10
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
11
11
  };
12
- var _Parser_instances, _Parser_booleanish, _Parser_defaultState, _Parser_endTagType, _Parser_ignoreTags, _Parser_maskChar, _Parser_tagNameCaseSensitive, _Parser_selfCloseType, _Parser_spaceChars, _Parser_rawTextElements, _Parser_authoredElementName, _Parser_originalRawCode, _Parser_rawCode, _Parser_defaultDepth, _Parser_walkMethodSequentailPrevNode, _Parser_arrayize, _Parser_concatText, _Parser_concatTextNodes, _Parser_convertIntoInvalidNode, _Parser_createOffsetSpaces, _Parser_createRemnantNode, _Parser_exposeRemnantNodes, _Parser_getEndLocation, _Parser_orphanEndTagToBogusMark, _Parser_pairing, _Parser_parseEndTag, _Parser_parseStartTag, _Parser_parseTag, _Parser_removeChild, _Parser_removeDeprecatedNode, _Parser_removeOffsetSpaces, _Parser_reset, _Parser_setRawCode, _Parser_siblingsCorrection;
12
+ var _Parser_instances, _Parser_booleanish, _Parser_defaultState, _Parser_endTagType, _Parser_ignoreTags, _Parser_maskChar, _Parser_tagNameCaseSensitive, _Parser_selfCloseType, _Parser_spaceChars, _Parser_rawTextElements, _Parser_authoredElementName, _Parser_originalRawCode, _Parser_rawCode, _Parser_defaultDepth, _Parser_walkMethodSequentailPrevNode, _Parser_arrayize, _Parser_concatText, _Parser_concatTextNodes, _Parser_convertIntoInvalidNode, _Parser_createOffsetSpaces, _Parser_createRemnantNode, _Parser_exposeRemnantNodes, _Parser_getEndLocation, _Parser_orphanEndTagToBogusMark, _Parser_pairing, _Parser_parseEndTag, _Parser_parseStartTag, _Parser_parseTag, _Parser_removeChild, _Parser_removeDeprecatedNode, _Parser_removeOffsetSpaces, _Parser_reset, _Parser_setRawCode, _Parser_siblingsCorrection, _Parser_trimText;
13
13
  import { isVoidElement as detectVoidElement } from '@markuplint/ml-spec';
14
14
  import { v4 as uuid } from 'uuid';
15
15
  import { attrTokenizer } from './attr-tokenizer.js';
@@ -82,7 +82,7 @@ export class Parser {
82
82
  __classPrivateFieldSet(this, _Parser_defaultState, defaultState ?? null, "f");
83
83
  this.state = structuredClone(__classPrivateFieldGet(this, _Parser_defaultState, "f"));
84
84
  }
85
- tokenize() {
85
+ tokenize(options) {
86
86
  return {
87
87
  ast: [],
88
88
  isFragment: false,
@@ -107,7 +107,7 @@ export class Parser {
107
107
  }
108
108
  const blocks = ignoreBlock(this.rawCode, __classPrivateFieldGet(this, _Parser_ignoreTags, "f"), __classPrivateFieldGet(this, _Parser_maskChar, "f"));
109
109
  __classPrivateFieldGet(this, _Parser_instances, "m", _Parser_setRawCode).call(this, blocks.replaced);
110
- const tokenized = this.tokenize();
110
+ const tokenized = this.tokenize(options);
111
111
  const ast = tokenized.ast;
112
112
  const isFragment = tokenized.isFragment;
113
113
  __classPrivateFieldSet(this, _Parser_defaultDepth, options?.depth ?? __classPrivateFieldGet(this, _Parser_defaultDepth, "f"), "f");
@@ -227,6 +227,7 @@ export class Parser {
227
227
  if (concatText) {
228
228
  nodeList = __classPrivateFieldGet(this, _Parser_instances, "m", _Parser_concatText).call(this, nodeList);
229
229
  }
230
+ nodeList = __classPrivateFieldGet(this, _Parser_instances, "m", _Parser_trimText).call(this, nodeList);
230
231
  return nodeList;
231
232
  }
232
233
  visitDoctype(token) {
@@ -581,6 +582,28 @@ export class Parser {
581
582
  startCol: getCol(this.rawCode, start),
582
583
  };
583
584
  }
585
+ getOffsetsFromCode(startLine, startCol, endLine, endCol) {
586
+ const lines = __classPrivateFieldGet(this, _Parser_rawCode, "f").split('\n');
587
+ let offset = 0;
588
+ let endOffset = 0;
589
+ for (let i = 0; i < startLine - 1; i++) {
590
+ const line = lines[i];
591
+ if (line == null) {
592
+ continue;
593
+ }
594
+ offset += line.length + 1;
595
+ }
596
+ offset += startCol - 1;
597
+ for (let i = 0; i < endLine - 1; i++) {
598
+ const line = lines[i];
599
+ if (line == null) {
600
+ continue;
601
+ }
602
+ endOffset += line.length + 1;
603
+ }
604
+ endOffset += endCol - 1;
605
+ return { offset, endOffset };
606
+ }
584
607
  walk(nodeList, walker, depth = 0) {
585
608
  for (const node of nodeList) {
586
609
  walker(node, __classPrivateFieldGet(this, _Parser_walkMethodSequentailPrevNode, "f"), depth);
@@ -1075,4 +1098,23 @@ _Parser_booleanish = new WeakMap(), _Parser_defaultState = new WeakMap(), _Parse
1075
1098
  newNodes.push(node);
1076
1099
  }
1077
1100
  return newNodes;
1101
+ }, _Parser_trimText = function _Parser_trimText(nodeList) {
1102
+ const newNodeList = [];
1103
+ let prevNode = null;
1104
+ for (const node of nodeList) {
1105
+ if (prevNode?.type === 'text' &&
1106
+ // Empty node
1107
+ node.startOffset !== node.endOffset) {
1108
+ const prevNodeEndOffset = prevNode.endOffset;
1109
+ const nodeStartOffset = node.startOffset;
1110
+ if (prevNodeEndOffset > nodeStartOffset) {
1111
+ const prevNodeRaw = prevNode.raw;
1112
+ const prevNodeTrimmedRaw = prevNodeRaw.slice(0, nodeStartOffset - prevNode.startOffset);
1113
+ this.updateRaw(prevNode, prevNodeTrimmedRaw);
1114
+ }
1115
+ }
1116
+ newNodeList.push(node);
1117
+ prevNode = node;
1118
+ }
1119
+ return newNodeList;
1078
1120
  };
@@ -1,2 +1,2 @@
1
1
  import type { MLASTNodeTreeItem } from '@markuplint/ml-ast';
2
- export declare function sortNodes(a: MLASTNodeTreeItem, b: MLASTNodeTreeItem): 1 | 0 | -1;
2
+ export declare function sortNodes(a: MLASTNodeTreeItem, b: MLASTNodeTreeItem): 1 | -1 | 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markuplint/parser-utils",
3
- "version": "4.0.0-alpha.11",
3
+ "version": "4.0.0-alpha.12",
4
4
  "description": "Utility module for markuplint parser plugin",
5
5
  "repository": "git@github.com:markuplint/markuplint.git",
6
6
  "author": "Yusuke Hirao <yusukehirao@me.com>",
@@ -27,14 +27,14 @@
27
27
  "clean": "tsc --build --clean"
28
28
  },
29
29
  "dependencies": {
30
- "@markuplint/ml-ast": "4.0.0-alpha.11",
31
- "@markuplint/ml-spec": "4.0.0-alpha.11",
32
- "@markuplint/types": "4.0.0-alpha.11",
30
+ "@markuplint/ml-ast": "4.0.0-alpha.12",
31
+ "@markuplint/ml-spec": "4.0.0-alpha.12",
32
+ "@markuplint/types": "4.0.0-alpha.12",
33
33
  "@types/uuid": "^9.0.8",
34
34
  "debug": "^4.3.4",
35
35
  "espree": "^10.0.0",
36
- "type-fest": "^4.10.1",
36
+ "type-fest": "^4.10.2",
37
37
  "uuid": "^9.0.1"
38
38
  },
39
- "gitHead": "78ab1adaa4e178b4187f6c5f135bb8fc0c8f4b9e"
39
+ "gitHead": "191a62a03d04cdf5a5135f58bcddf1119f7527d4"
40
40
  }