comment-parser 1.2.4 → 1.3.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.
- package/CHANGELOG.md +3 -0
- package/browser/index.js +38 -36
- package/es6/parser/index.d.ts +3 -2
- package/es6/parser/index.js +4 -3
- package/es6/parser/source-parser.d.ts +3 -2
- package/es6/parser/source-parser.js +12 -12
- package/es6/parser/tokenizers/description.d.ts +4 -3
- package/es6/parser/tokenizers/description.js +7 -6
- package/es6/primitives.d.ts +7 -0
- package/es6/primitives.js +1 -0
- package/es6/transforms/align.d.ts +2 -1
- package/es6/transforms/align.js +7 -7
- package/lib/parser/index.cjs +6 -2
- package/lib/parser/index.cjs.map +1 -1
- package/lib/parser/index.d.ts +3 -2
- package/lib/parser/source-parser.cjs +11 -10
- package/lib/parser/source-parser.cjs.map +1 -1
- package/lib/parser/source-parser.d.ts +3 -2
- package/lib/parser/tokenizers/description.cjs +7 -6
- package/lib/parser/tokenizers/description.cjs.map +1 -1
- package/lib/parser/tokenizers/description.d.ts +4 -3
- package/lib/primitives.cjs +2 -0
- package/lib/primitives.cjs.map +1 -1
- package/lib/primitives.d.ts +7 -0
- package/lib/transforms/align.cjs +7 -7
- package/lib/transforms/align.cjs.map +1 -1
- package/lib/transforms/align.d.ts +2 -1
- package/package.json +4 -3
- package/src/parser/index.ts +6 -3
- package/src/parser/source-parser.ts +14 -12
- package/src/parser/tokenizers/description.ts +11 -8
- package/src/primitives.ts +8 -0
- package/src/transforms/align.ts +14 -12
- package/tests/e2e/examples.js +1 -1
- package/tests/unit/source-parser.spec.ts +150 -0
|
@@ -10,13 +10,14 @@ const primitives_1 = require("../../primitives.cjs");
|
|
|
10
10
|
* Makes no changes to `spec.lines[].tokens` but joins them into `spec.description`
|
|
11
11
|
* following given spacing srtategy
|
|
12
12
|
* @param {Spacing} spacing tells how to handle the whitespace
|
|
13
|
+
* @param {BlockMarkers} markers tells how to handle comment block delimitation
|
|
13
14
|
*/
|
|
14
15
|
|
|
15
16
|
|
|
16
|
-
function descriptionTokenizer(spacing = 'compact') {
|
|
17
|
+
function descriptionTokenizer(spacing = 'compact', markers = primitives_1.Markers) {
|
|
17
18
|
const join = getJoiner(spacing);
|
|
18
19
|
return spec => {
|
|
19
|
-
spec.description = join(spec.source);
|
|
20
|
+
spec.description = join(spec.source, markers);
|
|
20
21
|
return spec;
|
|
21
22
|
};
|
|
22
23
|
}
|
|
@@ -31,7 +32,7 @@ function getJoiner(spacing) {
|
|
|
31
32
|
|
|
32
33
|
exports.getJoiner = getJoiner;
|
|
33
34
|
|
|
34
|
-
function compactJoiner(lines) {
|
|
35
|
+
function compactJoiner(lines, markers = primitives_1.Markers) {
|
|
35
36
|
return lines.map(({
|
|
36
37
|
tokens: {
|
|
37
38
|
description
|
|
@@ -47,13 +48,13 @@ const getDescription = ({
|
|
|
47
48
|
tokens
|
|
48
49
|
}) => (tokens.delimiter === '' ? tokens.start : tokens.postDelimiter.slice(1)) + tokens.description;
|
|
49
50
|
|
|
50
|
-
function preserveJoiner(lines) {
|
|
51
|
+
function preserveJoiner(lines, markers = primitives_1.Markers) {
|
|
51
52
|
if (lines.length === 0) return ''; // skip the opening line with no description
|
|
52
53
|
|
|
53
|
-
if (lines[0].tokens.description === '' && lines[0].tokens.delimiter ===
|
|
54
|
+
if (lines[0].tokens.description === '' && lines[0].tokens.delimiter === markers.start) lines = lines.slice(1); // skip the closing line with no description
|
|
54
55
|
|
|
55
56
|
const lastLine = lines[lines.length - 1];
|
|
56
|
-
if (lastLine !== undefined && lastLine.tokens.description === '' && lastLine.tokens.end.endsWith(
|
|
57
|
+
if (lastLine !== undefined && lastLine.tokens.description === '' && lastLine.tokens.end.endsWith(markers.end)) lines = lines.slice(0, -1); // description starts at the last line of type definition
|
|
57
58
|
|
|
58
59
|
lines = lines.slice(lines.reduce(lineNo, 0));
|
|
59
60
|
return lines.map(getDescription).join('\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["description.js"],"names":["Object","defineProperty","exports","value","getJoiner","primitives_1","require","descriptionTokenizer","spacing","join","spec","description","source","default","compactJoiner","preserveJoiner","lines","map","tokens","trim","filter","lineNo","num","i","type","getDescription","delimiter","start","postDelimiter","slice","length","
|
|
1
|
+
{"version":3,"sources":["description.js"],"names":["Object","defineProperty","exports","value","getJoiner","primitives_1","require","descriptionTokenizer","spacing","markers","Markers","join","spec","description","source","default","compactJoiner","preserveJoiner","lines","map","tokens","trim","filter","lineNo","num","i","type","getDescription","delimiter","start","postDelimiter","slice","length","lastLine","undefined","end","endsWith","reduce"],"mappings":"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","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getJoiner = void 0;\nconst primitives_1 = require(\"../../primitives\");\n/**\n * Makes no changes to `spec.lines[].tokens` but joins them into `spec.description`\n * following given spacing srtategy\n * @param {Spacing} spacing tells how to handle the whitespace\n * @param {BlockMarkers} markers tells how to handle comment block delimitation\n */\nfunction descriptionTokenizer(spacing = 'compact', markers = primitives_1.Markers) {\n const join = getJoiner(spacing);\n return (spec) => {\n spec.description = join(spec.source, markers);\n return spec;\n };\n}\nexports.default = descriptionTokenizer;\nfunction getJoiner(spacing) {\n if (spacing === 'compact')\n return compactJoiner;\n if (spacing === 'preserve')\n return preserveJoiner;\n return spacing;\n}\nexports.getJoiner = getJoiner;\nfunction compactJoiner(lines, markers = primitives_1.Markers) {\n return lines\n .map(({ tokens: { description } }) => description.trim())\n .filter((description) => description !== '')\n .join(' ');\n}\nconst lineNo = (num, { tokens }, i) => tokens.type === '' ? num : i;\nconst getDescription = ({ tokens }) => (tokens.delimiter === '' ? tokens.start : tokens.postDelimiter.slice(1)) +\n tokens.description;\nfunction preserveJoiner(lines, markers = primitives_1.Markers) {\n if (lines.length === 0)\n return '';\n // skip the opening line with no description\n if (lines[0].tokens.description === '' &&\n lines[0].tokens.delimiter === markers.start)\n lines = lines.slice(1);\n // skip the closing line with no description\n const lastLine = lines[lines.length - 1];\n if (lastLine !== undefined &&\n lastLine.tokens.description === '' &&\n lastLine.tokens.end.endsWith(markers.end))\n lines = lines.slice(0, -1);\n // description starts at the last line of type definition\n lines = lines.slice(lines.reduce(lineNo, 0));\n return lines.map(getDescription).join('\\n');\n}\n"],"file":"description.cjs"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Line } from '../../primitives';
|
|
1
|
+
import { Line, BlockMarkers, Markers } from '../../primitives';
|
|
2
2
|
import { Tokenizer } from './index';
|
|
3
3
|
/**
|
|
4
4
|
* Walks over provided lines joining description token into a single string.
|
|
5
5
|
* */
|
|
6
|
-
export declare type Joiner = (lines: Line[]) => string;
|
|
6
|
+
export declare type Joiner = (lines: Line[], markers?: BlockMarkers) => string;
|
|
7
7
|
/**
|
|
8
8
|
* Shortcut for standard Joiners
|
|
9
9
|
* compact - strip surrounding whitespace and concat lines using a single string
|
|
@@ -14,6 +14,7 @@ export declare type Spacing = 'compact' | 'preserve' | Joiner;
|
|
|
14
14
|
* Makes no changes to `spec.lines[].tokens` but joins them into `spec.description`
|
|
15
15
|
* following given spacing srtategy
|
|
16
16
|
* @param {Spacing} spacing tells how to handle the whitespace
|
|
17
|
+
* @param {BlockMarkers} markers tells how to handle comment block delimitation
|
|
17
18
|
*/
|
|
18
|
-
export default function descriptionTokenizer(spacing?: Spacing): Tokenizer;
|
|
19
|
+
export default function descriptionTokenizer(spacing?: Spacing, markers?: typeof Markers): Tokenizer;
|
|
19
20
|
export declare function getJoiner(spacing: Spacing): Joiner;
|
package/lib/primitives.cjs
CHANGED
package/lib/primitives.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["primitives.js"],"names":["Object","defineProperty","exports","value","Markers"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;AAAEC,EAAAA,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,OAAR,GAAkB,KAAK,CAAvB;AACA,IAAIA,OAAJ;;AACA,CAAC,UAAUA,OAAV,EAAmB;AAChBA,EAAAA,OAAO,CAAC,OAAD,CAAP,GAAmB,KAAnB;AACAA,EAAAA,OAAO,CAAC,SAAD,CAAP,GAAqB,MAArB;AACAA,EAAAA,OAAO,CAAC,OAAD,CAAP,GAAmB,GAAnB;AACAA,EAAAA,OAAO,CAAC,KAAD,CAAP,GAAiB,IAAjB;AACH,CALD,EAKGA,OAAO,GAAGF,OAAO,CAACE,OAAR,KAAoBF,OAAO,CAACE,OAAR,GAAkB,EAAtC,CALb","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Markers = void 0;\nvar Markers;\n(function (Markers) {\n Markers[\"start\"] = \"/**\";\n Markers[\"nostart\"] = \"/***\";\n Markers[\"delim\"] = \"*\";\n Markers[\"end\"] = \"*/\";\n})(Markers = exports.Markers || (exports.Markers = {}));\n"],"file":"primitives.cjs"}
|
|
1
|
+
{"version":3,"sources":["primitives.js"],"names":["Object","defineProperty","exports","value","Markers"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;AAAEC,EAAAA,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,OAAR,GAAkB,KAAK,CAAvB;AACA;;AACA,IAAIA,OAAJ;;AACA,CAAC,UAAUA,OAAV,EAAmB;AAChBA,EAAAA,OAAO,CAAC,OAAD,CAAP,GAAmB,KAAnB;AACAA,EAAAA,OAAO,CAAC,SAAD,CAAP,GAAqB,MAArB;AACAA,EAAAA,OAAO,CAAC,OAAD,CAAP,GAAmB,GAAnB;AACAA,EAAAA,OAAO,CAAC,KAAD,CAAP,GAAiB,IAAjB;AACH,CALD,EAKGA,OAAO,GAAGF,OAAO,CAACE,OAAR,KAAoBF,OAAO,CAACE,OAAR,GAAkB,EAAtC,CALb","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Markers = void 0;\n/** @deprecated */\nvar Markers;\n(function (Markers) {\n Markers[\"start\"] = \"/**\";\n Markers[\"nostart\"] = \"/***\";\n Markers[\"delim\"] = \"*\";\n Markers[\"end\"] = \"*/\";\n})(Markers = exports.Markers || (exports.Markers = {}));\n"],"file":"primitives.cjs"}
|
package/lib/primitives.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
/** @deprecated */
|
|
1
2
|
export declare enum Markers {
|
|
2
3
|
start = "/**",
|
|
3
4
|
nostart = "/***",
|
|
4
5
|
delim = "*",
|
|
5
6
|
end = "*/"
|
|
6
7
|
}
|
|
8
|
+
export interface BlockMarkers {
|
|
9
|
+
start: string;
|
|
10
|
+
nostart: string;
|
|
11
|
+
delim: string;
|
|
12
|
+
end: string;
|
|
13
|
+
}
|
|
7
14
|
export interface Block {
|
|
8
15
|
description: string;
|
|
9
16
|
tags: Spec[];
|
package/lib/transforms/align.cjs
CHANGED
|
@@ -26,10 +26,10 @@ const zeroWidth = {
|
|
|
26
26
|
name: 0
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
const getWidth = (w, {
|
|
29
|
+
const getWidth = (markers = primitives_1.Markers) => (w, {
|
|
30
30
|
tokens: t
|
|
31
31
|
}) => ({
|
|
32
|
-
start: t.delimiter ===
|
|
32
|
+
start: t.delimiter === markers.start ? t.start.length : w.start,
|
|
33
33
|
tag: Math.max(w.tag, t.tag.length),
|
|
34
34
|
type: Math.max(w.type, t.type.length),
|
|
35
35
|
name: Math.max(w.name, t.name.length)
|
|
@@ -37,7 +37,7 @@ const getWidth = (w, {
|
|
|
37
37
|
|
|
38
38
|
const space = len => ''.padStart(len, ' ');
|
|
39
39
|
|
|
40
|
-
function align() {
|
|
40
|
+
function align(markers = primitives_1.Markers) {
|
|
41
41
|
let intoTags = false;
|
|
42
42
|
let w;
|
|
43
43
|
|
|
@@ -46,7 +46,7 @@ function align() {
|
|
|
46
46
|
if (tokens.tag !== '') intoTags = true;
|
|
47
47
|
const isEmpty = tokens.tag === '' && tokens.name === '' && tokens.type === '' && tokens.description === ''; // dangling '*/'
|
|
48
48
|
|
|
49
|
-
if (tokens.end ===
|
|
49
|
+
if (tokens.end === markers.end && isEmpty) {
|
|
50
50
|
tokens.start = space(w.start + 1);
|
|
51
51
|
return Object.assign(Object.assign({}, line), {
|
|
52
52
|
tokens
|
|
@@ -54,11 +54,11 @@ function align() {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
switch (tokens.delimiter) {
|
|
57
|
-
case
|
|
57
|
+
case markers.start:
|
|
58
58
|
tokens.start = space(w.start);
|
|
59
59
|
break;
|
|
60
60
|
|
|
61
|
-
case
|
|
61
|
+
case markers.delim:
|
|
62
62
|
tokens.start = space(w.start + 1);
|
|
63
63
|
break;
|
|
64
64
|
|
|
@@ -116,7 +116,7 @@ function align() {
|
|
|
116
116
|
} = _a,
|
|
117
117
|
fields = __rest(_a, ["source"]);
|
|
118
118
|
|
|
119
|
-
w = source.reduce(getWidth, Object.assign({}, zeroWidth));
|
|
119
|
+
w = source.reduce(getWidth(markers), Object.assign({}, zeroWidth));
|
|
120
120
|
return util_1.rewireSource(Object.assign(Object.assign({}, fields), {
|
|
121
121
|
source: source.map(update)
|
|
122
122
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["align.js"],"names":["__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","defineProperty","exports","value","primitives_1","require","util_1","zeroWidth","start","tag","type","name","getWidth","w","tokens","delimiter","
|
|
1
|
+
{"version":3,"sources":["align.js"],"names":["__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","defineProperty","exports","value","primitives_1","require","util_1","zeroWidth","start","tag","type","name","getWidth","markers","Markers","w","tokens","delimiter","Math","max","space","len","padStart","align","intoTags","update","line","assign","isEmpty","description","end","delim","postDelimiter","nothingAfter","postName","postType","postTag","_a","source","fields","reduce","rewireSource","map","default"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst primitives_1 = require(\"../primitives\");\nconst util_1 = require(\"../util\");\nconst zeroWidth = {\n start: 0,\n tag: 0,\n type: 0,\n name: 0,\n};\nconst getWidth = (markers = primitives_1.Markers) => (w, { tokens: t }) => ({\n start: t.delimiter === markers.start ? t.start.length : w.start,\n tag: Math.max(w.tag, t.tag.length),\n type: Math.max(w.type, t.type.length),\n name: Math.max(w.name, t.name.length),\n});\nconst space = (len) => ''.padStart(len, ' ');\nfunction align(markers = primitives_1.Markers) {\n let intoTags = false;\n let w;\n function update(line) {\n const tokens = Object.assign({}, line.tokens);\n if (tokens.tag !== '')\n intoTags = true;\n const isEmpty = tokens.tag === '' &&\n tokens.name === '' &&\n tokens.type === '' &&\n tokens.description === '';\n // dangling '*/'\n if (tokens.end === markers.end && isEmpty) {\n tokens.start = space(w.start + 1);\n return Object.assign(Object.assign({}, line), { tokens });\n }\n switch (tokens.delimiter) {\n case markers.start:\n tokens.start = space(w.start);\n break;\n case markers.delim:\n tokens.start = space(w.start + 1);\n break;\n default:\n tokens.delimiter = '';\n tokens.start = space(w.start + 2); // compensate delimiter\n }\n if (!intoTags) {\n tokens.postDelimiter = tokens.description === '' ? '' : ' ';\n return Object.assign(Object.assign({}, line), { tokens });\n }\n const nothingAfter = {\n delim: false,\n tag: false,\n type: false,\n name: false,\n };\n if (tokens.description === '') {\n nothingAfter.name = true;\n tokens.postName = '';\n if (tokens.name === '') {\n nothingAfter.type = true;\n tokens.postType = '';\n if (tokens.type === '') {\n nothingAfter.tag = true;\n tokens.postTag = '';\n if (tokens.tag === '') {\n nothingAfter.delim = true;\n }\n }\n }\n }\n tokens.postDelimiter = nothingAfter.delim ? '' : ' ';\n if (!nothingAfter.tag)\n tokens.postTag = space(w.tag - tokens.tag.length + 1);\n if (!nothingAfter.type)\n tokens.postType = space(w.type - tokens.type.length + 1);\n if (!nothingAfter.name)\n tokens.postName = space(w.name - tokens.name.length + 1);\n return Object.assign(Object.assign({}, line), { tokens });\n }\n return (_a) => {\n var { source } = _a, fields = __rest(_a, [\"source\"]);\n w = source.reduce(getWidth(markers), Object.assign({}, zeroWidth));\n return util_1.rewireSource(Object.assign(Object.assign({}, fields), { source: source.map(update) }));\n };\n}\nexports.default = align;\n"],"file":"align.cjs"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "comment-parser",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Generic JSDoc-like comment parser",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.cjs",
|
|
@@ -66,15 +66,16 @@
|
|
|
66
66
|
],
|
|
67
67
|
"author": "Sergiy Yavorsky <sergiy@yavorsky.me> (https://github.com/syavorsky)",
|
|
68
68
|
"contributors": [
|
|
69
|
+
"Alex Grozav (https://github.com/alexgrozav)",
|
|
69
70
|
"Alexej Yaroshevich (https://github.com/zxqfox)",
|
|
70
71
|
"Andre Wachsmuth (https://github.com/blutorange)",
|
|
71
72
|
"Brett Zamir (https://github.com/brettz9)",
|
|
72
73
|
"Dieter Oberkofler (https://github.com/doberkofler)",
|
|
73
74
|
"Evgeny Reznichenko (https://github.com/zxcabs)",
|
|
74
75
|
"Javier \"Ciberma\" Mora (https://github.com/jhm-ciberman)",
|
|
76
|
+
"Jayden Seric (https://github.com/jaydenseric)",
|
|
75
77
|
"Jordan Harband (https://github.com/ljharb)",
|
|
76
|
-
"tengattack (https://github.com/tengattack)"
|
|
77
|
-
"Jayden Seric (https://github.com/jaydenseric)"
|
|
78
|
+
"tengattack (https://github.com/tengattack)"
|
|
78
79
|
],
|
|
79
80
|
"license": "MIT",
|
|
80
81
|
"bugs": {
|
package/src/parser/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Block, Line, Problem } from '../primitives';
|
|
1
|
+
import { Block, Line, Problem, BlockMarkers, Markers } from '../primitives';
|
|
2
2
|
import { splitLines } from '../util';
|
|
3
3
|
import blockParser from './block-parser';
|
|
4
4
|
import sourceParser from './source-parser';
|
|
@@ -18,6 +18,8 @@ export interface Options {
|
|
|
18
18
|
fence: string;
|
|
19
19
|
// block and comment description compaction strategy
|
|
20
20
|
spacing: 'compact' | 'preserve';
|
|
21
|
+
// comment description markers
|
|
22
|
+
markers: BlockMarkers;
|
|
21
23
|
// tokenizer functions extracting name, type, and description out of tag, see Tokenizer
|
|
22
24
|
tokenizers: Tokenizer[];
|
|
23
25
|
}
|
|
@@ -28,6 +30,7 @@ export default function getParser({
|
|
|
28
30
|
startLine = 0,
|
|
29
31
|
fence = '```',
|
|
30
32
|
spacing = 'compact',
|
|
33
|
+
markers = Markers,
|
|
31
34
|
tokenizers = [
|
|
32
35
|
tokenizeTag(),
|
|
33
36
|
tokenizeType(spacing),
|
|
@@ -37,7 +40,7 @@ export default function getParser({
|
|
|
37
40
|
}: Partial<Options> = {}): Parser {
|
|
38
41
|
if (startLine < 0 || startLine % 1 > 0) throw new Error('Invalid startLine');
|
|
39
42
|
|
|
40
|
-
const parseSource = sourceParser({ startLine });
|
|
43
|
+
const parseSource = sourceParser({ startLine, markers });
|
|
41
44
|
const parseBlock = blockParser({ fence });
|
|
42
45
|
const parseSpec = specParser({ tokenizers });
|
|
43
46
|
const joinDescription = getDescriptionJoiner(spacing);
|
|
@@ -57,7 +60,7 @@ export default function getParser({
|
|
|
57
60
|
const specs = sections.slice(1).map(parseSpec);
|
|
58
61
|
|
|
59
62
|
blocks.push({
|
|
60
|
-
description: joinDescription(sections[0]),
|
|
63
|
+
description: joinDescription(sections[0], markers),
|
|
61
64
|
tags: specs,
|
|
62
65
|
source: lines,
|
|
63
66
|
problems: specs.reduce(
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import { Line,
|
|
1
|
+
import { Line, Tokens, BlockMarkers, Markers } from '../primitives';
|
|
2
2
|
import { seedTokens, splitSpace, splitCR } from '../util';
|
|
3
3
|
|
|
4
4
|
export interface Options {
|
|
5
5
|
startLine: number;
|
|
6
|
+
markers: BlockMarkers;
|
|
6
7
|
}
|
|
7
8
|
|
|
8
9
|
export type Parser = (source: string) => Line[] | null;
|
|
9
10
|
|
|
10
11
|
export default function getParser({
|
|
11
12
|
startLine = 0,
|
|
13
|
+
markers = Markers,
|
|
12
14
|
}: Partial<Options> = {}): Parser {
|
|
13
15
|
let block: Line[] | null = null;
|
|
14
16
|
let num = startLine;
|
|
@@ -22,12 +24,12 @@ export default function getParser({
|
|
|
22
24
|
|
|
23
25
|
if (
|
|
24
26
|
block === null &&
|
|
25
|
-
rest.startsWith(
|
|
26
|
-
!rest.startsWith(
|
|
27
|
+
rest.startsWith(markers.start) &&
|
|
28
|
+
!rest.startsWith(markers.nostart)
|
|
27
29
|
) {
|
|
28
30
|
block = [];
|
|
29
|
-
tokens.delimiter = rest.slice(0,
|
|
30
|
-
rest = rest.slice(
|
|
31
|
+
tokens.delimiter = rest.slice(0, markers.start.length);
|
|
32
|
+
rest = rest.slice(markers.start.length);
|
|
31
33
|
[tokens.postDelimiter, rest] = splitSpace(rest);
|
|
32
34
|
}
|
|
33
35
|
|
|
@@ -36,22 +38,22 @@ export default function getParser({
|
|
|
36
38
|
return null;
|
|
37
39
|
}
|
|
38
40
|
|
|
39
|
-
const isClosed = rest.trimRight().endsWith(
|
|
41
|
+
const isClosed = rest.trimRight().endsWith(markers.end);
|
|
40
42
|
|
|
41
43
|
if (
|
|
42
44
|
tokens.delimiter === '' &&
|
|
43
|
-
rest.startsWith(
|
|
44
|
-
!rest.startsWith(
|
|
45
|
+
rest.startsWith(markers.delim) &&
|
|
46
|
+
!rest.startsWith(markers.end)
|
|
45
47
|
) {
|
|
46
|
-
tokens.delimiter =
|
|
47
|
-
rest = rest.slice(
|
|
48
|
+
tokens.delimiter = markers.delim;
|
|
49
|
+
rest = rest.slice(markers.delim.length);
|
|
48
50
|
[tokens.postDelimiter, rest] = splitSpace(rest);
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
if (isClosed) {
|
|
52
54
|
const trimmed = rest.trimRight();
|
|
53
|
-
tokens.end = rest.slice(trimmed.length -
|
|
54
|
-
rest = trimmed.slice(0, -
|
|
55
|
+
tokens.end = rest.slice(trimmed.length - markers.end.length);
|
|
56
|
+
rest = trimmed.slice(0, -markers.end.length);
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
tokens.description = rest;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Spec, Line, Markers } from '../../primitives';
|
|
1
|
+
import { Spec, Line, BlockMarkers, Markers } from '../../primitives';
|
|
2
2
|
import { Tokenizer } from './index';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Walks over provided lines joining description token into a single string.
|
|
6
6
|
* */
|
|
7
|
-
export type Joiner = (lines: Line[]) => string;
|
|
7
|
+
export type Joiner = (lines: Line[], markers?: BlockMarkers) => string;
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Shortcut for standard Joiners
|
|
@@ -17,13 +17,15 @@ export type Spacing = 'compact' | 'preserve' | Joiner;
|
|
|
17
17
|
* Makes no changes to `spec.lines[].tokens` but joins them into `spec.description`
|
|
18
18
|
* following given spacing srtategy
|
|
19
19
|
* @param {Spacing} spacing tells how to handle the whitespace
|
|
20
|
+
* @param {BlockMarkers} markers tells how to handle comment block delimitation
|
|
20
21
|
*/
|
|
21
22
|
export default function descriptionTokenizer(
|
|
22
|
-
spacing: Spacing = 'compact'
|
|
23
|
+
spacing: Spacing = 'compact',
|
|
24
|
+
markers = Markers
|
|
23
25
|
): Tokenizer {
|
|
24
26
|
const join = getJoiner(spacing);
|
|
25
27
|
return (spec: Spec): Spec => {
|
|
26
|
-
spec.description = join(spec.source);
|
|
28
|
+
spec.description = join(spec.source, markers);
|
|
27
29
|
return spec;
|
|
28
30
|
};
|
|
29
31
|
}
|
|
@@ -31,10 +33,11 @@ export default function descriptionTokenizer(
|
|
|
31
33
|
export function getJoiner(spacing: Spacing): Joiner {
|
|
32
34
|
if (spacing === 'compact') return compactJoiner;
|
|
33
35
|
if (spacing === 'preserve') return preserveJoiner;
|
|
36
|
+
|
|
34
37
|
return spacing;
|
|
35
38
|
}
|
|
36
39
|
|
|
37
|
-
function compactJoiner(lines: Line[]): string {
|
|
40
|
+
function compactJoiner(lines: Line[], markers = Markers): string {
|
|
38
41
|
return lines
|
|
39
42
|
.map(({ tokens: { description } }: Line) => description.trim())
|
|
40
43
|
.filter((description) => description !== '')
|
|
@@ -48,13 +51,13 @@ const getDescription = ({ tokens }: Line) =>
|
|
|
48
51
|
(tokens.delimiter === '' ? tokens.start : tokens.postDelimiter.slice(1)) +
|
|
49
52
|
tokens.description;
|
|
50
53
|
|
|
51
|
-
function preserveJoiner(lines: Line[]): string {
|
|
54
|
+
function preserveJoiner(lines: Line[], markers = Markers): string {
|
|
52
55
|
if (lines.length === 0) return '';
|
|
53
56
|
|
|
54
57
|
// skip the opening line with no description
|
|
55
58
|
if (
|
|
56
59
|
lines[0].tokens.description === '' &&
|
|
57
|
-
lines[0].tokens.delimiter ===
|
|
60
|
+
lines[0].tokens.delimiter === markers.start
|
|
58
61
|
)
|
|
59
62
|
lines = lines.slice(1);
|
|
60
63
|
|
|
@@ -64,7 +67,7 @@ function preserveJoiner(lines: Line[]): string {
|
|
|
64
67
|
if (
|
|
65
68
|
lastLine !== undefined &&
|
|
66
69
|
lastLine.tokens.description === '' &&
|
|
67
|
-
lastLine.tokens.end.endsWith(
|
|
70
|
+
lastLine.tokens.end.endsWith(markers.end)
|
|
68
71
|
)
|
|
69
72
|
lines = lines.slice(0, -1);
|
|
70
73
|
|
package/src/primitives.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @deprecated */
|
|
1
2
|
export enum Markers {
|
|
2
3
|
start = '/**',
|
|
3
4
|
nostart = '/***',
|
|
@@ -5,6 +6,13 @@ export enum Markers {
|
|
|
5
6
|
end = '*/',
|
|
6
7
|
}
|
|
7
8
|
|
|
9
|
+
export interface BlockMarkers {
|
|
10
|
+
start: string;
|
|
11
|
+
nostart: string;
|
|
12
|
+
delim: string;
|
|
13
|
+
end: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
8
16
|
export interface Block {
|
|
9
17
|
description: string;
|
|
10
18
|
tags: Spec[];
|
package/src/transforms/align.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Transform } from './index';
|
|
2
|
-
import {
|
|
2
|
+
import { BlockMarkers, Block, Line, Markers } from '../primitives';
|
|
3
3
|
import { rewireSource } from '../util';
|
|
4
4
|
|
|
5
5
|
interface Width {
|
|
@@ -16,16 +16,18 @@ const zeroWidth = {
|
|
|
16
16
|
name: 0,
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
const getWidth =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
const getWidth =
|
|
20
|
+
(markers = Markers) =>
|
|
21
|
+
(w: Width, { tokens: t }: Line) => ({
|
|
22
|
+
start: t.delimiter === markers.start ? t.start.length : w.start,
|
|
23
|
+
tag: Math.max(w.tag, t.tag.length),
|
|
24
|
+
type: Math.max(w.type, t.type.length),
|
|
25
|
+
name: Math.max(w.name, t.name.length),
|
|
26
|
+
});
|
|
25
27
|
|
|
26
28
|
const space = (len: number) => ''.padStart(len, ' ');
|
|
27
29
|
|
|
28
|
-
export default function align(): Transform {
|
|
30
|
+
export default function align(markers = Markers): Transform {
|
|
29
31
|
let intoTags = false;
|
|
30
32
|
let w: Width;
|
|
31
33
|
|
|
@@ -40,16 +42,16 @@ export default function align(): Transform {
|
|
|
40
42
|
tokens.description === '';
|
|
41
43
|
|
|
42
44
|
// dangling '*/'
|
|
43
|
-
if (tokens.end ===
|
|
45
|
+
if (tokens.end === markers.end && isEmpty) {
|
|
44
46
|
tokens.start = space(w.start + 1);
|
|
45
47
|
return { ...line, tokens };
|
|
46
48
|
}
|
|
47
49
|
|
|
48
50
|
switch (tokens.delimiter) {
|
|
49
|
-
case
|
|
51
|
+
case markers.start:
|
|
50
52
|
tokens.start = space(w.start);
|
|
51
53
|
break;
|
|
52
|
-
case
|
|
54
|
+
case markers.delim:
|
|
53
55
|
tokens.start = space(w.start + 1);
|
|
54
56
|
break;
|
|
55
57
|
default:
|
|
@@ -101,7 +103,7 @@ export default function align(): Transform {
|
|
|
101
103
|
}
|
|
102
104
|
|
|
103
105
|
return ({ source, ...fields }: Block): Block => {
|
|
104
|
-
w = source.reduce(getWidth, { ...zeroWidth });
|
|
106
|
+
w = source.reduce(getWidth(markers), { ...zeroWidth });
|
|
105
107
|
return rewireSource({ ...fields, source: source.map(update) });
|
|
106
108
|
};
|
|
107
109
|
}
|
package/tests/e2e/examples.js
CHANGED