podlite 0.0.79 → 0.0.81
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/CHANGELOG.podlite +34 -0
- package/esm/cli.js +79 -11
- package/esm/cli.js.map +1 -1
- package/esm/lint/config.d.ts +2 -0
- package/esm/lint/config.js +46 -0
- package/esm/lint/config.js.map +1 -1
- package/esm/lint/grammar/lint.js +7 -4
- package/esm/lint/grammar/lint.js.map +1 -1
- package/esm/lint/grammar/scan.d.ts +1 -1
- package/esm/lint/grammar/scan.js +15 -2
- package/esm/lint/grammar/scan.js.map +1 -1
- package/esm/lint/index.d.ts +11 -1
- package/esm/lint/index.js +30 -18
- package/esm/lint/index.js.map +1 -1
- package/esm/lint/parallel.d.ts +4 -0
- package/esm/lint/parallel.js +57 -0
- package/esm/lint/parallel.js.map +1 -0
- package/esm/lint/rules/abbreviated-attrs.d.ts +4 -0
- package/esm/lint/rules/abbreviated-attrs.js +67 -0
- package/esm/lint/rules/abbreviated-attrs.js.map +1 -0
- package/esm/lint/rules/dead-definitions.d.ts +3 -0
- package/esm/lint/rules/dead-definitions.js +80 -0
- package/esm/lint/rules/dead-definitions.js.map +1 -0
- package/esm/lint/rules/index.js +6 -0
- package/esm/lint/rules/index.js.map +1 -1
- package/esm/lint/rules/link-file-resolves.d.ts +3 -0
- package/esm/lint/rules/link-file-resolves.js +58 -0
- package/esm/lint/rules/link-file-resolves.js.map +1 -0
- package/esm/lint/rules/link-not-empty.d.ts +3 -0
- package/esm/lint/rules/link-not-empty.js +15 -0
- package/esm/lint/rules/link-not-empty.js.map +1 -0
- package/esm/lint/rules/link-target-resolves.js +10 -28
- package/esm/lint/rules/link-target-resolves.js.map +1 -1
- package/esm/lint/rules/link-targets.d.ts +11 -0
- package/esm/lint/rules/link-targets.js +42 -0
- package/esm/lint/rules/link-targets.js.map +1 -0
- package/esm/lint/rules/markdown-in-pod.d.ts +4 -0
- package/esm/lint/rules/markdown-in-pod.js +67 -0
- package/esm/lint/rules/markdown-in-pod.js.map +1 -0
- package/esm/lint/rules/table-column-width.js +10 -6
- package/esm/lint/rules/table-column-width.js.map +1 -1
- package/esm/lint/rules/unclosed-markup-code.d.ts +4 -0
- package/esm/lint/rules/unclosed-markup-code.js +105 -0
- package/esm/lint/rules/unclosed-markup-code.js.map +1 -0
- package/esm/lint/types.d.ts +2 -0
- package/esm/lint/types.js +3 -1
- package/esm/lint/types.js.map +1 -1
- package/esm/lint/worker.d.ts +5 -0
- package/esm/lint/worker.js +15 -0
- package/esm/lint/worker.js.map +1 -0
- package/esm/query.js +4 -1
- package/esm/query.js.map +1 -1
- package/esm/resolve-includes.js +56 -7
- package/esm/resolve-includes.js.map +1 -1
- package/esm/version.d.ts +1 -1
- package/esm/version.js +1 -1
- package/lib/cli.js +78 -10
- package/lib/cli.js.map +1 -1
- package/lib/lint/config.d.ts +2 -0
- package/lib/lint/config.js +48 -0
- package/lib/lint/config.js.map +1 -1
- package/lib/lint/grammar/lint.js +7 -4
- package/lib/lint/grammar/lint.js.map +1 -1
- package/lib/lint/grammar/scan.d.ts +1 -1
- package/lib/lint/grammar/scan.js +14 -1
- package/lib/lint/grammar/scan.js.map +1 -1
- package/lib/lint/index.d.ts +11 -1
- package/lib/lint/index.js +69 -17
- package/lib/lint/index.js.map +1 -1
- package/lib/lint/parallel.d.ts +4 -0
- package/lib/lint/parallel.js +95 -0
- package/lib/lint/parallel.js.map +1 -0
- package/lib/lint/rules/abbreviated-attrs.d.ts +4 -0
- package/lib/lint/rules/abbreviated-attrs.js +71 -0
- package/lib/lint/rules/abbreviated-attrs.js.map +1 -0
- package/lib/lint/rules/dead-definitions.d.ts +3 -0
- package/lib/lint/rules/dead-definitions.js +83 -0
- package/lib/lint/rules/dead-definitions.js.map +1 -0
- package/lib/lint/rules/index.js +6 -0
- package/lib/lint/rules/index.js.map +1 -1
- package/lib/lint/rules/link-file-resolves.d.ts +3 -0
- package/lib/lint/rules/link-file-resolves.js +61 -0
- package/lib/lint/rules/link-file-resolves.js.map +1 -0
- package/lib/lint/rules/link-not-empty.d.ts +3 -0
- package/lib/lint/rules/link-not-empty.js +18 -0
- package/lib/lint/rules/link-not-empty.js.map +1 -0
- package/lib/lint/rules/link-target-resolves.js +9 -27
- package/lib/lint/rules/link-target-resolves.js.map +1 -1
- package/lib/lint/rules/link-targets.d.ts +11 -0
- package/lib/lint/rules/link-targets.js +47 -0
- package/lib/lint/rules/link-targets.js.map +1 -0
- package/lib/lint/rules/markdown-in-pod.d.ts +4 -0
- package/lib/lint/rules/markdown-in-pod.js +71 -0
- package/lib/lint/rules/markdown-in-pod.js.map +1 -0
- package/lib/lint/rules/table-column-width.js +9 -5
- package/lib/lint/rules/table-column-width.js.map +1 -1
- package/lib/lint/rules/unclosed-markup-code.d.ts +4 -0
- package/lib/lint/rules/unclosed-markup-code.js +109 -0
- package/lib/lint/rules/unclosed-markup-code.js.map +1 -0
- package/lib/lint/types.d.ts +2 -0
- package/lib/lint/types.js +4 -0
- package/lib/lint/types.js.map +1 -1
- package/lib/lint/worker.d.ts +5 -0
- package/lib/lint/worker.js +17 -0
- package/lib/lint/worker.js.map +1 -0
- package/lib/query.js +4 -1
- package/lib/query.js.map +1 -1
- package/lib/resolve-includes.js +55 -6
- package/lib/resolve-includes.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +13 -7
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Content is a bare string before the tree is processed and a node after it.
|
|
2
|
+
const textOf = (value) => {
|
|
3
|
+
if (typeof value === 'string')
|
|
4
|
+
return value;
|
|
5
|
+
if (value && typeof value === 'object' && 'value' in value && typeof value.value === 'string')
|
|
6
|
+
return value.value;
|
|
7
|
+
return '';
|
|
8
|
+
};
|
|
9
|
+
// A link without display text carries the target in its content instead of meta.
|
|
10
|
+
const linkTarget = (node) => {
|
|
11
|
+
if (typeof node.meta === 'string')
|
|
12
|
+
return node.meta.trim();
|
|
13
|
+
const content = Array.isArray(node.content) ? node.content : [];
|
|
14
|
+
return textOf(content[0]).trim();
|
|
15
|
+
};
|
|
16
|
+
const isLink = (node) => node.type === 'fcode' && (node.name === 'L' || node.name === 'W');
|
|
17
|
+
// Inline nodes carry no location, so the nearest enclosing block supplies one.
|
|
18
|
+
export const collectLinks = (node, at) => {
|
|
19
|
+
if (Array.isArray(node))
|
|
20
|
+
return node.flatMap(child => collectLinks(child, at));
|
|
21
|
+
if (!node || typeof node !== 'object')
|
|
22
|
+
return [];
|
|
23
|
+
const n = node;
|
|
24
|
+
const here = n.location || at;
|
|
25
|
+
const found = isLink(n) ? [{ target: linkTarget(n), at: here }] : [];
|
|
26
|
+
return [...found, ...collectLinks(n.content, here)];
|
|
27
|
+
};
|
|
28
|
+
const SCHEME = /^([a-zA-Z][a-zA-Z0-9+.-]*):(.*)$/;
|
|
29
|
+
// A single letter before the colon is a Windows drive, but only where something
|
|
30
|
+
// else says Windows: a separator, or a backslash further along. Without one,
|
|
31
|
+
// `a:b` is a scheme and reading it as a path would warn about a target that is
|
|
32
|
+
// not on this disk at all.
|
|
33
|
+
const DRIVE = /^[a-zA-Z]:([\\/]|[^\\]*\\)/;
|
|
34
|
+
// The specification separates the internal address from the external one with a
|
|
35
|
+
// `#`, so what is left of it is the part a filesystem can answer for.
|
|
36
|
+
export const readAddress = (target) => {
|
|
37
|
+
const matched = DRIVE.test(target) ? null : SCHEME.exec(target);
|
|
38
|
+
const scheme = matched ? matched[1].toLowerCase() : null;
|
|
39
|
+
const rest = matched ? matched[2] : target;
|
|
40
|
+
return { scheme, path: rest.split('#')[0].split('?')[0] };
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=link-targets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-targets.js","sourceRoot":"","sources":["../../../src/lint/rules/link-targets.ts"],"names":[],"mappings":"AAcA,6EAA6E;AAC7E,MAAM,MAAM,GAAG,CAAC,KAAc,EAAU,EAAE;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,KAAK,CAAA;IACjH,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED,iFAAiF;AACjF,MAAM,UAAU,GAAG,CAAC,IAAc,EAAU,EAAE;IAC5C,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,IAAkC,EAAW,EAAE,CAC7D,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAA;AAEnE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAa,EAAE,EAA0B,EAAc,EAAE;IACpF,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;IAC9E,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAA;IAChD,MAAM,CAAC,GAAG,IAAoC,CAAA;IAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAA;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACpE,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;AACrD,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,kCAAkC,CAAA;AACjD,gFAAgF;AAChF,6EAA6E;AAC7E,+EAA+E;AAC/E,2BAA2B;AAC3B,MAAM,KAAK,GAAG,4BAA4B,CAAA;AAQ1C,gFAAgF;AAChF,sEAAsE;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAe,EAAE;IACzD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAC1C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC3D,CAAC,CAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { isVerbatimBlock } from '@podlite/schema';
|
|
2
|
+
export const MARKDOWN_IN_POD_RULE_ID = 'markdown-in-pod';
|
|
3
|
+
export const markdownInPodRule = {
|
|
4
|
+
id: MARKDOWN_IN_POD_RULE_ID,
|
|
5
|
+
severity: 'warning',
|
|
6
|
+
};
|
|
7
|
+
const FOREIGN = [
|
|
8
|
+
{ test: /^\s*#{1,6}\s+\S/, says: 'a heading written with hashes is text here; write =head1 and its levels' },
|
|
9
|
+
{
|
|
10
|
+
test: /^\s*\|?[\s:|-]*-[\s:|-]*\|[\s:|-]*$/,
|
|
11
|
+
says: 'a row of bars and dashes is text here; a table is written as =begin table with its own separator',
|
|
12
|
+
},
|
|
13
|
+
{ test: /\*\*[^*\s](?:[^*]*[^*\s])?\*\*/, says: 'a pair of asterisks is text here; bold is written as B<>' },
|
|
14
|
+
];
|
|
15
|
+
// Talk about Markdown is legal: a line whose construct sits inside an inline
|
|
16
|
+
// code span is showing the markup, not using it.
|
|
17
|
+
const insideCode = (line) => /C<[^>]*>/.test(line) || /`[^`]+`/.test(line);
|
|
18
|
+
export function scanMarkdownInPod(content) {
|
|
19
|
+
const lines = content.split(/\r?\n/);
|
|
20
|
+
const open = [];
|
|
21
|
+
const violations = [];
|
|
22
|
+
let abbreviatedTable = false;
|
|
23
|
+
for (let i = 0; i < lines.length; i++) {
|
|
24
|
+
const line = lines[i];
|
|
25
|
+
const end = line.match(/^\s*=end\s+([\w-]+)/);
|
|
26
|
+
if (end) {
|
|
27
|
+
open.pop();
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const begin = line.match(/^\s*=begin\s+([\w-]+)/);
|
|
31
|
+
if (begin) {
|
|
32
|
+
open.push(begin[1]);
|
|
33
|
+
abbreviatedTable = false;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
// a dash separator belongs to a table written the short way too, and that
|
|
37
|
+
// block runs to the first blank line
|
|
38
|
+
if (/^\s*=(?:for\s+)?table\b/.test(line)) {
|
|
39
|
+
abbreviatedTable = true;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (abbreviatedTable && line.trim() === '')
|
|
43
|
+
abbreviatedTable = false;
|
|
44
|
+
if (/^\s*=/.test(line))
|
|
45
|
+
abbreviatedTable = false;
|
|
46
|
+
if (open.some(isVerbatimBlock) || open.includes('data') || abbreviatedTable)
|
|
47
|
+
continue;
|
|
48
|
+
if (insideCode(line))
|
|
49
|
+
continue;
|
|
50
|
+
for (const foreign of FOREIGN) {
|
|
51
|
+
if (!foreign.test.test(line))
|
|
52
|
+
continue;
|
|
53
|
+
violations.push({
|
|
54
|
+
rule: MARKDOWN_IN_POD_RULE_ID,
|
|
55
|
+
severity: 'warning',
|
|
56
|
+
message: foreign.says,
|
|
57
|
+
location: {
|
|
58
|
+
start: { line: i + 1, column: 1, offset: 0 },
|
|
59
|
+
end: { line: i + 1, column: 1, offset: 0 },
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return violations;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=markdown-in-pod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-in-pod.js","sourceRoot":"","sources":["../../../src/lint/rules/markdown-in-pod.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isVerbatimBlock } from '@podlite/schema';
|
|
2
2
|
export const TABLE_COLUMN_WIDTH_RULE_ID = 'table-column-width';
|
|
3
3
|
export const tableColumnWidthRule = {
|
|
4
4
|
id: TABLE_COLUMN_WIDTH_RULE_ID,
|
|
@@ -22,10 +22,14 @@ const isEdge = (char) => char === '|' || char === '+' || char === ' ';
|
|
|
22
22
|
const collides = (line, boundary) => {
|
|
23
23
|
if (boundary >= line.length)
|
|
24
24
|
return false;
|
|
25
|
-
// content standing on the boundary
|
|
25
|
+
// content standing on the boundary is wrong however the row is written
|
|
26
26
|
if (!isEdge(line[boundary]))
|
|
27
27
|
return true;
|
|
28
|
-
|
|
28
|
+
// pressed against the boundary only matters where the row draws a bar of its
|
|
29
|
+
// own: a row whose cells are held apart by spaces may fill its column to the
|
|
30
|
+
// last position, and the parser reads it correctly
|
|
31
|
+
const drawsBar = line[boundary] === '|' || line[boundary] === '+';
|
|
32
|
+
return drawsBar && boundary > 0 && !isEdge(line[boundary - 1]);
|
|
29
33
|
};
|
|
30
34
|
const checkTable = (lines) => {
|
|
31
35
|
const separator = lines.find(l => SEPARATOR_LINE.test(l.text) && hasBar(l.text));
|
|
@@ -58,7 +62,7 @@ const checkTable = (lines) => {
|
|
|
58
62
|
export function scanTableColumns(content) {
|
|
59
63
|
const lines = content.split(/\r?\n/);
|
|
60
64
|
// a table keeps its content verbatim too, and it is the one being read here
|
|
61
|
-
const verbatim =
|
|
65
|
+
const verbatim = (name) => name !== 'table' && isVerbatimBlock(name);
|
|
62
66
|
const openBlocks = [];
|
|
63
67
|
const violations = [];
|
|
64
68
|
let table = null;
|
|
@@ -81,11 +85,11 @@ export function scanTableColumns(content) {
|
|
|
81
85
|
if (begin) {
|
|
82
86
|
closeTable();
|
|
83
87
|
openBlocks.push(begin[1]);
|
|
84
|
-
if (begin[1] === 'table' && !openBlocks.some(
|
|
88
|
+
if (begin[1] === 'table' && !openBlocks.some(verbatim))
|
|
85
89
|
table = [];
|
|
86
90
|
continue;
|
|
87
91
|
}
|
|
88
|
-
if (openBlocks.some(
|
|
92
|
+
if (openBlocks.some(verbatim))
|
|
89
93
|
continue;
|
|
90
94
|
if (abbreviated) {
|
|
91
95
|
closeTable();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-column-width.js","sourceRoot":"","sources":["../../../src/lint/rules/table-column-width.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGjD,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAA;AAE9D,MAAM,CAAC,MAAM,oBAAoB,GAAe;IAC9C,EAAE,EAAE,0BAA0B;IAC9B,QAAQ,EAAE,SAAS;CACpB,CAAA;AAED,MAAM,cAAc,GAAG,4BAA4B,CAAA;AACnD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AAEzE,8EAA8E;AAC9E,4EAA4E;AAC5E,0EAA0E;AAC1E,4DAA4D;AAC5D,MAAM,UAAU,GAAG,CAAC,SAAiB,EAAY,EAAE;IACjD,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAA;AAE7E,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAW,EAAE;IAC3D,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACzC,
|
|
1
|
+
{"version":3,"file":"table-column-width.js","sourceRoot":"","sources":["../../../src/lint/rules/table-column-width.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { isVerbatimBlock } from '@podlite/schema';
|
|
2
|
+
export const UNCLOSED_MARKUP_CODE_RULE_ID = 'unclosed-markup-code';
|
|
3
|
+
export const unclosedMarkupCodeRule = {
|
|
4
|
+
id: UNCLOSED_MARKUP_CODE_RULE_ID,
|
|
5
|
+
severity: 'warning',
|
|
6
|
+
};
|
|
7
|
+
// The specification leaves the parser no choice: a markup code that ends at the
|
|
8
|
+
// end of its block rather than at its own delimiter is to be reported. The
|
|
9
|
+
// parser instead drops such a code and the text goes out carrying the opening
|
|
10
|
+
// letter, so the whole line reads as written rather than as marked up.
|
|
11
|
+
//
|
|
12
|
+
// Closure is counted the way the specification defines it: a code opened with N
|
|
13
|
+
// angle brackets is closed by N of them together, and one opened with a
|
|
14
|
+
// guillemet by the closing guillemet. Counting rather than asking the parser
|
|
15
|
+
// keeps the doubled forms out of the report — C<< text >> is closed, and the
|
|
16
|
+
// parser drops it for reasons of its own when it sits inside another code.
|
|
17
|
+
//
|
|
18
|
+
// One case stays out of reach: an outer code opened with a single bracket whose
|
|
19
|
+
// inner code closes with its own. The count sees that bracket and calls the
|
|
20
|
+
// outer one closed. Asking the parser instead catches it, but then every single
|
|
21
|
+
// code written inside a doubled one reads as unclosed, and correct markup gets
|
|
22
|
+
// reported — the worse of the two.
|
|
23
|
+
const OPENER = /(^|[^A-Za-z])([A-Z])(<+|«)/g;
|
|
24
|
+
const unclosed = (text) => {
|
|
25
|
+
const missing = [];
|
|
26
|
+
let match;
|
|
27
|
+
OPENER.lastIndex = 0;
|
|
28
|
+
while ((match = OPENER.exec(text)) !== null) {
|
|
29
|
+
const [whole, before, name, open] = match;
|
|
30
|
+
const rest = text.slice(match.index + whole.length);
|
|
31
|
+
const closed = open === '«' ? rest.includes('»') : rest.includes('>'.repeat(open.length));
|
|
32
|
+
if (!closed) {
|
|
33
|
+
missing.push({ name, at: match.index + before.length });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return missing;
|
|
37
|
+
};
|
|
38
|
+
export function scanUnclosedMarkupCodes(content) {
|
|
39
|
+
const lines = content.split(/\r?\n/);
|
|
40
|
+
const open = [];
|
|
41
|
+
const violations = [];
|
|
42
|
+
let chunk = null;
|
|
43
|
+
let inAbbreviatedVerbatim = false;
|
|
44
|
+
const close = () => {
|
|
45
|
+
if (!chunk)
|
|
46
|
+
return;
|
|
47
|
+
const at = chunk;
|
|
48
|
+
for (const found of unclosed(at.text)) {
|
|
49
|
+
const name = found.name;
|
|
50
|
+
const line = at.line + at.text.slice(0, found.at).split('\n').length - 1;
|
|
51
|
+
violations.push({
|
|
52
|
+
rule: UNCLOSED_MARKUP_CODE_RULE_ID,
|
|
53
|
+
severity: 'warning',
|
|
54
|
+
message: `${name}<> is closed by the end of the block, not by its own bracket; the text goes out as written`,
|
|
55
|
+
location: {
|
|
56
|
+
start: { line, column: 1, offset: 0 },
|
|
57
|
+
end: { line, column: 1, offset: 0 },
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
chunk = null;
|
|
62
|
+
};
|
|
63
|
+
for (let i = 0; i < lines.length; i++) {
|
|
64
|
+
const line = lines[i];
|
|
65
|
+
if (/^\s*=end\s+[\w-]+/.test(line)) {
|
|
66
|
+
close();
|
|
67
|
+
inAbbreviatedVerbatim = false;
|
|
68
|
+
open.pop();
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const begin = line.match(/^\s*=begin\s+([\w-]+)/);
|
|
72
|
+
if (begin) {
|
|
73
|
+
close();
|
|
74
|
+
inAbbreviatedVerbatim = false;
|
|
75
|
+
open.push(begin[1]);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (open.some(isVerbatimBlock))
|
|
79
|
+
continue;
|
|
80
|
+
// a directive starts a chunk of its own; a blank line ends the one running
|
|
81
|
+
if (/^\s*=/.test(line)) {
|
|
82
|
+
close();
|
|
83
|
+
const named = line.match(/^\s*=(?:for\s+)?([\w-]+)/);
|
|
84
|
+
// the short forms carry verbatim text just as the paired ones do
|
|
85
|
+
inAbbreviatedVerbatim = Boolean(named && isVerbatimBlock(named[1]));
|
|
86
|
+
if (!inAbbreviatedVerbatim)
|
|
87
|
+
chunk = { text: line, line: i + 1 };
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (line.trim() === '') {
|
|
91
|
+
close();
|
|
92
|
+
inAbbreviatedVerbatim = false;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (inAbbreviatedVerbatim)
|
|
96
|
+
continue;
|
|
97
|
+
if (chunk)
|
|
98
|
+
chunk.text += '\n' + line;
|
|
99
|
+
else
|
|
100
|
+
chunk = { text: line, line: i + 1 };
|
|
101
|
+
}
|
|
102
|
+
close();
|
|
103
|
+
return violations;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=unclosed-markup-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unclosed-markup-code.js","sourceRoot":"","sources":["../../../src/lint/rules/unclosed-markup-code.ts"],"names":[],"mappings":"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"}
|
package/esm/lint/types.d.ts
CHANGED
|
@@ -5,10 +5,12 @@ export type RuleSetting = 'off' | Severity;
|
|
|
5
5
|
export type LintConfig = {
|
|
6
6
|
rules?: Record<string, RuleSetting>;
|
|
7
7
|
};
|
|
8
|
+
export declare const STDIN_NAME = "<stdin>";
|
|
8
9
|
export type LintContext = {
|
|
9
10
|
filePath: string;
|
|
10
11
|
fileType: FileType;
|
|
11
12
|
config: LintConfig;
|
|
13
|
+
source?: string;
|
|
12
14
|
};
|
|
13
15
|
export type Violation = {
|
|
14
16
|
rule: string;
|
package/esm/lint/types.js
CHANGED
package/esm/lint/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":"AAYA,4EAA4E;AAC5E,gDAAgD;AAChD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { parentPort } from 'worker_threads';
|
|
2
|
+
import { lintFile } from './index';
|
|
3
|
+
if (parentPort) {
|
|
4
|
+
const port = parentPort;
|
|
5
|
+
// the first message back says the parser is loaded and the thread can be fed
|
|
6
|
+
port.postMessage('ready');
|
|
7
|
+
port.on('message', (batch) => {
|
|
8
|
+
const done = batch.jobs.map(job => ({
|
|
9
|
+
index: job.index,
|
|
10
|
+
report: lintFile(job.filePath, batch.config),
|
|
11
|
+
}));
|
|
12
|
+
port.postMessage(done);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/lint/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAOlC,IAAI,UAAU,EAAE,CAAC;IACf,MAAM,IAAI,GAAG,UAAU,CAAA;IACvB,6EAA6E;IAC7E,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;IACzB,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAY,EAAE,EAAE;QAClC,MAAM,IAAI,GAAmB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClD,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;SAC7C,CAAC,CAAC,CAAA;QACH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
package/esm/query.js
CHANGED
|
@@ -21,7 +21,10 @@ const renderViaRoot = (block, serializer) => {
|
|
|
21
21
|
};
|
|
22
22
|
const formatBlocks = (format, matches) => {
|
|
23
23
|
if (format === 'json') {
|
|
24
|
-
|
|
24
|
+
// without the source, a query over several files answers "here are the
|
|
25
|
+
// blocks" and drops "from where", which leaves the caller no way back to
|
|
26
|
+
// the document
|
|
27
|
+
return JSON.stringify(matches.map(m => ({ file: m.source.file, ...m.block })), null, 2);
|
|
25
28
|
}
|
|
26
29
|
if (format === 'podlite') {
|
|
27
30
|
return matches
|
package/esm/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAe7G,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE;IAC1C,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC3C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAAU,EAAU,EAAE;IACtD,MAAM,GAAG,GAAG,KAAK,EAAE,QAAQ,CAAA;IAC3B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;QACzF,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AACrD,CAAC,CAAA;AAED,wEAAwE;AACxE,oEAAoE;AACpE,4DAA4D;AAC5D,MAAM,aAAa,GAAG,CAAC,KAAc,EAAE,UAAyB,EAAU,EAAE;IAC1E,MAAM,IAAI,GAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAA;IAC9E,MAAM,GAAG,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACjF,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;AACvB,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAE,OAAkD,EAAU,EAAE;IACvG,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,SAAS,CACnB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
package/esm/resolve-includes.js
CHANGED
|
@@ -1,7 +1,46 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { getTextContentFromNode, parseSelector, runSelector } from '@podlite/schema';
|
|
3
|
+
import { filePathMatches, getTextContentFromNode, parseSelector, runSelector, } from '@podlite/schema';
|
|
4
4
|
const isIncludeBlock = (node) => node && typeof node === 'object' && node.type === 'block' && node.name === 'include';
|
|
5
|
+
const hasMask = (target) => /[*?]/.test(target);
|
|
6
|
+
const reachesSubdirs = (target) => target.includes('**');
|
|
7
|
+
// A mask that crosses directories could otherwise walk a whole disk from a
|
|
8
|
+
// short prefix.
|
|
9
|
+
const maxDepth = 32;
|
|
10
|
+
// Everything up to the last separator that carries no mask; the rest is matched
|
|
11
|
+
// by the selector itself, which already knows the pattern language.
|
|
12
|
+
const fixedPrefix = (target) => {
|
|
13
|
+
const parts = target.split('/');
|
|
14
|
+
const upto = parts.findIndex(hasMask);
|
|
15
|
+
return parts.slice(0, upto === -1 ? parts.length : upto).join('/');
|
|
16
|
+
};
|
|
17
|
+
const listDir = (dir, deep, depth = 0) => {
|
|
18
|
+
let entries;
|
|
19
|
+
try {
|
|
20
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
const named = entries.filter(e => !e.name.startsWith('.')).sort((a, b) => (a.name < b.name ? -1 : 1));
|
|
26
|
+
const files = named.filter(e => e.isFile()).map(e => e.name);
|
|
27
|
+
if (!deep || depth >= maxDepth)
|
|
28
|
+
return files;
|
|
29
|
+
const nested = named
|
|
30
|
+
.filter(e => e.isDirectory())
|
|
31
|
+
.flatMap(e => listDir(path.join(dir, e.name), deep, depth + 1).map(inner => `${e.name}/${inner}`));
|
|
32
|
+
return [...files, ...nested];
|
|
33
|
+
};
|
|
34
|
+
// Candidate paths for a masked target, written the way the target is written so
|
|
35
|
+
// the selector matches them back. Matching runs before the file is read: the
|
|
36
|
+
// directory may hold anything, and a mask that does not name it must not send
|
|
37
|
+
// it through the parser.
|
|
38
|
+
const expandMask = (target, baseDir) => {
|
|
39
|
+
const prefix = fixedPrefix(target);
|
|
40
|
+
return listDir(path.resolve(baseDir, prefix), reachesSubdirs(target))
|
|
41
|
+
.map(name => (prefix ? `${prefix}/${name}` : name))
|
|
42
|
+
.filter(file => filePathMatches(file, target));
|
|
43
|
+
};
|
|
5
44
|
const keepBlocks = (items) => items.filter(item => item && typeof item === 'object' && !('file' in item));
|
|
6
45
|
const unwrapRoot = (blocks) => blocks.flatMap((b) => b && b.type === 'block' && b.name === 'root' && Array.isArray(b.content) ? b.content : [b]);
|
|
7
46
|
export const resolveIncludes = (tree, opts) => {
|
|
@@ -14,14 +53,24 @@ export const resolveIncludes = (tree, opts) => {
|
|
|
14
53
|
const parsed = selector ? parseSelector(selector) : undefined;
|
|
15
54
|
if (!selector || !parsed || parsed.scheme !== 'file' || !parsed.document)
|
|
16
55
|
return node;
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (!fs.existsSync(target)) {
|
|
56
|
+
const masked = hasMask(parsed.document);
|
|
57
|
+
const written = masked ? expandMask(parsed.document, baseDir) : [parsed.document];
|
|
58
|
+
if (!masked && !fs.existsSync(path.resolve(baseDir, parsed.document))) {
|
|
21
59
|
throw new Error(`include target not found: ${parsed.document}`);
|
|
22
60
|
}
|
|
23
|
-
const
|
|
24
|
-
|
|
61
|
+
const docs = [];
|
|
62
|
+
for (const file of written) {
|
|
63
|
+
const target = path.resolve(baseDir, file);
|
|
64
|
+
if (stack.includes(target))
|
|
65
|
+
continue;
|
|
66
|
+
docs.push({
|
|
67
|
+
file,
|
|
68
|
+
node: walkNode(opts.parse(fs.readFileSync(target, 'utf-8')), path.dirname(target), [...stack, target]),
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
if (docs.length === 0)
|
|
72
|
+
return [];
|
|
73
|
+
return unwrapRoot(keepBlocks(runSelector(selector, docs)));
|
|
25
74
|
}
|
|
26
75
|
if (Array.isArray(node.content))
|
|
27
76
|
return { ...node, content: walkList(node.content, baseDir, stack) };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-includes.js","sourceRoot":"","sources":["../src/resolve-includes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"resolve-includes.js","sourceRoot":"","sources":["../src/resolve-includes.ts"],"names":[],"mappings":"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"}
|
package/esm/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "0.0.
|
|
1
|
+
export declare const version = "0.0.81";
|
package/esm/version.js
CHANGED