@electron/lint-roller 2.4.0 → 3.1.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 +2 -6
- package/dist/bin/lint-markdown-api-history.js +90 -70
- package/dist/bin/lint-markdown-api-history.js.map +1 -1
- package/dist/bin/lint-markdown-links.js +76 -47
- package/dist/bin/lint-markdown-links.js.map +1 -1
- package/dist/bin/lint-markdown-standard.js +55 -36
- package/dist/bin/lint-markdown-standard.js.map +1 -1
- package/dist/bin/lint-markdown-ts-check.js +66 -47
- package/dist/bin/lint-markdown-ts-check.js.map +1 -1
- package/dist/lib/helpers.js +14 -23
- package/dist/lib/helpers.js.map +1 -1
- package/dist/lib/markdown.d.ts +21 -1
- package/dist/lib/markdown.js +122 -137
- package/dist/lib/markdown.js.map +1 -1
- package/lib/markdown.ts +83 -124
- package/markdownlint-rules/emd002.mjs +9 -11
- package/markdownlint-rules/emd003.mjs +9 -8
- package/markdownlint-rules/emd004.mjs +31 -0
- package/markdownlint-rules/index.mjs +5 -0
- package/package.json +19 -25
- package/dist/bin/markdownlint-cli-wrapper.d.ts +0 -2
- package/dist/bin/markdownlint-cli-wrapper.js +0 -16
- package/dist/bin/markdownlint-cli-wrapper.js.map +0 -1
- package/markdownlint-rules/emd002.js +0 -9908
- package/markdownlint-rules/emd003.js +0 -9905
- package/markdownlint-rules/emd004.js +0 -30
- package/markdownlint-rules/index.js +0 -5
package/dist/lib/markdown.js
CHANGED
|
@@ -1,27 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const path = require("node:path");
|
|
12
|
-
const glob = require("glob");
|
|
13
|
-
const MarkdownIt = require("markdown-it");
|
|
14
|
-
const vscode_markdown_languageservice_1 = require("@dsanders11/vscode-markdown-languageservice");
|
|
15
|
-
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
16
|
-
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
|
|
17
|
-
const vscode_uri_1 = require("vscode-uri");
|
|
18
|
-
const helpers_1 = require("./helpers");
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import * as glob from 'glob';
|
|
4
|
+
import MarkdownIt from 'markdown-it';
|
|
5
|
+
import { githubSlugifier, resolveInternalDocumentLink, HrefKind, MdLinkKind, } from '@dsanders11/vscode-markdown-languageservice';
|
|
6
|
+
import { visit } from 'unist-util-visit';
|
|
7
|
+
import { fromMarkdown } from 'mdast-util-from-markdown';
|
|
8
|
+
import { Emitter } from 'vscode-languageserver';
|
|
9
|
+
import { TextDocument } from 'vscode-languageserver-textdocument';
|
|
10
|
+
import { URI } from 'vscode-uri';
|
|
19
11
|
// Helper function from `vscode-markdown-languageservice` codebase
|
|
20
12
|
function tryDecodeUri(str) {
|
|
21
13
|
try {
|
|
22
14
|
return decodeURI(str);
|
|
23
15
|
}
|
|
24
|
-
catch
|
|
16
|
+
catch {
|
|
25
17
|
return str;
|
|
26
18
|
}
|
|
27
19
|
}
|
|
@@ -29,14 +21,14 @@ function tryDecodeUri(str) {
|
|
|
29
21
|
function createHref(sourceDocUri, link, workspace) {
|
|
30
22
|
if (/^[a-z-][a-z-]+:/i.test(link)) {
|
|
31
23
|
// Looks like a uri
|
|
32
|
-
return { kind:
|
|
24
|
+
return { kind: HrefKind.External, uri: URI.parse(tryDecodeUri(link)) };
|
|
33
25
|
}
|
|
34
|
-
const resolved =
|
|
26
|
+
const resolved = resolveInternalDocumentLink(sourceDocUri, link, workspace);
|
|
35
27
|
if (!resolved) {
|
|
36
28
|
return undefined;
|
|
37
29
|
}
|
|
38
30
|
return {
|
|
39
|
-
kind:
|
|
31
|
+
kind: HrefKind.Internal,
|
|
40
32
|
path: resolved.resource,
|
|
41
33
|
fragment: resolved.linkFragment,
|
|
42
34
|
};
|
|
@@ -51,39 +43,30 @@ function positionToRange(position) {
|
|
|
51
43
|
};
|
|
52
44
|
}
|
|
53
45
|
const mdIt = MarkdownIt({ html: true });
|
|
54
|
-
class MarkdownParser {
|
|
55
|
-
|
|
56
|
-
this.slugifier = vscode_markdown_languageservice_1.githubSlugifier;
|
|
57
|
-
}
|
|
46
|
+
export class MarkdownParser {
|
|
47
|
+
slugifier = githubSlugifier;
|
|
58
48
|
async tokenize(document) {
|
|
59
49
|
return mdIt.parse(document.getText(), {});
|
|
60
50
|
}
|
|
61
51
|
}
|
|
62
|
-
|
|
63
|
-
|
|
52
|
+
export class DocsWorkspace {
|
|
53
|
+
documentCache;
|
|
54
|
+
root;
|
|
55
|
+
globs;
|
|
56
|
+
ignoreGlobs;
|
|
64
57
|
constructor(root, globs, ignoreGlobs = []) {
|
|
65
|
-
//
|
|
66
|
-
// These events are defined to fulfill the interface, but are never emitted
|
|
67
|
-
// by this implementation since it's not meant for watching a workspace
|
|
68
|
-
//
|
|
69
|
-
_DocsWorkspace_onDidChangeMarkdownDocument.set(this, new vscode_languageserver_1.Emitter());
|
|
70
|
-
this.onDidChangeMarkdownDocument = __classPrivateFieldGet(this, _DocsWorkspace_onDidChangeMarkdownDocument, "f").event;
|
|
71
|
-
_DocsWorkspace_onDidCreateMarkdownDocument.set(this, new vscode_languageserver_1.Emitter());
|
|
72
|
-
this.onDidCreateMarkdownDocument = __classPrivateFieldGet(this, _DocsWorkspace_onDidCreateMarkdownDocument, "f").event;
|
|
73
|
-
_DocsWorkspace_onDidDeleteMarkdownDocument.set(this, new vscode_languageserver_1.Emitter());
|
|
74
|
-
this.onDidDeleteMarkdownDocument = __classPrivateFieldGet(this, _DocsWorkspace_onDidDeleteMarkdownDocument, "f").event;
|
|
75
58
|
this.documentCache = new Map();
|
|
76
59
|
this.root = root;
|
|
77
60
|
this.globs = globs;
|
|
78
61
|
this.ignoreGlobs = ignoreGlobs;
|
|
79
62
|
}
|
|
80
63
|
get workspaceFolders() {
|
|
81
|
-
return [
|
|
64
|
+
return [URI.file(this.root)];
|
|
82
65
|
}
|
|
83
66
|
async getAllMarkdownDocuments() {
|
|
84
67
|
const files = this.globs.flatMap((pattern) => glob.sync(pattern, { ignore: this.ignoreGlobs, absolute: true, cwd: this.root }));
|
|
85
68
|
for (const file of files) {
|
|
86
|
-
const document =
|
|
69
|
+
const document = TextDocument.create(URI.file(file).toString(), 'markdown', 1, fs.readFileSync(file, 'utf8'));
|
|
87
70
|
this.documentCache.set(file, document);
|
|
88
71
|
}
|
|
89
72
|
return this.documentCache.values();
|
|
@@ -100,10 +83,10 @@ class DocsWorkspace {
|
|
|
100
83
|
async openMarkdownDocument(resource) {
|
|
101
84
|
if (!this.documentCache.has(resource.fsPath)) {
|
|
102
85
|
try {
|
|
103
|
-
const document =
|
|
86
|
+
const document = TextDocument.create(resource.toString(), 'markdown', 1, fs.readFileSync(resource.fsPath, 'utf8'));
|
|
104
87
|
this.documentCache.set(resource.fsPath, document);
|
|
105
88
|
}
|
|
106
|
-
catch
|
|
89
|
+
catch {
|
|
107
90
|
return undefined;
|
|
108
91
|
}
|
|
109
92
|
}
|
|
@@ -119,128 +102,130 @@ class DocsWorkspace {
|
|
|
119
102
|
async readDirectory() {
|
|
120
103
|
throw new Error('Not implemented');
|
|
121
104
|
}
|
|
105
|
+
//
|
|
106
|
+
// These events are defined to fulfill the interface, but are never emitted
|
|
107
|
+
// by this implementation since it's not meant for watching a workspace
|
|
108
|
+
//
|
|
109
|
+
#onDidChangeMarkdownDocument = new Emitter();
|
|
110
|
+
onDidChangeMarkdownDocument = this.#onDidChangeMarkdownDocument.event;
|
|
111
|
+
#onDidCreateMarkdownDocument = new Emitter();
|
|
112
|
+
onDidCreateMarkdownDocument = this.#onDidCreateMarkdownDocument.event;
|
|
113
|
+
#onDidDeleteMarkdownDocument = new Emitter();
|
|
114
|
+
onDidDeleteMarkdownDocument = this.#onDidDeleteMarkdownDocument.event;
|
|
122
115
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
class MarkdownLinkComputer {
|
|
116
|
+
export class MarkdownLinkComputer {
|
|
117
|
+
workspace;
|
|
126
118
|
constructor(workspace) {
|
|
127
|
-
_MarkdownLinkComputer_instances.add(this);
|
|
128
119
|
this.workspace = workspace;
|
|
129
120
|
}
|
|
130
121
|
async getAllLinks(document) {
|
|
131
|
-
const { fromMarkdown } = (await (0, helpers_1.dynamicImport)('mdast-util-from-markdown'));
|
|
132
122
|
const tree = fromMarkdown(document.getText());
|
|
133
123
|
const links = [
|
|
134
|
-
...(await
|
|
135
|
-
...(await
|
|
136
|
-
...(await
|
|
124
|
+
...(await this.#getInlineLinks(document, tree)),
|
|
125
|
+
...(await this.#getReferenceLinks(document, tree)),
|
|
126
|
+
...(await this.#getLinkDefinitions(document, tree)),
|
|
137
127
|
];
|
|
138
128
|
return links;
|
|
139
129
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
},
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
return links;
|
|
172
|
-
}, _MarkdownLinkComputer_getReferenceLinks = async function _MarkdownLinkComputer_getReferenceLinks(document, tree) {
|
|
173
|
-
const { visit } = (await (0, helpers_1.dynamicImport)('unist-util-visit'));
|
|
174
|
-
const links = [];
|
|
175
|
-
visit(tree, (node) => ['imageReference', 'linkReference'].includes(node.type), (node) => {
|
|
176
|
-
const link = node;
|
|
177
|
-
const range = positionToRange(link.position);
|
|
178
|
-
// NOTE - These haven't been implemented properly, but their
|
|
179
|
-
// values aren't used for the link linting use-case
|
|
180
|
-
const targetRange = range;
|
|
181
|
-
const hrefRange = range;
|
|
182
|
-
links.push({
|
|
183
|
-
kind: vscode_markdown_languageservice_1.MdLinkKind.Link,
|
|
184
|
-
href: {
|
|
185
|
-
kind: vscode_markdown_languageservice_1.HrefKind.Reference,
|
|
186
|
-
ref: link.label,
|
|
187
|
-
},
|
|
188
|
-
source: {
|
|
189
|
-
hrefText: link.label,
|
|
190
|
-
resource: vscode_uri_1.URI.parse(document.uri),
|
|
191
|
-
range,
|
|
192
|
-
targetRange,
|
|
193
|
-
hrefRange,
|
|
194
|
-
fragmentRange: undefined,
|
|
195
|
-
pathText: link.label,
|
|
196
|
-
},
|
|
130
|
+
async #getInlineLinks(document, tree) {
|
|
131
|
+
const documentUri = URI.parse(document.uri);
|
|
132
|
+
const links = [];
|
|
133
|
+
visit(tree, 'link', (node) => {
|
|
134
|
+
const link = node;
|
|
135
|
+
const href = createHref(documentUri, link.url, this.workspace);
|
|
136
|
+
if (href) {
|
|
137
|
+
const range = positionToRange(link.position);
|
|
138
|
+
// NOTE - These haven't been implemented properly, but their
|
|
139
|
+
// values aren't used for the link linting use-case
|
|
140
|
+
const targetRange = range;
|
|
141
|
+
const hrefRange = range;
|
|
142
|
+
const fragmentRange = undefined;
|
|
143
|
+
links.push({
|
|
144
|
+
kind: MdLinkKind.Link,
|
|
145
|
+
href,
|
|
146
|
+
source: {
|
|
147
|
+
hrefText: link.url,
|
|
148
|
+
resource: documentUri,
|
|
149
|
+
range,
|
|
150
|
+
targetRange,
|
|
151
|
+
hrefRange,
|
|
152
|
+
fragmentRange,
|
|
153
|
+
pathText: link.url.split('#')[0],
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
}
|
|
197
157
|
});
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
const definition = node;
|
|
206
|
-
const href = createHref(documentUri, definition.url, this.workspace);
|
|
207
|
-
if (href) {
|
|
208
|
-
const range = positionToRange(definition.position);
|
|
158
|
+
return links;
|
|
159
|
+
}
|
|
160
|
+
async #getReferenceLinks(document, tree) {
|
|
161
|
+
const links = [];
|
|
162
|
+
visit(tree, ['imageReference', 'linkReference'], (node) => {
|
|
163
|
+
const link = node;
|
|
164
|
+
const range = positionToRange(link.position);
|
|
209
165
|
// NOTE - These haven't been implemented properly, but their
|
|
210
166
|
// values aren't used for the link linting use-case
|
|
211
167
|
const targetRange = range;
|
|
212
168
|
const hrefRange = range;
|
|
213
|
-
const fragmentRange = undefined;
|
|
214
169
|
links.push({
|
|
215
|
-
kind:
|
|
216
|
-
href
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
text: definition.label,
|
|
170
|
+
kind: MdLinkKind.Link,
|
|
171
|
+
href: {
|
|
172
|
+
kind: HrefKind.Reference,
|
|
173
|
+
ref: link.label,
|
|
220
174
|
},
|
|
221
175
|
source: {
|
|
222
|
-
hrefText:
|
|
223
|
-
resource:
|
|
176
|
+
hrefText: link.label,
|
|
177
|
+
resource: URI.parse(document.uri),
|
|
224
178
|
range,
|
|
225
179
|
targetRange,
|
|
226
180
|
hrefRange,
|
|
227
|
-
fragmentRange,
|
|
228
|
-
pathText:
|
|
181
|
+
fragmentRange: undefined,
|
|
182
|
+
pathText: link.label,
|
|
229
183
|
},
|
|
230
184
|
});
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
185
|
+
});
|
|
186
|
+
return links;
|
|
187
|
+
}
|
|
188
|
+
async #getLinkDefinitions(document, tree) {
|
|
189
|
+
const documentUri = URI.parse(document.uri);
|
|
190
|
+
const links = [];
|
|
191
|
+
visit(tree, 'definition', (node) => {
|
|
192
|
+
const definition = node;
|
|
193
|
+
const href = createHref(documentUri, definition.url, this.workspace);
|
|
194
|
+
if (href) {
|
|
195
|
+
const range = positionToRange(definition.position);
|
|
196
|
+
// NOTE - These haven't been implemented properly, but their
|
|
197
|
+
// values aren't used for the link linting use-case
|
|
198
|
+
const targetRange = range;
|
|
199
|
+
const hrefRange = range;
|
|
200
|
+
const fragmentRange = undefined;
|
|
201
|
+
links.push({
|
|
202
|
+
kind: MdLinkKind.Definition,
|
|
203
|
+
href,
|
|
204
|
+
ref: {
|
|
205
|
+
range,
|
|
206
|
+
text: definition.label,
|
|
207
|
+
},
|
|
208
|
+
source: {
|
|
209
|
+
hrefText: definition.url,
|
|
210
|
+
resource: documentUri,
|
|
211
|
+
range,
|
|
212
|
+
targetRange,
|
|
213
|
+
hrefRange,
|
|
214
|
+
fragmentRange,
|
|
215
|
+
pathText: definition.url.split('#')[0],
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
return links;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
export async function getCodeBlocks(content) {
|
|
238
224
|
const tree = fromMarkdown(content);
|
|
239
225
|
const codeBlocks = [];
|
|
240
|
-
visit(tree,
|
|
226
|
+
visit(tree, 'code', (node) => {
|
|
241
227
|
codeBlocks.push(node);
|
|
242
228
|
});
|
|
243
229
|
return codeBlocks;
|
|
244
230
|
}
|
|
245
|
-
exports.getCodeBlocks = getCodeBlocks;
|
|
246
231
|
//# sourceMappingURL=markdown.js.map
|
package/dist/lib/markdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../lib/markdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../lib/markdown.ts"],"names":[],"mappings":"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"}
|