@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 +6 -0
- package/lib/parser.d.ts +5 -1
- package/lib/parser.js +45 -3
- package/lib/sort-nodes.d.ts +1 -1
- package/package.json +6 -6
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
|
};
|
package/lib/sort-nodes.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { MLASTNodeTreeItem } from '@markuplint/ml-ast';
|
|
2
|
-
export declare function sortNodes(a: MLASTNodeTreeItem, b: MLASTNodeTreeItem): 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.
|
|
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.
|
|
31
|
-
"@markuplint/ml-spec": "4.0.0-alpha.
|
|
32
|
-
"@markuplint/types": "4.0.0-alpha.
|
|
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.
|
|
36
|
+
"type-fest": "^4.10.2",
|
|
37
37
|
"uuid": "^9.0.1"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "191a62a03d04cdf5a5135f58bcddf1119f7527d4"
|
|
40
40
|
}
|