@electron/lint-roller 1.3.2 → 1.5.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/README.md
CHANGED
|
@@ -38,8 +38,9 @@ detection of code blocks.
|
|
|
38
38
|
|
|
39
39
|
`electron-lint-markdown-ts-check` is a command to type check JS code blocks in
|
|
40
40
|
Markdown with `tsc`. Type checking can be disabled for specific code blocks
|
|
41
|
-
by adding `@ts-nocheck` to the info string,
|
|
42
|
-
by adding `@ts-ignore=[<line1>,<line2>]` to the info string
|
|
41
|
+
by adding `@ts-nocheck` to the info string, specific lines can be ignored
|
|
42
|
+
by adding `@ts-ignore=[<line1>,<line2>]` to the info string, and additional
|
|
43
|
+
globals can be defined with `@ts-type={name:type}`.
|
|
43
44
|
|
|
44
45
|
## License
|
|
45
46
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const crypto = require("node:crypto");
|
|
4
5
|
const fs = require("node:fs");
|
|
5
6
|
const os = require("node:os");
|
|
6
7
|
const path = require("node:path");
|
|
@@ -36,7 +37,7 @@ const DEFAULT_IMPORTS = `${NODE_IMPORTS}; const { ${ELECTRON_MODULES.join(', ')}
|
|
|
36
37
|
// not tied to Electron - will require passing in the list of modules
|
|
37
38
|
// as a CLI option, probably a file since there's a lot of info
|
|
38
39
|
async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
39
|
-
var _a, _b, _c;
|
|
40
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
40
41
|
const workspace = new markdown_1.DocsWorkspace(workspaceRoot, globs, ignoreGlobs);
|
|
41
42
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'electron-ts-check-'));
|
|
42
43
|
try {
|
|
@@ -44,6 +45,7 @@ async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
|
44
45
|
const originalFilenames = new Map();
|
|
45
46
|
// Copy over the typings so that a relative path can be used
|
|
46
47
|
fs.copyFileSync(path.join(process.cwd(), 'electron.d.ts'), path.join(tempDir, 'electron.d.ts'));
|
|
48
|
+
let ambientModules = '';
|
|
47
49
|
let errors = false;
|
|
48
50
|
for (const document of await workspace.getAllMarkdownDocuments()) {
|
|
49
51
|
const uri = vscode_uri_1.URI.parse(document.uri);
|
|
@@ -53,9 +55,19 @@ async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
|
53
55
|
const line = codeBlock.position.start.line;
|
|
54
56
|
const indent = codeBlock.position.start.column - 1;
|
|
55
57
|
const tsNoCheck = (_a = codeBlock.meta) === null || _a === void 0 ? void 0 : _a.split(' ').includes('@ts-nocheck');
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
const tsExpectErrorLines = (_c = (_b = codeBlock.meta) === null || _b === void 0 ? void 0 : _b.match(/\B@ts-expect-error=\[([\d,]*)\]\B/)) === null || _c === void 0 ? void 0 : _c[1].split(',').map((line) => parseInt(line));
|
|
59
|
+
const tsIgnoreLines = (_e = (_d = codeBlock.meta) === null || _d === void 0 ? void 0 : _d.match(/\B@ts-ignore=\[([\d,]*)\]\B/)) === null || _e === void 0 ? void 0 : _e[1].split(',').map((line) => parseInt(line));
|
|
60
|
+
const tsTypeLines = Array.from((_g = (_f = codeBlock.meta) === null || _f === void 0 ? void 0 : _f.matchAll(/\B@ts-type={([^:\r\n\t\f\v ]+):\s?([^}]+)}\B/g)) !== null && _g !== void 0 ? _g : []);
|
|
61
|
+
if (tsNoCheck && (tsExpectErrorLines || tsIgnoreLines || tsTypeLines.length)) {
|
|
62
|
+
console.log(`${filepath}:${line}:${indent + 1}: Code block has both @ts-nocheck and @ts-expect-error/@ts-ignore/@ts-type, they conflict`);
|
|
63
|
+
errors = true;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
// There should be no overlap between @ts-expect-error and @ts-ignore
|
|
67
|
+
if (tsExpectErrorLines &&
|
|
68
|
+
tsIgnoreLines &&
|
|
69
|
+
tsExpectErrorLines.some((line) => tsIgnoreLines.includes(line))) {
|
|
70
|
+
console.log(`${filepath}:${line}:${indent + 1}: Code block has both @ts-expect-error and @ts-ignore with same line number(s)`);
|
|
59
71
|
errors = true;
|
|
60
72
|
continue;
|
|
61
73
|
}
|
|
@@ -68,12 +80,9 @@ async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
|
68
80
|
continue;
|
|
69
81
|
}
|
|
70
82
|
const codeLines = codeBlock.value.split('\n');
|
|
71
|
-
let
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
// specified lines, in order to ignore specific lines (like
|
|
75
|
-
// requires of extra modules) without skipping the whole block
|
|
76
|
-
for (const line of tsIgnoreLines !== null && tsIgnoreLines !== void 0 ? tsIgnoreLines : []) {
|
|
83
|
+
let insertedInitialLine = false;
|
|
84
|
+
let types = '';
|
|
85
|
+
const insertComment = (comment, line) => {
|
|
77
86
|
// Inserting additional lines will make the tsc output
|
|
78
87
|
// incorrect which would be a pain to manually adjust,
|
|
79
88
|
// and there is no @ts-ignore-line, so tack the comment
|
|
@@ -82,21 +91,32 @@ async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
|
82
91
|
// The first line of the file is an edge case where an
|
|
83
92
|
// insertion is necessary, so take that into account
|
|
84
93
|
if (line === 1) {
|
|
85
|
-
codeLines.unshift(
|
|
86
|
-
|
|
94
|
+
codeLines.unshift(comment);
|
|
95
|
+
insertedInitialLine = true;
|
|
87
96
|
}
|
|
88
97
|
else {
|
|
89
|
-
const offset =
|
|
98
|
+
const offset = insertedInitialLine ? 1 : 2;
|
|
90
99
|
const codeLine = codeLines[line - offset];
|
|
91
100
|
// If the line is already a comment, fully replace it,
|
|
92
|
-
// otherwise tsc won't pick up the
|
|
101
|
+
// otherwise tsc won't pick up the inserted comment
|
|
93
102
|
if (codeLine.match(/^\s*\/\/\s/)) {
|
|
94
|
-
codeLines[line - offset] =
|
|
103
|
+
codeLines[line - offset] = comment;
|
|
95
104
|
}
|
|
96
105
|
else {
|
|
97
|
-
codeLines[line - offset] = `${codeLine}
|
|
106
|
+
codeLines[line - offset] = `${codeLine} ${comment}`;
|
|
98
107
|
}
|
|
99
108
|
}
|
|
109
|
+
};
|
|
110
|
+
// Blocks can have @ts-ignore=[1,10,50] in their info string
|
|
111
|
+
// (1-based lines) to insert an "// @ts-ignore" comment before
|
|
112
|
+
// specified lines, in order to ignore specific lines (like
|
|
113
|
+
// requires of extra modules) without skipping the whole block
|
|
114
|
+
for (const line of tsIgnoreLines !== null && tsIgnoreLines !== void 0 ? tsIgnoreLines : []) {
|
|
115
|
+
insertComment('// @ts-ignore', line);
|
|
116
|
+
}
|
|
117
|
+
// Blocks can also have @ts-expect-error
|
|
118
|
+
for (const line of tsExpectErrorLines !== null && tsExpectErrorLines !== void 0 ? tsExpectErrorLines : []) {
|
|
119
|
+
insertComment('// @ts-expect-error', line);
|
|
100
120
|
}
|
|
101
121
|
// Indent the lines if necessary so that tsc output is accurate
|
|
102
122
|
const code = (0, helpers_1.wrapOrphanObjectInParens)(codeLines
|
|
@@ -106,31 +126,57 @@ async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
|
106
126
|
// imports so that most snippets will have what they need.
|
|
107
127
|
// This isn't foolproof and might cause name conflicts
|
|
108
128
|
const imports = codeBlock.value.includes(' require(') ? '' : DEFAULT_IMPORTS;
|
|
109
|
-
const types = '/// <reference path="electron.d.ts" />';
|
|
110
129
|
// Insert the necessary number of blank lines so that the line
|
|
111
130
|
// numbers in output from tsc is accurate to the original file
|
|
112
|
-
const blankLines = '\n'.repeat(
|
|
131
|
+
const blankLines = '\n'.repeat(insertedInitialLine ? line - 3 : line - 2);
|
|
113
132
|
// Filename is unique since it is the name of the original Markdown
|
|
114
133
|
// file, with the starting line number of the codeblock appended
|
|
115
134
|
const filename = path.join(tempDir, `${filepath
|
|
116
135
|
.replace(new RegExp(path.sep.replace(/\\/g, '\\\\'), 'g'), '-')
|
|
117
136
|
.replace(/\./g, '-')}-${line}.js`);
|
|
118
|
-
|
|
137
|
+
// Blocks can have @ts-type={name:type} in their info string
|
|
138
|
+
// (1-based lines) to declare a global variable for a block
|
|
139
|
+
if (tsTypeLines.length) {
|
|
140
|
+
// To support this feature, generate a random name for a
|
|
141
|
+
// module, generate an ambient module declaration for the
|
|
142
|
+
// module, and then import the global variables we're
|
|
143
|
+
// defining from that module name - there's no code on
|
|
144
|
+
// disk for it, only an ambient module declaration which
|
|
145
|
+
// tsc will use to type the phantom variables being imported
|
|
146
|
+
const moduleName = crypto.randomBytes(16).toString('hex');
|
|
147
|
+
const extraTypes = tsTypeLines
|
|
148
|
+
.map((type) => ` export var ${type[1]}: ${type[2]};`)
|
|
149
|
+
.join('\n');
|
|
150
|
+
ambientModules += `declare module "${moduleName}" {\n${extraTypes}\n}\n\n`;
|
|
151
|
+
types = `const {${tsTypeLines
|
|
152
|
+
.map((type) => type[1])
|
|
153
|
+
.join(',')}} = require('${moduleName}')`;
|
|
154
|
+
}
|
|
155
|
+
fs.writeFileSync(filename, `// @ts-check\n${imports}\n${blankLines}${code}\n${types}`);
|
|
119
156
|
filenames.push(filename);
|
|
120
157
|
originalFilenames.set(filename, filepath);
|
|
121
158
|
}
|
|
122
159
|
}
|
|
160
|
+
fs.writeFileSync(path.join(tempDir, 'ambient.d.ts'), ambientModules);
|
|
123
161
|
for (const chunk of (0, helpers_1.chunkFilenames)(filenames)) {
|
|
124
162
|
const tscExec = path.join(require.resolve('typescript'), '..', '..', 'bin', 'tsc');
|
|
125
|
-
const args = [
|
|
163
|
+
const args = [
|
|
164
|
+
tscExec,
|
|
165
|
+
'--noEmit',
|
|
166
|
+
'--checkJs',
|
|
167
|
+
'--pretty',
|
|
168
|
+
path.join(tempDir, 'electron.d.ts'),
|
|
169
|
+
path.join(tempDir, 'ambient.d.ts'),
|
|
170
|
+
...chunk,
|
|
171
|
+
];
|
|
126
172
|
const { status, stderr, stdout } = await (0, helpers_1.spawnAsync)(process.execPath, args);
|
|
127
173
|
if (stderr) {
|
|
128
174
|
throw new Error(stderr);
|
|
129
175
|
}
|
|
130
176
|
// Replace the temp file paths with the original source filename
|
|
131
177
|
let correctedOutput = stdout.replace(new RegExp(`${path.relative(process.cwd(), tempDir)}${path.sep}`.replace(/\\/g, path.posix.sep), 'g'), '');
|
|
132
|
-
// Strip any @ts-ignore comments we added
|
|
133
|
-
correctedOutput = correctedOutput.replace(/ \/\/ @ts-ignore/g, '');
|
|
178
|
+
// Strip any @ts-expect-error/@ts-ignore comments we added
|
|
179
|
+
correctedOutput = correctedOutput.replace(/ \/\/ @ts-(?:expect-error|ignore)/g, '');
|
|
134
180
|
if (correctedOutput.trim()) {
|
|
135
181
|
for (const [filename, originalFilename] of originalFilenames.entries()) {
|
|
136
182
|
correctedOutput = correctedOutput.replace(new RegExp(path.basename(filename), 'g'), originalFilename);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint-markdown-ts-check.js","sourceRoot":"","sources":["../../bin/lint-markdown-ts-check.ts"],"names":[],"mappings":";;;AAEA,8BAA8B;AAC9B,8BAA8B;AAC9B,kCAAkC;AAElC,qCAAqC;AACrC,mCAAgC;AAChC,2CAAiC;AAEjC,4CAAsF;AACtF,8CAA+D;AAM/D,MAAM,gBAAgB,GAAG;IACvB,KAAK;IACL,aAAa;IACb,eAAe;IACf,eAAe;IACf,QAAQ;IACR,eAAe;IACf,SAAS;IACT,aAAa;IACb,MAAM;IACN,oBAAoB;IACpB,aAAa;IACb,KAAK;IACL,UAAU;IACV,SAAS;IACT,mBAAmB;IACnB,MAAM;IACN,gBAAgB;IAChB,UAAU;IACV,cAAc;CACf,CAAC;AAEF,MAAM,YAAY,GAChB,sHAAsH,CAAC;AAEzH,MAAM,eAAe,GAAG,GAAG,YAAY,aAAa,gBAAgB,CAAC,IAAI,CACvE,IAAI,CACL,2BAA2B,CAAC;AAE7B,qEAAqE;AACrE,qEAAqE;AACrE,+DAA+D;AAC/D,KAAK,UAAU,IAAI,CAAC,aAAqB,EAAE,KAAe,EAAE,EAAE,WAAW,GAAG,EAAE,EAAW;;IACvF,MAAM,SAAS,GAAG,IAAI,wBAAa,CAAC,aAAa,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAE7E,IAAI;QACF,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,iBAAiB,GAAwB,IAAI,GAAG,EAAE,CAAC;QAEzD,4DAA4D;QAC5D,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;QAEhG,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,KAAK,MAAM,QAAQ,IAAI,MAAM,SAAS,CAAC,uBAAuB,EAAE,EAAE;YAChE,MAAM,GAAG,GAAG,gBAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,SAAS,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,CAAC,MAAM,IAAA,wBAAa,EAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CACzD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAC9E,CAAC;YAEF,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE;gBACpC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAS,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,QAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBAEpD,MAAM,SAAS,GAAG,MAAA,SAAS,CAAC,IAAI,0CAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;gBACrE,MAAM,aAAa,GAAG,MAAA,MAAA,SAAS,CAAC,IAAI,0CAChC,KAAK,CAAC,6BAA6B,CAAC,0CAAG,CAAC,EACzC,KAAK,CAAC,GAAG,EACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"lint-markdown-ts-check.js","sourceRoot":"","sources":["../../bin/lint-markdown-ts-check.ts"],"names":[],"mappings":"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"}
|