@electron/lint-roller 1.3.1 → 1.4.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");
|
|
@@ -27,15 +28,16 @@ const ELECTRON_MODULES = [
|
|
|
27
28
|
'systemPreferences',
|
|
28
29
|
'Tray',
|
|
29
30
|
'utilityProcess',
|
|
31
|
+
'webFrame',
|
|
30
32
|
'webFrameMain',
|
|
31
33
|
];
|
|
32
|
-
const NODE_IMPORTS = "const fs = require('node:fs'); const path = require('node:path')";
|
|
34
|
+
const NODE_IMPORTS = "const childProcess = require('node:child_process'); const fs = require('node:fs'); const path = require('node:path')";
|
|
33
35
|
const DEFAULT_IMPORTS = `${NODE_IMPORTS}; const { ${ELECTRON_MODULES.join(', ')} } = require('electron');`;
|
|
34
36
|
// TODO(dsanders11): Refactor to make this script general purpose and
|
|
35
37
|
// not tied to Electron - will require passing in the list of modules
|
|
36
38
|
// as a CLI option, probably a file since there's a lot of info
|
|
37
39
|
async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
38
|
-
var _a, _b, _c;
|
|
40
|
+
var _a, _b, _c, _d, _e;
|
|
39
41
|
const workspace = new markdown_1.DocsWorkspace(workspaceRoot, globs, ignoreGlobs);
|
|
40
42
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'electron-ts-check-'));
|
|
41
43
|
try {
|
|
@@ -43,6 +45,7 @@ async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
|
43
45
|
const originalFilenames = new Map();
|
|
44
46
|
// Copy over the typings so that a relative path can be used
|
|
45
47
|
fs.copyFileSync(path.join(process.cwd(), 'electron.d.ts'), path.join(tempDir, 'electron.d.ts'));
|
|
48
|
+
let ambientModules = '';
|
|
46
49
|
let errors = false;
|
|
47
50
|
for (const document of await workspace.getAllMarkdownDocuments()) {
|
|
48
51
|
const uri = vscode_uri_1.URI.parse(document.uri);
|
|
@@ -53,8 +56,9 @@ async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
|
53
56
|
const indent = codeBlock.position.start.column - 1;
|
|
54
57
|
const tsNoCheck = (_a = codeBlock.meta) === null || _a === void 0 ? void 0 : _a.split(' ').includes('@ts-nocheck');
|
|
55
58
|
const tsIgnoreLines = (_c = (_b = codeBlock.meta) === null || _b === void 0 ? void 0 : _b.match(/\B@ts-ignore=\[([\d,]*)\]\B/)) === null || _c === void 0 ? void 0 : _c[1].split(',').map((line) => parseInt(line));
|
|
56
|
-
|
|
57
|
-
|
|
59
|
+
const tsTypeLines = Array.from((_e = (_d = codeBlock.meta) === null || _d === void 0 ? void 0 : _d.matchAll(/\B@ts-type={([^:\r\n\t\f\v ]+):\s?([^}]+)}\B/g)) !== null && _e !== void 0 ? _e : []);
|
|
60
|
+
if (tsNoCheck && (tsIgnoreLines || tsTypeLines.length)) {
|
|
61
|
+
console.log(`${filepath}:${line}:${indent + 1}: Code block has both @ts-nocheck and @ts-ignore/@ts-type, they conflict`);
|
|
58
62
|
errors = true;
|
|
59
63
|
continue;
|
|
60
64
|
}
|
|
@@ -68,6 +72,7 @@ async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
|
68
72
|
}
|
|
69
73
|
const codeLines = codeBlock.value.split('\n');
|
|
70
74
|
let firstLineIsTsIgnore = false;
|
|
75
|
+
let types = '';
|
|
71
76
|
// Blocks can have @ts-ignore=[1,10,50] in their info string
|
|
72
77
|
// (1-based lines) to insert an "// @ts-ignore" comment before
|
|
73
78
|
// specified lines, in order to ignore specific lines (like
|
|
@@ -86,7 +91,15 @@ async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
|
86
91
|
}
|
|
87
92
|
else {
|
|
88
93
|
const offset = firstLineIsTsIgnore ? 1 : 2;
|
|
89
|
-
|
|
94
|
+
const codeLine = codeLines[line - offset];
|
|
95
|
+
// If the line is already a comment, fully replace it,
|
|
96
|
+
// otherwise tsc won't pick up the @ts-ignore comment
|
|
97
|
+
if (codeLine.match(/^\s*\/\/\s/)) {
|
|
98
|
+
codeLines[line - offset] = '// @ts-ignore';
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
codeLines[line - offset] = `${codeLine} // @ts-ignore`;
|
|
102
|
+
}
|
|
90
103
|
}
|
|
91
104
|
}
|
|
92
105
|
// Indent the lines if necessary so that tsc output is accurate
|
|
@@ -97,23 +110,49 @@ async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
|
97
110
|
// imports so that most snippets will have what they need.
|
|
98
111
|
// This isn't foolproof and might cause name conflicts
|
|
99
112
|
const imports = codeBlock.value.includes(' require(') ? '' : DEFAULT_IMPORTS;
|
|
100
|
-
const types = '/// <reference path="electron.d.ts" />';
|
|
101
113
|
// Insert the necessary number of blank lines so that the line
|
|
102
114
|
// numbers in output from tsc is accurate to the original file
|
|
103
|
-
const blankLines = '\n'.repeat(firstLineIsTsIgnore ? line -
|
|
115
|
+
const blankLines = '\n'.repeat(firstLineIsTsIgnore ? line - 3 : line - 2);
|
|
104
116
|
// Filename is unique since it is the name of the original Markdown
|
|
105
117
|
// file, with the starting line number of the codeblock appended
|
|
106
118
|
const filename = path.join(tempDir, `${filepath
|
|
107
119
|
.replace(new RegExp(path.sep.replace(/\\/g, '\\\\'), 'g'), '-')
|
|
108
120
|
.replace(/\./g, '-')}-${line}.js`);
|
|
109
|
-
|
|
121
|
+
// Blocks can have @ts-type={name:type} in their info string
|
|
122
|
+
// (1-based lines) to declare a global variable for a block
|
|
123
|
+
if (tsTypeLines.length) {
|
|
124
|
+
// To support this feature, generate a random name for a
|
|
125
|
+
// module, generate an ambient module declaration for the
|
|
126
|
+
// module, and then import the global variables we're
|
|
127
|
+
// defining from that module name - there's no code on
|
|
128
|
+
// disk for it, only an ambient module declaration which
|
|
129
|
+
// tsc will use to type the phantom variables being imported
|
|
130
|
+
const moduleName = crypto.randomBytes(16).toString('hex');
|
|
131
|
+
const extraTypes = tsTypeLines
|
|
132
|
+
.map((type) => ` export var ${type[1]}: ${type[2]};`)
|
|
133
|
+
.join('\n');
|
|
134
|
+
ambientModules += `declare module "${moduleName}" {\n${extraTypes}\n}\n\n`;
|
|
135
|
+
types = `const {${tsTypeLines
|
|
136
|
+
.map((type) => type[1])
|
|
137
|
+
.join(',')}} = require('${moduleName}')`;
|
|
138
|
+
}
|
|
139
|
+
fs.writeFileSync(filename, `// @ts-check\n${imports}\n${blankLines}${code}\n${types}`);
|
|
110
140
|
filenames.push(filename);
|
|
111
141
|
originalFilenames.set(filename, filepath);
|
|
112
142
|
}
|
|
113
143
|
}
|
|
144
|
+
fs.writeFileSync(path.join(tempDir, 'ambient.d.ts'), ambientModules);
|
|
114
145
|
for (const chunk of (0, helpers_1.chunkFilenames)(filenames)) {
|
|
115
146
|
const tscExec = path.join(require.resolve('typescript'), '..', '..', 'bin', 'tsc');
|
|
116
|
-
const args = [
|
|
147
|
+
const args = [
|
|
148
|
+
tscExec,
|
|
149
|
+
'--noEmit',
|
|
150
|
+
'--checkJs',
|
|
151
|
+
'--pretty',
|
|
152
|
+
path.join(tempDir, 'electron.d.ts'),
|
|
153
|
+
path.join(tempDir, 'ambient.d.ts'),
|
|
154
|
+
...chunk,
|
|
155
|
+
];
|
|
117
156
|
const { status, stderr, stdout } = await (0, helpers_1.spawnAsync)(process.execPath, args);
|
|
118
157
|
if (stderr) {
|
|
119
158
|
throw new Error(stderr);
|
|
@@ -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,cAAc;CACf,CAAC;AAEF,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"lint-markdown-ts-check.js","sourceRoot":"","sources":["../../bin/lint-markdown-ts-check.ts"],"names":[],"mappings":"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"}
|