@electron/lint-roller 3.1.3 → 3.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.
|
@@ -57,10 +57,10 @@ async function fetchExternalLink(link, checkRedirects = false) {
|
|
|
57
57
|
}
|
|
58
58
|
return false;
|
|
59
59
|
}
|
|
60
|
-
async function main(workspaceRoot, globs, { allowAbsoluteLinks = false, fetchExternalLinks = false, checkRedirects = false, ignoreGlobs = [], }) {
|
|
61
|
-
const workspace = new DocsWorkspace(workspaceRoot, globs, ignoreGlobs);
|
|
60
|
+
async function main(workspaceRoot, globs, { allowAbsoluteLinks = false, fetchExternalLinks = false, checkRedirects = false, ignoreGlobs = [], resourceRoot, }) {
|
|
61
|
+
const workspace = new DocsWorkspace(workspaceRoot, globs, ignoreGlobs, resourceRoot);
|
|
62
62
|
const parser = new MarkdownParser();
|
|
63
|
-
const linkComputer = new MarkdownLinkComputer(workspace);
|
|
63
|
+
const linkComputer = new MarkdownLinkComputer(workspace, resourceRoot);
|
|
64
64
|
const languageService = createLanguageService({
|
|
65
65
|
workspace,
|
|
66
66
|
parser,
|
|
@@ -113,7 +113,7 @@ async function main(workspaceRoot, globs, { allowAbsoluteLinks = false, fetchExt
|
|
|
113
113
|
function parseCommandLine() {
|
|
114
114
|
const showUsage = () => {
|
|
115
115
|
console.log('Usage: lint-roller-markdown-links [--root <dir>] <globs> [-h|--help] [--allow-absolute-links]' +
|
|
116
|
-
'[--fetch-external-links] [--check-redirects] [--ignore <globs>]');
|
|
116
|
+
'[--fetch-external-links] [--check-redirects] [--ignore <globs>] [--resource-root <dir>]');
|
|
117
117
|
process.exit(1);
|
|
118
118
|
};
|
|
119
119
|
try {
|
|
@@ -132,6 +132,9 @@ function parseCommandLine() {
|
|
|
132
132
|
root: {
|
|
133
133
|
type: 'string',
|
|
134
134
|
},
|
|
135
|
+
'resource-root': {
|
|
136
|
+
type: 'string',
|
|
137
|
+
},
|
|
135
138
|
ignore: {
|
|
136
139
|
type: 'string',
|
|
137
140
|
multiple: true,
|
|
@@ -174,6 +177,9 @@ if ((await fs.promises.realpath(process.argv[1])) === fileURLToPath(import.meta.
|
|
|
174
177
|
fetchExternalLinks: opts['fetch-external-links'],
|
|
175
178
|
checkRedirects: opts['check-redirects'],
|
|
176
179
|
ignoreGlobs: opts.ignore,
|
|
180
|
+
resourceRoot: opts['resource-root']
|
|
181
|
+
? path.resolve(process.cwd(), opts['resource-root'])
|
|
182
|
+
: undefined,
|
|
177
183
|
})
|
|
178
184
|
.then((errors) => {
|
|
179
185
|
if (errors)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint-markdown-links.js","sourceRoot":"","sources":["../../bin/lint-markdown-links.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EACL,qBAAqB,EACrB,eAAe,EAGf,QAAQ,GACT,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzF,MAAM,UAAU;IACL,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC;IAE9B,GAAG,KAAU,CAAC;CACf;AAED,MAAM,iBAAiB,GAAsB;IAC3C,WAAW,EAAE,EAAE;IACf,gCAAgC,EAAE,eAAe,CAAC,KAAK;IACvD,iBAAiB,EAAE,eAAe,CAAC,KAAK;IACxC,qBAAqB,EAAE,eAAe,CAAC,KAAK;IAC5C,iCAAiC,EAAE,eAAe,CAAC,KAAK;IACxD,kBAAkB,EAAE,eAAe,CAAC,KAAK;IACzC,6BAA6B,EAAE,eAAe,CAAC,KAAK;CACrD,CAAC;AAEF,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,cAAc,GAAG,KAAK;IACnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE;YACjC,OAAO,EAAE;gBACP,YAAY,EACV,2HAA2H;gBAC7H,MAAM,EAAE,4EAA4E;gBACpF,iBAAiB,EAAE,gBAAgB;gBACnC,iBAAiB,EAAE,mBAAmB;aACvC;SACF,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,IAAI,cAAc,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM,CAAC,QAAQ,GAAG,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAE3C,yDAAyD;gBACzD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,QAAQ,CAAC,GAAG,CAAC;gBACvD,MAAM,qBAAqB,GAAG,GAAG,IAAI,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC;gBAE1D,IAAI,CAAC,WAAW,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC3C,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;
|
|
1
|
+
{"version":3,"file":"lint-markdown-links.js","sourceRoot":"","sources":["../../bin/lint-markdown-links.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/markdown.d.ts
CHANGED
|
@@ -33,10 +33,12 @@ export declare class DocsWorkspace implements IWorkspace {
|
|
|
33
33
|
readonly root: string;
|
|
34
34
|
readonly globs: string[];
|
|
35
35
|
readonly ignoreGlobs: string[];
|
|
36
|
-
|
|
36
|
+
readonly resourceRoot?: string;
|
|
37
|
+
constructor(root: string, globs: string[], ignoreGlobs?: string[], resourceRoot?: string);
|
|
37
38
|
get workspaceFolders(): URI[];
|
|
38
39
|
getAllMarkdownDocuments(): Promise<Iterable<TextDocument>>;
|
|
39
40
|
hasMarkdownDocument(resource: URI): boolean;
|
|
41
|
+
getResourceRootRelativePath(resource: URI): string;
|
|
40
42
|
getWorkspaceRelativePath(resource: URI): string;
|
|
41
43
|
openMarkdownDocument(resource: URI): Promise<TextDocument | undefined>;
|
|
42
44
|
stat(resource: URI): Promise<FileStat | undefined>;
|
|
@@ -48,7 +50,8 @@ export declare class DocsWorkspace implements IWorkspace {
|
|
|
48
50
|
export declare class MarkdownLinkComputer implements IMdLinkComputer {
|
|
49
51
|
#private;
|
|
50
52
|
private readonly workspace;
|
|
51
|
-
|
|
53
|
+
private readonly resourceRoot?;
|
|
54
|
+
constructor(workspace: IWorkspace, resourceRoot?: string);
|
|
52
55
|
getAllLinks(document: ITextDocument): Promise<MdLink[]>;
|
|
53
56
|
}
|
|
54
57
|
export declare function getCodeBlocks(content: string): Promise<Code[]>;
|
package/dist/lib/markdown.js
CHANGED
|
@@ -18,12 +18,23 @@ function tryDecodeUri(str) {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
// Helper function from `vscode-markdown-languageservice` codebase
|
|
21
|
-
function createHref(sourceDocUri, link, workspace) {
|
|
21
|
+
function createHref(sourceDocUri, link, workspace, resourceRoot) {
|
|
22
22
|
if (/^[a-z-][a-z-]+:/i.test(link)) {
|
|
23
23
|
// Looks like a uri
|
|
24
24
|
return { kind: HrefKind.External, uri: URI.parse(tryDecodeUri(link)) };
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
let resolved = resolveInternalDocumentLink(sourceDocUri, link, workspace);
|
|
27
|
+
// If it's an absolute link that doesn't resolve to a valid path, check if it's within the resource root
|
|
28
|
+
if (resolved &&
|
|
29
|
+
!fs.existsSync(resolved.resource.fsPath) &&
|
|
30
|
+
link.startsWith('/') &&
|
|
31
|
+
resourceRoot) {
|
|
32
|
+
const absolutePath = path.join(resourceRoot, link);
|
|
33
|
+
if (fs.existsSync(absolutePath)) {
|
|
34
|
+
link = path.relative(path.dirname(sourceDocUri.fsPath), absolutePath);
|
|
35
|
+
resolved = resolveInternalDocumentLink(sourceDocUri, link, workspace);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
27
38
|
if (!resolved) {
|
|
28
39
|
return undefined;
|
|
29
40
|
}
|
|
@@ -54,11 +65,13 @@ export class DocsWorkspace {
|
|
|
54
65
|
root;
|
|
55
66
|
globs;
|
|
56
67
|
ignoreGlobs;
|
|
57
|
-
|
|
68
|
+
resourceRoot;
|
|
69
|
+
constructor(root, globs, ignoreGlobs = [], resourceRoot) {
|
|
58
70
|
this.documentCache = new Map();
|
|
59
71
|
this.root = root;
|
|
60
72
|
this.globs = globs;
|
|
61
73
|
this.ignoreGlobs = ignoreGlobs;
|
|
74
|
+
this.resourceRoot = resourceRoot;
|
|
62
75
|
}
|
|
63
76
|
get workspaceFolders() {
|
|
64
77
|
return [URI.file(this.root)];
|
|
@@ -77,6 +90,9 @@ export class DocsWorkspace {
|
|
|
77
90
|
!path.isAbsolute(relativePath) &&
|
|
78
91
|
fs.existsSync(resource.fsPath));
|
|
79
92
|
}
|
|
93
|
+
getResourceRootRelativePath(resource) {
|
|
94
|
+
return path.relative(path.resolve(this.resourceRoot || this.root), resource.fsPath);
|
|
95
|
+
}
|
|
80
96
|
getWorkspaceRelativePath(resource) {
|
|
81
97
|
return path.relative(path.resolve(this.root), resource.fsPath);
|
|
82
98
|
}
|
|
@@ -93,11 +109,20 @@ export class DocsWorkspace {
|
|
|
93
109
|
return this.documentCache.get(resource.fsPath);
|
|
94
110
|
}
|
|
95
111
|
async stat(resource) {
|
|
96
|
-
if (this.hasMarkdownDocument(resource)) {
|
|
112
|
+
if (!this.hasMarkdownDocument(resource)) {
|
|
113
|
+
// If it's not a markdown document, check if it's within the resource root
|
|
114
|
+
const relativePath = this.getResourceRootRelativePath(resource);
|
|
115
|
+
if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
97
120
|
const stats = fs.statSync(resource.fsPath);
|
|
98
121
|
return { isDirectory: stats.isDirectory() };
|
|
99
122
|
}
|
|
100
|
-
|
|
123
|
+
catch {
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
101
126
|
}
|
|
102
127
|
async readDirectory() {
|
|
103
128
|
throw new Error('Not implemented');
|
|
@@ -115,8 +140,10 @@ export class DocsWorkspace {
|
|
|
115
140
|
}
|
|
116
141
|
export class MarkdownLinkComputer {
|
|
117
142
|
workspace;
|
|
118
|
-
|
|
143
|
+
resourceRoot;
|
|
144
|
+
constructor(workspace, resourceRoot) {
|
|
119
145
|
this.workspace = workspace;
|
|
146
|
+
this.resourceRoot = resourceRoot;
|
|
120
147
|
}
|
|
121
148
|
async getAllLinks(document) {
|
|
122
149
|
const tree = fromMarkdown(document.getText());
|
|
@@ -130,9 +157,9 @@ export class MarkdownLinkComputer {
|
|
|
130
157
|
async #getInlineLinks(document, tree) {
|
|
131
158
|
const documentUri = URI.parse(document.uri);
|
|
132
159
|
const links = [];
|
|
133
|
-
visit(tree, 'link', (node) => {
|
|
160
|
+
visit(tree, ['image', 'link'], (node) => {
|
|
134
161
|
const link = node;
|
|
135
|
-
const href = createHref(documentUri, link.url, this.workspace);
|
|
162
|
+
const href = createHref(documentUri, link.url, this.workspace, this.resourceRoot);
|
|
136
163
|
if (href) {
|
|
137
164
|
const range = positionToRange(link.position);
|
|
138
165
|
// NOTE - These haven't been implemented properly, but their
|
|
@@ -190,7 +217,7 @@ export class MarkdownLinkComputer {
|
|
|
190
217
|
const links = [];
|
|
191
218
|
visit(tree, 'definition', (node) => {
|
|
192
219
|
const definition = node;
|
|
193
|
-
const href = createHref(documentUri, definition.url, this.workspace);
|
|
220
|
+
const href = createHref(documentUri, definition.url, this.workspace, this.resourceRoot);
|
|
194
221
|
if (href) {
|
|
195
222
|
const range = positionToRange(definition.position);
|
|
196
223
|
// NOTE - These haven't been implemented properly, but their
|
package/dist/lib/markdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../lib/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,eAAe,EACf,2BAA2B,EAG3B,QAAQ,EAOR,UAAU,GACX,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAS,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAOjC,kEAAkE;AAClE,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,SAAS,UAAU,CACjB,YAAiB,EACjB,IAAY,EACZ,SAAqB;IAErB,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,mBAAmB;QACnB,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACzE,CAAC;IAED,MAAM,QAAQ,GAAG,2BAA2B,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../lib/markdown.ts"],"names":[],"mappings":"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"}
|
package/lib/markdown.ts
CHANGED
|
@@ -42,13 +42,30 @@ function createHref(
|
|
|
42
42
|
sourceDocUri: URI,
|
|
43
43
|
link: string,
|
|
44
44
|
workspace: IWorkspace,
|
|
45
|
+
resourceRoot?: string,
|
|
45
46
|
): ExternalHref | InternalHref | undefined {
|
|
46
47
|
if (/^[a-z-][a-z-]+:/i.test(link)) {
|
|
47
48
|
// Looks like a uri
|
|
48
49
|
return { kind: HrefKind.External, uri: URI.parse(tryDecodeUri(link)) };
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
|
|
52
|
+
let resolved = resolveInternalDocumentLink(sourceDocUri, link, workspace);
|
|
53
|
+
|
|
54
|
+
// If it's an absolute link that doesn't resolve to a valid path, check if it's within the resource root
|
|
55
|
+
if (
|
|
56
|
+
resolved &&
|
|
57
|
+
!fs.existsSync(resolved.resource.fsPath) &&
|
|
58
|
+
link.startsWith('/') &&
|
|
59
|
+
resourceRoot
|
|
60
|
+
) {
|
|
61
|
+
const absolutePath = path.join(resourceRoot, link);
|
|
62
|
+
|
|
63
|
+
if (fs.existsSync(absolutePath)) {
|
|
64
|
+
link = path.relative(path.dirname(sourceDocUri.fsPath), absolutePath);
|
|
65
|
+
resolved = resolveInternalDocumentLink(sourceDocUri, link, workspace);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
52
69
|
if (!resolved) {
|
|
53
70
|
return undefined;
|
|
54
71
|
}
|
|
@@ -85,12 +102,14 @@ export class DocsWorkspace implements IWorkspace {
|
|
|
85
102
|
readonly root: string;
|
|
86
103
|
readonly globs: string[];
|
|
87
104
|
readonly ignoreGlobs: string[];
|
|
105
|
+
readonly resourceRoot?: string;
|
|
88
106
|
|
|
89
|
-
constructor(root: string, globs: string[], ignoreGlobs: string[] = []) {
|
|
107
|
+
constructor(root: string, globs: string[], ignoreGlobs: string[] = [], resourceRoot?: string) {
|
|
90
108
|
this.documentCache = new Map();
|
|
91
109
|
this.root = root;
|
|
92
110
|
this.globs = globs;
|
|
93
111
|
this.ignoreGlobs = ignoreGlobs;
|
|
112
|
+
this.resourceRoot = resourceRoot;
|
|
94
113
|
}
|
|
95
114
|
|
|
96
115
|
get workspaceFolders() {
|
|
@@ -125,6 +144,10 @@ export class DocsWorkspace implements IWorkspace {
|
|
|
125
144
|
);
|
|
126
145
|
}
|
|
127
146
|
|
|
147
|
+
getResourceRootRelativePath(resource: URI) {
|
|
148
|
+
return path.relative(path.resolve(this.resourceRoot || this.root), resource.fsPath);
|
|
149
|
+
}
|
|
150
|
+
|
|
128
151
|
getWorkspaceRelativePath(resource: URI) {
|
|
129
152
|
return path.relative(path.resolve(this.root), resource.fsPath);
|
|
130
153
|
}
|
|
@@ -149,12 +172,21 @@ export class DocsWorkspace implements IWorkspace {
|
|
|
149
172
|
}
|
|
150
173
|
|
|
151
174
|
async stat(resource: URI): Promise<FileStat | undefined> {
|
|
152
|
-
if (this.hasMarkdownDocument(resource)) {
|
|
175
|
+
if (!this.hasMarkdownDocument(resource)) {
|
|
176
|
+
// If it's not a markdown document, check if it's within the resource root
|
|
177
|
+
const relativePath = this.getResourceRootRelativePath(resource);
|
|
178
|
+
|
|
179
|
+
if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
try {
|
|
153
185
|
const stats = fs.statSync(resource.fsPath);
|
|
154
186
|
return { isDirectory: stats.isDirectory() };
|
|
187
|
+
} catch {
|
|
188
|
+
return undefined;
|
|
155
189
|
}
|
|
156
|
-
|
|
157
|
-
return undefined;
|
|
158
190
|
}
|
|
159
191
|
|
|
160
192
|
async readDirectory(): Promise<Iterable<readonly [string, FileStat]>> {
|
|
@@ -178,9 +210,11 @@ export class DocsWorkspace implements IWorkspace {
|
|
|
178
210
|
|
|
179
211
|
export class MarkdownLinkComputer implements IMdLinkComputer {
|
|
180
212
|
private readonly workspace: IWorkspace;
|
|
213
|
+
private readonly resourceRoot?: string;
|
|
181
214
|
|
|
182
|
-
constructor(workspace: IWorkspace) {
|
|
215
|
+
constructor(workspace: IWorkspace, resourceRoot?: string) {
|
|
183
216
|
this.workspace = workspace;
|
|
217
|
+
this.resourceRoot = resourceRoot;
|
|
184
218
|
}
|
|
185
219
|
|
|
186
220
|
async getAllLinks(document: ITextDocument): Promise<MdLink[]> {
|
|
@@ -199,9 +233,9 @@ export class MarkdownLinkComputer implements IMdLinkComputer {
|
|
|
199
233
|
const documentUri = URI.parse(document.uri);
|
|
200
234
|
const links: MdLink[] = [];
|
|
201
235
|
|
|
202
|
-
visit(tree, 'link', (node: Node) => {
|
|
236
|
+
visit(tree, ['image', 'link'], (node: Node) => {
|
|
203
237
|
const link = node as Link;
|
|
204
|
-
const href = createHref(documentUri, link.url, this.workspace);
|
|
238
|
+
const href = createHref(documentUri, link.url, this.workspace, this.resourceRoot);
|
|
205
239
|
|
|
206
240
|
if (href) {
|
|
207
241
|
const range = positionToRange(link.position!);
|
|
@@ -270,7 +304,7 @@ export class MarkdownLinkComputer implements IMdLinkComputer {
|
|
|
270
304
|
|
|
271
305
|
visit(tree, 'definition', (node: Node) => {
|
|
272
306
|
const definition = node as Definition;
|
|
273
|
-
const href = createHref(documentUri, definition.url, this.workspace);
|
|
307
|
+
const href = createHref(documentUri, definition.url, this.workspace, this.resourceRoot);
|
|
274
308
|
|
|
275
309
|
if (href) {
|
|
276
310
|
const range = positionToRange(definition.position!);
|