@electron/lint-roller 1.2.0 → 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/.prettierignore +1 -0
- package/README.md +5 -0
- package/dist/bin/lint-markdown-standard.js +16 -17
- package/dist/bin/lint-markdown-standard.js.map +1 -1
- package/dist/bin/lint-markdown-ts-check.d.ts +2 -0
- package/dist/bin/lint-markdown-ts-check.js +166 -0
- package/dist/bin/lint-markdown-ts-check.js.map +1 -0
- package/dist/lib/helpers.d.ts +12 -0
- package/dist/lib/helpers.js +59 -0
- package/dist/lib/helpers.js.map +1 -0
- package/dist/lib/markdown.js +7 -9
- package/dist/lib/markdown.js.map +1 -1
- package/lib/helpers.ts +74 -0
- package/lib/markdown.ts +2 -4
- package/package.json +7 -2
package/.prettierignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
electron.d.ts
|
package/README.md
CHANGED
|
@@ -36,6 +36,11 @@ check external links with the `--fetch-external-links` option.
|
|
|
36
36
|
Markdown with `standard`, like `standard-markdown` does, but with better
|
|
37
37
|
detection of code blocks.
|
|
38
38
|
|
|
39
|
+
`electron-lint-markdown-ts-check` is a command to type check JS code blocks in
|
|
40
|
+
Markdown with `tsc`. Type checking can be disabled for specific code blocks
|
|
41
|
+
by adding `@ts-nocheck` to the info string, and specific lines can be ignored
|
|
42
|
+
by adding `@ts-ignore=[<line1>,<line2>]` to the info string.
|
|
43
|
+
|
|
39
44
|
## License
|
|
40
45
|
|
|
41
46
|
MIT
|
|
@@ -6,6 +6,7 @@ const path = require("node:path");
|
|
|
6
6
|
const minimist = require("minimist");
|
|
7
7
|
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
|
|
8
8
|
const vscode_uri_1 = require("vscode-uri");
|
|
9
|
+
const helpers_1 = require("../lib/helpers");
|
|
9
10
|
const markdown_1 = require("../lib/markdown");
|
|
10
11
|
const DISABLED_RULES = [
|
|
11
12
|
'no-labels',
|
|
@@ -15,19 +16,8 @@ const DISABLED_RULES = [
|
|
|
15
16
|
'no-unused-vars',
|
|
16
17
|
'n/no-callback-literal',
|
|
17
18
|
];
|
|
18
|
-
// Helper function to work around import issues with ESM module
|
|
19
|
-
// eslint-disable-next-line no-new-func
|
|
20
|
-
const dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
21
|
-
// From zeke/standard-markdown
|
|
22
|
-
function removeParensWrappingOrphanedObject(block) {
|
|
23
|
-
return block.replace(/^\(([{|[][\s\S]+[}|\]])\)$/gm, '$1');
|
|
24
|
-
}
|
|
25
|
-
// From zeke/standard-markdown
|
|
26
|
-
function wrapOrphanObjectInParens(block) {
|
|
27
|
-
return block.replace(/^([{|[][\s\S]+[}|\]])$/gm, '($1)');
|
|
28
|
-
}
|
|
29
19
|
async function main(workspaceRoot, globs, { fix = false, ignoreGlobs = [] }) {
|
|
30
|
-
const { default: standard } = await dynamicImport('standard');
|
|
20
|
+
const { default: standard } = await (0, helpers_1.dynamicImport)('standard');
|
|
31
21
|
const workspace = new markdown_1.DocsWorkspace(workspaceRoot, globs, ignoreGlobs);
|
|
32
22
|
let lastFilePath;
|
|
33
23
|
let totalErrors = 0;
|
|
@@ -53,7 +43,7 @@ async function main(workspaceRoot, globs, { fix = false, ignoreGlobs = [] }) {
|
|
|
53
43
|
continue;
|
|
54
44
|
}
|
|
55
45
|
const eslintDisable = `/* eslint-disable ${DISABLED_RULES.join(', ')} */`;
|
|
56
|
-
const results = await standard.lintText(`${eslintDisable}\n${wrapOrphanObjectInParens(codeBlock.value)}\n`, fix ? { fix: true } : undefined);
|
|
46
|
+
const results = await standard.lintText(`${eslintDisable}\n${(0, helpers_1.wrapOrphanObjectInParens)(codeBlock.value)}\n`, fix ? { fix: true } : undefined);
|
|
57
47
|
for (const result of results) {
|
|
58
48
|
totalErrors += result.errorCount + result.warningCount;
|
|
59
49
|
for (const message of result.messages) {
|
|
@@ -62,21 +52,30 @@ async function main(workspaceRoot, globs, { fix = false, ignoreGlobs = [] }) {
|
|
|
62
52
|
lastFilePath = filepath;
|
|
63
53
|
}
|
|
64
54
|
const line = codeBlock.position.start.line - 1;
|
|
65
|
-
const
|
|
55
|
+
const indent = codeBlock.position.start.column - 1;
|
|
56
|
+
const lineInfo = `${line + message.line}:${indent + message.column}: `.padEnd(10);
|
|
66
57
|
console.log(` ${lineInfo}${message.message}`);
|
|
67
58
|
}
|
|
68
59
|
if (fix && result.output) {
|
|
69
|
-
const
|
|
60
|
+
const position = codeBlock.position;
|
|
61
|
+
let newText = (0, helpers_1.removeParensWrappingOrphanedObject)(result.output.slice(`${eslintDisable}\n`.length));
|
|
62
|
+
// Code block might be indented - only indent non-blank lines
|
|
63
|
+
if (position.start.column > 1) {
|
|
64
|
+
newText = newText
|
|
65
|
+
.split('\n')
|
|
66
|
+
.map((line) => line.length ? line.padStart(line.length + position.start.column - 1) : line)
|
|
67
|
+
.join('\n');
|
|
68
|
+
}
|
|
70
69
|
// The code block position includes the surrounding code fence,
|
|
71
70
|
// so use the line numbers inside of the code fence. Note that
|
|
72
71
|
// the code block positions are 1-based, but Range uses 0-based
|
|
73
72
|
const range = {
|
|
74
73
|
start: {
|
|
75
|
-
line:
|
|
74
|
+
line: position.start.line,
|
|
76
75
|
character: 0,
|
|
77
76
|
},
|
|
78
77
|
end: {
|
|
79
|
-
line:
|
|
78
|
+
line: position.end.line - 2,
|
|
80
79
|
character: Number.POSITIVE_INFINITY,
|
|
81
80
|
},
|
|
82
81
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint-markdown-standard.js","sourceRoot":"","sources":["../../bin/lint-markdown-standard.ts"],"names":[],"mappings":";;;AAEA,8BAA8B;AAC9B,kCAAkC;AAElC,qCAAqC;AAErC,2FAAmF;AACnF,2CAAiC;AAEjC,8CAA+D;AAsB/D,MAAM,cAAc,GAAG;IACrB,WAAW;IACX,gBAAgB;IAChB,UAAU;IACV,uBAAuB;IACvB,gBAAgB;IAChB,uBAAuB;CACxB,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"lint-markdown-standard.js","sourceRoot":"","sources":["../../bin/lint-markdown-standard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const fs = require("node:fs");
|
|
5
|
+
const os = require("node:os");
|
|
6
|
+
const path = require("node:path");
|
|
7
|
+
const minimist = require("minimist");
|
|
8
|
+
const rimraf_1 = require("rimraf");
|
|
9
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
10
|
+
const helpers_1 = require("../lib/helpers");
|
|
11
|
+
const markdown_1 = require("../lib/markdown");
|
|
12
|
+
const ELECTRON_MODULES = [
|
|
13
|
+
'app',
|
|
14
|
+
'autoUpdater',
|
|
15
|
+
'contextBridge',
|
|
16
|
+
'crashReporter',
|
|
17
|
+
'dialog',
|
|
18
|
+
'BrowserWindow',
|
|
19
|
+
'ipcMain',
|
|
20
|
+
'ipcRenderer',
|
|
21
|
+
'Menu',
|
|
22
|
+
'MessageChannelMain',
|
|
23
|
+
'nativeImage',
|
|
24
|
+
'net',
|
|
25
|
+
'protocol',
|
|
26
|
+
'session',
|
|
27
|
+
'systemPreferences',
|
|
28
|
+
'Tray',
|
|
29
|
+
'utilityProcess',
|
|
30
|
+
'webFrameMain',
|
|
31
|
+
];
|
|
32
|
+
const NODE_IMPORTS = "const fs = require('node:fs'); const path = require('node:path')";
|
|
33
|
+
const DEFAULT_IMPORTS = `${NODE_IMPORTS}; const { ${ELECTRON_MODULES.join(', ')} } = require('electron')`;
|
|
34
|
+
// TODO(dsanders11): Refactor to make this script general purpose and
|
|
35
|
+
// not tied to Electron - will require passing in the list of modules
|
|
36
|
+
// as a CLI option, probably a file since there's a lot of info
|
|
37
|
+
async function main(workspaceRoot, globs, { ignoreGlobs = [] }) {
|
|
38
|
+
var _a, _b, _c;
|
|
39
|
+
const workspace = new markdown_1.DocsWorkspace(workspaceRoot, globs, ignoreGlobs);
|
|
40
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'electron-ts-check-'));
|
|
41
|
+
try {
|
|
42
|
+
const filenames = [];
|
|
43
|
+
const originalFilenames = new Map();
|
|
44
|
+
// Copy over the typings so that a relative path can be used
|
|
45
|
+
fs.copyFileSync(path.join(process.cwd(), 'electron.d.ts'), path.join(tempDir, 'electron.d.ts'));
|
|
46
|
+
let errors = false;
|
|
47
|
+
for (const document of await workspace.getAllMarkdownDocuments()) {
|
|
48
|
+
const uri = vscode_uri_1.URI.parse(document.uri);
|
|
49
|
+
const filepath = workspace.getWorkspaceRelativePath(uri);
|
|
50
|
+
const jsCodeBlocks = (await (0, markdown_1.getCodeBlocks)(document)).filter((code) => code.lang && ['javascript', 'js'].includes(code.lang.toLowerCase()));
|
|
51
|
+
for (const codeBlock of jsCodeBlocks) {
|
|
52
|
+
const line = codeBlock.position.start.line;
|
|
53
|
+
const indent = codeBlock.position.start.column - 1;
|
|
54
|
+
const tsNoCheck = (_a = codeBlock.meta) === null || _a === void 0 ? void 0 : _a.split(' ').includes('@ts-nocheck');
|
|
55
|
+
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(parseInt);
|
|
56
|
+
if (tsNoCheck && tsIgnoreLines) {
|
|
57
|
+
console.log(`${filepath}:${line}:${indent + 1}: Code block has both @ts-nocheck and @ts-ignore, they conflict`);
|
|
58
|
+
errors = true;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// Skip blocks with @ts-nocheck in their info string
|
|
62
|
+
if (tsNoCheck) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
// Skip empty code blocks
|
|
66
|
+
if (!codeBlock.value.trim()) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
// Blocks can have @ts-ignore=[1,10,50] in their info string
|
|
70
|
+
// (1-based lines) to insert an "// @ts-ignore" comment before
|
|
71
|
+
// specified lines, in order to ignore specific lines (like
|
|
72
|
+
// requires of extra modules) without skipping the whole block
|
|
73
|
+
const codeLines = codeBlock.value.split('\n');
|
|
74
|
+
for (const line of tsIgnoreLines !== null && tsIgnoreLines !== void 0 ? tsIgnoreLines : []) {
|
|
75
|
+
codeLines.splice(line - 1, 0, '// @ts-ignore');
|
|
76
|
+
}
|
|
77
|
+
// Indent the lines if necessary so that tsc output is accurate
|
|
78
|
+
const code = (0, helpers_1.wrapOrphanObjectInParens)(codeLines
|
|
79
|
+
.map((line) => (line.length ? line.padStart(line.length + indent) : line))
|
|
80
|
+
.join('\n'));
|
|
81
|
+
// If there are no require() lines, insert a default set of
|
|
82
|
+
// imports so that most snippets will have what they need.
|
|
83
|
+
// This isn't foolproof and might cause name conflicts
|
|
84
|
+
const imports = codeBlock.value.includes(' require(') ? '' : DEFAULT_IMPORTS;
|
|
85
|
+
const types = '/// <reference path="electron.d.ts" />';
|
|
86
|
+
// Insert the necessary number of blank lines so that the line
|
|
87
|
+
// numbers in output from tsc is accurate to the original file
|
|
88
|
+
const blankLines = '\n'.repeat(line - 3);
|
|
89
|
+
// Filename is unique since it is the name of the original Markdown
|
|
90
|
+
// file, with the starting line number of the codeblock appended
|
|
91
|
+
const filename = path.join(tempDir, `${filepath
|
|
92
|
+
.replace(new RegExp(path.sep.replace(/\\/g, '\\\\'), 'g'), '-')
|
|
93
|
+
.replace(/\./g, '-')}-${line}.js`);
|
|
94
|
+
fs.writeFileSync(filename, `// @ts-check\n${types}\n${imports}\n${blankLines}${code}\n`);
|
|
95
|
+
filenames.push(filename);
|
|
96
|
+
originalFilenames.set(filename, filepath);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
for (const chunk of (0, helpers_1.chunkFilenames)(filenames)) {
|
|
100
|
+
const tscExec = path.join(require.resolve('typescript'), '..', '..', 'bin', 'tsc');
|
|
101
|
+
const args = [tscExec, '--noEmit', '--checkJs', '--pretty', ...chunk];
|
|
102
|
+
const { status, stderr, stdout } = await (0, helpers_1.spawnAsync)(process.execPath, args);
|
|
103
|
+
if (stderr) {
|
|
104
|
+
throw new Error(stderr);
|
|
105
|
+
}
|
|
106
|
+
// Replace the temp file paths with the original source filename
|
|
107
|
+
let correctedOutput = stdout.replace(new RegExp(`${path.relative(process.cwd(), tempDir)}${path.sep}`.replace(/\\/g, path.posix.sep), 'g'), '');
|
|
108
|
+
if (correctedOutput.trim()) {
|
|
109
|
+
for (const [filename, originalFilename] of originalFilenames.entries()) {
|
|
110
|
+
correctedOutput = correctedOutput.replace(new RegExp(path.basename(filename), 'g'), originalFilename);
|
|
111
|
+
}
|
|
112
|
+
console.log(correctedOutput);
|
|
113
|
+
}
|
|
114
|
+
errors = errors || status !== 0;
|
|
115
|
+
}
|
|
116
|
+
return errors;
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
await (0, rimraf_1.rimraf)(tempDir);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function parseCommandLine() {
|
|
123
|
+
const showUsage = (arg) => {
|
|
124
|
+
if (!arg || arg.startsWith('-')) {
|
|
125
|
+
console.log('Usage: electron-lint-markdown-ts-check --root <dir> <globs> [-h|--help]' +
|
|
126
|
+
'[--ignore <globs>] [--ignore-path <path>]');
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
return true;
|
|
130
|
+
};
|
|
131
|
+
const opts = minimist(process.argv.slice(2), {
|
|
132
|
+
boolean: ['help'],
|
|
133
|
+
string: ['root', 'ignore', 'ignore-path'],
|
|
134
|
+
unknown: showUsage,
|
|
135
|
+
});
|
|
136
|
+
if (opts.help || !opts.root || !opts._.length)
|
|
137
|
+
showUsage();
|
|
138
|
+
return opts;
|
|
139
|
+
}
|
|
140
|
+
if (require.main === module) {
|
|
141
|
+
const opts = parseCommandLine();
|
|
142
|
+
if (opts.ignore) {
|
|
143
|
+
opts.ignore = Array.isArray(opts.ignore) ? opts.ignore : [opts.ignore];
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
opts.ignore = [];
|
|
147
|
+
}
|
|
148
|
+
if (opts['ignore-path']) {
|
|
149
|
+
const ignores = fs.readFileSync(path.resolve(opts['ignore-path']), { encoding: 'utf-8' });
|
|
150
|
+
for (const ignore of ignores.split('\n')) {
|
|
151
|
+
opts.ignore.push(ignore.trimEnd());
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
main(path.resolve(process.cwd(), opts.root), opts._, {
|
|
155
|
+
ignoreGlobs: opts.ignore,
|
|
156
|
+
})
|
|
157
|
+
.then((errors) => {
|
|
158
|
+
if (errors)
|
|
159
|
+
process.exit(1);
|
|
160
|
+
})
|
|
161
|
+
.catch((error) => {
|
|
162
|
+
console.error(error);
|
|
163
|
+
process.exit(1);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=lint-markdown-ts-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint-markdown-ts-check.js","sourceRoot":"","sources":["../../bin/lint-markdown-ts-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import * as childProcess from 'node:child_process';
|
|
3
|
+
export declare const dynamicImport: Function;
|
|
4
|
+
export declare function removeParensWrappingOrphanedObject(block: string): string;
|
|
5
|
+
export declare function wrapOrphanObjectInParens(block: string): string;
|
|
6
|
+
export type SpawnAsyncResult = {
|
|
7
|
+
stdout: string;
|
|
8
|
+
stderr: string;
|
|
9
|
+
status: number | null;
|
|
10
|
+
};
|
|
11
|
+
export declare function spawnAsync(command: string, args: string[], options?: childProcess.SpawnOptionsWithoutStdio | undefined): Promise<SpawnAsyncResult>;
|
|
12
|
+
export declare function chunkFilenames(filenames: string[], offset?: number): string[][];
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.chunkFilenames = exports.spawnAsync = exports.wrapOrphanObjectInParens = exports.removeParensWrappingOrphanedObject = exports.dynamicImport = void 0;
|
|
4
|
+
const childProcess = require("node:child_process");
|
|
5
|
+
const os = require("node:os");
|
|
6
|
+
// Helper function to work around import issues with ESM module
|
|
7
|
+
// eslint-disable-next-line no-new-func
|
|
8
|
+
exports.dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
9
|
+
// From zeke/standard-markdown
|
|
10
|
+
function removeParensWrappingOrphanedObject(block) {
|
|
11
|
+
return block.replace(/^\(([{|[][\s\S]+[}|\]])\)$/gm, '$1');
|
|
12
|
+
}
|
|
13
|
+
exports.removeParensWrappingOrphanedObject = removeParensWrappingOrphanedObject;
|
|
14
|
+
// From zeke/standard-markdown
|
|
15
|
+
function wrapOrphanObjectInParens(block) {
|
|
16
|
+
return block.replace(/^([{|[][\s\S]+[}|\]])$/gm, '($1)');
|
|
17
|
+
}
|
|
18
|
+
exports.wrapOrphanObjectInParens = wrapOrphanObjectInParens;
|
|
19
|
+
async function spawnAsync(command, args, options) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
try {
|
|
22
|
+
const stdio = { stdout: '', stderr: '' };
|
|
23
|
+
const spawned = childProcess.spawn(command, args, options || {});
|
|
24
|
+
spawned.stdout.on('data', (data) => {
|
|
25
|
+
stdio.stdout += data;
|
|
26
|
+
});
|
|
27
|
+
spawned.stderr.on('data', (data) => {
|
|
28
|
+
stdio.stderr += data;
|
|
29
|
+
});
|
|
30
|
+
spawned.on('exit', (code) => resolve(Object.assign(Object.assign({}, stdio), { status: code })));
|
|
31
|
+
spawned.on('error', (err) => reject(err));
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
reject(err);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
exports.spawnAsync = spawnAsync;
|
|
39
|
+
function chunkFilenames(filenames, offset = 0) {
|
|
40
|
+
// Windows has a max command line length of 2047 characters, so we can't
|
|
41
|
+
// provide too many filenames without going over that. To work around that,
|
|
42
|
+
// chunk up a list of filenames such that it won't go over that limit when
|
|
43
|
+
// used as args. Use a much higher limit on other platforms which will
|
|
44
|
+
// effectively be a no-op.
|
|
45
|
+
const MAX_FILENAME_ARGS_LENGTH = os.platform() === 'win32' ? 2047 - offset : 100 * 1024;
|
|
46
|
+
return filenames.reduce((chunkedFilenames, filename) => {
|
|
47
|
+
const currChunk = chunkedFilenames[chunkedFilenames.length - 1];
|
|
48
|
+
const currChunkLength = currChunk.reduce((totalLength, _filename) => totalLength + _filename.length + 1, 0);
|
|
49
|
+
if (currChunkLength + filename.length + 1 > MAX_FILENAME_ARGS_LENGTH) {
|
|
50
|
+
chunkedFilenames.push([filename]);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
currChunk.push(filename);
|
|
54
|
+
}
|
|
55
|
+
return chunkedFilenames;
|
|
56
|
+
}, [[]]);
|
|
57
|
+
}
|
|
58
|
+
exports.chunkFilenames = chunkFilenames;
|
|
59
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../lib/helpers.ts"],"names":[],"mappings":";;;AAAA,mDAAmD;AACnD,8BAA8B;AAE9B,+DAA+D;AAC/D,uCAAuC;AAC1B,QAAA,aAAa,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;AAEnF,8BAA8B;AAC9B,SAAgB,kCAAkC,CAAC,KAAa;IAC9D,OAAO,KAAK,CAAC,OAAO,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC;AAFD,gFAEC;AAED,8BAA8B;AAC9B,SAAgB,wBAAwB,CAAC,KAAa;IACpD,OAAO,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC;AAFD,4DAEC;AAQM,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,IAAc,EACd,OAA2D;IAE3D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI;YACF,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;YAEjE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACjC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;YACvB,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACjC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;YACvB,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,iCAAM,KAAK,KAAE,MAAM,EAAE,IAAI,IAAG,CAAC,CAAC;YAClE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;SAC3C;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC;SACb;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAxBD,gCAwBC;AAED,SAAgB,cAAc,CAAC,SAAmB,EAAE,SAAiB,CAAC;IACpE,wEAAwE;IACxE,2EAA2E;IAC3E,0EAA0E;IAC1E,sEAAsE;IACtE,0BAA0B;IAC1B,MAAM,wBAAwB,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;IAExF,OAAO,SAAS,CAAC,MAAM,CACrB,CAAC,gBAA4B,EAAE,QAAQ,EAAE,EAAE;QACzC,MAAM,SAAS,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChE,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CACtC,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAC9D,CAAC,CACF,CAAC;QACF,IAAI,eAAe,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,wBAAwB,EAAE;YACpE,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;SACnC;aAAM;YACL,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1B;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC,EACD,CAAC,EAAE,CAAC,CACL,CAAC;AACJ,CAAC;AAxBD,wCAwBC"}
|
package/dist/lib/markdown.js
CHANGED
|
@@ -15,9 +15,7 @@ const vscode_markdown_languageservice_1 = require("@dsanders11/vscode-markdown-l
|
|
|
15
15
|
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
16
16
|
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
|
|
17
17
|
const vscode_uri_1 = require("vscode-uri");
|
|
18
|
-
|
|
19
|
-
// eslint-disable-next-line no-new-func
|
|
20
|
-
const dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
18
|
+
const helpers_1 = require("./helpers");
|
|
21
19
|
// Helper function from `vscode-markdown-languageservice` codebase
|
|
22
20
|
function tryDecodeUri(str) {
|
|
23
21
|
try {
|
|
@@ -130,7 +128,7 @@ class MarkdownLinkComputer {
|
|
|
130
128
|
this.workspace = workspace;
|
|
131
129
|
}
|
|
132
130
|
async getAllLinks(document) {
|
|
133
|
-
const { fromMarkdown } = (await dynamicImport('mdast-util-from-markdown'));
|
|
131
|
+
const { fromMarkdown } = (await (0, helpers_1.dynamicImport)('mdast-util-from-markdown'));
|
|
134
132
|
const tree = fromMarkdown(document.getText());
|
|
135
133
|
const links = [
|
|
136
134
|
...(await __classPrivateFieldGet(this, _MarkdownLinkComputer_instances, "m", _MarkdownLinkComputer_getInlineLinks).call(this, document, tree)),
|
|
@@ -142,7 +140,7 @@ class MarkdownLinkComputer {
|
|
|
142
140
|
}
|
|
143
141
|
exports.MarkdownLinkComputer = MarkdownLinkComputer;
|
|
144
142
|
_MarkdownLinkComputer_instances = new WeakSet(), _MarkdownLinkComputer_getInlineLinks = async function _MarkdownLinkComputer_getInlineLinks(document, tree) {
|
|
145
|
-
const { visit } = (await dynamicImport('unist-util-visit'));
|
|
143
|
+
const { visit } = (await (0, helpers_1.dynamicImport)('unist-util-visit'));
|
|
146
144
|
const documentUri = vscode_uri_1.URI.parse(document.uri);
|
|
147
145
|
const links = [];
|
|
148
146
|
visit(tree, (node) => node.type === 'link', (node) => {
|
|
@@ -172,7 +170,7 @@ _MarkdownLinkComputer_instances = new WeakSet(), _MarkdownLinkComputer_getInline
|
|
|
172
170
|
});
|
|
173
171
|
return links;
|
|
174
172
|
}, _MarkdownLinkComputer_getReferenceLinks = async function _MarkdownLinkComputer_getReferenceLinks(document, tree) {
|
|
175
|
-
const { visit } = (await dynamicImport('unist-util-visit'));
|
|
173
|
+
const { visit } = (await (0, helpers_1.dynamicImport)('unist-util-visit'));
|
|
176
174
|
const links = [];
|
|
177
175
|
visit(tree, (node) => ['imageReference', 'linkReference'].includes(node.type), (node) => {
|
|
178
176
|
const link = node;
|
|
@@ -200,7 +198,7 @@ _MarkdownLinkComputer_instances = new WeakSet(), _MarkdownLinkComputer_getInline
|
|
|
200
198
|
});
|
|
201
199
|
return links;
|
|
202
200
|
}, _MarkdownLinkComputer_getLinkDefinitions = async function _MarkdownLinkComputer_getLinkDefinitions(document, tree) {
|
|
203
|
-
const { visit } = (await dynamicImport('unist-util-visit'));
|
|
201
|
+
const { visit } = (await (0, helpers_1.dynamicImport)('unist-util-visit'));
|
|
204
202
|
const documentUri = vscode_uri_1.URI.parse(document.uri);
|
|
205
203
|
const links = [];
|
|
206
204
|
visit(tree, (node) => node.type === 'definition', (node) => {
|
|
@@ -235,8 +233,8 @@ _MarkdownLinkComputer_instances = new WeakSet(), _MarkdownLinkComputer_getInline
|
|
|
235
233
|
return links;
|
|
236
234
|
};
|
|
237
235
|
async function getCodeBlocks(document) {
|
|
238
|
-
const { fromMarkdown } = (await dynamicImport('mdast-util-from-markdown'));
|
|
239
|
-
const { visit } = (await dynamicImport('unist-util-visit'));
|
|
236
|
+
const { fromMarkdown } = (await (0, helpers_1.dynamicImport)('mdast-util-from-markdown'));
|
|
237
|
+
const { visit } = (await (0, helpers_1.dynamicImport)('unist-util-visit'));
|
|
240
238
|
const tree = fromMarkdown(document.getText());
|
|
241
239
|
const codeBlocks = [];
|
|
242
240
|
visit(tree, (node) => node.type === 'code', (node) => {
|
package/dist/lib/markdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../lib/markdown.ts"],"names":[],"mappings":";;;;;;;;;AAAA,8BAA8B;AAC9B,kCAAkC;AAElC,6BAA6B;AAC7B,0CAA0C;AAC1C,iGAaqD;AACrD,iEAAuD;AACvD,2FAAkE;AAClE,2CAAiC;
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../lib/markdown.ts"],"names":[],"mappings":"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"}
|
package/lib/helpers.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import * as childProcess from 'node:child_process';
|
|
2
|
+
import * as os from 'node:os';
|
|
3
|
+
|
|
4
|
+
// Helper function to work around import issues with ESM module
|
|
5
|
+
// eslint-disable-next-line no-new-func
|
|
6
|
+
export const dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
7
|
+
|
|
8
|
+
// From zeke/standard-markdown
|
|
9
|
+
export function removeParensWrappingOrphanedObject(block: string) {
|
|
10
|
+
return block.replace(/^\(([{|[][\s\S]+[}|\]])\)$/gm, '$1');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// From zeke/standard-markdown
|
|
14
|
+
export function wrapOrphanObjectInParens(block: string) {
|
|
15
|
+
return block.replace(/^([{|[][\s\S]+[}|\]])$/gm, '($1)');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type SpawnAsyncResult = {
|
|
19
|
+
stdout: string;
|
|
20
|
+
stderr: string;
|
|
21
|
+
status: number | null;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export async function spawnAsync(
|
|
25
|
+
command: string,
|
|
26
|
+
args: string[],
|
|
27
|
+
options?: childProcess.SpawnOptionsWithoutStdio | undefined,
|
|
28
|
+
): Promise<SpawnAsyncResult> {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
try {
|
|
31
|
+
const stdio = { stdout: '', stderr: '' };
|
|
32
|
+
const spawned = childProcess.spawn(command, args, options || {});
|
|
33
|
+
|
|
34
|
+
spawned.stdout.on('data', (data) => {
|
|
35
|
+
stdio.stdout += data;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
spawned.stderr.on('data', (data) => {
|
|
39
|
+
stdio.stderr += data;
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
spawned.on('exit', (code) => resolve({ ...stdio, status: code }));
|
|
43
|
+
spawned.on('error', (err) => reject(err));
|
|
44
|
+
} catch (err) {
|
|
45
|
+
reject(err);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function chunkFilenames(filenames: string[], offset: number = 0): string[][] {
|
|
51
|
+
// Windows has a max command line length of 2047 characters, so we can't
|
|
52
|
+
// provide too many filenames without going over that. To work around that,
|
|
53
|
+
// chunk up a list of filenames such that it won't go over that limit when
|
|
54
|
+
// used as args. Use a much higher limit on other platforms which will
|
|
55
|
+
// effectively be a no-op.
|
|
56
|
+
const MAX_FILENAME_ARGS_LENGTH = os.platform() === 'win32' ? 2047 - offset : 100 * 1024;
|
|
57
|
+
|
|
58
|
+
return filenames.reduce(
|
|
59
|
+
(chunkedFilenames: string[][], filename) => {
|
|
60
|
+
const currChunk = chunkedFilenames[chunkedFilenames.length - 1];
|
|
61
|
+
const currChunkLength = currChunk.reduce(
|
|
62
|
+
(totalLength, _filename) => totalLength + _filename.length + 1,
|
|
63
|
+
0,
|
|
64
|
+
);
|
|
65
|
+
if (currChunkLength + filename.length + 1 > MAX_FILENAME_ARGS_LENGTH) {
|
|
66
|
+
chunkedFilenames.push([filename]);
|
|
67
|
+
} else {
|
|
68
|
+
currChunk.push(filename);
|
|
69
|
+
}
|
|
70
|
+
return chunkedFilenames;
|
|
71
|
+
},
|
|
72
|
+
[[]],
|
|
73
|
+
);
|
|
74
|
+
}
|
package/lib/markdown.ts
CHANGED
|
@@ -21,6 +21,8 @@ import { Emitter, Range } from 'vscode-languageserver';
|
|
|
21
21
|
import { TextDocument } from 'vscode-languageserver-textdocument';
|
|
22
22
|
import { URI } from 'vscode-uri';
|
|
23
23
|
|
|
24
|
+
import { dynamicImport } from './helpers';
|
|
25
|
+
|
|
24
26
|
import type { Code, Definition, ImageReference, Link, LinkReference } from 'mdast';
|
|
25
27
|
import type { fromMarkdown as FromMarkdownFunction } from 'mdast-util-from-markdown';
|
|
26
28
|
import type { Node, Position } from 'unist';
|
|
@@ -28,10 +30,6 @@ import type { visit as VisitFunction } from 'unist-util-visit';
|
|
|
28
30
|
|
|
29
31
|
export type { Code };
|
|
30
32
|
|
|
31
|
-
// Helper function to work around import issues with ESM modules and ts-node
|
|
32
|
-
// eslint-disable-next-line no-new-func
|
|
33
|
-
const dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
34
|
-
|
|
35
33
|
// Helper function from `vscode-markdown-languageservice` codebase
|
|
36
34
|
function tryDecodeUri(str: string): string {
|
|
37
35
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@electron/lint-roller",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Markdown linting helpers for Electron org repos",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=14.0.0"
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
"bin": {
|
|
9
9
|
"electron-markdownlint": "./dist/bin/markdownlint-cli-wrapper.js",
|
|
10
10
|
"electron-lint-markdown-links": "./dist/bin/lint-markdown-links.js",
|
|
11
|
-
"electron-lint-markdown-standard": "./dist/bin/lint-markdown-standard.js"
|
|
11
|
+
"electron-lint-markdown-standard": "./dist/bin/lint-markdown-standard.js",
|
|
12
|
+
"electron-lint-markdown-ts-check": "./dist/bin/lint-markdown-ts-check.js"
|
|
12
13
|
},
|
|
13
14
|
"directories": {
|
|
14
15
|
"lib": "lib"
|
|
@@ -60,10 +61,14 @@
|
|
|
60
61
|
"mdast-util-from-markdown": "^1.3.0",
|
|
61
62
|
"minimist": "^1.2.8",
|
|
62
63
|
"node-fetch": "^2.6.9",
|
|
64
|
+
"rimraf": "^4.4.1",
|
|
63
65
|
"standard": "^17.0.0",
|
|
64
66
|
"unist-util-visit": "^4.1.2",
|
|
65
67
|
"vscode-languageserver": "^8.1.0",
|
|
66
68
|
"vscode-languageserver-textdocument": "^1.0.8",
|
|
67
69
|
"vscode-uri": "^3.0.7"
|
|
70
|
+
},
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"typescript": "^4.5.5"
|
|
68
73
|
}
|
|
69
74
|
}
|